# ----------------------------------------------------------------------------- # 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