Skip to content

Commit

Permalink
CI for builds (#1)
Browse files Browse the repository at this point in the history
CI for Builds
  • Loading branch information
0xOmarA committed Jun 19, 2023
1 parent 0f9cf59 commit c9be1af
Show file tree
Hide file tree
Showing 7 changed files with 429 additions and 1 deletion.
314 changes: 314 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,314 @@
name: Build

on:
push:
branches:
- release/*
- develop
- main
pull_request:
branches:
- release/*
- develop
- main

jobs:
build:
runs-on: macos-latest
continue-on-error: true
strategy:
matrix:
build-target:
# native-json-library Crate
- crate: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
target-triple: x86_64-pc-windows-gnu
custom-linker: ""
custom-compiler: x86_64-w64-mingw32-gcc
custom-archiver: x86_64-w64-mingw32-ar
- crate: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
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: native-json-library
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"
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"
(
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)
tar -czf "./${{ matrix.build-target.target-triple }}.tar.gz" $BUILD_ARTIFACTS_PATH ./include
)
)
- name: Upload Build Artifacts
uses: actions/upload-artifact@v3
with:
name: "${{ matrix.build-target.crate }}-${{ matrix.build-target.target-triple }}.tar.gz"
path: "./${{matrix.build-target.crate}}/target/${{ matrix.build-target.target-triple }}/release/${{ matrix.build-target.target-triple }}.tar.gz"

build-xc-framework:
needs: [build]
runs-on: macos-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 native-json-library-*.tar.gz; 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: Building XCFramework
working-directory: artifacts
run: |
cd native
# The name of the crate that we are building
CRATE_NAME="native-json-library"
# Creating the two directories where the temporary FAT libraries will be stored
mkdir ./macos-arm64_x86_64/
mkdir ./ios-simulator-arm64_x86_64
# Creating the fat libraries
lipo -create \
"./aarch64-apple-darwin/libradix_engine_toolkit.a" \
"./x86_64-apple-darwin/libradix_engine_toolkit.a" \
-o "./macos-arm64_x86_64/libradix_engine_toolkit.a"
lipo -create \
"./aarch64-apple-ios-sim/libradix_engine_toolkit.a" \
"./x86_64-apple-ios/libradix_engine_toolkit.a" \
-o "./ios-simulator-arm64_x86_64/libradix_engine_toolkit.a"
# Copying the "include" directory from its origin into the fat library directory
cp -r ./aarch64-apple-darwin/include ./macos-arm64_x86_64/
cp -r ./aarch64-apple-ios-sim/include ./ios-simulator-arm64_x86_64/
# Creating the XC Framework
xcodebuild -create-xcframework \
-library "./aarch64-apple-ios/libradix_engine_toolkit.a" \
-headers "./aarch64-apple-ios/include" \
-library "./macos-arm64_x86_64/libradix_engine_toolkit.a" \
-headers "./macos-arm64_x86_64/include" \
-library "./ios-simulator-arm64_x86_64/libradix_engine_toolkit.a" \
-headers "./ios-simulator-arm64_x86_64/include" \
-output "./RadixEngineToolkit.xcframework"
tar -czf "./RadixEngineToolkit.xcframework.tar.gz" ./RadixEngineToolkit.xcframework
- name: Upload Build Artifacts
uses: actions/upload-artifact@v3
with:
name: "RadixEngineToolkit.xcframework.tar.gz"
path: "./artifacts/native/RadixEngineToolkit.xcframework.tar.gz"

build-test-pack:
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-pack.tar.gz" ./output
working-directory: generator
- name: Upload Generated Artifacts
uses: actions/upload-artifact@v3
with:
name: "test-pack.tar.gz"
path: "./generator/test-pack.tar.gz"

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 native-json-library-*.tar.gz; 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/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 }}
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"cSpell.words": [
"adapanet",
"ansharnet",
"archiver",
"Devopsnet",
"dumunet",
"enkinet",
Expand Down
26 changes: 26 additions & 0 deletions csharp/RadixDlt.RadixEngineToolkit.Native.nuspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>RadixDlt.RadixEngineToolkit.Native</id>
<version>0.0.0</version> <!-- replaced by CI pipeline -->
<authors>Radix Publishing</authors>
<owners>Radix Publishing</owners>
<license type="expression">Apache-2.0</license>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<repository type="git" url="https://github.com/radixdlt/radix-engine-toolkit" commit="34cb99c742cdf028ff05ec25f1132aeac2b5338f" /> <!-- TODO make it dynamic! -->
<description>Multiplatform native library that exposes a set of functions to help clients written in languages other than Rust compile and decompile transactions, perform SBOR encoding and decoding, derive virtual account and virtual badge addresses, and other functionalities.</description>
<tags>radix sbor</tags>
</metadata>
<files>
<file src="../../artifacts/native/x86_64-unknown-linux-gnu/libradix_engine_toolkit.so" target="runtimes/linux-x64/native/libradix_engine_toolkit.so" />
<file src="../../artifacts/native/i686-unknown-linux-gnu/libradix_engine_toolkit.so" target="runtimes/linux-x32/native/libradix_engine_toolkit.so" />
<file src="../../artifacts/native/aarch64-unknown-linux-gnu/libradix_engine_toolkit.so" target="runtimes/linux-arm64/native/libradix_engine_toolkit.so" />

<file src="../../artifacts/native/x86_64-apple-darwin/libradix_engine_toolkit.dylib" target="runtimes/osx-x64/native/libradix_engine_toolkit.dylib" />
<file src="../../artifacts/native/aarch64-apple-darwin/libradix_engine_toolkit.dylib" target="runtimes/osx-arm64/native/libradix_engine_toolkit.dylib" />

<file src="../../artifacts/native/x86_64-pc-windows-gnu/radix_engine_toolkit.dll" target="runtimes/win-x64/native/radix_engine_toolkit.dll" />

<file src="RadixDlt.RadixEngineToolkit.Native.targets" target="build/netstandard1.0" />
</files>
</package>
Loading

0 comments on commit c9be1af

Please sign in to comment.