Release #25
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
workflow_dispatch: | |
inputs: | |
version: | |
description: 'Version to release' | |
required: true | |
jobs: | |
release: | |
runs-on: macos-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: '3.0' | |
- name: Install Ruby Gems | |
run: sudo bundle install | |
- name: Use Latest Stable Xcode | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: latest-stable | |
- name: Install visionOS Platform | |
shell: bash | |
run: | | |
# See https://github.com/actions/runner-images/issues/10692#issuecomment-2377521050 | |
xcodebuild -runFirstLaunch | |
xcrun simctl list | |
xcodebuild -downloadPlatform visionOS | |
xcodebuild -runFirstLaunch | |
- name: Update version in podspec | |
run: sed -i '' 's/s.version = "[^"]*"/s.version = "${{ github.event.inputs.version }}"/' KSCrash.podspec | |
- name: Update version in source code | |
run: | | |
formatted_version_number=$(echo "${{ github.event.inputs.version }}" | awk -F. '{printf("%d.%02d%02d\n", $1, $2, $3)}') | |
sed -i '' 's/const double KSCrashFrameworkVersionNumber = [^;]*/const double KSCrashFrameworkVersionNumber = '"$formatted_version_number"'/' Sources/KSCrashRecording/KSCrash.m | |
sed -i '' 's/const unsigned char KSCrashFrameworkVersionString\[\] = "[^"]*"/const unsigned char KSCrashFrameworkVersionString[] = "${{ github.event.inputs.version }}"/' Sources/KSCrashRecording/KSCrash.m | |
- name: Update README | |
run: | | |
# Update SPM version | |
sed -i '' "s/\.package(url: \"https:\/\/github.com\/kstenerud\/KSCrash.git\", .upToNextMajor(from: \"[^\"]*\"))/\.package(url: \"https:\/\/github.com\/kstenerud\/KSCrash.git\", .upToNextMajor(from: \"${{ github.event.inputs.version }}\"))/" README.md | |
# Update CocoaPods version | |
VERSION="${{ github.event.inputs.version }}" | |
if [[ "$VERSION" == *"-"* ]]; then | |
# It's a pre-release version, use the full version | |
sed -i '' "s/pod 'KSCrash'.*$/pod 'KSCrash', '~> $VERSION'/" README.md | |
else | |
# It's a release version, use major.minor | |
sed -i '' "s/pod 'KSCrash'.*$/pod 'KSCrash', '~> ${VERSION%.*}'/" README.md | |
fi | |
echo "README.md updated with version ${{ github.event.inputs.version }}" | |
- name: Commit version update | |
id: commit_version | |
run: | | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
git add . | |
git commit -m "Update version to ${{ github.event.inputs.version }}" | |
git push | |
- name: Create git tag | |
id: create_tag | |
run: | | |
git tag ${{ github.event.inputs.version }} | |
git push origin ${{ github.event.inputs.version }} | |
- name: Publish to CocoaPods | |
env: | |
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_PASSWORD }} | |
run: pod trunk push KSCrash.podspec --verbose | |
rollback: | |
runs-on: macos-latest | |
needs: release | |
if: failure() | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Fetch all tags | |
run: | | |
echo "Fetching all tags..." | |
git fetch --tags | |
echo "Tags fetched successfully." | |
- name: Delete git tag locally | |
run: | | |
echo "Attempting to delete local tag ${{ github.event.inputs.version }}..." | |
git tag -d ${{ github.event.inputs.version }} || echo "Tag not found locally" | |
echo "Local tag deletion process completed." | |
- name: Delete git tag remotely | |
run: | | |
echo "Attempting to delete remote tag ${{ github.event.inputs.version }}..." | |
git push --delete origin ${{ github.event.inputs.version }} || echo "Tag not found on remote" | |
echo "Remote tag deletion process completed." | |
- name: Pull latest changes | |
run: | | |
echo "Pulling latest changes for the current branch..." | |
git pull origin "$(git branch --show-current)" | |
echo "Latest changes pulled successfully." | |
- name: Revert version commit | |
run: | | |
echo "Identifying the last commit..." | |
previous_commit=$(git rev-list -n 1 HEAD) | |
echo "Last commit identified: $previous_commit" | |
echo "Attempting to revert commit $previous_commit..." | |
git revert --no-commit $previous_commit | |
echo "Revert command executed." | |
echo "Committing the revert with a message..." | |
git config --global user.name 'github-actions[bot]' | |
git config --global user.email 'github-actions[bot]@users.noreply.github.com' | |
git commit -m "Revert version update due to failed release" | |
echo "Revert commit completed." | |
- name: Push revert | |
run: | | |
echo "Pushing reverted changes to remote..." | |
git push || { echo "Push failed. Checking remote status..."; git status; exit 1; } | |
echo "Push completed." |