WIP #414
Workflow file for this run
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: Build | |
on: | |
push: | |
branches: | |
- release/* | |
- feature/* | |
- develop | |
- main | |
pull_request: | |
branches: | |
- release/* | |
- feature/* | |
- develop | |
- main | |
jobs: | |
build: | |
runs-on: macos-latest | |
continue-on-error: true | |
strategy: | |
matrix: | |
build-target: | |
# radix-engine-toolkit Crate | |
# - crate: radix-engine-toolkit | |
# target-triple: aarch64-apple-darwin | |
# custom-linker: "" | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: x86_64-apple-ios | |
# custom-linker: "" | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: x86_64-apple-darwin | |
# custom-linker: "" | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: aarch64-apple-ios | |
# custom-linker: "" | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: aarch64-apple-ios-sim | |
# custom-linker: "" | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: x86_64-pc-windows-gnu | |
# custom-linker: "" | |
# custom-compiler: x86_64-w64-mingw32-gcc | |
# custom-archiver: x86_64-w64-mingw32-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: x86_64-unknown-linux-gnu | |
# custom-linker: x86_64-unknown-linux-gnu-gcc | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: aarch64-unknown-linux-gnu | |
# custom-linker: aarch64-unknown-linux-gnu-gcc | |
# custom-compiler: aarch64-unknown-linux-gnu-gcc | |
# custom-archiver: aarch64-unknown-linux-gnu-gcc-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: i686-unknown-linux-gnu | |
# custom-linker: i686-unknown-linux-gnu-gcc | |
# custom-compiler: i686-unknown-linux-gnu-gcc | |
# custom-archiver: i686-unknown-linux-gnu-gcc-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: wasm32-unknown-unknown | |
# custom-linker: "" | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: aarch64-linux-android | |
# custom-linker: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang | |
# custom-compiler: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang | |
# custom-archiver: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: armv7-linux-androideabi | |
# custom-linker: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi19-clang | |
# custom-compiler: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi19-clang | |
# custom-archiver: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar | |
# - crate: radix-engine-toolkit | |
# target-triple: i686-linux-android | |
# custom-linker: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android19-clang | |
# custom-compiler: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android19-clang | |
# custom-archiver: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar | |
# # radix-engine-toolkit-uniffi Crate | |
- crate: radix-engine-toolkit-uniffi | |
target-triple: aarch64-apple-darwin | |
custom-linker: "" | |
custom-compiler: /usr/local/opt/llvm/bin/clang | |
custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
- crate: radix-engine-toolkit-uniffi | |
target-triple: x86_64-apple-ios | |
custom-linker: "" | |
custom-compiler: /usr/local/opt/llvm/bin/clang | |
custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
- crate: radix-engine-toolkit-uniffi | |
target-triple: x86_64-apple-darwin | |
custom-linker: "" | |
custom-compiler: /usr/local/opt/llvm/bin/clang | |
custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
- crate: radix-engine-toolkit-uniffi | |
target-triple: aarch64-apple-ios | |
custom-linker: "" | |
custom-compiler: /usr/local/opt/llvm/bin/clang | |
custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
- crate: radix-engine-toolkit-uniffi | |
target-triple: aarch64-apple-ios-sim | |
custom-linker: "" | |
custom-compiler: /usr/local/opt/llvm/bin/clang | |
custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: x86_64-pc-windows-gnu | |
# custom-linker: "" | |
# custom-compiler: x86_64-w64-mingw32-gcc | |
# custom-archiver: x86_64-w64-mingw32-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: x86_64-unknown-linux-gnu | |
# custom-linker: x86_64-unknown-linux-gnu-gcc | |
# custom-compiler: /usr/local/opt/llvm/bin/clang | |
# custom-archiver: /usr/local/opt/llvm/bin/llvm-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: aarch64-unknown-linux-gnu | |
# custom-linker: aarch64-unknown-linux-gnu-gcc | |
# custom-compiler: aarch64-unknown-linux-gnu-gcc | |
# custom-archiver: aarch64-unknown-linux-gnu-gcc-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: i686-unknown-linux-gnu | |
# custom-linker: i686-unknown-linux-gnu-gcc | |
# custom-compiler: i686-unknown-linux-gnu-gcc | |
# custom-archiver: i686-unknown-linux-gnu-gcc-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: aarch64-linux-android | |
# custom-linker: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang | |
# custom-compiler: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang | |
# custom-archiver: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: armv7-linux-androideabi | |
# custom-linker: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi19-clang | |
# custom-compiler: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi19-clang | |
# custom-archiver: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar | |
# - crate: radix-engine-toolkit-uniffi | |
# target-triple: i686-linux-android | |
# custom-linker: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android19-clang | |
# custom-compiler: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android19-clang | |
# custom-archiver: /usr/local/share/android-ndk/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-ar | |
steps: | |
- uses: FranzDiebold/github-env-vars-action@v2 | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Build Dependencies | |
run: | | |
brew tap SergioBenitez/osxct | |
brew install llvm | |
brew install x86_64-unknown-linux-gnu | |
brew install mingw-w64 | |
brew install --cask android-ndk | |
brew tap messense/macos-cross-toolchains | |
brew install aarch64-unknown-linux-gnu | |
brew install i686-unknown-linux-gnu | |
- name: Install Rust Toolchain | |
run: | | |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup.sh | |
chmod +x rustup.sh | |
./rustup.sh -y | |
rustup update | |
rustup toolchain install nightly | |
- name: Install Rust Targets | |
run: | | |
rustup target install ${{ matrix.build-target.target-triple }} | |
rustup +nightly target install ${{ matrix.build-target.target-triple }} | |
rustup component add rust-src --toolchain nightly-x86_64-apple-darwin | |
- name: Building Toolkit | |
run: | | |
( | |
export CURRENT_DIRECTORY=$(pwd) | |
export CRATE_PATH="$CURRENT_DIRECTORY/${{matrix.build-target.crate}}" | |
cd $CRATE_PATH | |
export LINKER_ENVIRONMENT_VARIABLE="CARGO_TARGET_"$(echo ${{ matrix.build-target.target-triple }} | tr '[:lower:]' '[:upper:]' | sed 's/-/_/g')"_LINKER" | |
if [ ! -z "${{ matrix.build-target.custom-linker }}" ] | |
then | |
export $LINKER_ENVIRONMENT_VARIABLE=${{ matrix.build-target.custom-linker }} | |
fi | |
export CC=${{ matrix.build-target.custom-compiler }} | |
export AR=${{ matrix.build-target.custom-archiver }} | |
cargo +nightly build \ | |
-Z build-std=std,panic_abort \ | |
-Z build-std-features=panic_immediate_abort \ | |
--target ${{ matrix.build-target.target-triple }} \ | |
--release | |
unset $LINKER_ENVIRONMENT_VARIABLE | |
export CC="/usr/local/opt/llvm/bin/clang" | |
export AR="/usr/local/opt/llvm/bin/llvm-ar" | |
if [ "${{matrix.build-target.crate}}" == "radix-engine-toolkit" ]; then | |
INCLUDE_DIRECTORY_PATH="$CRATE_PATH/target/${{ matrix.build-target.target-triple }}/release/include" | |
mkdir $INCLUDE_DIRECTORY_PATH | |
rustup default nightly | |
cbindgen \ | |
--lang c \ | |
--config cbindgen.toml \ | |
--output "$INCLUDE_DIRECTORY_PATH/libradix_engine_toolkit.h" | |
rustup default stable | |
echo "module RadixEngineToolkit {" > "$INCLUDE_DIRECTORY_PATH/module.modulemap" | |
echo " umbrella header \"libradix_engine_toolkit.h\"" >> "$INCLUDE_DIRECTORY_PATH/module.modulemap" | |
echo " export *" >> "$INCLUDE_DIRECTORY_PATH/module.modulemap" | |
echo "}" >> "$INCLUDE_DIRECTORY_PATH/module.modulemap" | |
fi | |
( | |
BUILD_PATH="$CRATE_PATH/target/${{ matrix.build-target.target-triple }}/release" | |
cd $BUILD_PATH | |
BUILD_ARTIFACTS_PATH=$(find . -type f \( -name "*.a" -o -name "*.dylib" -o -name "*.dll" -o -name "*.so" -o -name "*.d" -o -name "*.wasm" \) -maxdepth 1) | |
if [ "${{matrix.build-target.crate}}" == "radix-engine-toolkit" ]; then | |
tar -czf "./${{ matrix.build-target.target-triple }}.tar.gz" $BUILD_ARTIFACTS_PATH ./include | |
else | |
tar -czf "./${{ matrix.build-target.target-triple }}.tar.gz" $BUILD_ARTIFACTS_PATH | |
fi | |
) | |
) | |
- name: Upload Build Artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "${{ matrix.build-target.crate }}-${{ matrix.build-target.target-triple }}" | |
path: "./${{matrix.build-target.crate}}/target/${{ matrix.build-target.target-triple }}/release/${{ matrix.build-target.target-triple }}.tar.gz" | |
create-uniffi-bindings: | |
needs: [build] | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Extracting the Library | |
run: | | |
mkdir extracted | |
cd radix-engine-toolkit-uniffi-x86_64-apple-darwin | |
tar -xvzf x86_64-apple-darwin.tar.gz --directory="../extracted" | |
working-directory: artifacts | |
- name: Generate the Bindings | |
run: | | |
cargo run \ | |
--manifest-path="../../uniffi-bindgen/Cargo.toml" -- \ | |
generate ../../radix-engine-toolkit-uniffi/src/radix_engine_toolkit_uniffi.udl \ | |
--language swift \ | |
--out-dir ./output \ | |
--lib-file ./libradix_engine_toolkit_uniffi.a | |
cargo run \ | |
--manifest-path="../../uniffi-bindgen/Cargo.toml" -- \ | |
generate ../../radix-engine-toolkit-uniffi/src/radix_engine_toolkit_uniffi.udl \ | |
--language kotlin \ | |
--out-dir ./output \ | |
--lib-file ./libradix_engine_toolkit_uniffi.a | |
working-directory: artifacts/extracted | |
- name: Compress Artifacts | |
run: | | |
tar -czf "./UniFFI-Bindings.tar.gz" ./output | |
working-directory: artifacts/extracted | |
- name: Upload Bindings | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "UniFFI-Bindings" | |
path: "./artifacts/extracted/UniFFI-Bindings.tar.gz" | |
build-test-kit: | |
needs: [build] | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Run Generator | |
run: cargo run | |
working-directory: generator | |
- name: Compress Generated | |
run: tar -czf "./test-kit.tar.gz" ./output | |
working-directory: generator | |
- name: Upload Generated Artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "test-kit.tar.gz" | |
path: "./generator/test-kit.tar.gz" | |
publish-swift-spm: | |
needs: [build, create-uniffi-bindings] | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Build XCFramework | |
working-directory: artifacts | |
run: | | |
# The name of the crate that we will be creating the XCFramework and the bindings for. | |
CRATE_NAME="radix-engine-toolkit-uniffi" | |
# The name of the directory to write the extracted libraries in. | |
EXTRACTED="extracted" | |
mkdir $EXTRACTED | |
# Extract the UniFFI Bindings | |
mkdir $EXTRACTED/UniFFI-Bindings | |
tar -xvzf "UniFFI-Bindings/UniFFI-Bindings.tar.gz" --directory="./$EXTRACTED/UniFFI-Bindings" | |
# Creating the include directory - this will be used in the XCFramework build steps | |
mkdir $EXTRACTED/include | |
cp $EXTRACTED/UniFFI-Bindings/output/radix_engine_toolkit_uniffiFFI.modulemap $EXTRACTED/include/module.moduplemap | |
cp $EXTRACTED/UniFFI-Bindings/output/radix_engine_toolkit_uniffiFFI.h $EXTRACTED/include/radix_engine_toolkit_uniffiFFI.h | |
# Extract the builds of the targets that we need. All of them have a common known pattern which | |
# we depend on for the extraction: `${CRATE_NAME}-${TARGET_TRIPLE}`. | |
for TARGET_TRIPLE in "aarch64-apple-darwin" "x86_64-apple-darwin" "aarch64-apple-ios-sim" "x86_64-apple-ios" "aarch64-apple-ios" | |
do | |
# Create a new directory for the target | |
mkdir $EXTRACTED/$TARGET_TRIPLE; | |
BUILD_ARTIFACT="$CRATE_NAME-$TARGET_TRIPLE" | |
tar -xvzf "$BUILD_ARTIFACT/$TARGET_TRIPLE.tar.gz" --directory="./$EXTRACTED/$TARGET_TRIPLE" | |
done | |
rm -rf ./$EXTRACTED/*.tar.gz | |
# Using Lipo to combine some of the libraries into fat libraries. | |
mkdir ./$EXTRACTED/macos-arm64_x86_64/ | |
mkdir ./$EXTRACTED/ios-simulator-arm64_x86_64 | |
lipo -create \ | |
"./$EXTRACTED/aarch64-apple-darwin/libradix_engine_toolkit_uniffi.a" \ | |
"./$EXTRACTED/x86_64-apple-darwin/libradix_engine_toolkit_uniffi.a" \ | |
-o "./$EXTRACTED/macos-arm64_x86_64/libradix_engine_toolkit_uniffi.a" | |
lipo -create \ | |
"./$EXTRACTED/aarch64-apple-ios-sim/libradix_engine_toolkit_uniffi.a" \ | |
"./$EXTRACTED/x86_64-apple-ios/libradix_engine_toolkit_uniffi.a" \ | |
-o "./$EXTRACTED/ios-simulator-arm64_x86_64/libradix_engine_toolkit_uniffi.a" | |
# Creating the XCFramework | |
xcodebuild -create-xcframework \ | |
-library "./$EXTRACTED/aarch64-apple-ios/libradix_engine_toolkit_uniffi.a" \ | |
-headers "./$EXTRACTED/include" \ | |
-library "./$EXTRACTED/macos-arm64_x86_64/libradix_engine_toolkit_uniffi.a" \ | |
-headers "./$EXTRACTED/include" \ | |
-library "./$EXTRACTED/ios-simulator-arm64_x86_64/libradix_engine_toolkit_uniffi.a" \ | |
-headers "./$EXTRACTED/include" \ | |
-output "./$EXTRACTED/RadixEngineToolkitUniFFI.xcframework" | |
# TODO: We have now built the XCFramework and we're ready to build a Swift package of it | |
# + the UniFFI bindings | |
publish-csharp-nuget: | |
needs: [build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Extract Artifacts | |
working-directory: artifacts | |
run: | | |
mkdir native | |
for d in radix-engine-toolkit-*; do | |
mv ./$d/* ./native/ | |
done | |
cd native | |
for f in *.tar.gz; do | |
fn=`echo "$f" | cut -d'.' -f 1` | |
mkdir "$fn" | |
tar -xvzf "$f" --directory="$fn"; | |
done | |
- name: Setup .NET SDK | |
uses: actions/setup-dotnet@5a3fa01c67e60dba8f95e2878436c7151c4b5f01 | |
with: | |
dotnet-version: 7.0.x | |
- name: Configure Version | |
run: | | |
CI_RUN_NUMBER=${{ github.run_number }} | |
GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD | sed 's/\//-/g') | |
GIT_COMMIT=$(git log -1 --format=%h ) | |
CORE_VERSION=$(cat radix-engine-toolkit-core/Cargo.toml | grep -e '^version' | cut -d'"' -f 2) | |
VERSION_SUFFIX=build.${CI_RUN_NUMBER} | |
VERSION=${CORE_VERSION}-${VERSION_SUFFIX} | |
if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then | |
VERSION=${CORE_VERSION} | |
fi | |
sed -i "s/\(<version>\)[^<>]*\(<\/version>\)/\1$VERSION\2/g" interop/csharp/RadixDlt.RadixEngineToolkit.Native.nuspec | |
echo "Configured Version: $VERSION" | |
- name: NuGet Pack | |
working-directory: interop/csharp | |
run: nuget pack | |
- name: Publish Packages | |
working-directory: interop/csharp | |
run: dotnet nuget push RadixDlt.RadixEngineToolkit.Native.*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_ORG_API_KEY }} |