Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions .github/workflows/auto_version_dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# -----------------------------------------------------------------------------
# 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.repository_owner == 'loopandlearn'
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
token: ${{ secrets.LOOPFOLLOW_TOKEN_AUTOBUMP }}

- name: Set up Git
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
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
run: |
git add Config.xcconfig
git commit -m "CI: Bump dev version to $NEW_VERSION [skip ci]"
git push