Building for aarch64 on x64 macos #580
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: CI | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- "*" | |
pull_request: | |
jobs: | |
# Check formatting and run clippy lints | |
linting: | |
strategy: | |
fail-fast: false | |
matrix: | |
rust: | |
- stable | |
- beta | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ matrix.rust }} | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
components: rustfmt, clippy | |
- name: Format | |
run: cargo fmt --all -- --check | |
- name: Clippy | |
run: cargo clippy -- -D warnings | |
# Build the workspace with the feature permutations not built by default | |
features: | |
strategy: | |
fail-fast: false | |
matrix: | |
feature-args: | |
- "--no-default-features" | |
- "--no-default-features --features serial" | |
- "--no-default-features --features tls" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ matrix.rust }} | |
uses: dtolnay/rust-toolchain@stable | |
- name: Build the workspace with the features | |
run: cargo build --release ${{ matrix.feature-args }} | |
# Run the unit tests on Windows and Linux | |
test: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- windows-latest | |
rust: | |
- stable | |
- beta | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust ${{ matrix.rust }} | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.rust }} | |
- name: Run Rust unit tests | |
run: cargo test | |
# Build API documentation packages | |
documentation: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install doxygen 1.9.5 | |
run: wget -q https://github.com/stepfunc/ci-files/raw/main/doxygen/doxygen-1.9.5.linux.bin.tar.gz -O- | sudo tar --strip-components=1 -C /usr -xz doxygen-1.9.5 | |
- name: Build FFI and JNI | |
run: cargo build --release -p rodbus-ffi -p rodbus-ffi-java | |
- name: Build Rustdoc | |
run: cargo doc -p rodbus --no-deps | |
- name: C bindings | |
run: cargo run --bin rodbus-bindings -- --c --doxygen --no-tests | |
- name: .NET bindings | |
run: cargo run --bin rodbus-bindings -- --dotnet --doxygen --no-tests | |
- name: Java bindings | |
run: cargo run --bin rodbus-bindings -- --java | |
- name: Extract documentation | |
run: | | |
mkdir -p ~/doc | |
cp -a target/doc ~/doc/rust | |
cp -a ffi/bindings/c/generated/doc/c ~/doc/c | |
cp -a ffi/bindings/c/generated/doc/cpp ~/doc/cpp | |
cp -a ffi/bindings/dotnet/rodbus/doc ~/doc/dotnet | |
cp -a ffi/bindings/java/rodbus/target/apidocs ~/doc/java | |
rm ffi/bindings/c/generated/logo.png ffi/bindings/c/generated/doxygen-awesome.css | |
- name: Upload documentation | |
uses: actions/upload-artifact@v3 | |
with: | |
name: doc | |
path: ~/doc | |
# Build bindings on Windows x64 [64-bit MSVC (Windows 7+) (x86_64-pc-windows-msvc)] and x86 [32-bit MSVC (Windows 7+) (i686-pc-windows-msvc)] | |
bindings-windows: | |
runs-on: windows-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- target: x86_64-pc-windows-msvc # 64-bit MSVC (Windows 7+) | |
test: true | |
- target: i686-pc-windows-msvc # 32-bit MSVC (Windows 7+) | |
test: false | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Create the FFI modules dir | |
run: mkdir ffi-modules\${{ matrix.target }} | |
- name: Build FFI | |
run: cargo build -p rodbus-ffi --release --target ${{ matrix.target }} --message-format json | Out-File -encoding "UTF8" .\ffi-modules\${{ matrix.target }}\build.ffi.log | |
- name: Build JNI | |
run: cargo build -p rodbus-ffi-java --release --target ${{ matrix.target }} --message-format json | Out-File -encoding "UTF8" .\ffi-modules\${{ matrix.target }}\build.jni.log | |
- name: Copy the FFI and JNI libs | |
shell: pwsh | |
run: | | |
Copy-Item -Path ./target/${{ matrix.target }}/release/rodbus_ffi.dll -Destination ffi-modules/${{ matrix.target }} | |
Copy-Item -Path ./target/${{ matrix.target }}/release/rodbus_ffi.dll.lib -Destination ffi-modules/${{ matrix.target }} | |
Copy-Item -Path ./target/${{ matrix.target }}/release/rodbus_ffi_java.dll -Destination ffi-modules/${{ matrix.target }} | |
- name: Upload compiled FFI modules | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ffi-modules | |
path: ffi-modules | |
- name: C Bindings Tests | |
if: ${{ matrix.test }} | |
run: cargo run --bin rodbus-bindings -- --c -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release | |
- name: Test .NET Bindings | |
if: ${{ matrix.test }} | |
run: cargo run --bin rodbus-bindings -- --dotnet -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release | |
- name: Test Java Bindings | |
if: ${{ matrix.test }} | |
run: cargo run --bin rodbus-bindings -- --java -r ${{ matrix.target }} -a ./target/${{ matrix.target }}/release | |
# Build bindings on MacOS [64-bit macOS (10.7+, Lion+) (x86_64-apple-darwin)] | |
bindings-macos: | |
strategy: | |
fail-fast: false | |
matrix: | |
jobs: [ | |
{ target: x86_64-apple-darwin, os: macos-latest }, | |
{ target: aarch64-apple-darwin, os: macos-latest-arm64 } | |
] | |
runs-on: ${{ matrix.jobs.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Create FFI modules dir | |
run: mkdir -p ffi-modules/${{ matrix.jobs.target }} | |
- name: Build FFI | |
run: cargo build -p rodbus-ffi --release --message-format json > ffi-modules/${{ matrix.jobs.target }}/build.ffi.log | |
- name: Build JNI | |
run: cargo build -p rodbus-ffi-java --release --message-format json > ffi-modules/${{ matrix.jobs.target }}/build.jni.log | |
- name: Copy the FFI and JNI libs | |
run: | | |
cp ./target/release/librodbus_ffi.dylib ./ffi-modules/${{ matrix.jobs.target }} | |
cp ./target/release/librodbus_ffi_java.dylib ./ffi-modules/${{ matrix.jobs.target }} | |
- name: Upload compiled FFI modules | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ffi-modules | |
path: ffi-modules | |
- name: Test .NET bindings | |
run: cargo run --bin rodbus-bindings -- --dotnet | |
- name: Test Java bindings | |
run: cargo run --bin rodbus-bindings -- --java | |
# Cross-compilation for various Linux architectures | |
ffi-cross: | |
env: | |
# By default, MUSL will not produce a cdylib with dynamic linkage to MUSL LIB C | |
CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS: "-C target-feature=-crt-static" | |
CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS: "-C target-feature=-crt-static" | |
CARGO_TARGET_ARM_UNKNOWN_LINUX_MUSLEABIHF_RUSTFLAGS: "-C target-feature=-crt-static" | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu # 64-bit Linux (kernel 2.6.32+, glibc 2.11+) | |
- x86_64-unknown-linux-musl # 64-bit Linux with MUSL | |
- arm-unknown-linux-gnueabihf # ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17) | |
- arm-unknown-linux-musleabihf # ARMv6 Linux with MUSL, hardfloat | |
- aarch64-unknown-linux-gnu # ARM64 Linux (kernel 4.2, glibc 2.17+) | |
- aarch64-unknown-linux-musl # ARM64 Linux with MUSL | |
- armv7-unknown-linux-gnueabihf # ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17) | |
- arm-unknown-linux-gnueabi # ARMv6 Linux (kernel 3.2, glibc 2.17) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install Rust Cross | |
run: cargo install cross | |
- name: Create ffi-modules dir | |
run: mkdir -p ffi-modules/${{ matrix.target }} | |
- name: Build FFI | |
run: cross build -p rodbus-ffi --release --target ${{ matrix.target }} --message-format json > ffi-modules/${{ matrix.target }}/build.ffi.log | |
- name: Build JNI | |
run: cross build -p rodbus-ffi-java --release --target ${{ matrix.target }} --message-format json > ffi-modules/${{ matrix.target }}/build.jni.log | |
- name: Copy the FFI and JNI libs | |
run: | | |
cp ./target/${{ matrix.target }}/release/librodbus_ffi.so ./ffi-modules/${{ matrix.target }} | |
cp ./target/${{ matrix.target }}/release/librodbus_ffi_java.so ./ffi-modules/${{ matrix.target }} | |
- name: Upload compiled FFI modules | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ffi-modules | |
path: ffi-modules | |
guide: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Install dependencies | |
working-directory: guide | |
run: yarn install | |
- name: Build guide | |
working-directory: guide | |
run: | | |
yarn build | |
mkdir -p ~/doc/guide | |
mv build/* ~/doc/guide | |
- name: Upload guide | |
uses: actions/upload-artifact@v3 | |
with: | |
name: doc | |
path: ~/doc | |
# Package all the generated bindings | |
packaging: | |
needs: [documentation, bindings-windows, bindings-macos, ffi-cross] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
- name: Checkout BOM tools repo | |
uses: actions/checkout@v3 | |
with: | |
repository: stepfunc/bom-tools | |
ref: 0.1.0 | |
path: bom-tools | |
- name: Install BOM tools | |
working-directory: bom-tools | |
run: cargo install --path bom-tools | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download compiled FFI | |
uses: actions/download-artifact@v3 | |
with: | |
name: ffi-modules | |
path: ffi-modules | |
- name: Create FFI third-party-licenses.txt | |
run: bom-tools gen-licenses-dir ./ffi-modules build.ffi.log ./dep_config.json > third-party-licenses.txt | |
- name: Package all bindings | |
run: cargo run --bin rodbus-bindings -- --package ./ffi-modules --options ./packaging.json -f third-party-licenses.txt | |
- name: Upload C/C++ bindings | |
uses: actions/upload-artifact@v3 | |
with: | |
name: c-bindings | |
path: ffi/bindings/c/generated/* | |
- name: Upload .NET bindings | |
uses: actions/upload-artifact@v3 | |
with: | |
name: dotnet-bindings | |
path: ffi/bindings/dotnet/nupkg/* | |
- name: Upload Java bindings | |
uses: actions/upload-artifact@v3 | |
with: | |
name: java-bindings | |
path: ffi/bindings/java/rodbus/target/*.jar | |
- name: Upload Java pom.xml | |
uses: actions/upload-artifact@v3 | |
with: | |
name: java-bindings | |
path: ffi/bindings/java/rodbus/pom.xml | |
release: | |
needs: [packaging, guide] | |
runs-on: ubuntu-latest | |
if: startsWith(github.ref, 'refs/tags/') | |
steps: | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Package C Bindings | |
run: | | |
mkdir release | |
cd artifacts/c-bindings | |
zip -r ../../release/rodbus-${GITHUB_REF##*/}.zip . | |
- name: Checkout stepfunc/docs | |
uses: actions/checkout@v3 | |
with: | |
repository: stepfunc/docs | |
ssh-key: ${{ secrets.SFIO_DOCS_SSH_KEY }} | |
path: docs | |
- name: Upload docs | |
working-directory: docs | |
run: | | |
git config user.name github-actions | |
git config user.email github-actions@github.com | |
rm -rf ./rodbus/${GITHUB_REF##*/} | |
mkdir -p ./rodbus/${GITHUB_REF##*/} | |
cp -a ../artifacts/doc/* ./rodbus/${GITHUB_REF##*/} | |
git add -A | |
git commit -m "[rodbus] Release ${GITHUB_REF##*/}" | |
git push | |
- name: Import PGP key | |
uses: crazy-max/ghaction-import-gpg@v5 | |
with: | |
gpg_private_key: ${{ secrets.SFIO_PGP_PRIVATE_KEY }} | |
passphrase: ${{ secrets.SFIO_PGP_PRIVATE_KEY_PASSPHRASE }} | |
- name: Login to OSSRH | |
uses: whelk-io/maven-settings-xml-action@v21 | |
with: | |
servers: '[{ "id": "ossrh", "username": "${{ secrets.SFIO_OSSRH_USERNAME }}", "password": "${{ secrets.SFIO_OSSRH_PASSWORD }}" }]' | |
- name: Deploy Java | |
shell: bash | |
working-directory: artifacts/java-bindings | |
run: > | |
shopt -s extglob && | |
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2 -DrepositoryId=ossrh -DpomFile=pom.xml -Dfile=$(find rodbus-+([0-9]).+([0-9]).+([0-9])*(-rc+([0-9])).jar) && | |
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2 -DrepositoryId=ossrh -DpomFile=pom.xml -Dfile=$(find rodbus-+([0-9]).+([0-9]).+([0-9])*(-rc+([0-9]))-sources.jar) -Dclassifier=sources && | |
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2 -DrepositoryId=ossrh -DpomFile=pom.xml -Dfile=$(find rodbus-+([0-9]).+([0-9]).+([0-9])*(-rc+([0-9]))-javadoc.jar) -Dclassifier=javadoc | |
- name: Publish NuGet package | |
shell: bash | |
run: dotnet nuget push $(find artifacts/dotnet-bindings/rodbus*.nupkg) -s https://api.nuget.org/v3/index.json -k ${{ secrets.SFIO_NUGET_KEY }} | |
- name: Create GitHub release | |
uses: softprops/action-gh-release@v1 | |
with: | |
draft: true | |
files: | | |
release/*.zip | |
artifacts/dotnet-bindings/rodbus* | |
artifacts/java-bindings/*.jar | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |