Skip to content

Merge pull request #445 from Concordium/allow-cargo-generate-0.22 #1736

Merge pull request #445 from Concordium/allow-cargo-generate-0.22

Merge pull request #445 from Concordium/allow-cargo-generate-0.22 #1736

Workflow file for this run

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"