Skip to content

Upload Release Assets #100

Upload Release Assets

Upload Release Assets #100

Workflow file for this run

on:
push:
tags:
- 'v3.*'
- 'v4.*'
name: Upload Release Assets
env:
MAKEOPTS: -j
permissions:
contents: write
id-token: write
jobs:
upload_release:
name: Upload Release Assets
runs-on: ubuntu-24.04
steps:
- name: Install cross-compiler
run: sudo apt-get update && sudo apt-get install --yes gcc-arm-none-eabi
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- run: pipx install poetry
- run: poetry install --only=build
- name: Create credits file
run: |
echo "$PYBRICKS_EV3_CREDITS" > bricks/ev3/ci_credits.txt
env:
PYBRICKS_EV3_CREDITS: ${{ secrets.PYBRICKS_EV3_CREDITS }}
- name: Build firmware
run: |
export MICROPY_GIT_TAG=ci-release-${{ github.run_number }}-$(git describe --tags --dirty --always --exclude "@pybricks/*")
export MICROPY_GIT_HASH=$(echo ${{ github.sha }} | cut -c1-8)
poetry run make $MAKEOPTS -C micropython/mpy-cross
poetry run make $MAKEOPTS -C bricks/movehub
poetry run make $MAKEOPTS -C bricks/cityhub
poetry run make $MAKEOPTS -C bricks/technichub
poetry run make $MAKEOPTS -C bricks/primehub
poetry run make $MAKEOPTS -C bricks/essentialhub
poetry run make $MAKEOPTS -C bricks/nxt
poetry run make $MAKEOPTS -C bricks/ev3
- name: Get tag
run: |
TAG="${GITHUB_REF#*refs/tags/}"
NPM_VERSION=$(echo "${TAG#v}" | sed 's/\([0-9]\)a\([0-9]\)/\1-alpha.\2/;s/\([0-9]\)b\([0-9]\)/\1-beta.\2/;s/\([0-9]\)rc\([0-9]\)/\1-rc.\2/')
NPM_TAG=$(echo "$NPM_VERSION" | grep -q '-' && echo 'next' || echo 'latest')
echo "GITHUB_TAG=$TAG" >> $GITHUB_ENV
echo "NPM_VERSION=$NPM_VERSION" >> $GITHUB_ENV
echo "NPM_TAG=$NPM_TAG" >> $GITHUB_ENV
- name: Create Release and Upload Assets
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref_name }}
run: |
if [[ "${{ contains(env.GITHUB_TAG, 'a') || contains(env.GITHUB_TAG, 'b') || contains(env.GITHUB_TAG, 'c') }}" == "true" ]]; then
PRERELEASE_FLAG="--prerelease"
else
PRERELEASE_FLAG=""
fi
HUBS="movehub cityhub technichub primehub essentialhub nxt ev3"
mkdir -p npm/firmware/build
for HUB in $HUBS; do
NEW_FILENAME="./bricks/$HUB/build/pybricks-$HUB-${{ env.GITHUB_TAG }}.zip"
cp "./bricks/$HUB/build/firmware.zip" "npm/firmware/build/$HUB.zip"
mv "./bricks/$HUB/build/firmware.zip" "$NEW_FILENAME"
ASSETS="$ASSETS $NEW_FILENAME"
done
VERSION="${tag#v}"
if [[ -z "$PRERELEASE_FLAG" ]]; then
RELEASE_NOTES=$(awk -v ver="$VERSION" '/^## \[/{if ($0 ~ "^## \\[" ver "\\]") found=1; else if (found && $0 !~ /[0-9][abc][0-9]/) exit} found{print}' CHANGELOG.md)
else
RELEASE_NOTES=$(awk -v ver="$VERSION" '/^## \[/{if ($0 ~ "^## \\[" ver "\\]") found=1; else if (found && printed) exit} found{printed=1; print}' CHANGELOG.md)
fi
gh release create "$tag" \
--repo="$GITHUB_REPOSITORY" \
--title="${tag#v}" \
--notes "$RELEASE_NOTES" \
$PRERELEASE_FLAG \
$ASSETS
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
registry-url: 'https://registry.npmjs.org'
- name: Publish npm firmware package
working-directory: npm/firmware
run: |
npm version --no-git-tag-version "${{ env.NPM_VERSION }}"
echo "export const FIRMWARE_TAG = '${{ env.GITHUB_TAG }}';" > version.ts
yarn install
npx tsc
npm publish --tag "${{ env.NPM_TAG }}"