Skip to content

Commit d3f1492

Browse files
committed
release: Revamp the entire release system
1 parent bd2f615 commit d3f1492

5 files changed

Lines changed: 523 additions & 201 deletions

File tree

.github/workflows/release.yaml

Lines changed: 57 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ jobs:
2525
- name: Checkout code
2626
uses: actions/checkout@v4
2727
with:
28+
ref: ${{ inputs.version }}
2829
fetch-depth: 0
2930

3031
- name: Check tag exists
@@ -60,58 +61,11 @@ jobs:
6061
fi
6162
echo "✓ No existing release assets found"
6263
63-
create-release:
64-
name: Create GitHub Release
65-
needs: verify-release
66-
runs-on: ubuntu-latest
67-
permissions:
68-
contents: write
69-
outputs:
70-
upload_url: ${{ steps.create_release.outputs.upload_url }}
71-
steps:
72-
- name: Checkout code
73-
uses: actions/checkout@v4
74-
with:
75-
ref: ${{ inputs.version }}
76-
77-
- name: Extract release notes from Changes file
78-
id: extract_notes
79-
run: |
80-
if [[ -f Changes ]]; then
81-
# Extract changes for this version from Changes file
82-
awk '/^- version: '"$VERSION"'$/,/^- version:/ {
83-
if (/^- version: '"$VERSION"'$/) next;
84-
if (/^- version:/) exit;
85-
if (/^ changes:/) next;
86-
if (/^ date:/) next;
87-
print
88-
}' Changes | sed 's/^ //' > release-notes.txt
89-
90-
if [[ ! -s release-notes.txt ]]; then
91-
echo "Release $VERSION" > release-notes.txt
92-
fi
93-
else
94-
echo "Release $VERSION" > release-notes.txt
95-
fi
96-
97-
echo "Release notes:"
98-
cat release-notes.txt
99-
100-
- name: Create GitHub Release
101-
id: create_release
102-
env:
103-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
104-
run: |
105-
gh release create "$VERSION" \
106-
--title "YAMLScript $VERSION" \
107-
--notes-file release-notes.txt \
108-
--draft=false \
109-
--prerelease=false
110-
11164
build-linux-x64:
11265
name: Build Linux x64
113-
needs: create-release
114-
runs-on: ubuntu-20.04
66+
needs: verify-release
67+
runs-on: ubuntu-latest
68+
container: ubuntu:20.04
11569
steps:
11670
- name: Checkout code
11771
uses: actions/checkout@v4
@@ -128,8 +82,8 @@ jobs:
12882

12983
- name: Install build dependencies
13084
run: |
131-
sudo apt-get update
132-
sudo apt-get install -y build-essential zlib1g-dev
85+
apt-get update
86+
apt-get install -y build-essential zlib1g-dev curl git
13387
13488
- name: Build and create release archives
13589
run: |
@@ -151,7 +105,7 @@ jobs:
151105

152106
build-macos-arm64:
153107
name: Build macOS ARM64 (Apple Silicon)
154-
needs: create-release
108+
needs: verify-release
155109
runs-on: macos-latest
156110
steps:
157111
- name: Checkout code
@@ -167,7 +121,7 @@ jobs:
167121
github-token: ${{ secrets.GITHUB_TOKEN }}
168122
native-image-job-reports: 'true'
169123

170-
- name: Build and create release archives
124+
- name: Build and create release archives (long wait)
171125
run: |
172126
make -C ys build
173127
make -C libys build
@@ -185,8 +139,8 @@ jobs:
185139
libys-*.tar.xz
186140
retention-days: 7
187141

188-
upload-assets:
189-
name: Upload Release Assets
142+
create-release:
143+
name: Create GitHub Release
190144
needs:
191145
- build-linux-x64
192146
- build-macos-arm64
@@ -199,6 +153,53 @@ jobs:
199153
with:
200154
ref: ${{ inputs.version }}
201155

156+
- name: Extract release notes from Changes file
157+
id: extract_notes
158+
run: |
159+
# Start with the template, replacing version
160+
sed "s/0.2.8/$VERSION/g" common/release.md > release-notes.txt
161+
162+
# Extract and append changes from Changes file
163+
if [[ -f Changes ]]; then
164+
awk '/^- version: '"$VERSION"'$/,/^- version:/ {
165+
if (/^- version: '"$VERSION"'$/) next;
166+
if (/^- version:/) exit;
167+
if (/^ changes:/) next;
168+
if (/^ date:/) next;
169+
print
170+
}' Changes | sed 's/^ - /* /' >> release-notes.txt
171+
fi
172+
173+
echo "Release notes:"
174+
cat release-notes.txt
175+
176+
- name: Create GitHub Release
177+
id: create_release
178+
env:
179+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
180+
run: |
181+
if gh release view "$VERSION" >/dev/null 2>&1; then
182+
echo "Release $VERSION already exists, skipping creation"
183+
else
184+
gh release create "$VERSION" \
185+
--title "$VERSION" \
186+
--notes-file release-notes.txt \
187+
--draft=false \
188+
--prerelease=false
189+
fi
190+
191+
upload-assets:
192+
name: Upload Release Assets
193+
needs: create-release
194+
runs-on: ubuntu-latest
195+
permissions:
196+
contents: write
197+
steps:
198+
- name: Checkout code
199+
uses: actions/checkout@v4
200+
with:
201+
ref: ${{ inputs.version }}
202+
202203
- name: Download all artifacts
203204
uses: actions/download-artifact@v4
204205

.version.ys

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ vo =: v-old.str/replace(/\./ '\\.')
2121
- regx:: "()${vp}()"
2222
file:
2323
- Meta
24-
- ReadMe.md
2524
- common/install.mk
2625
- common/release.md
2726
# Don't update common/vars.mk
@@ -34,8 +33,6 @@ vo =: v-old.str/replace(/\./ '\\.')
3433
- doc/install.md
3534
- doc/run-ys.md
3635
- doc/ys.md
37-
- go/ReadMe.md
38-
- go/doc/readme.md
3936
- go/yamlscript.go
4037
- java/Makefile
4138
- java/src/main/java/org/yamlscript/yamlscript/YAMLScript.java

Makefile

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ include common/base.mk
22
include $(COMMON)/java.mk
33
include $(COMMON)/docker.mk
44

5+
include $(MAKES)/gh.mk
56
include $(SHELL-LANGS:%=$(MAKES)/%.mk)
67
include $(MAKES)/shell.mk
78

@@ -208,9 +209,9 @@ docker-build := YS_BUILD_IN_DOCKER=1
208209
endif
209210
endif
210211

211-
_release-yamlscript: $(YS)
212+
_release-yamlscript: $(YS) $(GH)
212213
($(TIME) $(docker-build) \
213-
$< $(ROOT)/util/release-yamlscript $o $n $s) 2>&1 | \
214+
ys $(ROOT)/util/release-yamlscript release $o $n $s) 2>&1 | \
214215
tee -a $(RELEASE-LOG)
215216

216217
release-assets: $(RELEASE-ASSETS)
@@ -222,6 +223,84 @@ release-build-ys: $(YS-RELEASE)
222223

223224
release-build-libys: $(LYS-RELEASE)
224225

226+
#------------------------------------------------------------------------------
227+
# Interactive Release Workflow - Individual Step Targets
228+
#------------------------------------------------------------------------------
229+
230+
# Show all release steps
231+
release-list:
232+
$(YS) $(ROOT)/util/release-yamlscript list
233+
234+
# Step 1: Sanity checks
235+
release-sanity-check:
236+
ifndef o
237+
$(error 'make release-sanity-check' requires o=OLD_VERSION n=NEW_VERSION)
238+
endif
239+
ifndef n
240+
$(error 'make release-sanity-check' requires o=OLD_VERSION n=NEW_VERSION)
241+
endif
242+
$(YS) $(ROOT)/util/release-yamlscript sanity-check $(o) $(n)
243+
244+
# Step 2: Version bump
245+
release-version-bump:
246+
$(YS) $(ROOT)/util/release-yamlscript version-bump
247+
248+
# Step 3: Changelog
249+
release-changelog:
250+
ifndef o
251+
$(error 'make release-changelog' requires o=OLD_VERSION n=NEW_VERSION)
252+
endif
253+
ifndef n
254+
$(error 'make release-changelog' requires o=OLD_VERSION n=NEW_VERSION)
255+
endif
256+
$(YS) $(ROOT)/util/release-yamlscript changelog $(o) $(n)
257+
258+
# Step 4: Test (optional)
259+
release-test:
260+
$(YS) $(ROOT)/util/release-yamlscript test
261+
262+
# Step 5: Binding changelogs
263+
release-binding-changelogs:
264+
$(YS) $(ROOT)/util/release-yamlscript binding-changelogs
265+
266+
# Step 6: Commit
267+
release-commit:
268+
ifndef n
269+
$(error 'make release-commit' requires n=NEW_VERSION)
270+
endif
271+
$(YS) $(ROOT)/util/release-yamlscript commit $(n)
272+
273+
# Step 7: Tag
274+
release-tag:
275+
ifndef n
276+
$(error 'make release-tag' requires n=NEW_VERSION)
277+
endif
278+
$(YS) $(ROOT)/util/release-yamlscript tag $(n)
279+
280+
# Step 8: Push
281+
release-push:
282+
ifndef n
283+
$(error 'make release-push' requires n=NEW_VERSION)
284+
endif
285+
$(YS) $(ROOT)/util/release-yamlscript push $(n)
286+
287+
# Step 9: Trigger GitHub Actions
288+
release-build-github:
289+
ifndef n
290+
$(error 'make release-build-github' requires n=NEW_VERSION)
291+
endif
292+
$(YS) $(ROOT)/util/release-yamlscript build-github $(n)
293+
294+
# Step 10: Release bindings
295+
release-bindings:
296+
$(YS) $(ROOT)/util/release-yamlscript bindings
297+
298+
# Step 11: Publish website
299+
release-website:
300+
$(YS) $(ROOT)/util/release-yamlscript website
301+
302+
#------------------------------------------------------------------------------
303+
225304
jars: $(JAR-ASSETS)
226305

227306
$(YS-RELEASE): $(RELEASE-YS-NAME)

common/release.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
[YS](https://yamlscript.org) publishes binary releases for the `ys` command line tool and for the `libys` shared library.
33
The following architectures are currently supported:
44

5-
* Linux / Intel and ARM
6-
* macOS / Intel and ARM
5+
* Linux + Intel
6+
* macOS + ARM
77

88
Run this command to install `~/.local/bin/ys`:
99

0 commit comments

Comments
 (0)