103 lines
3.5 KiB
YAML
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"
|