Skip to content

Commit

Permalink
Adding actions for generating and publishing a release
Browse files Browse the repository at this point in the history
The generate-release action is a manual dispatch action that takes
the version number as an input, and depending on the major version,
will checkout either main or main_1.x, then merge either develop or
develop_1.x into it, bump all the version strings in the repo, and
raise a PR against main or main_1.x.

The publish-release action runs on merge to main or main_1.x and
reads the version from the version.txt file to determine the
release tag it should publish, then publishes that release.

NOTE: both of these actions are broken in v2 of the repo until we
bring it up to date with the Swift Package Manager support changes,
as the version.txt file does not exist in develop currently.
  • Loading branch information
theRealRobG committed Oct 3, 2024
1 parent 9fbb538 commit 9b41203
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 0 deletions.
87 changes: 87 additions & 0 deletions .github/workflows/generate-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
name: Generate Release
run-name: Generate Release ${{ fromJSON(inputs.major) }}.${{ fromJSON(inputs.minor) }}.${{ fromJSON(inputs.patch) }}

on:
workflow_dispatch:
inputs:
major:
description: 'Major version'
required: true
default: '1'
type: choice
options:
- '1'
- '2'
minor:
description: 'Minor version'
required: true
type: number
patch:
description: 'Patch version'
required: true
type: number

jobs:
bump-version-and-raise-pr:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
env:
version: ${{ fromJSON(inputs.major) }}.${{ fromJSON(inputs.minor) }}.${{ fromJSON(inputs.patch) }}
branch: ${{ inputs.major == 2 && 'develop' || 'develop_1.x' }}
target: ${{ inputs.major == 2 && 'main' || 'main_1.x' }}
steps:
- name: Check minor has no decimals
run: ${{ !contains(fromJSON(inputs.minor), '.') }}

- name: Check patch has no decimals
run: ${{ !contains(fromJSON(inputs.patch), '.') }}

- name: Checkout ${{ env.target }}
uses: actions/checkout@v4
with:
ref: ${{ env.target }}
fetch-depth: 0

- name: Ensure tag does not exist
run: |
if git show-ref --tags --verify --quiet "refs/tags/$version"; then
echo "::error::Tag $version exists" && exit 1
else
echo "Tag $version does not exist"
fi
- name: Ensure branch does not exist
run: |
if git show-ref --verify --quiet "refs/remotes/origin/release/$version"; then
echo "::error::Release branch release/$version exists" && exit 1
else
echo "Release branch release/$version does not exist"
fi
- name: Merge in ${{ env.branch }}
run: |
git config user.name github-actions
git config user.email [email protected]
git merge origin/${{ env.branch }}
- name: Update version in txt file
run: sed -i "s/[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}/$version/" ./mambaSharedFramework/Resources/version.txt

- name: Update version in xcodeproj file
run: sed -i "s/MARKETING_VERSION = [0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\};/MARKETING_VERSION = $version;/" ./mamba.xcodeproj/project.pbxproj

- name: Update version in podspec file
run: sed -i "s/= \"[0-9]\{1,\}\.[0-9]\{1,\}\.[0-9]\{1,\}\"/= \"$version\"/" ./mamba.podspec

- name: Create pull request
uses: peter-evans/create-pull-request@v7
with:
title: Release ${{ env.version }}
commit-message: Bump version to ${{ env.version }}
branch: release/${{ env.version }}
body: |
Automated version bump to ${{ env.version }} generated by [create-pull-request][1].
[1]: https://github.com/peter-evans/create-pull-request
34 changes: 34 additions & 0 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Publish Release
on:
push:
branches:
- 'main'
- 'main_1.x'

jobs:
get-version:
name: Get version for release
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
- id: version
run: echo "version=`cat ./mambaSharedFramework/Resources/version.txt`" >> "$GITHUB_OUTPUT"

publish-release:
name: Publish release ${{ needs.get-version.outputs.version }}
runs-on: ubuntu-latest
needs: get-version
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- name: Create release
uses: elgohr/Github-Release-Action@v5
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
title: ${{ needs.get-version.outputs.version }}
tag: ${{ needs.get-version.outputs.version }}

0 comments on commit 9b41203

Please sign in to comment.