Merge branch 'develop' into feature/gradient-border
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
name: Version Bump
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches: [develop]
|
||||
types: [opened, synchronize, reopened, labeled, unlabeled, closed]
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
# Register this job's name as a required status check on develop's branch
|
||||
# protection - that's what actually blocks the merge button.
|
||||
check-bump-label:
|
||||
if: github.event.action != 'closed'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Require a bump/major, bump/minor, bump/patch, or bump/skip label
|
||||
env:
|
||||
LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }}
|
||||
run: |
|
||||
echo "$LABELS" | grep -qE '"bump/(major|minor|patch|skip)"' || {
|
||||
echo "::error::PR into develop must carry one of bump/major, bump/minor, bump/patch, bump/skip"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Runs once, after the merge has already happened, to commit the actual
|
||||
# version bump onto develop.
|
||||
apply-version-bump:
|
||||
if: github.event.pull_request.merged == true
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
ref: develop
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Determine bump level from PR labels
|
||||
id: level
|
||||
env:
|
||||
LABELS: ${{ toJson(github.event.pull_request.labels.*.name) }}
|
||||
run: |
|
||||
for lvl in major minor patch skip; do
|
||||
if echo "$LABELS" | grep -q "\"bump/$lvl\""; then
|
||||
echo "level=$lvl" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
echo "::error::merged PR into develop has no bump/major, bump/minor, bump/patch, or bump/skip label"
|
||||
exit 1
|
||||
|
||||
- name: Bump CMakeLists.txt and flake.nix
|
||||
if: steps.level.outputs.level != 'skip'
|
||||
env:
|
||||
LEVEL: ${{ steps.level.outputs.level }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
|
||||
CURRENT=$(grep -oP '(?<=VERSION )[0-9]+(\.[0-9]+){1,2}' CMakeLists.txt | head -1)
|
||||
|
||||
# Pad to 3 components so a pre-existing 2-component version (e.g.
|
||||
# "0.1") still splits into MAJOR/MINOR/PATCH correctly.
|
||||
IFS='.' read -r MAJOR MINOR PATCH <<< "${CURRENT}.0.0"
|
||||
|
||||
case "$LEVEL" in
|
||||
major) MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0 ;;
|
||||
minor) MINOR=$((MINOR + 1)); PATCH=0 ;;
|
||||
patch) PATCH=$((PATCH + 1)) ;;
|
||||
esac
|
||||
|
||||
NEW="$MAJOR.$MINOR.$PATCH"
|
||||
|
||||
sed -i "s/VERSION ${CURRENT}/VERSION ${NEW}/" CMakeLists.txt
|
||||
sed -i "s/version = \"${CURRENT}\"/version = \"${NEW}\"/" flake.nix
|
||||
|
||||
echo "CURRENT_VERSION=${CURRENT}" >> "$GITHUB_ENV"
|
||||
echo "NEW_VERSION=${NEW}" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Commit and push
|
||||
if: steps.level.outputs.level != 'skip'
|
||||
run: |
|
||||
set -euo pipefail
|
||||
if [ "$CURRENT_VERSION" = "$NEW_VERSION" ]; then
|
||||
echo "::error::version did not change (${CURRENT_VERSION} -> ${NEW_VERSION})"
|
||||
exit 1
|
||||
fi
|
||||
git config user.name "gitea-actions"
|
||||
git config user.email "actions@noreply.localhost"
|
||||
git add CMakeLists.txt flake.nix
|
||||
git commit -m "Bump version to ${NEW_VERSION}"
|
||||
git push origin HEAD:develop
|
||||
Reference in New Issue
Block a user