Skip to content

Release

Release #16

Workflow file for this run

name: Release
on:
workflow_dispatch:
inputs:
bump_type:
description: "Version bump type"
required: true
type: choice
options:
- patch
- minor
- major
jobs:
update-cargo-version:
runs-on: ubuntu-latest
outputs:
new_version: ${{ steps.version.outputs.new_version }}
steps:
- uses: actions/checkout@v4
with:
ref: main
token: ${{ secrets.GIT_HUB_TOKEN }}
- name: Calculate new version
id: version
env:
BUMP_TYPE: ${{ github.event.inputs.bump_type }}
run: |
# Get current version from Cargo.toml
CURRENT_VERSION=$(grep -m 1 'version = ' Cargo.toml | cut -d '"' -f 2)
# Ensure CURRENT_VERSION is in semantic versioning format
if [[ ! "$CURRENT_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "CRITICAL ERROR: CURRENT_VERSION '$CURRENT_VERSION' is not in semantic versioning format (MAJOR.MINOR.PATCH)."
exit 1
fi
# Split version into components
IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION"
# Calculate new version based on bump type
case "$BUMP_TYPE" in
"major")
NEW_VERSION="$((MAJOR + 1)).0.0"
;;
"minor")
NEW_VERSION="${MAJOR}.$((MINOR + 1)).0"
;;
"patch")
NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))"
;;
esac
echo "New version will be: $NEW_VERSION"
echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT
- name: Set up Rust
run: |
rustup update stable && rustup default stable
- name: Cache Cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache Cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-index-
- name: Cache Cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-build-
- name: Install cargo-edit
run: cargo install cargo-edit
- name: Update version
run: cargo set-version ${{ steps.version.outputs.new_version }}
# Commit uses GIT_HUB_TOKEN which has permissions to push (set on actions/checkout)
- name: Commit and Push Changes
run: |
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
git add Cargo.toml
git add Cargo.lock
git commit -m "Bump crate version to ${{ steps.version.outputs.new_version }}"
git push
build-swift:
runs-on: macos-latest
needs: update-cargo-version
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Rust
run: |
rustup update stable && rustup default stable
- name: Cache Cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-registry-
- name: Cache Cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-index-
- name: Cache Cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-build-
- name: Install dependencies
run: |
cargo fetch
- name: Build the project (iOS)
run: ./build_swift.sh
- name: Checkout swift repo
uses: actions/checkout@v4
with:
repository: worldcoin/walletkit-swift
token: ${{ secrets.GIT_HUB_TOKEN }}
path: target-repo
- name: Commit swift build
env:
GITHUB_TOKEN: ${{ secrets.GIT_HUB_TOKEN }}
run: |
cp -r WalletKitCore.xcframework target-repo/
cp -r Sources/ target-repo/Sources
cp Package.swift target-repo/
cd target-repo
git config --global user.email "github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
git add .
git commit -m "Release ${{ needs.update-cargo-version.outputs.new_version }}"
# Tag the release
git tag ${{ needs.update-cargo-version.outputs.new_version }}
git push
git push origin ${{ needs.update-cargo-version.outputs.new_version }}
create-github-release:
needs: [update-cargo-version, build-swift]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Create Release in main repo
uses: softprops/action-gh-release@v2
with:
name: ${{ needs.update-cargo-version.outputs.new_version }}
tag_name: ${{ needs.update-cargo-version.outputs.new_version }}
generate_release_notes: true
make_latest: true
- name: Create Release in swift repo
uses: softprops/action-gh-release@v2
with:
repository: worldcoin/walletkit-swift
token: ${{ secrets.GIT_HUB_TOKEN }}
name: ${{ needs.update-cargo-version.outputs.new_version }}
tag_name: ${{ needs.update-cargo-version.outputs.new_version }}
body: |
## Version ${{ needs.update-cargo-version.outputs.new_version }}
For full release notes, see the [main repo release](https://github.com/worldcoin/walletkit/releases/tag/${{ needs.update-cargo-version.outputs.new_version }}).
make_latest: true