| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- # -----------------------------------------------------------------------------
- # Workflow: Bump Dev Version
- #
- # Description:
- # This GitHub Actions workflow automatically increments the version number
- # defined in `Config.xcconfig` on every push to the `dev` branch.
- #
- # Versioning Logic:
- # - Reads the `LOOP_FOLLOW_MARKETING_VERSION` from `Config.xcconfig`.
- # - The version is `MAJOR.MINOR.PATCH` format (3 digits)
- # where PATCH is 0 for main branch, each update to dev increments by 1
- #
- # Example:
- # - `2.4.0` for main
- # for dev → `2.4.1`, then → `2.4.2`
- # - next release (main) will be `2.5.0`
- #
- # Commit Handling:
- # The updated version is then committed and pushed back to the `dev` branch.
- # - The bump commit includes the `[skip ci]` tag in its message
- # - This prevents the workflow from re-triggering itself in a loop
- #
- # Prerequisites:
- # - `LOOP_FOLLOW_MARKETING_VERSION` must exist and be defined using the format:
- # LOOP_FOLLOW_MARKETING_VERSION = x.y.z
- # - GitHub Actions bot must have workflow permission to push to `dev`.
- # -----------------------------------------------------------------------------
- name: zzz [DO NOT RUN] Bump LOOP_FOLLOW_MARKETING_VERSION on dev push
- on:
- push:
- branches:
- - dev
- jobs:
- bump-version:
- if: ${{ !github.event.repository.fork }}
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v5
- with:
- token: ${{ secrets.LOOPFOLLOW_TOKEN_AUTOBUMP }}
- fetch-depth: 0
- - name: Skip if Config.xcconfig was changed in this push
- id: check
- run: |
- BEFORE="${{ github.event.before }}"
- if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then
- echo "skip=false" >> "$GITHUB_OUTPUT"
- echo "No previous SHA on this push; not skipping."
- exit 0
- fi
- if git diff "$BEFORE..HEAD" -- Config.xcconfig | grep -qE '^\+LOOP_FOLLOW_MARKETING_VERSION'; then
- echo "skip=true" >> "$GITHUB_OUTPUT"
- echo "LOOP_FOLLOW_MARKETING_VERSION was set in this push (likely a release sync); skipping auto-bump."
- else
- echo "skip=false" >> "$GITHUB_OUTPUT"
- fi
- - name: Set up Git
- if: steps.check.outputs.skip != 'true'
- run: |
- git config --global user.name "github-actions[bot]"
- git config --global user.email "github-actions[bot]@users.noreply.github.com"
- - name: Bump dev version number in Config.xcconfig
- if: steps.check.outputs.skip != 'true'
- run: |
- FILE=Config.xcconfig
- # Find the line with LOOP_FOLLOW_MARKETING_VERSION and extract the value
- VERSION_LINE=$(grep -E '^LOOP_FOLLOW_MARKETING_VERSION *= *[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?' "$FILE")
- CURRENT_VERSION=$(echo "$VERSION_LINE" | sed -E 's/^LOOP_FOLLOW_MARKETING_VERSION *= *//')
-
- # Split version into components (up to 3)
- IFS='.' read -r MAJOR MINOR FIX <<< "$CURRENT_VERSION"
- # Increment FIX
- if [ -z "$FIX" ]; then
- echo "Error, FIX not found"
- else
- FIX=$((FIX + 1))
- fi
- # Construct new version
- NEW_VERSION="$MAJOR.$MINOR.$FIX"
- echo "New version: $NEW_VERSION"
- # Escape dots in current version for sed replacement
- ESCAPED_CURRENT_VERSION=$(echo "$CURRENT_VERSION" | sed 's/\./\\./g')
- # Replace the LOOP_FOLLOW_MARKETING_VERSION line in-place with new version
- if [[ "$OSTYPE" == "darwin"* ]]; then
- sed -i '' -E "s/LOOP_FOLLOW_MARKETING_VERSION *= *$ESCAPED_CURRENT_VERSION/LOOP_FOLLOW_MARKETING_VERSION = $NEW_VERSION/" "$FILE"
- else
- sed -i -E "s/LOOP_FOLLOW_MARKETING_VERSION *= *$ESCAPED_CURRENT_VERSION/LOOP_FOLLOW_MARKETING_VERSION = $NEW_VERSION/" "$FILE"
- fi
- # Export version so it's available in the next step
- echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV
- - name: Commit and push changes
- if: steps.check.outputs.skip != 'true'
- run: |
- git add Config.xcconfig
- git commit -m "CI: Bump dev version to $NEW_VERSION [skip ci]"
- git push
|