Merge pull request #445 from Concordium/allow-cargo-generate-0.22 #1736
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
on: | |
# Trigger the workflow on push or pull request, | |
# but only for the main branch | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
name: Clippy & fmt | |
env: | |
RUST_FMT: nightly-2023-04-01 | |
RUST_VERSION: "1.73" | |
RUST_VERSION_TESTING_LIBRARY: "1.73" | |
CARGO_CONCORDIUM_VERSION: "3.3.0" | |
jobs: | |
rustfmt: | |
name: Format | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
crates: | |
- concordium-std-derive/Cargo.toml | |
- concordium-std/Cargo.toml | |
- concordium-cis2/Cargo.toml | |
- examples/account-signature-checks/Cargo.toml | |
- examples/auction/Cargo.toml | |
- examples/bump-alloc-tests/Cargo.toml | |
- examples/cis2-dynamic-nft/Cargo.toml | |
- examples/cis2-multi/Cargo.toml | |
- examples/cis2-multi-royalties/Cargo.toml | |
- examples/cis2-nft/Cargo.toml | |
- examples/cis2-wccd/Cargo.toml | |
- examples/cis3-nft-sponsored-txs/Cargo.toml | |
- examples/counter-notify/Cargo.toml | |
- examples/cis5-smart-contract-wallet/Cargo.toml | |
- examples/credential-registry/Cargo.toml | |
- examples/eSealing/Cargo.toml | |
- examples/factory/Cargo.toml | |
- examples/fib/Cargo.toml | |
- examples/icecream/Cargo.toml | |
- examples/memo/Cargo.toml | |
- examples/nametoken/Cargo.toml | |
- examples/offchain-transfers/Cargo.toml | |
- examples/piggy-bank/part1/Cargo.toml | |
- examples/piggy-bank/part2/Cargo.toml | |
- examples/proxy/Cargo.toml | |
- examples/recorder/Cargo.toml | |
- examples/signature-verifier/Cargo.toml | |
- examples/smart-contract-upgrade/contract-version1/Cargo.toml | |
- examples/smart-contract-upgrade/contract-version2/Cargo.toml | |
- examples/sponsored-tx-enabled-auction/Cargo.toml | |
- examples/transfer-policy-check/Cargo.toml | |
- examples/two-step-transfer/Cargo.toml | |
- examples/voting/Cargo.toml | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install nightly toolchain with rustfmt available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_FMT }} | |
override: true | |
components: rustfmt | |
- name: Run cargo fmt | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --manifest-path=${{ matrix.crates }} -- --check | |
rustdoc: | |
name: Lint docs | |
# Don't run on draft pull requests | |
if: ${{ !github.event.pull_request.draft }} | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
crates: | |
- concordium-std | |
- concordium-cis2 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
override: true | |
- name: Run cargo doc | |
working-directory: ${{ matrix.crates }} | |
run: | | |
RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features --color=always | |
# Run unit-tests for concordium-std compiled to wasm using cargo concordium test. | |
std-internal-wasm-test: | |
name: concordium-std internal wasm tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Install toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Install Wasm target | |
run: rustup target install wasm32-unknown-unknown | |
- name: Run internal wasm unit test | |
working-directory: concordium-std | |
run: | | |
curl -L https://github.com/Concordium/concordium-smart-contract-tools/releases/download/releases/cargo-concordium/${CARGO_CONCORDIUM_VERSION}/cargo-concordium-linux-amd64 -o /tmp/cargo-concordium | |
chmod +x /tmp/cargo-concordium | |
sudo mv /tmp/cargo-concordium /usr/bin/cargo-concordium | |
cargo concordium test --only-unit-tests -- --features internal-wasm-test | |
clippy-cis2: | |
name: Clippy | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
strategy: | |
matrix: | |
target: | |
- wasm32-unknown-unknown | |
- x86_64-unknown-linux-gnu | |
lib-crates: | |
- concordium-cis2/Cargo.toml | |
features: | |
- | |
- u256_amount | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain with clippy available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
components: clippy | |
- name: Run cargo clippy | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --manifest-path ${{ matrix.lib-crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} -- -D warnings | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
strategy: | |
matrix: | |
target: | |
- wasm32-unknown-unknown | |
- x86_64-unknown-linux-gnu | |
lib-crates: | |
- concordium-std/Cargo.toml | |
features: | |
- | |
- build-schema | |
- concordium-quickcheck | |
- p7 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain with clippy available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
components: clippy | |
- name: Run cargo clippy | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --manifest-path ${{ matrix.lib-crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} -- -D warnings | |
clippy-crypto-primitives: | |
name: Clippy concordium-std with crypto-primitives | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
strategy: | |
matrix: | |
target: | |
- wasm32-unknown-unknown | |
- x86_64-unknown-linux-gnu | |
lib-crates: | |
- concordium-std/Cargo.toml | |
features: | |
- crypto-primitives | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain with clippy available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
components: clippy | |
- name: Run cargo clippy | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --manifest-path ${{ matrix.lib-crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} -- -D warnings | |
clippy-wasm32-only: | |
name: Clippy Wasm32 | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
strategy: | |
matrix: | |
target: | |
- wasm32-unknown-unknown | |
lib-crates: | |
- concordium-std/Cargo.toml | |
features: | |
- wasm-test | |
- wasm-test,build-schema | |
- wasm-test,concordium-quickcheck | |
- wasm-test,p7 | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain with clippy available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
components: clippy | |
- name: Run cargo clippy, but only for wasm32 target | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --manifest-path ${{ matrix.lib-crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} -- -D warnings | |
check-std-no-std: | |
name: Build no-std on nightly, | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install nightly toolchain with check available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: nightly | |
target: wasm32-unknown-unknown | |
override: true | |
- name: Run no-std build concordium-std | |
working-directory: concordium-std | |
run: cargo build --target wasm32-unknown-unknown --no-default-features --features bump_alloc | |
- name: Run no-std build concordium-cis2 | |
working-directory: concordium-cis2 | |
run: cargo build --target wasm32-unknown-unknown --no-default-features --features concordium-std/bump_alloc | |
check-no-std-examples: | |
name: Build on nightly, | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
strategy: | |
matrix: | |
target: | |
- wasm32-unknown-unknown | |
crates: | |
- examples/two-step-transfer/Cargo.toml | |
- examples/cis2-wccd/Cargo.toml | |
- examples/cis2-nft/Cargo.toml | |
- examples/cis2-multi/Cargo.toml | |
- examples/cis2-dynamic-nft/Cargo.toml | |
- examples/cis2-multi-royalties/Cargo.toml | |
- examples/nametoken/Cargo.toml | |
- examples/account-signature-checks/Cargo.toml | |
- examples/bump-alloc-tests/Cargo.toml | |
- examples/factory/Cargo.toml | |
features: | |
- | |
- concordium-std/build-schema | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install nightly toolchain with check available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: nightly | |
target: ${{ matrix.target }} | |
override: true | |
- name: Run cargo check with no-std | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: --manifest-path ${{ matrix.crates }} --target=${{ matrix.target }} --no-default-features --features=${{ matrix.features }} --features bump_alloc | |
check-crypto-examples: | |
name: Check crypto examples | |
runs-on: ubuntu-latest | |
needs: [rustfmt, clippy-schema] | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
- wasm32-unknown-unknown | |
features: | |
- crypto-primitives | |
crates: | |
- examples/credential-registry/Cargo.toml | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
- name: Run cargo build with crypto-primitives feature | |
uses: actions-rs/cargo@v1 | |
with: | |
command: build | |
args: --manifest-path ${{ matrix.crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} --lib | |
clippy-schema: | |
name: Clippy on examples | |
runs-on: ubuntu-latest | |
needs: rustfmt | |
strategy: | |
matrix: | |
target: | |
- wasm32-unknown-unknown | |
crates: | |
- examples/voting/Cargo.toml | |
- examples/eSealing/Cargo.toml | |
- examples/auction/Cargo.toml | |
- examples/cis2-multi/Cargo.toml | |
- examples/cis2-dynamic-nft/Cargo.toml | |
- examples/cis2-multi-royalties/Cargo.toml | |
- examples/cis2-nft/Cargo.toml | |
- examples/cis3-nft-sponsored-txs/Cargo.toml | |
- examples/cis2-wccd/Cargo.toml | |
- examples/cis5-smart-contract-wallet/Cargo.toml | |
- examples/credential-registry/Cargo.toml | |
- examples/factory/Cargo.toml | |
- examples/fib/Cargo.toml | |
- examples/icecream/Cargo.toml | |
- examples/memo/Cargo.toml | |
- examples/nametoken/Cargo.toml | |
- examples/piggy-bank/part1/Cargo.toml | |
- examples/piggy-bank/part2/Cargo.toml | |
- examples/proxy/Cargo.toml | |
- examples/recorder/Cargo.toml | |
- examples/signature-verifier/Cargo.toml | |
- examples/transfer-policy-check/Cargo.toml | |
- examples/two-step-transfer/Cargo.toml | |
- examples/smart-contract-upgrade/contract-version1/Cargo.toml | |
- examples/smart-contract-upgrade/contract-version2/Cargo.toml | |
- examples/offchain-transfers/Cargo.toml | |
- examples/account-signature-checks/Cargo.toml | |
- examples/sponsored-tx-enabled-auction/Cargo.toml | |
- examples/bump-alloc-tests/Cargo.toml | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain with clippy available | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
components: clippy | |
- name: Run cargo clippy with schema and tests | |
uses: actions-rs/cargo@v1 | |
with: | |
command: clippy | |
args: --manifest-path ${{ matrix.crates }} --target=${{ matrix.target }} --features concordium-std/build-schema --features concordium-std/wasm-test -- -D warnings | |
test: | |
name: Test the library | |
runs-on: ubuntu-latest | |
needs: [rustfmt, clippy] | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
lib-crates: | |
- concordium-std/Cargo.toml | |
- concordium-cis2/Cargo.toml | |
features: | |
- | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
- name: Run cargo test | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
# Run all tests, including doc tests. | |
args: --manifest-path ${{ matrix.lib-crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} | |
test-cis2-with-256: | |
name: Test the library | |
runs-on: ubuntu-latest | |
needs: [rustfmt, clippy] | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
lib-crates: | |
- concordium-cis2/Cargo.toml | |
features: | |
- u256_amount | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION }} | |
target: ${{ matrix.target }} | |
override: true | |
- name: Run cargo test | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
# Run all tests, including doc tests. | |
args: --manifest-path ${{ matrix.lib-crates }} --target=${{ matrix.target }} --features=${{ matrix.features }} | |
test-examples: | |
name: Test examples | |
runs-on: ubuntu-latest | |
needs: [rustfmt, clippy-schema] | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
crates: | |
- examples/voting | |
- examples/eSealing | |
- examples/auction | |
- examples/cis2-multi | |
- examples/cis2-dynamic-nft | |
- examples/cis2-multi-royalties | |
- examples/cis2-nft | |
- examples/cis3-nft-sponsored-txs | |
- examples/cis2-wccd | |
- examples/cis5-smart-contract-wallet | |
- examples/credential-registry | |
- examples/factory | |
- examples/fib | |
- examples/icecream | |
- examples/memo | |
- examples/nametoken | |
- examples/piggy-bank/part1 | |
- examples/piggy-bank/part2 | |
- examples/proxy | |
- examples/recorder | |
- examples/signature-verifier | |
- examples/transfer-policy-check | |
- examples/two-step-transfer | |
- examples/smart-contract-upgrade/contract-version1 | |
- examples/smart-contract-upgrade/contract-version2 | |
- examples/offchain-transfers | |
- examples/account-signature-checks | |
- examples/sponsored-tx-enabled-auction | |
- examples/bump-alloc-tests | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v2 | |
with: | |
submodules: recursive | |
- name: Install toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ env.RUST_VERSION_TESTING_LIBRARY }} | |
target: ${{ matrix.target }} | |
override: true | |
- name: Install Wasm target | |
run: rustup target install wasm32-unknown-unknown | |
- name: Download and install Cargo Concordium | |
run: | | |
curl -L https://github.com/Concordium/concordium-smart-contract-tools/releases/download/releases/cargo-concordium/${CARGO_CONCORDIUM_VERSION}/cargo-concordium-linux-amd64 -o /tmp/cargo-concordium | |
chmod +x /tmp/cargo-concordium | |
sudo mv /tmp/cargo-concordium /usr/bin/cargo-concordium | |
# The 'smart-contract-upgrade' example has a v1 and v2 contract and the tests in v1 needs the wasm module from v2 for upgrading. | |
- name: Build contract-upgrade version 2 module if needed | |
if: ${{ matrix.crates == 'examples/smart-contract-upgrade/contract-version1' }} | |
run: cargo concordium build --out "examples/smart-contract-upgrade/contract-version2/concordium-out/module.wasm.v1" -- --manifest-path "examples/smart-contract-upgrade/contract-version2/Cargo.toml" | |
# The 'sponsored-tx-enabled-auction' and 'cis5-smart-contract-wallet' examples need the wasm module `cis2-multi` for its tests. | |
- name: Build cis2-multi module if needed | |
if: ${{ matrix.crates == 'examples/sponsored-tx-enabled-auction' || matrix.crates == 'examples/cis5-smart-contract-wallet'}} | |
run: cargo concordium build --out "examples/cis2-multi/concordium-out/module.wasm.v1" -- --manifest-path "examples/cis2-multi/Cargo.toml" | |
- name: Run cargo concordium test | |
run: cargo concordium test --out "${{ matrix.crates }}/concordium-out/module.wasm.v1" -- --manifest-path "${{ matrix.crates }}/Cargo.toml" |