1- name : Release on Changelog Update
1+ # This workflow is disabled. Releases are now handled by release-changelog.yml.
2+ on : workflow_dispatch
23
3- on :
4- push :
5- branches :
6- - master
7- paths :
8- - ' CHANGELOG.md'
4+ name : Upload Release Assets (Disabled)
95
106env :
117 MAKEOPTS : -j
@@ -14,78 +10,27 @@ permissions:
1410 contents : write
1511
1612jobs :
17- release :
18- name : Build and Release
13+ upload_release :
14+ name : Upload Release Assets
1915 runs-on : ubuntu-24.04
2016 steps :
17+ - name : Install cross-compiler
18+ run : sudo apt-get update && sudo apt-get install --yes gcc-arm-none-eabi
2119 - name : Checkout code
2220 uses : actions/checkout@v4
2321 with :
2422 submodules : true
2523 fetch-depth : 0
26-
27- - name : Extract latest version and release notes from CHANGELOG.md
28- id : changelog
29- run : |
30- # Find the first versioned section (skip [Unreleased])
31- # Pattern: ## [x.y.z...] - date
32- VERSION=$(grep -oP '(?<=^## \[)[^\]]+(?=\])' CHANGELOG.md | grep -v -i '^Unreleased$' | head -1)
33-
34- if [ -z "$VERSION" ]; then
35- echo "No versioned release found in CHANGELOG.md"
36- exit 1
37- fi
38-
39- echo "version=$VERSION" >> "$GITHUB_OUTPUT"
40- echo "tag=v$VERSION" >> "$GITHUB_OUTPUT"
41-
42- # Extract release notes between this version's heading and the next ## heading
43- # Use awk to capture lines between the target section and the next section
44- ESCAPED_VERSION=$(printf '%s' "$VERSION" | sed 's/[.[\*^$()+?{|]/\\&/g')
45- NOTES=$(awk "/^## \\[$ESCAPED_VERSION\\]/{found=1; next} found && /^## \\[/{exit} found{print}" CHANGELOG.md)
46-
47- # Write notes to a file for the release body
48- echo "$NOTES" > /tmp/release_notes.md
49-
50- echo "Detected version: $VERSION"
51- echo "Release notes:"
52- cat /tmp/release_notes.md
53-
54- - name : Check if release already exists
55- id : check_release
56- env :
57- GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
58- run : |
59- TAG="v${{ steps.changelog.outputs.version }}"
60- if gh release view "$TAG" --repo "$GITHUB_REPOSITORY" > /dev/null 2>&1; then
61- echo "Release $TAG already exists. Skipping."
62- echo "exists=true" >> "$GITHUB_OUTPUT"
63- else
64- echo "exists=false" >> "$GITHUB_OUTPUT"
65- fi
66-
67- - name : Install cross-compiler
68- if : steps.check_release.outputs.exists == 'false'
69- run : sudo apt-get update && sudo apt-get install --yes gcc-arm-none-eabi
70-
7124 - run : pipx install poetry
72- if : steps.check_release.outputs.exists == 'false'
73-
7425 - run : poetry install --only=build
75- if : steps.check_release.outputs.exists == 'false'
76-
7726 - name : Create credits file
78- if : steps.check_release.outputs.exists == 'false'
7927 run : |
8028 echo "$PYBRICKS_EV3_CREDITS" > bricks/ev3/ci_credits.txt
8129 env :
8230 PYBRICKS_EV3_CREDITS : ${{ secrets.PYBRICKS_EV3_CREDITS }}
83-
8431 - name : Build firmware
85- if : steps.check_release.outputs.exists == 'false'
8632 run : |
87- TAG="${{ steps.changelog.outputs.tag }}"
88- export MICROPY_GIT_TAG=ci-release-${{ github.run_number }}-${TAG}
33+ export MICROPY_GIT_TAG=ci-release-${{ github.run_number }}-$(git describe --tags --dirty --always --exclude "@pybricks/*")
8934 export MICROPY_GIT_HASH=$(echo ${{ github.sha }} | cut -c1-8)
9035 poetry run make $MAKEOPTS -C micropython/mpy-cross
9136 poetry run make $MAKEOPTS -C bricks/movehub
@@ -95,37 +40,27 @@ jobs:
9540 poetry run make $MAKEOPTS -C bricks/essentialhub
9641 poetry run make $MAKEOPTS -C bricks/nxt
9742 poetry run make $MAKEOPTS -C bricks/ev3
98-
43+ - name : Get tag
44+ run : echo "GITHUB_TAG=${GITHUB_REF#*refs/tags/}" >> $GITHUB_ENV
9945 - name : Create Release and Upload Assets
100- if : steps.check_release.outputs.exists == 'false'
10146 env :
10247 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
48+ tag : ${{ github.ref_name }}
10349 run : |
104- TAG="${{ steps.changelog.outputs.tag }}"
105- VERSION="${{ steps.changelog.outputs.version }}"
106-
107- # Determine pre-release flag (alpha, beta, release candidate)
108- PRERELEASE_FLAG=""
109- if [[ "$VERSION" == *a* ]] || [[ "$VERSION" == *b* ]] || [[ "$VERSION" == *rc* ]]; then
50+ if [[ "${{ contains(env.GITHUB_TAG, 'a') || contains(env.GITHUB_TAG, 'b') || contains(env.GITHUB_TAG, 'c') }}" == "true" ]]; then
11051 PRERELEASE_FLAG="--prerelease"
52+ else
53+ PRERELEASE_FLAG=""
11154 fi
112-
113- # Rename and collect firmware assets
11455 HUBS="movehub cityhub technichub primehub essentialhub nxt ev3"
115- ASSETS=""
11656 for HUB in $HUBS; do
117- NEW_FILENAME="./bricks/$HUB/build/pybricks-$HUB-$TAG .zip"
57+ NEW_FILENAME="./bricks/$HUB/build/pybricks-$HUB-${{ env.GITHUB_TAG }} .zip"
11858 mv "./bricks/$HUB/build/firmware.zip" "$NEW_FILENAME"
11959 ASSETS="$ASSETS $NEW_FILENAME"
12060 done
121-
122- # Create the git tag and GitHub release
123- git tag "$TAG"
124- git push origin "$TAG"
125-
126- gh release create "$TAG" \
61+ gh release create "$tag" \
12762 --repo="$GITHUB_REPOSITORY" \
128- --title="${VERSION }" \
129- -F /tmp/release_notes .md \
63+ --title="${tag#v }" \
64+ -F CHANGELOG .md \
13065 $PRERELEASE_FLAG \
13166 $ASSETS
0 commit comments