kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

dist.mk (3226B)


      1 # mk/dist.mk
      2 # ===========================================================================
      3 # Release packaging: dogfood kit's own signed pkg/cas pipeline onto kit's own
      4 # release (doc/plan/SELFDIST.md). `make dist` builds RELEASE=1, stages a
      5 # self-contained kit/ tree, and emits — for the native host triple — a signed
      6 # fat .kpkg, a signed portable .tar.gz, and a detached .tar.gz.minisig (the
      7 # stock-minisign bootstrap path). Release trust is mandatory: callers provide
      8 # KIT_SIGN_KEY, KIT_RELEASE_PUBKEYS, and KIT_UPDATE_INDEX_URL. Hermetic tests
      9 # that intentionally use the in-tree non-release key must opt in explicitly
     10 # with KIT_RELEASE_ALLOW_TEST_KEY=1. `make dist-dev` supplies that hermetic
     11 # configuration as a convenience. The multi-target matrix + channel index live
     12 # in scripts/release.sh.
     13 
     14 .PHONY: dist dist-dev
     15 
     16 ifneq ($(filter dist,$(MAKECMDGOALS)),)
     17 ifeq ($(strip $(KIT_SIGN_KEY)),)
     18 $(error dist requires KIT_SIGN_KEY (production Minisign secret key file))
     19 endif
     20 ifneq ($(KIT_RELEASE_ALLOW_TEST_KEY),1)
     21 DIST_TEST_KEY_ID := $(strip $(shell sh scripts/minisign_key_id.sh test/dist/keys/nonrelease.key 2>/dev/null))
     22 DIST_SIGN_KEY_ID := $(strip $(shell sh scripts/minisign_key_id.sh "$(KIT_SIGN_KEY)" 2>/dev/null))
     23 ifeq ($(DIST_SIGN_KEY_ID),$(DIST_TEST_KEY_ID))
     24 $(error dist refuses the repository NON-RELEASE test signing key)
     25 endif
     26 endif
     27 endif
     28 
     29 DIST_DIR     = build/dist
     30 DIST_STAGING = $(DIST_DIR)/kit
     31 DIST_REL_BIN = build/release/kit
     32 DIST_REL_LIB = build/release/libkit.a
     33 DIST_KEY     = $(KIT_SIGN_KEY)
     34 DIST_BASE    = kit-$(KIT_VERSION)-$(KIT_HOST_TRIPLE)
     35 DIST_KPKG    = $(DIST_DIR)/$(DIST_BASE).kpkg
     36 DIST_TARGZ   = $(DIST_DIR)/$(DIST_BASE).tar.gz
     37 
     38 dist-dev:
     39 	$(MAKE) dist \
     40 	  KIT_SIGN_KEY=test/dist/keys/nonrelease.key \
     41 	  KIT_RELEASE_PUBKEYS=test/dist/keys/nonrelease.pub \
     42 	  KIT_RELEASE_ALLOW_TEST_KEY=1 \
     43 	  KIT_UPDATE_INDEX_URL=https://example.invalid/stable.index
     44 
     45 dist:
     46 	@if [ ! -f "$(KIT_SIGN_KEY)" ]; then \
     47 	  printf '%s\n' 'dist: KIT_SIGN_KEY is not a file: $(KIT_SIGN_KEY)' >&2; \
     48 	  exit 2; \
     49 	fi
     50 	$(MAKE) RELEASE=1 bin
     51 	@rm -rf $(DIST_STAGING)
     52 	@mkdir -p $(DIST_STAGING)/bin $(DIST_STAGING)/lib $(DIST_STAGING)/support/rt
     53 	cp $(DIST_REL_BIN) $(DIST_STAGING)/bin/kit
     54 	cp $(DIST_REL_LIB) $(DIST_STAGING)/lib/libkit.a
     55 	cp -r include $(DIST_STAGING)/include
     56 	cp -r rt/include $(DIST_STAGING)/support/rt/include
     57 	cp -r rt/lib $(DIST_STAGING)/support/rt/lib
     58 	cp VERSION $(DIST_STAGING)/VERSION
     59 	cp README.md $(DIST_STAGING)/README.md
     60 	@sh scripts/stage_docs.sh . $(DIST_STAGING)/doc
     61 	@for f in LICENSE LICENSE.txt LICENSE.md NOTICE NOTICE.txt; do \
     62 	  [ -f "$$f" ] && cp "$$f" "$(DIST_STAGING)/$$f"; done; true
     63 	$(DIST_REL_BIN) pkg create --name kit --version $(KIT_VERSION) \
     64 	  --format kpkg --native-shape fat -s "$(DIST_KEY)" \
     65 	  --root $(DIST_STAGING) -o $(DIST_KPKG)
     66 	$(DIST_REL_BIN) pkg create --name kit --version $(KIT_VERSION) \
     67 	  --format tar.gz -s "$(DIST_KEY)" \
     68 	  --root $(DIST_STAGING) -o $(DIST_TARGZ)
     69 	$(DIST_REL_BIN) pkg sign -s "$(DIST_KEY)" \
     70 	  -o $(DIST_TARGZ).minisig --comment "kit $(KIT_VERSION) $(KIT_HOST_TRIPLE)" \
     71 	  $(DIST_TARGZ)
     72 	@echo "dist: $(abspath $(DIST_KPKG))"
     73 	@echo "dist: $(abspath $(DIST_TARGZ))"
     74 	@echo "dist: $(abspath $(DIST_TARGZ)).minisig"