Skip to content

chore: bump version to v0.5.0, archive closed tasks, update CHANGELOG #5

chore: bump version to v0.5.0, archive closed tasks, update CHANGELOG

chore: bump version to v0.5.0, archive closed tasks, update CHANGELOG #5

Workflow file for this run

name: Release
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
tag:
description: "Version tag to release (e.g. v1.0.0) — must already exist"
required: true
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
permissions:
contents: write # needed to create GitHub Releases and upload assets
jobs:
# ─── Host C++ unit tests (gates firmware builds) ───────────────────────────
test:
name: Host Unit Tests
runs-on: ubuntu-latest
container: mcr.microsoft.com/devcontainers/cpp:ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Configure CMake
run: |
cmake -B .vscode/build \
-G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-Wno-dev
- name: Build tests
run: cmake --build .vscode/build --target pedal_tests -j$(nproc)
- name: Run tests
run: .vscode/build/test/pedal_tests --gtest_brief=1
# ─── Flutter quality (gates Android build) ─────────────────────────────────
flutter-quality:
name: Flutter Quality
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Read Flutter version
id: flutter-version
run: echo "version=$(cat app/.flutter-version)" >> "$GITHUB_OUTPUT"
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ steps.flutter-version.outputs.version }}
channel: stable
cache: true
- name: Install dependencies
working-directory: app
run: flutter pub get
- name: Analyze
working-directory: app
run: flutter analyze
- name: Run tests
working-directory: app
run: flutter test
# ─── Firmware build — ESP32 ────────────────────────────────────────────────
build-esp32:
name: Build ESP32 firmware
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install PlatformIO
run: pip install --quiet platformio
- name: Build ESP32 firmware
run: pio run -e nodemcu-32s
- name: Package artifacts
run: |
TAG="${{ github.ref_name }}${{ github.event.inputs.tag }}"
cp .pio/build/nodemcu-32s/firmware.bin \
firmware-nodemcu-32s-${TAG}.bin
zip firmware-nodemcu-32s-${TAG}-debug.zip \
.pio/build/nodemcu-32s/firmware.elf
- uses: actions/upload-artifact@v4
with:
name: firmware-esp32
path: |
firmware-nodemcu-32s-*.bin
firmware-nodemcu-32s-*-debug.zip
retention-days: 7
# ─── Firmware build — nRF52840 ─────────────────────────────────────────────
build-nrf52840:
name: Build nRF52840 firmware
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install PlatformIO
run: pip install --quiet platformio
- name: Build nRF52840 firmware
run: pio run -e feather-nrf52840
- name: Package artifacts
run: |
TAG="${{ github.ref_name }}${{ github.event.inputs.tag }}"
cp .pio/build/feather-nrf52840/firmware.hex \
firmware-feather-nrf52840-${TAG}.hex
cp .pio/build/feather-nrf52840/firmware.zip \
firmware-feather-nrf52840-${TAG}.zip
- uses: actions/upload-artifact@v4
with:
name: firmware-nrf52840
path: |
firmware-feather-nrf52840-*.hex
firmware-feather-nrf52840-*.zip
retention-days: 7
# ─── Android APK build (debug-signed; real signing deferred to TASK-160) ───
build-android:
name: Build Android APK
runs-on: ubuntu-latest
needs: flutter-quality
steps:
- uses: actions/checkout@v4
- name: Read Flutter version
id: flutter-version
run: echo "version=$(cat app/.flutter-version)" >> "$GITHUB_OUTPUT"
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ steps.flutter-version.outputs.version }}
channel: stable
cache: true
- name: Install dependencies
working-directory: app
run: flutter pub get
- name: Build APK (release, debug-signed)
working-directory: app
run: flutter build apk --release
- name: Rename APK
run: |
TAG="${{ github.ref_name }}${{ github.event.inputs.tag }}"
cp app/build/app/outputs/flutter-apk/app-release.apk \
awesome-studio-pedal-${TAG}.apk
- uses: actions/upload-artifact@v4
with:
name: app-android
path: awesome-studio-pedal-*.apk
retention-days: 7
# ─── GitHub Release ────────────────────────────────────────────────────────
release:
name: Create GitHub Release
runs-on: ubuntu-latest
needs: [build-esp32, build-nrf52840, build-android]
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # full history for changelog generation
- name: Resolve version tag
id: tag
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "value=${{ github.event.inputs.tag }}" >> "$GITHUB_OUTPUT"
else
echo "value=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
fi
- name: Generate changelog
id: changelog
run: |
TAG="${{ steps.tag.outputs.value }}"
PREV=$(git tag -l 'v*' | sort -V | grep -B1 "^${TAG}$" | head -1 || true)
if [[ -n "$PREV" && "$PREV" != "$TAG" ]]; then
RANGE="${PREV}..${TAG}"
else
RANGE="${TAG}"
fi
{
echo "body<<EOF"
echo "## What's Changed"
echo ""
git log "$RANGE" --pretty="- %s (%h)" --no-merges
echo ""
echo "**Full diff**: [\`${PREV}..${TAG}\`](../../compare/${PREV}...${TAG})"
echo "EOF"
} >> "$GITHUB_OUTPUT"
- name: Download ESP32 artifact
uses: actions/download-artifact@v4
with:
name: firmware-esp32
- name: Download nRF52840 artifact
uses: actions/download-artifact@v4
with:
name: firmware-nrf52840
- name: Download Android artifact
uses: actions/download-artifact@v4
with:
name: app-android
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.tag.outputs.value }}
name: "AwesomeStudioPedal ${{ steps.tag.outputs.value }}"
body: ${{ steps.changelog.outputs.body }}
files: |
firmware-nodemcu-32s-*.bin
firmware-nodemcu-32s-*-debug.zip
firmware-feather-nrf52840-*.hex
firmware-feather-nrf52840-*.zip
awesome-studio-pedal-*.apk
draft: false
prerelease: false
- name: Archive closed tasks for this release
run: |
python scripts/organize_closed_tasks.py ${{ steps.tag.outputs.value }}
- name: Commit archived tasks if changed
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
if ! git diff --quiet HEAD; then
git add docs/developers/tasks/
git commit -m "chore: archive closed tasks for ${{ steps.tag.outputs.value }}"
git push
fi