-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
114 lines (99 loc) · 3.92 KB
/
Makefile
File metadata and controls
114 lines (99 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# ArcBox Makefile
#
# Used by both local dev and CI (release.yml). All build/sign/package logic
# lives here; the workflow only handles CI-specific concerns (secrets,
# artifact upload, notarization credentials, Sparkle signing).
#
# Local:
# make dmg-signed
#
# CI:
# make prefetch ARCBOX_DIR=arcbox-core SKIP_BUILD=1
# make dmg-release ARCBOX_DIR=arcbox-core SIGN_IDENTITY="..." NOTARIZE=1
ARCBOX_DIR ?= $(shell cd ../arcbox 2>/dev/null && pwd)
SIGN_IDENTITY ?= $(shell security find-identity -v -p codesigning 2>/dev/null \
| grep -o '"Developer ID Application: ArcBox, Inc\.[^"]*"' \
| head -1 | tr -d '"')
SKIP_BUILD ?= 0
NOTARIZE ?= 0
VERSION ?=
SPARKLE_FEED_URL ?=
PROVISIONING_PROFILE ?=
ABCTL := $(ARCBOX_DIR)/target/release/abctl
.PHONY: build-rust prefetch build-app dmg dmg-signed dmg-release clean help
help:
@echo "ArcBox build targets:"
@echo ""
@echo " make build-rust Build arcbox binaries (release)"
@echo " make prefetch Download boot assets + Docker tools"
@echo " make build-app Build .app via xcodebuild (debug)"
@echo " make dmg Package unsigned DMG (local testing)"
@echo " make dmg-signed Package signed DMG (Developer ID)"
@echo " make dmg-release Package signed + notarized DMG (CI)"
@echo " make clean Clean build artifacts"
@echo ""
@echo "Environment:"
@echo " ARCBOX_DIR=$(ARCBOX_DIR)"
@echo " SIGN_IDENTITY=$(SIGN_IDENTITY)"
## ── Prerequisites ─────────────────────────────────────
build-rust:
@if [ -z "$(ARCBOX_DIR)" ]; then \
echo "ERROR: arcbox repo not found at ../arcbox" >&2; \
echo " Set ARCBOX_DIR=/path/to/arcbox" >&2; \
exit 1; \
fi
$(MAKE) -C "$(ARCBOX_DIR)" build-cli build-helper PROFILE=release
$(MAKE) -C "$(ARCBOX_DIR)" sign-daemon PROFILE=release
-$(MAKE) -C "$(ARCBOX_DIR)" build-agent
prefetch:
@if [ "$(SKIP_BUILD)" != "1" ]; then \
$(MAKE) build-rust; \
fi
@if [ ! -x "$(ABCTL)" ]; then \
echo "ERROR: abctl not found at $(ABCTL)" >&2; \
echo " Run 'make build-rust' or set ARCBOX_DIR" >&2; \
exit 1; \
fi
"$(ABCTL)" boot prefetch
"$(ABCTL)" docker setup
## ── Build ─────────────────────────────────────────────
build-app:
xcodebuild build \
-project ArcBox.xcodeproj \
-scheme ArcBox \
-configuration Debug \
-skipPackagePluginValidation \
ARCBOX_DIR="$(ARCBOX_DIR)"
## ── Package ───────────────────────────────────────────
# Unsigned DMG for local testing.
dmg: prefetch
ARCBOX_DIR="$(ARCBOX_DIR)" scripts/package-dmg.py
# Signed DMG for local distribution.
dmg-signed: prefetch
@if [ -z "$(SIGN_IDENTITY)" ]; then \
echo "ERROR: No Developer ID signing identity found." >&2; \
exit 1; \
fi
ARCBOX_DIR="$(ARCBOX_DIR)" \
$(if $(VERSION),VERSION="$(VERSION)") \
$(if $(SPARKLE_FEED_URL),SPARKLE_FEED_URL="$(SPARKLE_FEED_URL)") \
scripts/package-dmg.py --sign "$(SIGN_IDENTITY)" \
$(if $(PROVISIONING_PROFILE),--provisioning-profile "$(PROVISIONING_PROFILE)")
# Signed + notarized DMG for CI release.
dmg-release: prefetch
@if [ -z "$(SIGN_IDENTITY)" ]; then \
echo "ERROR: No signing identity." >&2; \
exit 1; \
fi
ARCBOX_DIR="$(ARCBOX_DIR)" \
$(if $(VERSION),VERSION="$(VERSION)") \
$(if $(SPARKLE_FEED_URL),SPARKLE_FEED_URL="$(SPARKLE_FEED_URL)") \
scripts/package-dmg.py --sign "$(SIGN_IDENTITY)" \
$(if $(filter 1,$(NOTARIZE)),--notarize) \
$(if $(PROVISIONING_PROFILE),--provisioning-profile "$(PROVISIONING_PROFILE)")
## ── Cleanup ───────────────────────────────────────────
clean:
rm -rf .build/DerivedData
@if [ -n "$(ARCBOX_DIR)" ] && [ -d "$(ARCBOX_DIR)" ]; then \
cd "$(ARCBOX_DIR)" && rm -rf target/dmg-build target/ArcBox*.dmg; \
fi