-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
149 lines (128 loc) · 5.41 KB
/
Copy pathMakefile
File metadata and controls
149 lines (128 loc) · 5.41 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
SHELL := /bin/bash
.DEFAULT_GOAL := help
PKG ?=
VERSION ?=
SUITES ?= noble trixie resolute
ALL_SUITES := noble trixie resolute
ALL_DEV_SUITES := noble-dev trixie-dev resolute-dev
ALL_ARCHES := amd64 arm64
SCRIPTS := scripts
_require_pkg = $(if $(PKG),,$(error PKG is required. Example: make $@ PKG=fzf))
_require_version = $(if $(VERSION),,$(error VERSION is required. Example: make $@ PKG=fzf VERSION=0.60.3))
.PHONY: help
help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*##"}; {printf " \033[36m%-22s\033[0m %s\n", $$1, $$2}'
.PHONY: index
index: ## Regenerate Packages files from packages.tsv
@bash $(SCRIPTS)/update-index.sh --suites "$(ALL_SUITES)"
.PHONY: sign
sign: ## Re-sign Release files for all suites (GPG_KEY_ID= required)
$(if $(GPG_KEY_ID),,$(error GPG_KEY_ID is required. Example: make $@ GPG_KEY_ID=<fingerprint>))
@bash $(SCRIPTS)/sign-release.sh \
--suites "$(ALL_SUITES) $(ALL_DEV_SUITES)" \
--key-id "$(GPG_KEY_ID)"
.PHONY: rebuild
rebuild: index sign ## Regenerate and sign all metadata (GPG_KEY_ID= required)
.PHONY: readme
readme: ## Sync the README packages table with index/packages.tsv
@bash $(SCRIPTS)/update-readme.sh --suites "$(ALL_SUITES)" --arches "$(ALL_ARCHES)"
.PHONY: register
register: ## Register a package in stable (PKG= VERSION= SUITES= required)
$(call _require_pkg)
$(call _require_version)
@bash $(SCRIPTS)/register-package.sh \
--pkg "$(PKG)" \
--version "$(VERSION)" \
--suites "$(SUITES)"
.PHONY: register-dev
register-dev: ## Register a package in the dev channel (PKG= VERSION= SUITES= required)
$(call _require_pkg)
$(call _require_version)
@bash $(SCRIPTS)/register-package.sh \
--pkg "$(PKG)" \
--version "$(VERSION)" \
--suites "$(SUITES)" \
--channel dev
.PHONY: promote
promote: ## Promote all dev entries to stable (SUITES= optional)
@bash $(SCRIPTS)/promote-packages.sh --all --suites "$(SUITES)"
.PHONY: promote-pkg
promote-pkg: ## Promote a single package dev → stable (PKG= required, VERSION= optional)
$(call _require_pkg)
@bash $(SCRIPTS)/promote-packages.sh \
--pkg "$(PKG)" \
--suites "$(SUITES)" \
$(if $(VERSION),--version "$(VERSION)")
.PHONY: remove
remove: ## Remove a package from the index (PKG= required, SUITES= optional)
$(call _require_pkg)
@bash $(SCRIPTS)/remove-entries.sh \
--package "$(PKG)" \
$(if $(filter-out noble trixie,$(SUITES)),--suites "$(SUITES)")
.PHONY: freeze
freeze: ## Pin a package for specific suites (PKG= SUITES= required)
$(call _require_pkg)
$(if $(SUITES),,$(error SUITES is required for freeze. Example: make $@ PKG=pinta SUITES="noble"))
@touch index/freeze.list
@for suite in $(SUITES); do \
grep -qxF "$$suite $(PKG)" index/freeze.list || echo "$$suite $(PKG)" >> index/freeze.list; \
done
@sort -o index/freeze.list index/freeze.list
@echo "Frozen: $(PKG) in suites: $(SUITES)"
.PHONY: unfreeze
unfreeze: ## Release a frozen package (PKG= required, SUITES= optional — empty = all)
$(call _require_pkg)
@if [[ -n "$(SUITES)" ]]; then \
for suite in $(SUITES); do sed -i "/^$$suite $(PKG)$$/d" index/freeze.list; done; \
else \
sed -i "/^[^ ]* $(PKG)$$/d" index/freeze.list; \
fi
@echo "Unfrozen: $(PKG)$(if $(SUITES), in suites: $(SUITES))"
.PHONY: prune-dry
prune-dry: ## Show stale releases in build-apt-omakasui (dry-run)
@bash $(SCRIPTS)/prune-releases.sh
.PHONY: prune
prune: ## Delete stale releases in build-apt-omakasui
@bash $(SCRIPTS)/prune-releases.sh --delete
.PHONY: list
list: ## List all packages and versions from packages.tsv
@awk '{print $$3, $$4, $$1, $$2}' index/packages.tsv \
| sort -u \
| column -t || true
.PHONY: list-dev
list-dev: ## List packages not yet promoted to stable
@awk '(NF>=11 && $$11=="dev") {print $$3, $$4, $$1, $$2}' index/packages.tsv \
| sort -u \
| column -t
.PHONY: preview-promote
preview-promote: ## Preview what next promote-all will add vs update in stable
@added=$$(awk -v suites="$(SUITES)" \
'BEGIN{n=split(suites,sa," ");for(i=1;i<=n;i++)ss[sa[i]]=1} \
{ch=(NF>=11)?$$11:"stable";if(!ss[$$1])next; \
if(ch=="dev")d[$$3]=$$4;if(ch=="stable")s[$$3]=$$4} \
END{for(p in d)if(!(p in s))print p,d[p]}' \
index/packages.tsv | sort); \
updated=$$(awk -v suites="$(SUITES)" \
'BEGIN{n=split(suites,sa," ");for(i=1;i<=n;i++)ss[sa[i]]=1} \
{ch=(NF>=11)?$$11:"stable";if(!ss[$$1])next; \
if(ch=="dev")d[$$3]=$$4;if(ch=="stable")s[$$3]=$$4} \
END{for(p in d)if(p in s&&s[p]!=d[p])print p,s[p],d[p]}' \
index/packages.tsv | sort); \
printf '\033[1;33mTo be added:\033[0m\n'; \
if [[ -n "$$added" ]]; then printf '%s\n' "$$added" | awk '{printf " %-26s %s\n",$$1,$$2}'; else echo ' (none)'; fi; \
printf '\n\033[1;36mTo be updated:\033[0m\n'; \
if [[ -n "$$updated" ]]; then printf '%s\n' "$$updated" | awk '{printf " %-26s %s -> %s\n",$$1,$$2,$$3}'; else echo ' (none)'; fi
.PHONY: info
info: ## Show index entries for a package (PKG= required)
$(call _require_pkg)
@awk '$$3 == "$(PKG)"' index/packages.tsv \
| awk '{printf "suite=%-12s arch=%-6s ver=%-12s channel=%s\n", $$1, $$2, $$4, (NF>=11?$$11:"stable")}'
.PHONY: check
check: ## Count entries per suite/arch in the Packages files
@for suite in $(ALL_SUITES) $(ALL_DEV_SUITES); do \
for arch in amd64 arm64; do \
f="dists/$${suite}/main/binary-$${arch}/Packages"; \
[[ -f "$$f" ]] && printf " %-18s %-6s %s entries\n" "$$suite" "$$arch" "$$(grep -c '^Package:' "$$f")"; \
done; \
done