pediatric-ai-scribe-v3/.github/workflows/version-bump.yml
2026-05-10 18:07:52 +02:00

103 lines
3.5 KiB
YAML

name: Version bump & release
# Manual trigger — click "Run workflow" in the Actions tab, choose
# patch / minor / major. The workflow computes the next semver,
# updates package.json, mobile/package.json, and the Android
# build.gradle, commits the change, tags it, and pushes — which
# triggers the android-release and docker-publish workflows.
on:
workflow_dispatch:
inputs:
bump:
description: 'Semver bump type'
required: true
type: choice
default: patch
options:
- patch
- minor
- major
custom:
description: 'Or exact version (e.g. 7.0.0) — overrides bump'
required: false
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
permissions:
contents: write
jobs:
bump:
if: ${{ github.server_url == 'https://github.com' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.RELEASE_PAT || secrets.GITHUB_TOKEN }}
- name: Compute next version
id: v
run: |
CUR=$(grep -m1 '"version"' package.json | sed -E 's/.*"version"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/')
echo "current=$CUR"
IFS='.' read -r MAJ MIN PAT <<< "$CUR"
if [[ -n "${{ github.event.inputs.custom }}" ]]; then
NEXT="${{ github.event.inputs.custom }}"
else
case "${{ github.event.inputs.bump }}" in
major) NEXT="$((MAJ+1)).0.0" ;;
minor) NEXT="${MAJ}.$((MIN+1)).0" ;;
patch) NEXT="${MAJ}.${MIN}.$((PAT+1))" ;;
esac
fi
if ! [[ "$NEXT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "::error::invalid version: $NEXT"; exit 1
fi
echo "next=$NEXT" >> "$GITHUB_OUTPUT"
echo "current=$CUR" >> "$GITHUB_OUTPUT"
echo "### Version bump" >> "$GITHUB_STEP_SUMMARY"
echo "- Current: $CUR" >> "$GITHUB_STEP_SUMMARY"
echo "- Next: $NEXT" >> "$GITHUB_STEP_SUMMARY"
- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Bump version strings
env:
V: ${{ steps.v.outputs.next }}
run: |
IFS='.' read -r MAJ MIN PAT <<< "$V"
ANDROID_CODE=$(( MAJ * 100000 + MIN * 1000 + PAT ))
# package.json (top-level "version": "...")
sed -i -E "0,/(\"version\"[[:space:]]*:[[:space:]]*\")[^\"]+(\")/ s//\1${V}\2/" package.json
sed -i -E "0,/(\"version\"[[:space:]]*:[[:space:]]*\")[^\"]+(\")/ s//\1${V}\2/" mobile/package.json
# Android
sed -i -E \
-e "s/versionCode +[0-9]+/versionCode ${ANDROID_CODE}/" \
-e "s/versionName +\"[^\"]+\"/versionName \"${V}\"/" \
mobile/android/app/build.gradle
git diff --stat
- name: Commit, tag, push
env:
V: ${{ steps.v.outputs.next }}
run: |
git add package.json mobile/package.json mobile/android/app/build.gradle
git commit -m "Release v${V}"
git tag -a "v${V}" -m "Release v${V}"
git push origin HEAD
git push origin "v${V}"
echo "### Pushed" >> "$GITHUB_STEP_SUMMARY"
echo "- tag: v${V}" >> "$GITHUB_STEP_SUMMARY"
echo "- android-release + docker-publish workflows will now run" >> "$GITHUB_STEP_SUMMARY"