1- PACKAGE_ID := $(shell grep -o " id: '[^'] * '" startos/manifest.ts | sed "s/id: '\([^'] * \) '/\1/" )
2- INGREDIENTS := $(shell start-cli s9pk list-ingredients 2> /dev/null)
1+ PACKAGE_ID := $(shell awk -F"'" '/ id:/ {print $$2}' startos/manifest.ts)
2+ INGREDIENTS := $(shell start-cli s9pk list-ingredients 2>/dev/null)
33
4- .PHONY : all clean install check-deps check-init ingredients
4+ CMD_ARCH_GOAL := $(filter aarch64 x86_64 arm x86, $(MAKECMDGOALS ) )
5+ ifeq ($(CMD_ARCH_GOAL ) ,)
6+ BUILD := universal
7+ S9PK := $(PACKAGE_ID ) .s9pk
8+ else
9+ RAW_ARCH := $(firstword $(CMD_ARCH_GOAL ) )
10+ ACTUAL_ARCH := $(subst x86,x86_64,$(subst arm,aarch64,$(RAW_ARCH ) ) )
11+ BUILD := $(ACTUAL_ARCH )
12+ S9PK := $(PACKAGE_ID ) _$(BUILD ) .s9pk
13+ endif
514
15+ .PHONY : all aarch64 x86_64 arm x86 clean install check-deps check-init package ingredients
616.DELETE_ON_ERROR :
717
8- all : ${PACKAGE_ID}.s9pk
9- @echo " Done!"
10- @echo " Filesize:$( shell du -h $( PACKAGE_ID) .s9pk) is ready"
18+ define SUMMARY
19+ @manifest=$$(start-cli s9pk inspect $(1 ) manifest ) ; \
20+ size=$$(du -h $(1 ) | awk '{print $$1}' ) ; \
21+ title=$$(printf '%s' "$$manifest" | jq -r .title ) ; \
22+ version=$$(printf '%s' "$$manifest" | jq -r .version ) ; \
23+ arches=$$(printf '%s' "$$manifest" | jq -r '.hardwareRequirements?.arch // ["x86_64", "aarch64"] | join(", " ) '); \
24+ sdkv=$$(printf '%s' "$$manifest" | jq -r .sdkVersion ) ; \
25+ gitHash=$$(printf '%s' "$$manifest" | jq -r .gitHash | sed -E 's/(.*-modified ) $$/\x1b[0;31m\1\x1b[0m/'); \
26+ printf "\n"; \
27+ printf "\033[1;32m✅ Build Complete!\033[0m\n"; \
28+ printf "\n"; \
29+ printf "\033[1;37m📦 $$title\033[0m \033[36mv$$version\033[0m\n"; \
30+ printf "───────────────────────────────\n"; \
31+ printf " \033[1;36mFilename:\033[0m %s\n" "$(1 ) "; \
32+ printf " \033[1;36mSize:\033[0m %s\n" "$$size"; \
33+ printf " \033[1;36mArch:\033[0m %s\n" "$$arches"; \
34+ printf " \033[1;36mSDK:\033[0m %s\n" "$$sdkv"; \
35+ printf " \033[1;36mGit:\033[0m %s\n" "$$gitHash"; \
36+ echo ""
37+ endef
1138
12- check-deps :
13- @if ! command -v start-cli > /dev/null; then \
14- echo " Error: start-cli not found. Please install it first." ; \
15- exit 1; \
16- fi
17- @if ! command -v npm > /dev/null; then \
18- echo " Error: npm (Node Package Manager) not found. Please install Node.js and npm." ; \
19- exit 1; \
20- fi
39+ all : $(PACKAGE_ID ) .s9pk
40+ $(call SUMMARY,$(S9PK ) )
2141
22- check-init :
23- @if [ ! -f ~ /.startos/developer.key.pem ]; then \
24- start-cli init; \
25- fi
42+ $(BUILD ) : $(PACKAGE_ID ) _$(BUILD ) .s9pk
43+ $(call SUMMARY,$(S9PK ) )
2644
27- ingredients : $( INGREDIENTS )
28- @echo " Re-evaluating ingredients... "
45+ x86 : x86_64
46+ arm : aarch64
2947
30- ${PACKAGE_ID}.s9pk : $(INGREDIENTS ) $( shell git ls-files assets) | check-deps check-init
48+ $( S9PK ) : $(INGREDIENTS ) . git/HEAD .git/index
3149 @$(MAKE ) --no-print-directory ingredients
32- start-cli s9pk pack
50+ @echo " Packing '$( S9PK) '..."
51+ BUILD=$(BUILD ) start-cli s9pk pack -o $(S9PK )
3352
34- x86 : $(INGREDIENTS ) $(shell git ls-files assets) | check-deps check-init
35- @$(MAKE ) --no-print-directory ingredients
36- BUILD=x86 start-cli s9pk pack
37- @echo " Done!"
38- @echo " Filesize:$( shell du -h $( PACKAGE_ID) .s9pk) is ready"
53+ ingredients : $(INGREDIENTS )
54+ @echo " Re-evaluating ingredients..."
3955
40- arm : $(INGREDIENTS ) $(shell git ls-files assets) | check-deps check-init
41- @$(MAKE ) --no-print-directory ingredients
42- BUILD=arm start-cli s9pk pack
43- @echo " Done!"
44- @echo " Filesize:$( shell du -h $( PACKAGE_ID) .s9pk) is ready"
56+ install : package | check-deps check-init
57+ @HOST=$$(awk -F'/' '/^host:/ {print $$3}' ~/.startos/config.yaml ) ; \
58+ if [ -z " $$ HOST" ]; then \
59+ echo " Error: You must define \" host: http://server-name.local\" in ~/.startos/config.yaml" ; \
60+ exit 1; \
61+ fi ; \
62+ echo " \n🚀 Installing to $$ HOST ..." ; \
63+ start-cli package install -s $(S9PK )
4564
46- javascript/index.js : $(shell git ls-files startos) tsconfig.json node_modules package.json
47- npm run build
65+ check-deps :
66+ @command -v start-cli > /dev/null || \
67+ (echo " Error: start-cli not found. Please see https://docs.start9.com/latest/developer-guide/sdk/installing-the-sdk" && exit 1)
68+ @command -v npm > /dev/null || \
69+ (echo " Error: npm not found. Please install Node.js and npm." && exit 1)
4870
49- assets :
50- mkdir -p assets
71+ check-init :
72+ @if [ ! -f ~ /.startos/developer.key.pem ]; then \
73+ echo " Initializing StartOS developer environment..." ; \
74+ start-cli init; \
75+ fi
76+
77+ javascript/index.js : $(shell find startos -type f) tsconfig.json node_modules
78+ npm run build
5179
5280node_modules : package-lock.json
5381 npm ci
@@ -56,12 +84,5 @@ package-lock.json: package.json
5684 npm i
5785
5886clean :
59- rm -rf ${PACKAGE_ID} .s9pk
60- rm -rf javascript
61- rm -rf node_modules
62-
63- install : ${PACKAGE_ID}.s9pk
64- @if [ ! -f ~ /.startos/config.yaml ]; then echo " You must define \" host: http://server-name.local\" in ~/.startos/config.yaml config file first." ; exit 1; fi
65- @echo " \nInstalling to $$ (grep -v '^#' ~/.startos/config.yaml | cut -d'/' -f3) ...\n"
66- @[ -f $( PACKAGE_ID) .s9pk ] || ( $( MAKE) && echo " \nInstalling to $$ (grep -v '^#' ~/.startos/config.yaml | cut -d'/' -f3) ...\n" )
67- @start-cli package install -s $(PACKAGE_ID ) .s9pk
87+ @echo " Cleaning up build artifacts..."
88+ @rm -rf $(PACKAGE_ID ) .s9pk $(PACKAGE_ID ) _x86_64.s9pk $(PACKAGE_ID ) _aarch64.s9pk javascript node_modules
0 commit comments