Skip to content

Credential registry readme (#334) #1275

Credential registry readme (#334)

Credential registry readme (#334) #1275

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.66"
jobs:
rustfmt:
name: Format
runs-on: ubuntu-latest
strategy:
matrix:
crates:
- concordium-std/Cargo.toml
- concordium-cis2/Cargo.toml
- examples/voting/Cargo.toml
- examples/eSealing/Cargo.toml
- examples/auction/Cargo.toml
- examples/cis2-multi/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/credential-registry/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
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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
# All templates are generated with the `cargo-generate` command and it is checked that the 'cargo test' command
# can be executed without errors on the generated smart contracts.
cargo-generate-templates:
name: Smart contract template generation
runs-on: ubuntu-latest
strategy:
matrix:
crates:
- templates/default
- templates/cis2-nft
env:
PROJECT_NAME: my-project
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: true
- name: Run cargo-generate
# we use v0.17.5 here because the minimal supported version is 0.17.0 and the closest
# available version of `cargo-generate-action` is 0.17.5
uses: cargo-generate/[email protected]
with:
name: ${{ env.PROJECT_NAME }}
template: ${{ matrix.crates }}
other: "-d description=myProject -d tokenMetadataBaseURL=https://some.example/token/"
- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
# we need to move the generated project to a temp folder, away from the template project
# otherwise `cargo` runs would fail
# see https://github.com/rust-lang/cargo/issues/9922
# Run all tests, including doc tests.
- name: Run cargo test
run: |
# TEMPLATE_DIR=`pwd`
mv $PROJECT_NAME ${{ runner.temp }}/
cd ${{ runner.temp }}/$PROJECT_NAME
cargo test
# The credential registry template is used to generate code for all combinations of parameters
# with the `cargo-generate` and it is checked that the 'cargo test' command can be executed
# without errors on the generated smart contracts.
cargo-generate-credential-registry-template:
name: Credential registry template tests
runs-on: ubuntu-latest
strategy:
matrix:
restorable: ["true", "false"]
revocable_by_others: ["true", "false"]
env:
PROJECT_NAME: my-project
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: true
- name: Run cargo-generate
# we use v0.17.5 here because the minimal supported version is 0.17.0 and the closest
# available version of `cargo-generate-action` is 0.17.5
uses: cargo-generate/[email protected]
with:
name: ${{ env.PROJECT_NAME }}
template: templates/credential-registry
other: "-d description=myProject -d template_type=custom -d restorable=${{ matrix.restorable }} -d revocable_by_others=${{ matrix.revocable_by_others }}"
- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
# we need to move the generated project to a temp folder, away from the template project
# otherwise `cargo` runs would fail
# see https://github.com/rust-lang/cargo/issues/9922
# Run all tests, including doc tests.
- name: Run cargo test
run: |
mv $PROJECT_NAME ${{ runner.temp }}/
cd ${{ runner.temp }}/$PROJECT_NAME
cargo test
# All templates are generated with the `cargo-generate` command
# and it is checked that the schemas can be built as part of the 'clippy' command.
clippy-template:
name: Clippy on smart contract templates
runs-on: ubuntu-latest
needs: rustfmt
strategy:
matrix:
target:
- wasm32-unknown-unknown
crates:
- templates/default
- templates/cis2-nft
- templates/credential-registry
env:
PROJECT_NAME: my-project
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: true
- name: Run cargo-generate
# we use v0.17.5 here because the minimal supported version is 0.17.0 and the closest
# available version of `cargo-generate-action` is 0.17.5
uses: cargo-generate/[email protected]
with:
name: ${{ env.PROJECT_NAME }}
template: ${{ matrix.crates }}
other: "-d description=myProject -d tokenMetadataBaseURL=https://some.example/token/ -d template_type=full"
- 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
# we need to move the generated project to a temp folder, away from the template project
# otherwise `cargo` runs would fail
# see https://github.com/rust-lang/cargo/issues/9922
- name: Run clippy with build-schema
run: |
mv $PROJECT_NAME ${{ runner.temp }}/
cd ${{ runner.temp }}/$PROJECT_NAME
rustup target add wasm32-unknown-unknown
cargo clippy --manifest-path ./Cargo.toml --target=${{ matrix.target }} --features concordium-std/build-schema -- -D warnings
# The credential registry template is used to generate code for all combinations of parameters
# with the `cargo-generate` command and it is checked that the schemas can be built as part
# of the 'clippy' command.
clippy-credential-registry-template:
name: Clippy on credential registry template
runs-on: ubuntu-latest
needs: rustfmt
strategy:
matrix:
target:
- wasm32-unknown-unknown
restorable: ["true", "false"]
revocable_by_others: ["true", "false"]
env:
PROJECT_NAME: my-project
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: true
- name: Run cargo-generate
# we use v0.17.5 here because the minimal supported version is 0.17.0 and the closest
# available version of `cargo-generate-action` is 0.17.5
uses: cargo-generate/[email protected]
with:
name: ${{ env.PROJECT_NAME }}
template: templates/credential-registry
other: "-d description=myProject -d template_type=custom -d restorable=${{ matrix.restorable }} -d revocable_by_others=${{ matrix.revocable_by_others }}"
- 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
# we need to move the generated project to a temp folder, away from the template project
# otherwise `cargo` runs would fail
# see https://github.com/rust-lang/cargo/issues/9922
- name: Run clippy with build-schema
run: |
mv $PROJECT_NAME ${{ runner.temp }}/
cd ${{ runner.temp }}/$PROJECT_NAME
rustup target add wasm32-unknown-unknown
cargo clippy --manifest-path ./Cargo.toml --target=${{ matrix.target }} --features concordium-std/build-schema -- -D warnings
# The cis2-nft template is generated with the `cargo-generate` command
# and it is checked that the code is equivalent to the cis2-nft smart contract in the example folder.
cargo-generate-cis2-nft-template-comparison:
name: Cis2-nft smart contract template comparison
runs-on: ubuntu-latest
strategy:
matrix:
crates:
- templates/cis2-nft
env:
PROJECT_NAME: cis2-nft
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: true
- name: Run cargo-generate
# we use v0.17.5 here because the minimal supported version is 0.17.0 and the closest
# available version of `cargo-generate-action` is 0.17.5
uses: cargo-generate/[email protected]
with:
name: ${{ env.PROJECT_NAME }}
template: ${{ matrix.crates }}
other: "-d description=cis2-nft-project -d tokenMetadataBaseURL=https://some.example/token/"
- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
# Run diff to check if there are any differences between the generated smart contracts
# and the example smart contracts. The templates have hardcoded versions of `concordium-std`
# and `concordium-cis2` which need to be replaced with the paths used in the smart contract example folder.
# This CI pipeline uses `root` as the author which needs to be replaced with the author
# `Concordium <[email protected]>` of the smart contract examples.
- name: Run diff
run: |
mv $PROJECT_NAME ${{ runner.temp }}/
sed -i "s/root/Concordium <[email protected]>/g" ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml
sed -i "s/{version = \"8.0\", default-features = false}/{path = \"..\/..\/concordium-std\", default-features = false}/g" ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml
sed -i "s/{version = \"5.0\", default-features = false}/{path = \"..\/..\/concordium-cis2\", default-features = false}/g" ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml
diff ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml examples/cis2-nft/Cargo.toml
diff ${{ runner.temp }}/$PROJECT_NAME/src/lib.rs examples/cis2-nft/src/lib.rs
# The credential-registry template is generated with the `cargo-generate` command
# and it is checked that the code is equivalent to the credential-registry smart contract in the example folder.
cargo-generate-credential-registry-template-comparison:
name: Credential registry smart contract template comparison
runs-on: ubuntu-latest
strategy:
matrix:
crates:
- templates/credential-registry
env:
PROJECT_NAME: credential-registry
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
submodules: true
- name: Run cargo-generate
# at least version 0.17.0 is required for the rhai pre-script to work correctly;
# the closest available version of `cargo-generate-action` is 0.17.5
uses: cargo-generate/[email protected]
with:
name: ${{ env.PROJECT_NAME }}
template: ${{ matrix.crates }}
other: "-d description=Example-credential-registry -d template_type=full"
- name: Install toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.RUST_VERSION }}
# Run diff to check if there are any differences between the generated smart contract
# and the example smart contract. The template have hardcoded versions of `concordium-std`
# which needs to be replaced with the path used in the smart contract example folder.
# This CI pipeline uses `root` as the author which needs to be replaced with the author
# `Concordium <[email protected]>` of the smart contract examples.
- name: Run diff
run: |
mv $PROJECT_NAME ${{ runner.temp }}/
sed -i "s/root/Concordium <[email protected]>/g" ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml
sed -i "s/version = \"8.0\", default-features = false/path = \"..\/..\/concordium-std\", version = \"8.0\", default-features = false/g" ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml
sed -i "s/version = \"5.0\", default-features = false/path = \"..\/..\/concordium-cis2\", version = \"5.0\", default-features = false/g" ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml
diff ${{ runner.temp }}/$PROJECT_NAME/Cargo.toml examples/credential-registry/Cargo.toml
diff ${{ runner.temp }}/$PROJECT_NAME/src/lib.rs examples/credential-registry/src/lib.rs
diff ${{ runner.temp }}/$PROJECT_NAME/README.md examples/credential-registry/README.md
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: true
- 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
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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: true
- 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
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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 on nightly,
runs-on: ubuntu-latest
needs: rustfmt
strategy:
matrix:
target:
- wasm32-unknown-unknown
crates:
- concordium-std/Cargo.toml
- concordium-cis2/Cargo.toml
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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
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-multi-royalties/Cargo.toml
- examples/nametoken/Cargo.toml
- examples/account-signature-checks/Cargo.toml
features:
-
- concordium-std/build-schema
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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 wee_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/nametoken/Cargo.toml
- examples/signature-verifier/Cargo.toml
- examples/cis3-nft-sponsored-txs/Cargo.toml
- examples/credential-registry/Cargo.toml
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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-multi-royalties/Cargo.toml
- examples/cis2-nft/Cargo.toml
- examples/cis3-nft-sponsored-txs/Cargo.toml
- examples/cis2-wccd/Cargo.toml
- examples/credential-registry/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
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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: true
- 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: true
- 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/Cargo.toml
- examples/eSealing/Cargo.toml
- examples/auction/Cargo.toml
- examples/cis2-multi/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/credential-registry/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
steps:
- name: Checkout sources
uses: actions/checkout@v2
with:
submodules: true
- 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
# only run the library tests, no doc tests
args: --manifest-path ${{ matrix.crates }} --target=${{ matrix.target }} --lib