Merge pull request #26 from cryptape/native-arm64-ci #170
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: Rust | |
on: | |
push: | |
branches: [ "main" ] | |
pull_request: | |
branches: [ "main" ] | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
ubuntu-build: | |
strategy: | |
matrix: | |
os: [ubuntu-latest, ubuntu-24.04-arm] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install llvm | |
run: sudo apt update && sudo apt install -y clang llvm # This requires Ubuntu 24.04 or later | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install cargo generate | |
run: cargo install cargo-generate | |
- name: Generate workspace | |
run: cargo generate --path . workspace --name test-workspace | |
- name: Generate crates && contracts | |
run: cd test-workspace && | |
make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
- name: Submodules | |
run: cd test-workspace && | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
- name: Lock Rust version | |
run: cd test-workspace && echo "1.75.0" > rust-toolchain | |
- name: Install riscv64 target | |
run: cd test-workspace && rustup target add riscv64imac-unknown-none-elf | |
- name: Run all checks | |
run: cd test-workspace && make build test check clippy | |
- name: Reproducible build runs | |
run: cd test-workspace && ./scripts/reproducible_build_docker --update && ./scripts/reproducible_build_docker --no-clean | |
- name: Generate standalone contract | |
run: cargo generate --path . standalone-contract --name test-contract | |
- name: Lock Rust version | |
run: cd test-contract && echo "1.75.0" > rust-toolchain | |
- name: Run all checks | |
run: cd test-contract && make build test check clippy | |
- name: Reproducible build runs | |
run: cd test-contract && ./scripts/reproducible_build_docker --update && ./scripts/reproducible_build_docker --no-clean | |
debian-build: | |
runs-on: ubuntu-latest | |
container: | |
image: debian:latest | |
env: | |
USER: ${{ github.actor }} | |
steps: | |
- name: Install dependencies | |
run: apt-get update && apt-get -y install curl git build-essential pkg-config libssl-dev lsb-release wget software-properties-common gnupg | |
- name: Install llvm 18 | |
run: wget https://apt.llvm.org/llvm.sh && chmod +x llvm.sh && ./llvm.sh 18 && rm llvm.sh | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
components: clippy | |
target: riscv64imac-unknown-none-elf | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Install cargo generate | |
run: cargo install cargo-generate | |
- name: Generate workspace | |
run: cargo generate --path . workspace --name test-workspace | |
- name: Generate crates && contracts | |
run: cd test-workspace && | |
make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
- name: Submodules | |
run: cd test-workspace && | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
- name: Run all checks | |
run: cd test-workspace && make build test check clippy | |
- name: Generate standalone contract | |
run: cargo generate --path . standalone-contract --name test-contract | |
- name: Run all checks | |
run: cd test-contract && make build test check clippy | |
fedora-build: | |
runs-on: ubuntu-latest | |
container: | |
image: fedora:latest | |
env: | |
USER: ${{ github.actor }} | |
steps: | |
- name: Install dependencies | |
run: sudo dnf -y install clang llvm git make openssl-devel | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
components: clippy | |
target: riscv64imac-unknown-none-elf | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Install cargo generate | |
run: cargo install cargo-generate | |
- name: Generate workspace | |
run: cargo generate --path . workspace --name test-workspace | |
- name: Generate crates && contracts | |
run: cd test-workspace && | |
make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
- name: Submodules | |
run: cd test-workspace && | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
- name: Run all checks | |
run: cd test-workspace && make build test check clippy | |
- name: Generate standalone contract | |
run: cargo generate --path . standalone-contract --name test-contract | |
- name: Run all checks | |
run: cd test-contract && make build test check clippy | |
arch-build: | |
runs-on: ubuntu-latest | |
container: | |
image: archlinux:latest | |
env: | |
USER: ${{ github.actor }} | |
steps: | |
- name: Install dependencies | |
run: pacman --noconfirm -Syu clang llvm git make openssl pkgconf | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
with: | |
components: clippy | |
target: riscv64imac-unknown-none-elf | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Install cargo generate | |
run: cargo install cargo-generate | |
- name: Generate workspace | |
run: cargo generate --path . workspace --name test-workspace | |
- name: Generate crates && contracts | |
run: cd test-workspace && | |
make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
- name: Submodules | |
run: cd test-workspace && | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
- name: Run all checks | |
run: cd test-workspace && make build test check clippy | |
- name: Generate standalone contract | |
run: cargo generate --path . standalone-contract --name test-contract | |
- name: Run all checks | |
run: cd test-contract && make build test check clippy | |
macos-build: | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Install llvm 18 | |
run: brew install llvm@18 | |
- name: Install riscv64 target | |
run: rustup target add riscv64imac-unknown-none-elf | |
- name: Install cargo generate | |
run: cargo install cargo-generate | |
- name: Generate workspace | |
run: cargo generate --path . workspace --name test-workspace | |
- name: Generate crates && contracts | |
run: cd test-workspace && | |
make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
- name: Submodules | |
run: cd test-workspace && | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
- name: Run all checks | |
run: cd test-workspace && make build test check clippy | |
- name: Generate standalone contract | |
run: cargo generate --path . standalone-contract --name test-contract | |
- name: Run all checks | |
run: cd test-contract && make build test check clippy | |
# For now, github action's latest arm64-based macos runner does not support docker. We will have to | |
# Use an order version for now to test reproducible build on macOS. Maybe when macOS 15 is out we can | |
# re-test later. | |
# | |
# References: | |
# * https://github.com/orgs/community/discussions/69211 | |
# * https://github.com/marketplace/actions/setup-docker-on-macos | |
# NOTE: this test is not stable right now, disabling it till we can find a better solution | |
# macos-x64-reproducible-build: | |
# | |
# runs-on: macos-13 | |
# | |
# steps: | |
# - uses: actions/checkout@v3 | |
# with: | |
# submodules: true | |
# - name: Setup Docker on macOS | |
# run: brew install docker colima && colima start | |
# - name: Install llvm 18 | |
# run: brew install llvm@18 | |
# - name: Install riscv64 target | |
# run: rustup target add riscv64imac-unknown-none-elf | |
# - name: Install cargo generate | |
# run: cargo install cargo-generate | |
# - name: Generate workspace | |
# run: cargo generate --path . workspace --name test-workspace | |
# - name: Generate crates && contracts | |
# run: cd test-workspace && | |
# make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
# make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
# make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
# make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
# make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
# - name: Submodules | |
# run: cd test-workspace && | |
# git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
# git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
# - name: Reproducible build runs | |
# run: cd test-workspace && ./scripts/reproducible_build_docker --update && ./scripts/reproducible_build_docker --no-clean | |
# - name: Generate standalone contract | |
# run: cargo generate --path . standalone-contract --name test-contract | |
# - name: Reproducible build runs | |
# run: cd test-contract && ./scripts/reproducible_build_docker --update && ./scripts/reproducible_build_docker --no-clean | |
windows-build: | |
runs-on: windows-2019 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Install llvm | |
shell: pwsh | |
# https://github.com/ScoopInstaller/Install#for-admin | |
# | |
# Note that on Windows we cannot choose LLVM 18 here, we have to settle on latest stable LLVM | |
run: | | |
iex "& {$(irm get.scoop.sh)} -RunAsAdmin" | |
scoop install llvm yasm | |
echo "$env:USERPROFILE\scoop\shims" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
- name: Install riscv64 target | |
run: rustup target add riscv64imac-unknown-none-elf | |
- name: Install cargo generate | |
run: cargo install cargo-generate | |
- name: Generate workspace | |
run: cargo generate --path . workspace --name test-workspace | |
- name: Generate crates && contracts | |
run: cd test-workspace && | |
make generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. && | |
make generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
- name: Submodules | |
run: cd test-workspace && | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib && | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
- name: Run all checks | |
run: cd test-workspace && make build test check clippy | |
- name: Generate standalone contract | |
run: cargo generate --path . standalone-contract --name test-contract | |
- name: Run all checks | |
run: cd test-contract && make build test check clippy | |
freebsd-build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
submodules: true | |
- name: Build in FreeBSD VM | |
uses: vmactions/freebsd-vm@v1 | |
with: | |
usesh: true | |
prepare: | | |
set -ex | |
pkg install -y llvm18 git gmake bash | |
curl https://sh.rustup.rs -sSf | sh -s -- -y | |
. $HOME/.cargo/env | |
rustup target add riscv64imac-unknown-none-elf | |
cargo install cargo-generate | |
run: | | |
set -ex | |
. $HOME/.cargo/env | |
cargo generate --path . standalone-contract --name test-contract | |
cd test-contract | |
gmake build test check clippy | |
cd .. | |
cargo generate --path . workspace --name test-workspace | |
cd test-workspace | |
gmake generate CRATE=clib TEMPLATE=c-wrapper-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
gmake generate CRATE=rlib TEMPLATE=x64-simulator-crate DESTINATION=crates TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
gmake generate CRATE=c1 TEMPLATE=contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
gmake generate CRATE=c2 TEMPLATE=atomics-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
gmake generate CRATE=c3 TEMPLATE=stack-reorder-contract TEMPLATE_TYPE=--path TEMPLATE_REPO=.. | |
git submodule add https://github.com/nervosnetwork/ckb-c-stdlib deps/ckb-c-stdlib | |
git submodule add https://github.com/xxuejie/lib-dummy-atomics deps/lib-dummy-atomics | |
gmake build test check clippy |