From acbef7f1aa2760eab183dc06303c77de377a0323 Mon Sep 17 00:00:00 2001 From: Isaac Rodriguez Date: Fri, 16 Jan 2026 13:40:59 -0800 Subject: [PATCH 1/3] feat: dynamically use the xcframework binary url to the package --- .github/workflows/release.yml | 52 ++++++++++++++----- archive_swift.sh | 95 +++++++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+), 12 deletions(-) create mode 100644 archive_swift.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4c53db43e..1be8b36a4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -52,7 +52,7 @@ jobs: runs-on: macos-latest needs: pre-release-checks permissions: - contents: read + contents: write steps: - name: Checkout code @@ -68,6 +68,10 @@ jobs: - name: Build the project (iOS) run: ./build_swift.sh + - name: Compress XCFramework binary + run: | + zip -r WalletKit.xcframework.zip + - name: Checkout swift repo uses: actions/checkout@v4 with: @@ -75,31 +79,55 @@ jobs: token: ${{ secrets.WALLETKIT_BOT_TOKEN }} path: target-repo + - name: Create draft release in walletkit-swift & upload binaries + uses: softprops/action-gh-release@v2 + id: release + with: + repository: worldcoin/walletkit-swift + name: ${{ needs.pre-release-checks.outputs.new_version }} + tag_name: ${{ needs.pre-release-checks.outputs.new_version }} + make_latest: false + draft: true + fail_on_unmatched_files: true + files: WalletKit.xcframework.zip + token: ${{ secrets.WALLETKIT_BOT_TOKEN }} + + - name: Get metadata + id: meta + run: | + CHECKSUM=$(swift package compute-checksum WalletKit.xcframework.zip) + echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT + outputs: + asset_url: ${{ fromJSON(steps.release.outputs.assets)[0].browser_download_url }} + checksum: ${{ steps.meta.outputs.checksum }} + - name: Commit swift build env: GITHUB_TOKEN: ${{ secrets.WALLETKIT_BOT_TOKEN }} + ASSET_URL: ${{ steps.meta.outputs.asset_url }} + CHECKSUM: ${{ steps.meta.outputs.checksum }} + NEW_VERSION: ${{ needs.pre-release-checks.outputs.new_version }} + run: | - cp -r WalletKit.xcframework target-repo/ + # Copy non-binary source files cp -r Sources/ target-repo/Sources + + # Prepare Package.swift + brew install swiftlint + ./archive_swift.sh --asset-url "$ASSET_URL" --checksum "$CHECKSUM" --release-version "$NEW_VERSION" cp Package.swift target-repo/ - echo "// Release version: ${{ needs.pre-release-checks.outputs.new_version }}" >> target-repo/Package.swift + # Commit changes cd target-repo git config --global user.email "github-actions[bot]@users.noreply.github.com" git config --global user.name "github-actions[bot]" - - # TODO: Move away from Git LFS which doesn't work well with Swift Package Manager - # Initialize Git LFS and track the large files - git lfs install - git lfs track "*.a" - git add . - git commit -m "Release ${{ needs.pre-release-checks.outputs.new_version }}" + git commit -m "Release $NEW_VERSION" # Tag the release - git tag ${{ needs.pre-release-checks.outputs.new_version }} + git tag $NEW_VERSION git push - git push origin ${{ needs.pre-release-checks.outputs.new_version }} + git push origin $NEW_VERSION prepare-kotlin: name: Prepare Kotlin diff --git a/archive_swift.sh b/archive_swift.sh new file mode 100644 index 000000000..98322f27c --- /dev/null +++ b/archive_swift.sh @@ -0,0 +1,95 @@ +#!/bin/bash +set -e + +# Creates the dynamic Package.swift file for release. +# Usage: ./archive_swift.sh --asset-url --checksum --release-version + +# Initialize variables +ASSET_URL="" +CHECKSUM="" +RELEASE_VERSION="" + +# Function to show usage +show_usage() { + echo "❌ Error: Missing required arguments" + echo "Usage: $0 --asset-url --checksum --release-version " + echo "" + echo "Example:" + echo " $0 --asset-url 'https://github.com/user/repo/releases/download/v1.0.0/WalletKit.xcframework.zip' --checksum 'abc123def456...' --release-version '1.0.0'" + exit 1 +} + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + --asset-url) + ASSET_URL="$2" + shift 2 + ;; + --checksum) + CHECKSUM="$2" + shift 2 + ;; + --release-version) + RELEASE_VERSION="$2" + shift 2 + ;; + -h|--help) + show_usage + ;; + *) + echo "❌ Unknown argument: $1" + show_usage + ;; + esac +done + +# Check if all required arguments are provided +if [ -z "$ASSET_URL" ] || [ -z "$CHECKSUM" ] || [ -z "$RELEASE_VERSION" ]; then + echo "❌ Error: All arguments are required" + show_usage +fi + +echo "🔧 Creating Package.swift with:" +echo " Asset URL: $ASSET_URL" +echo " Checksum: $CHECKSUM" +echo " Release Version: $RELEASE_VERSION" +echo "" + +cat > Package.swift << EOF +// swift-tools-version: 5.7 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Release version: $RELEASE_VERSION + +import PackageDescription + +let package = Package( + name: "WalletKit", + platforms: [ + .iOS(.v13) + ], + products: [ + .library( + name: "WalletKit", + targets: ["WalletKit"]), + ], + targets: [ + .target( + name: "WalletKit", + dependencies: ["WalletKitFFI"], + path: "Sources/WalletKit" + ), + .binaryTarget( + name: "WalletKit", + url: "$ASSET_URL", + checksum: "$CHECKSUM" + ) + ] +) +EOF + +swiftlint lint --autocorrect Package.swift + +echo "" +echo "✅ Package.swift built successfully for version $RELEASE_VERSION!" \ No newline at end of file From f459f404dc70d3e4b049ceba1d38747b3df79bc0 Mon Sep 17 00:00:00 2001 From: Isaac Rodriguez Date: Fri, 16 Jan 2026 14:01:34 -0800 Subject: [PATCH 2/3] wip --- .github/workflows/release.yml | 12 ++++++------ archive_swift.sh | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1be8b36a4..837b8cad1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -70,7 +70,7 @@ jobs: - name: Compress XCFramework binary run: | - zip -r WalletKit.xcframework.zip + zip -r WalletKit.xcframework.zip WalletKit.xcframework - name: Checkout swift repo uses: actions/checkout@v4 @@ -89,17 +89,17 @@ jobs: make_latest: false draft: true fail_on_unmatched_files: true - files: WalletKit.xcframework.zip + files: Walletit.xcframework.zip token: ${{ secrets.WALLETKIT_BOT_TOKEN }} - name: Get metadata id: meta run: | + ASSET_URL="${{ fromJSON(steps.release.outputs.assets)[0].url }}.zip" + echo "asset_url=${ASSET_URL}" >> $GITHUB_OUTPUT + CHECKSUM=$(swift package compute-checksum WalletKit.xcframework.zip) - echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT - outputs: - asset_url: ${{ fromJSON(steps.release.outputs.assets)[0].browser_download_url }} - checksum: ${{ steps.meta.outputs.checksum }} + echo "checksum=${CHECKSUM}" >> $GITHUB_OUTPUT - name: Commit swift build env: diff --git a/archive_swift.sh b/archive_swift.sh index 98322f27c..53e0e506f 100644 --- a/archive_swift.sh +++ b/archive_swift.sh @@ -77,11 +77,11 @@ let package = Package( targets: [ .target( name: "WalletKit", - dependencies: ["WalletKitFFI"], + dependencies: ["walletkit_FFI"], path: "Sources/WalletKit" ), .binaryTarget( - name: "WalletKit", + name: "walletkit_FFI", url: "$ASSET_URL", checksum: "$CHECKSUM" ) From 3ec00aa196240f717d98743a0143de03cbe53b49 Mon Sep 17 00:00:00 2001 From: Isaac Rodriguez Date: Fri, 16 Jan 2026 14:08:48 -0800 Subject: [PATCH 3/3] wip --- .github/workflows/release.yml | 4 ++-- Package.swift | 26 -------------------------- 2 files changed, 2 insertions(+), 28 deletions(-) delete mode 100644 Package.swift diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 837b8cad1..98636c7cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -89,13 +89,13 @@ jobs: make_latest: false draft: true fail_on_unmatched_files: true - files: Walletit.xcframework.zip + files: WalletKit.xcframework.zip token: ${{ secrets.WALLETKIT_BOT_TOKEN }} - name: Get metadata id: meta run: | - ASSET_URL="${{ fromJSON(steps.release.outputs.assets)[0].url }}.zip" + ASSET_URL="${{ fromJSON(steps.release.outputs.assets)[0].browser_download_url }}" echo "asset_url=${ASSET_URL}" >> $GITHUB_OUTPUT CHECKSUM=$(swift package compute-checksum WalletKit.xcframework.zip) diff --git a/Package.swift b/Package.swift deleted file mode 100644 index c4cdeb67d..000000000 --- a/Package.swift +++ /dev/null @@ -1,26 +0,0 @@ -// swift-tools-version: 5.7 -// The swift-tools-version declares the minimum version of Swift required to build this package. - -// The package must be installed from github.com/worldcoin/walletkit-swift - -import PackageDescription - -let package = Package( - name: "WalletKit", - platforms: [ - .iOS(.v13), - ], - products: [ - .library( - name: "WalletKit", - targets: ["WalletKit"]), - ], - dependencies: [], - targets: [ - .target( - name: "WalletKit", - dependencies: ["walletkit_FFI"] - ), - .binaryTarget(name: "walletkit_FFI", path: "WalletKit.xcframework") - ] -)