Generalize Vote and SignatureAggregator over type of value they hold. #10823
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, 'devnet_*', 'testnet_*' ] | |
pull_request: | |
branches: | |
- "**" | |
paths-ignore: | |
- 'CONTRIBUTING.md' | |
- 'INSTALL.md' | |
- 'docker/**' | |
- 'docker_scylla/**' | |
- 'configuration/**' | |
- 'kubernetes/**' | |
workflow_dispatch: | |
# This allows a subsequently queued workflow run to interrupt previous runs on pull-requests | |
concurrency: | |
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.run_id }}' | |
cancel-in-progress: true | |
env: | |
CARGO_TERM_COLOR: always | |
CARGO_INCREMENTAL: 0 | |
CARGO_NET_RETRY: 10 | |
RUST_BACKTRACE: full | |
# We allow redundant explicit links because `cargo rdme` doesn't know how to resolve implicit intra-crate links. | |
RUSTDOCFLAGS: -A rustdoc::redundant_explicit_links -D warnings | |
RUSTFLAGS: -D warnings | |
RUSTUP_MAX_RETRIES: 10 | |
RUST_LOG: linera=debug | |
RUST_LOG_FORMAT: plain | |
LINERA_STORAGE_SERVICE: 127.0.0.1:1235 | |
LINERA_WALLET: /tmp/local-linera-net/wallet_0.json | |
LINERA_STORAGE: rocksdb:/tmp/local-linera-net/client_0.db | |
LINERA_FAUCET_URL: http://localhost:8079 | |
permissions: | |
contents: read | |
jobs: | |
remote-net-test: | |
runs-on: ubuntu-latest-16-cores | |
timeout-minutes: 40 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run the storage-service instance | |
run: | | |
cargo run --release -p linera-storage-service -- memory --endpoint $LINERA_STORAGE_SERVICE & | |
- name: Run the validators | |
run: | | |
cargo build --features storage-service | |
mkdir /tmp/local-linera-net | |
cargo run --features storage-service --bin linera -- net up --storage service:tcp:localhost:1235:table --policy-config devnet --path /tmp/local-linera-net --validators 4 --shards 4 & | |
- name: Create two epochs and run the faucet | |
run: | | |
cargo build --bin linera | |
cargo run --bin linera -- resource-control-policy --block 0.0000001 | |
cargo run --bin linera -- resource-control-policy --block 0.000000 | |
cargo run --bin linera -- faucet --amount 1000 --port 8079 69705f85ac4c9fef6c02b4d83426aaaf05154c645ec1c61665f8e450f0468bc0 & | |
- name: Run the remote-net tests | |
run: | | |
cargo test -p linera-service remote_net_grpc --features remote-net | |
execution-wasmtime-test: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Run some extra execution tests with wasmtime | |
run: | | |
cargo test --locked -p linera-execution --features wasmtime | |
wasm-application-test: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Wasm application tests | |
run: | | |
cd examples | |
cargo test --locked | |
default-features-and-witty-integration-test: | |
runs-on: ubuntu-latest-16-cores | |
timeout-minutes: 20 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Compile Wasm test modules for Witty integration tests | |
run: | | |
cargo build -p linera-witty-test-modules --target wasm32-unknown-unknown | |
- name: Run all tests using the default features (plus unstable-oracles, except storage-service) | |
run: | | |
# TODO(#2764): Actually link this to the default features | |
cargo test --no-default-features --features fs,macros,wasmer,rocksdb,unstable-oracles --locked | |
- name: Run Witty integration tests | |
run: | | |
cargo test -p linera-witty --features wasmer,wasmtime | |
check-outdated-cli-md: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Check for outdated CLI.md | |
run: | | |
if ! diff CLI.md <(cargo run --bin linera -- help-markdown) | |
then | |
echo '`CLI.md` differs from the output of `linera help-markdown`' | |
echo 'Run `linera help-markdown > CLI.md` to update it.' | |
exit 1 | |
fi | |
benchmark-test: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run the storage-service instance | |
run: | | |
cargo run --release -p linera-storage-service -- memory --endpoint $LINERA_STORAGE_SERVICE & | |
- name: Run the benchmark test | |
run: | | |
cargo build --locked -p linera-service --bin linera-benchmark --features benchmark,storage-service | |
cargo test --locked -p linera-service --features benchmark,storage-service benchmark | |
ethereum-tests: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- uses: foundry-rs/[email protected] | |
- name: Cache solc | |
id: cache-solc | |
uses: actions/cache@v4 | |
with: | |
path: /home/runner/.solc | |
key: solc-v0.8.25 | |
restore-keys: solc- | |
- name: Get Solc | |
if: ${{ steps.cache-solc.outputs.cache-hit != 'true' }} | |
uses: pontem-network/get-solc@master | |
with: | |
version: v0.8.25 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run the storage-service instance | |
run: | | |
cargo run --release -p linera-storage-service -- memory --endpoint $LINERA_STORAGE_SERVICE & | |
- name: Run Ethereum tests | |
run: | | |
cargo test -p linera-ethereum --features ethereum | |
cargo test test_wasm_end_to_end_ethereum_tracker --features ethereum,storage-service,unstable-oracles | |
storage-service-tests: | |
runs-on: ubuntu-latest-16-cores | |
timeout-minutes: 50 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build example applications | |
run: | | |
cd examples | |
cargo build --locked --release --target wasm32-unknown-unknown | |
- name: Run the storage-service instance and the storage-service tests | |
run: | | |
cargo run --release -p linera-storage-service -- memory --endpoint $LINERA_STORAGE_SERVICE & | |
cargo test --features storage-service,unstable-oracles -- storage_service --nocapture | |
web: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
- uses: arduino/setup-protoc@v3 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: actions/checkout@v3 | |
- name: Switch to nightly Rust toolchain | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Compile `linera-client` for the browser | |
run: | | |
cargo build -p linera-client \ | |
--locked \ | |
--target wasm32-unknown-unknown \ | |
--no-default-features \ | |
--features web-default | |
- name: Install chromedriver | |
uses: nanasess/setup-chromedriver@v2 | |
- name: Install wasm-pack | |
uses: jetli/[email protected] | |
with: | |
version: 'latest' | |
- name: Run the browser tests | |
run: | | |
cd linera-views | |
WASM_BINDGEN_TEST_TIMEOUT=300 wasm-pack test --chrome --headless -- --features web-default | |
lint-unexpected-chain-load-operations: | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Check for unexpected chain load operations | |
run: | | |
./scripts/check_chain_loads.sh | |
lint-check-copyright-headers: | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Build check_copyright_header script | |
run: | | |
cd ./scripts/check_copyright_header | |
cargo build --locked --release | |
- name: Check Copyright headers | |
run: > | |
find linera-* examples -name '*.rs' -a -not -wholename '*/target/*' -print0 | |
| xargs -0 scripts/target/release/check_copyright_header | |
lint-cargo-machete: | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install cargo-machete | |
run: | | |
cargo install cargo-machete --locked | |
- name: Check for unused dependencies | |
run: | | |
cargo machete | |
lint-cargo-fmt: | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Check formatting | |
run: | | |
cargo fmt -- --check | |
lint-cargo-sort: | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install cargo-sort | |
run: | | |
RUSTFLAGS='' cargo install cargo-sort --git https://github.com/Twey/cargo-sort/ --tag linera | |
- name: Check if Cargo.toml files are sorted | |
run: | | |
cargo sort --check --workspace --grouped | |
- name: Check if example Cargo.toml files are sorted | |
run: | | |
cd examples | |
cargo sort --check --workspace --grouped | |
lint-check-for-outdated-readme: | |
runs-on: ubuntu-latest | |
timeout-minutes: 5 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install cargo-rdme | |
run: | | |
cargo install cargo-rdme --locked | |
- name: Check for outdated README.md | |
run: | | |
(set -e; for I in linera-*; do if [ -d "$I" ]; then echo $I; cargo rdme --check --no-fail-on-warnings -w $I; fi; done) | |
(set -e; cd examples; for dir in */; do | |
if [ -f "${dir}README.md" ] && grep -q "<!-- cargo-rdme start -->" "${dir}README.md"; then | |
dir_name="${dir%/}" | |
echo "${dir_name}" | |
cargo rdme --check --no-fail-on-warnings -w "${dir_name}" | |
fi | |
done) | |
lint-wasm-applications: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run Wasm application lints | |
run: | | |
cd examples | |
cargo fmt -- --check | |
cargo clippy --all-targets --all-features --target wasm32-unknown-unknown --locked | |
cargo clippy --all-targets --all-features --target x86_64-unknown-linux-gnu --locked | |
lint-cargo-clippy: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run clippy | |
run: | | |
cargo clippy --locked --all-targets --all-features | |
cargo clippy --locked --no-default-features --features kubernetes | |
cargo clippy --locked --no-default-features | |
cargo clippy --locked --target wasm32-unknown-unknown --no-default-features --features web-default \ | |
-p linera-client \ | |
-p linera-rpc \ | |
-p linera-views | |
lint-cargo-doc: | |
runs-on: ubuntu-latest | |
timeout-minutes: 20 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run cargo doc | |
run: | | |
cargo doc --locked --all-features | |
lint-check-linera-service-graphql-schema: | |
runs-on: ubuntu-latest | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Check linera-service GraphQL schema | |
run: | | |
diff <(cargo run --locked --bin linera-schema-export) linera-service-graphql-client/gql/service_schema.graphql | |
lint-check-all-features: | |
runs-on: ubuntu-latest-16-cores | |
timeout-minutes: 50 | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Put lint toolchain file in place | |
run: | | |
ln -sf toolchains/nightly/rust-toolchain.toml | |
- uses: actions-rust-lang/setup-rust-toolchain@v1 | |
- name: Install cargo-all-features | |
run: | | |
cargo install --git https://github.com/ma2bd/cargo-all-features --branch workspace_metadata --locked | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run cargo check-all-features | |
run: | | |
cargo check-all-features --all-targets |