Add publish-spm github actions workflow
This commit is contained in:
parent
7ba5f3757d
commit
beca56ba3c
117
.github/workflows/publish-spm.yaml
vendored
Normal file
117
.github/workflows/publish-spm.yaml
vendored
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
name: Build, tag and create release
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
branch:
|
||||||
|
description: 'Release branch, eg. release/0.MINOR'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
version:
|
||||||
|
description: 'New release version, eg. 0.MINOR.PATCH'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-publish:
|
||||||
|
name: Build, tag and create release
|
||||||
|
runs-on: macos-12
|
||||||
|
steps:
|
||||||
|
- name: Checkout release branch
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
ref: ${{ inputs.branch }}
|
||||||
|
submodules: true
|
||||||
|
|
||||||
|
- name: Cache
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/registry
|
||||||
|
~/.cargo/git
|
||||||
|
./bdk-ffi/target
|
||||||
|
key: ${{ runner.os }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
|
||||||
|
|
||||||
|
- name: Install Rust targets
|
||||||
|
run: |
|
||||||
|
rustup install nightly-x86_64-apple-darwin
|
||||||
|
rustup component add rust-src --toolchain nightly-x86_64-apple-darwin
|
||||||
|
rustup target add aarch64-apple-ios x86_64-apple-ios
|
||||||
|
rustup target add aarch64-apple-ios-sim --toolchain nightly
|
||||||
|
rustup target add aarch64-apple-darwin x86_64-apple-darwin
|
||||||
|
|
||||||
|
- name: Run bdk-ffi-bindgen
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
cargo run --package bdk-ffi-bindgen -- --language swift --out-dir ../Sources/BitcoinDevKit
|
||||||
|
|
||||||
|
- name: Build bdk-ffi for x86_64-apple-darwin
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
cargo build --release --target x86_64-apple-darwin
|
||||||
|
|
||||||
|
- name: Build bdk-ffi for aarch64-apple-darwin
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
cargo build --release --target aarch64-apple-darwin
|
||||||
|
|
||||||
|
- name: Build bdk-ffi for x86_64-apple-ios
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
cargo build --release --target x86_64-apple-ios
|
||||||
|
|
||||||
|
- name: Build bdk-ffi for aarch64-apple-ios
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
cargo build --release --target aarch64-apple-ios
|
||||||
|
|
||||||
|
- name: Build bdk-ffi for aarch64-apple-ios-sim
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
cargo +nightly build --release -Z build-std --target aarch64-apple-ios-sim
|
||||||
|
|
||||||
|
- name: Create lipo-ios-sim and lipo-macos
|
||||||
|
working-directory: bdk-ffi
|
||||||
|
run: |
|
||||||
|
mkdir -p target/lipo-ios-sim/release
|
||||||
|
lipo target/aarch64-apple-ios-sim/release/libbdkffi.a target/x86_64-apple-ios/release/libbdkffi.a -create -output target/lipo-ios-sim/release/libbdkffi.a
|
||||||
|
mkdir -p target/lipo-macos/release
|
||||||
|
lipo target/aarch64-apple-darwin/release/libbdkffi.a target/x86_64-apple-darwin/release/libbdkffi.a -create -output target/lipo-macos/release/libbdkffi.a
|
||||||
|
|
||||||
|
- name: Create bdkFFI.xcframework
|
||||||
|
run: |
|
||||||
|
mv Sources/BitcoinDevKit/bdk.swift Sources/BitcoinDevKit/BitcoinDevKit.swift
|
||||||
|
cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/ios-arm64/bdkFFI.framework/Headers
|
||||||
|
cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/Headers
|
||||||
|
cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Headers
|
||||||
|
cp bdk-ffi/target/aarch64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64/bdkFFI.framework/bdkFFI
|
||||||
|
cp bdk-ffi/target/lipo-ios-sim/release/libbdkffi.a bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/bdkFFI
|
||||||
|
cp bdk-ffi/target/lipo-macos/release/libbdkffi.a bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/bdkFFI
|
||||||
|
rm Sources/BitcoinDevKit/bdkFFI.h
|
||||||
|
rm Sources/BitcoinDevkit/bdkFFI.modulemap
|
||||||
|
rm bdkFFI.xcframework.zip || true
|
||||||
|
zip -9 -r bdkFFI.xcframework.zip bdkFFI.xcframework
|
||||||
|
echo "BDKFFICHECKSUM=`swift package compute-checksum bdkFFI.xcframework.zip`" >> $GITHUB_ENV
|
||||||
|
echo "BDKFFIURL=https\:\/\/github\.com\/${{ github.repository_owner }}\/bdk\-swift\/releases\/download\/${{ inputs.version }}\/bdkFFI\.xcframework\.zip" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Update, commit, and push new Package.swift
|
||||||
|
run: |
|
||||||
|
echo checksum = ${{ env.BDKFFICHECKSUM }}
|
||||||
|
echo url = ${{ env.BDKFFIURL }}
|
||||||
|
sed "s/BDKFFICHECKSUM/${BDKFFICHECKSUM}/;s/BDKFFIURL/${BDKFFIURL}/" Package.swift.txt > Package.swift
|
||||||
|
git add Package.swift
|
||||||
|
git commit -m "Update Package.swift for release ${{ inputs.version }}"
|
||||||
|
git push
|
||||||
|
|
||||||
|
- name: Tag new release
|
||||||
|
run: |
|
||||||
|
git tag ${{ inputs.version }} -m "Release ${{ inputs.version }}"
|
||||||
|
git push --tags
|
||||||
|
|
||||||
|
- name: Publish release
|
||||||
|
uses: ncipollo/release-action@v1
|
||||||
|
with:
|
||||||
|
artifacts: "bdkFFI.xcframework.zip"
|
||||||
|
tag: ${{ inputs.version }}
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
name: Release ${{ inputs.version }}
|
||||||
|
prerelease: true
|
36
Package.swift.txt
Normal file
36
Package.swift.txt
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// swift-tools-version:5.5
|
||||||
|
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
||||||
|
|
||||||
|
import PackageDescription
|
||||||
|
|
||||||
|
let package = Package(
|
||||||
|
name: "bdk-swift",
|
||||||
|
platforms: [
|
||||||
|
.macOS(.v12),
|
||||||
|
.iOS(.v15)
|
||||||
|
],
|
||||||
|
products: [
|
||||||
|
// Products define the executables and libraries a package produces, and make them visible to other packages.
|
||||||
|
.library(
|
||||||
|
name: "BitcoinDevKit",
|
||||||
|
targets: ["bdkFFI", "BitcoinDevKit"]),
|
||||||
|
],
|
||||||
|
dependencies: [
|
||||||
|
// Dependencies declare other packages that this package depends on.
|
||||||
|
// .package(url: /* package url */, from: "1.0.0"),
|
||||||
|
],
|
||||||
|
targets: [
|
||||||
|
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
|
||||||
|
// Targets can depend on other targets in this package, and on products in packages this package depends on.
|
||||||
|
.binaryTarget(
|
||||||
|
name: "bdkFFI",
|
||||||
|
url: "BDKFFIURL",
|
||||||
|
checksum: "BDKFFICHECKSUM"),
|
||||||
|
.target(
|
||||||
|
name: "BitcoinDevKit",
|
||||||
|
dependencies: ["bdkFFI"]),
|
||||||
|
.testTarget(
|
||||||
|
name: "BitcoinDevKitTests",
|
||||||
|
dependencies: ["BitcoinDevKit"]),
|
||||||
|
]
|
||||||
|
)
|
76
build.sh
76
build.sh
@ -1,76 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
## confirm bdk-ffi rust lib builds
|
|
||||||
pushd bdk-ffi
|
|
||||||
echo "Confirm bdk-ffi rust lib builds"
|
|
||||||
cargo build --release
|
|
||||||
|
|
||||||
echo "Generate bdk-ffi swift bindings"
|
|
||||||
cargo run --package bdk-ffi-bindgen -- --language swift --out-dir ../Sources/BitcoinDevKit
|
|
||||||
|
|
||||||
## build bdk-ffi rust libs for apple targets and add to xcframework
|
|
||||||
echo "Build bdk-ffi libs for apple targets and add to xcframework"
|
|
||||||
|
|
||||||
TARGET_TRIPLES=("x86_64-apple-darwin" "aarch64-apple-darwin" "x86_64-apple-ios" "aarch64-apple-ios")
|
|
||||||
#XCFRAMEWORK_LIBS=""
|
|
||||||
for TARGET in ${TARGET_TRIPLES[@]}; do
|
|
||||||
echo "Build bdk-ffi lib for target $TARGET"
|
|
||||||
cargo build --release --target $TARGET
|
|
||||||
#XCFRAMEWORK_LIBS="$XCFRAMEWORK_LIBS -library target/$TARGET/release/libbdkffi.a"
|
|
||||||
done
|
|
||||||
# special build for M1 ios simulator
|
|
||||||
cargo +nightly build --release -Z build-std --target aarch64-apple-ios-sim
|
|
||||||
|
|
||||||
echo "Create lipo static libs for ios-sim to support M1"
|
|
||||||
mkdir -p target/lipo-ios-sim/release
|
|
||||||
lipo target/aarch64-apple-ios-sim/release/libbdkffi.a target/x86_64-apple-ios/release/libbdkffi.a -create -output target/lipo-ios-sim/release/libbdkffi.a
|
|
||||||
|
|
||||||
echo "Create lipo static libs for macos to support M1"
|
|
||||||
mkdir -p target/lipo-macos/release
|
|
||||||
lipo target/aarch64-apple-darwin/release/libbdkffi.a target/x86_64-apple-darwin/release/libbdkffi.a -create -output target/lipo-macos/release/libbdkffi.a
|
|
||||||
|
|
||||||
#echo "Create xcframework with xcodebuild"
|
|
||||||
#xcodebuild -create-xcframework \
|
|
||||||
# -library target/lipo-ios-sim/release/libbdkffi.a \
|
|
||||||
# -library target/lipo-macos/release/libbdkffi.a \
|
|
||||||
# -library target/aarch64-apple-ios/release/libbdkffi.a \
|
|
||||||
# -output ../bdkFFI.xcframework
|
|
||||||
|
|
||||||
popd
|
|
||||||
|
|
||||||
# rename bdk.swift bindings to BitcoinDevKit.swift
|
|
||||||
mv Sources/BitcoinDevKit/bdk.swift Sources/BitcoinDevKit/BitcoinDevKit.swift
|
|
||||||
|
|
||||||
XCFRAMEWORK_LIBS=("ios-arm64" "ios-arm64_x86_64-simulator" "macos-arm64_x86_64")
|
|
||||||
for LIB in ${XCFRAMEWORK_LIBS[@]}; do
|
|
||||||
# copy possibly updated header file
|
|
||||||
cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/$LIB/bdkFFI.framework/Headers
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Copy libbdkffi.a files to bdkFFI.xcframework/bdkFFI"
|
|
||||||
cp bdk-ffi/target/aarch64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64/bdkFFI.framework/bdkFFI
|
|
||||||
cp bdk-ffi/target/lipo-ios-sim/release/libbdkffi.a bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/bdkFFI
|
|
||||||
cp bdk-ffi/target/lipo-macos/release/libbdkffi.a bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/bdkFFI
|
|
||||||
|
|
||||||
# remove unneed .h and .modulemap files
|
|
||||||
rm Sources/BitcoinDevKit/bdkFFI.h
|
|
||||||
rm Sources/BitcoinDevkit/bdkFFI.modulemap
|
|
||||||
|
|
||||||
# TODO add license info
|
|
||||||
|
|
||||||
if test -f "bdkFFI.xcframework.zip"; then
|
|
||||||
echo "Remove old bdkFFI.xcframework.zip"
|
|
||||||
rm bdkFFI.xcframework.zip
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# zip bdkFFI.xcframework directory into a bundle for distribution
|
|
||||||
zip -9 -r bdkFFI.xcframework.zip bdkFFI.xcframework
|
|
||||||
|
|
||||||
# compute bdkFFI.xcframework.zip checksum
|
|
||||||
echo checksum:
|
|
||||||
swift package compute-checksum bdkFFI.xcframework.zip
|
|
||||||
|
|
||||||
# TODO update Package.swift with checksum
|
|
||||||
# TODO upload zip to github release
|
|
Loading…
x
Reference in New Issue
Block a user