Skip to content

feat: add beta release workflow for JitPack from stable-beta branch #1

feat: add beta release workflow for JitPack from stable-beta branch

feat: add beta release workflow for JitPack from stable-beta branch #1

Workflow file for this run

name: Beta Version Bump PR
on:
push:
branches:
- stable-beta
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
beta-version-bump:
name: Prepare Beta Release Branch
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[skip ci]')"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install -g semantic-release @semantic-release/exec @semantic-release/changelog @semantic-release/git conventional-changelog-conventionalcommits conventional-changelog-cli
- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Extract current version
id: current_version
run: |
# Read version from gradle.properties
CURRENT_VERSION=$(grep "^GLOBAL_VERSION_NAME=" gradle.properties | cut -d'=' -f2)
echo "current_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT
echo "Current version: $CURRENT_VERSION"
- name: Get next beta version
id: get_version
run: |
CURRENT_VERSION="${{ steps.current_version.outputs.current_version }}"
# Run dry-run
npx semantic-release --dry-run --no-ci > semantic-output.txt 2>&1 || true
cat semantic-output.txt
# Parse output
NEXT_VERSION=$(grep "The next release version is" semantic-output.txt | sed -E 's/.*The next release version is ([0-9]+\.[0-9]+\.[0-9]+).*/\1/' | head -1)
if [ -z "$NEXT_VERSION" ]; then
echo "::notice::No new version needed."
echo "should_create_pr=false" >> $GITHUB_OUTPUT
exit 0
fi
# Create beta version
BETA_VERSION="${NEXT_VERSION}-beta"
if [ "$BETA_VERSION" = "$CURRENT_VERSION" ]; then
echo "::notice::Version already matches."
echo "should_create_pr=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "next_version=$NEXT_VERSION" >> $GITHUB_OUTPUT
echo "beta_version=$BETA_VERSION" >> $GITHUB_OUTPUT
echo "should_create_pr=true" >> $GITHUB_OUTPUT
echo "release_branch=beta-release/${BETA_VERSION}" >> $GITHUB_OUTPUT
echo "::notice::Bumping version: $CURRENT_VERSION -> $BETA_VERSION"
- name: Check if beta release branch exists
if: steps.get_version.outputs.should_create_pr == 'true'
id: check_branch
run: |
RELEASE_BRANCH="${{ steps.get_version.outputs.release_branch }}"
if git ls-remote --exit-code --heads origin "$RELEASE_BRANCH" >/dev/null 2>&1; then
echo "branch_exists=true" >> $GITHUB_OUTPUT
exit 0
fi
echo "branch_exists=false" >> $GITHUB_OUTPUT
- name: Create beta release branch
if: steps.get_version.outputs.should_create_pr == 'true' && steps.check_branch.outputs.branch_exists == 'false'
run: |
BRANCH_NAME="${{ steps.get_version.outputs.release_branch }}"
git checkout -b "$BRANCH_NAME"
echo "branch_name=$BRANCH_NAME" >> $GITHUB_ENV
- name: Update Gradle version
if: steps.get_version.outputs.should_create_pr == 'true' && steps.check_branch.outputs.branch_exists == 'false'
run: |
BETA_VERSION="${{ steps.get_version.outputs.beta_version }}"
echo "Running bump_version.sh..."
chmod +x ./scripts/bump_version.sh
./scripts/bump_version.sh "$BETA_VERSION"
grep "^GLOBAL_VERSION_NAME=" gradle.properties
- name: Generate Changelog
if: steps.get_version.outputs.should_create_pr == 'true' && steps.check_branch.outputs.branch_exists == 'false'
run: |
BETA_VERSION="${{ steps.get_version.outputs.beta_version }}"
echo "Generating changelog for version $BETA_VERSION..."
# Create a temporary context file to force the correct version header
echo '{"version":"'${BETA_VERSION}'"}' > context.json
# Generate changelog updates and save to files without tagging
npx conventional-changelog-cli -p conventionalcommits -i CHANGELOG.md -s --context context.json
rm context.json
echo "CHANGELOG.md updated successfully."
- name: Commit changes
if: steps.get_version.outputs.should_create_pr == 'true' && steps.check_branch.outputs.branch_exists == 'false'
run: |
BETA_VERSION="${{ steps.get_version.outputs.beta_version }}"
git add gradle.properties CHANGELOG.md
git commit -m "chore(beta-release): prepare version ${BETA_VERSION}"
echo "Committed version bump and changelog."
- name: Push and Create PR
if: steps.get_version.outputs.should_create_pr == 'true' && steps.check_branch.outputs.branch_exists == 'false'
run: |
BETA_VERSION="${{ steps.get_version.outputs.beta_version }}"
BRANCH_NAME="${{ env.branch_name }}"
BASE_BRANCH="${{ github.ref_name }}"
git push origin "$BRANCH_NAME"
if [ -f CHANGELOG.md ]; then
CHANGELOG_EXCERPT=$(sed -n "/## \[$BETA_VERSION\]/,/## \[/p" CHANGELOG.md | sed '$ d' || echo "See CHANGELOG.md")
else
CHANGELOG_EXCERPT="See CHANGELOG.md for details"
fi
# We construct the body string first to avoid multiline string issues in the CLI command
PR_BODY="🚀 Automated beta release PR
**Beta Version:** \`$BETA_VERSION\`
## Changes
$CHANGELOG_EXCERPT
### JitPack Usage
\`\`\`gradle
dependencies {
implementation 'com.github.newrelic.NewRelicVideoCore:$BETA_VERSION'
implementation 'com.github.newrelic.NRExoPlayerTracker:$BETA_VERSION'
implementation 'com.github.newrelic.NRIMATracker:$BETA_VERSION'
}
\`\`\`
---
*Merge this PR to publish the beta release.*"
gh pr create \
--base "$BASE_BRANCH" \
--head "$BRANCH_NAME" \
--title "chore(beta-release): $BETA_VERSION" \
--body "$PR_BODY"
# Add beta-release label
PR_NUMBER=$(gh pr list --head "$BRANCH_NAME" --base "$BASE_BRANCH" --json number --jq '.[0].number')
gh pr edit "$PR_NUMBER" --add-label "beta-release"