Makefile (10792B)
1 .DEFAULT_GOAL := help 2 3 GRADLE ?= ./gradlew 4 override CARGO := cargo +1.97.1 5 CARGO_MANIFEST := core/Cargo.toml 6 XTASK_MANIFEST := tools/xtask/Cargo.toml 7 BUILD_MODE ?= standalone 8 VALID_BUILD_MODES := standalone governed 9 10 ifeq ($(filter $(BUILD_MODE),$(VALID_BUILD_MODES)),) 11 $(error Unknown BUILD_MODE '$(BUILD_MODE)'; expected standalone or governed) 12 endif 13 14 ifeq ($(BUILD_MODE),governed) 15 override BUILD_RUNNER := cargo extbuild run -- 16 else 17 override BUILD_RUNNER := 18 endif 19 20 .PHONY: help doctor governed-doctor lock metadata build-logic-check build-logic-stability-check mode-check design-source-check design-goldens-update format format-fix lint test check governed-check build bindings api-check dev-check dev run audit licenses foundation-check package host-package-check governed-package-check source-check governed-source-check package-check integration-check governed-integration-check development-provenance-check development-check governed-development-check governed-linux-x86_64-development-check host-ui-lifecycle-check acceptance-check unsigned-release-check _unsigned-release-check signing-check _signing-check notarization-check _notarization-check release-check _release-check clean 21 22 help: 23 @printf '%s\n' doctor governed-doctor lock metadata build-logic-check build-logic-stability-check mode-check design-source-check design-goldens-update format format-fix lint test check governed-check build bindings api-check dev-check dev run audit licenses foundation-check package host-package-check governed-package-check source-check governed-source-check package-check integration-check governed-integration-check development-check governed-development-check governed-linux-x86_64-development-check host-ui-lifecycle-check acceptance-check unsigned-release-check signing-check notarization-check release-check clean 24 25 design-source-check: doctor 26 HARVESTCIRCLE_BUILD_MODE=$(BUILD_MODE) $(BUILD_RUNNER) $(CARGO) run --manifest-path $(XTASK_MANIFEST) --locked -- design-source-audit 27 28 design-goldens-update: doctor 29 $(BUILD_RUNNER) $(GRADLE) --no-daemon -Pharvestcircle.updateMacosGoldens=true :app:shared:desktopTest --tests org.harvestcircle.ui.shell.HarvestCircleMacGoldenTest 30 31 doctor: 32 @printf '%s\n' "harvestcircle.build.mode=$(BUILD_MODE)" 33 $(BUILD_RUNNER) java -version 34 $(BUILD_RUNNER) $(CARGO) --version 35 $(BUILD_RUNNER) $(GRADLE) --version 36 37 governed-doctor: 38 $(CARGO) extbuild doctor 39 40 ifeq ($(BUILD_MODE),governed) 41 doctor: governed-doctor 42 endif 43 44 lock: doctor 45 $(BUILD_RUNNER) $(CARGO) generate-lockfile --manifest-path $(CARGO_MANIFEST) 46 $(BUILD_RUNNER) $(CARGO) generate-lockfile --manifest-path $(XTASK_MANIFEST) 47 48 metadata: doctor 49 $(BUILD_RUNNER) $(CARGO) metadata --manifest-path $(CARGO_MANIFEST) --locked --format-version 1 --no-deps 50 51 build-logic-check: doctor 52 $(BUILD_RUNNER) $(GRADLE) --no-daemon -p build-logic :contracts:check :plugins:check :plugins:functionalTest 53 54 build-logic-stability-check: doctor 55 $(BUILD_RUNNER) tools/test-build-logic-stability.sh 56 57 mode-check: 58 tools/test-build-modes.sh 59 60 format: doctor 61 $(BUILD_RUNNER) $(CARGO) fmt --manifest-path $(CARGO_MANIFEST) --all -- --check 62 $(BUILD_RUNNER) $(CARGO) fmt --manifest-path $(XTASK_MANIFEST) --all -- --check 63 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:shared:ktlintCheck :app:desktop:ktlintCheck designFormatCheck 64 65 format-fix: doctor 66 $(BUILD_RUNNER) $(CARGO) fmt --manifest-path $(CARGO_MANIFEST) --all 67 $(BUILD_RUNNER) $(CARGO) fmt --manifest-path $(XTASK_MANIFEST) --all 68 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:shared:ktlintFormat :app:desktop:ktlintFormat 69 70 lint: doctor 71 $(BUILD_RUNNER) $(CARGO) clippy --manifest-path $(CARGO_MANIFEST) --workspace --all-targets --locked -- -D warnings 72 $(BUILD_RUNNER) $(CARGO) clippy --manifest-path $(XTASK_MANIFEST) --all-targets --locked -- -D warnings 73 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:shared:detektCommonMainSourceSet :app:shared:detektCommonTestSourceSet :app:desktop:detekt designLint 74 75 test: doctor 76 $(BUILD_RUNNER) $(CARGO) test --manifest-path $(CARGO_MANIFEST) --workspace --locked 77 $(BUILD_RUNNER) $(CARGO) test --manifest-path $(XTASK_MANIFEST) --locked 78 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:shared:desktopTest :app:desktop:test designTest 79 80 check: format lint test foundation-check mode-check 81 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:shared:check :app:desktop:check designCheck 82 83 governed-check: 84 $(MAKE) --no-print-directory BUILD_MODE=governed check 85 86 build: doctor 87 $(BUILD_RUNNER) $(CARGO) build --manifest-path $(CARGO_MANIFEST) --workspace --locked 88 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:build 89 90 bindings: doctor 91 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:verifyUniFfiBindings :app:desktop:verifyReleaseNativeLibrary 92 93 api-check: doctor 94 $(BUILD_RUNNER) tools/verify-storage-api.sh 95 96 dev-check: doctor 97 $(BUILD_RUNNER) $(GRADLE) --no-daemon --configuration-cache --configuration-cache-problems=fail :app:desktop:hotRunArgfile 98 99 dev: doctor 100 $(BUILD_RUNNER) $(GRADLE) :app:desktop:hotRun 101 102 run: doctor 103 $(BUILD_RUNNER) $(GRADLE) :app:desktop:run 104 105 audit: doctor 106 $(BUILD_RUNNER) $(CARGO) audit --file core/Cargo.lock 107 $(BUILD_RUNNER) $(CARGO) deny --manifest-path $(CARGO_MANIFEST) check --config core/deny.toml advisories 108 $(BUILD_RUNNER) $(GRADLE) --no-daemon --no-configuration-cache :app:desktop:dependencyCheckAnalyze :app:design_system:dependencyCheckAnalyze :tools:design_catalog:dependencyCheckAnalyze 109 110 licenses: doctor 111 $(BUILD_RUNNER) $(CARGO) deny --manifest-path $(CARGO_MANIFEST) check --config core/deny.toml licenses sources 112 $(BUILD_RUNNER) $(GRADLE) --no-daemon --no-parallel --no-configuration-cache :app:desktop:checkLicense :app:design_system:checkLicense :tools:design_catalog:checkLicense 113 114 foundation-check: design-source-check 115 HARVESTCIRCLE_BUILD_MODE=$(BUILD_MODE) $(BUILD_RUNNER) $(CARGO) run --manifest-path $(XTASK_MANIFEST) --locked -- qualification-report 116 117 package: check 118 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:verifyHostPackage 119 120 host-package-check: doctor 121 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:verifyHostPackage 122 123 governed-package-check: 124 $(MAKE) --no-print-directory BUILD_MODE=governed package-check 125 126 source-check: build-logic-check check bindings api-check licenses dev-check 127 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:sourceReadiness 128 129 governed-source-check: 130 $(MAKE) --no-print-directory BUILD_MODE=governed source-check 131 132 package-check: export HARVESTCIRCLE_BUILD_SOURCE_COMMIT = $(shell git rev-parse --verify HEAD) 133 package-check: export HARVESTCIRCLE_BUILD_SOURCE_DIRTY = $(if $(strip $(shell git status --porcelain --untracked-files=all)),true,false) 134 package-check: export HARVESTCIRCLE_BUILD_RADROOTS_REVISION = $(shell sed -n 's/^revision = "\([0-9a-f]\{40\}\)"$$/\1/p' radroots.lib.source-lock.v1.toml) 135 package-check: export HARVESTCIRCLE_BUILD_RUST_TOOLCHAIN = 1.97.1 136 package-check: export SOURCE_DATE_EPOCH = $(shell git show -s --format=%ct HEAD) 137 package-check: source-check 138 $(BUILD_RUNNER) $(GRADLE) --no-daemon --no-parallel --no-configuration-cache :app:desktop:unsignedReleaseReadiness 139 140 integration-check: build-logic-check check 141 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:integrationTest :app:desktop:verifyTestBridgeIsolation 142 143 governed-integration-check: 144 $(MAKE) --no-print-directory BUILD_MODE=governed integration-check 145 146 development-check: export HARVESTCIRCLE_BUILD_SOURCE_COMMIT = $(shell git rev-parse --verify HEAD) 147 development-check: export HARVESTCIRCLE_BUILD_SOURCE_DIRTY = $(if $(strip $(shell git status --porcelain --untracked-files=all)),true,false) 148 development-check: export HARVESTCIRCLE_BUILD_RADROOTS_REVISION = $(shell sed -n 's/^revision = "\([0-9a-f]\{40\}\)"$$/\1/p' radroots.lib.source-lock.v1.toml) 149 development-check: export HARVESTCIRCLE_BUILD_RUST_TOOLCHAIN = 1.97.1 150 development-check: export SOURCE_DATE_EPOCH = $(shell git show -s --format=%ct HEAD) 151 development-check: development-provenance-check source-check integration-check 152 153 development-provenance-check: 154 @test "$${#HARVESTCIRCLE_BUILD_SOURCE_COMMIT}" -eq 40 155 @test "$${#HARVESTCIRCLE_BUILD_RADROOTS_REVISION}" -eq 40 156 @case "$$SOURCE_DATE_EPOCH" in ''|*[!0-9]*) exit 2 ;; esac 157 @test "$$HARVESTCIRCLE_BUILD_SOURCE_DIRTY" = true -o "$$HARVESTCIRCLE_BUILD_SOURCE_DIRTY" = false 158 159 governed-development-check: 160 $(MAKE) --no-print-directory BUILD_MODE=governed development-check 161 162 governed-linux-x86_64-development-check: governed-doctor 163 $(CARGO) extbuild run -- tools/run-linux-x86_64-development-check.sh 164 165 host-ui-lifecycle-check: doctor 166 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:hostUiLifecycleTest 167 168 acceptance-check: integration-check host-package-check 169 170 unsigned-release-check: 171 $(MAKE) --no-print-directory BUILD_MODE=governed _unsigned-release-check 172 173 _unsigned-release-check: export HARVESTCIRCLE_BUILD_SOURCE_COMMIT = $(shell git rev-parse --verify HEAD) 174 _unsigned-release-check: export HARVESTCIRCLE_BUILD_SOURCE_DIRTY = $(if $(strip $(shell git status --porcelain --untracked-files=all)),true,false) 175 _unsigned-release-check: export HARVESTCIRCLE_BUILD_RADROOTS_REVISION = $(shell sed -n 's/^revision = "\([0-9a-f]\{40\}\)"$$/\1/p' radroots.lib.source-lock.v1.toml) 176 _unsigned-release-check: export HARVESTCIRCLE_BUILD_RUST_TOOLCHAIN = 1.97.1 177 _unsigned-release-check: export SOURCE_DATE_EPOCH = $(shell git show -s --format=%ct HEAD) 178 _unsigned-release-check: doctor 179 @test "$(BUILD_MODE)" = governed || { printf '%s\n' 'unsigned-release-check requires governed mode'; exit 2; } 180 $(BUILD_RUNNER) $(CARGO) deny --manifest-path $(CARGO_MANIFEST) check --config core/deny.toml licenses sources 181 $(BUILD_RUNNER) $(GRADLE) --no-daemon --no-parallel --no-configuration-cache :app:desktop:unsignedReleaseReadiness 182 183 signing-check: 184 $(MAKE) --no-print-directory BUILD_MODE=governed _signing-check 185 186 _signing-check: doctor 187 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:signingReadiness 188 189 notarization-check: 190 $(MAKE) --no-print-directory BUILD_MODE=governed _notarization-check 191 192 _notarization-check: doctor 193 $(BUILD_RUNNER) $(GRADLE) --no-daemon :app:desktop:notarizationReadiness 194 195 release-check: 196 $(MAKE) --no-print-directory BUILD_MODE=governed _release-check 197 198 _release-check: doctor 199 @test "$(BUILD_MODE)" = governed || { printf '%s\n' 'release-check requires governed mode'; exit 2; } 200 $(BUILD_RUNNER) $(CARGO) audit --file core/Cargo.lock 201 $(BUILD_RUNNER) $(CARGO) deny --manifest-path $(CARGO_MANIFEST) check --config core/deny.toml advisories licenses sources 202 $(BUILD_RUNNER) $(GRADLE) --no-daemon --no-parallel --no-configuration-cache :app:desktop:releaseReadiness 203 204 clean: doctor 205 $(BUILD_RUNNER) $(CARGO) clean --manifest-path $(CARGO_MANIFEST) 206 $(BUILD_RUNNER) $(CARGO) clean --manifest-path $(XTASK_MANIFEST) 207 $(BUILD_RUNNER) $(GRADLE) --no-daemon clean 208 $(BUILD_RUNNER) $(GRADLE) --no-daemon -p build-logic clean