Skip to content

Release

Release #18

Workflow file for this run

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 CocoaPods
run: gem install cocoapods
- 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/8144#issuecomment-1902072070
defaults write com.apple.dt.Xcode AllowUnsupportedVisionOSHost -bool YES
defaults write com.apple.CoreSimulator AllowUnsupportedVisionOSHost -bool YES
xcodebuild -downloadPlatform visionOS
- 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."