Skip to content

Commit

Permalink
check all crates individually
Browse files Browse the repository at this point in the history
It's relevant to check workspace crates individually because otherwise their compilation problems
due to feature misconfigurations won't be caught, as exemplified by
paritytech#12705
  • Loading branch information
joao-paulo-parity committed Nov 15, 2022
1 parent eb1a2a8 commit fe64411
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 35 deletions.
21 changes: 18 additions & 3 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ default:
# exclude cargo-check-benches from such runs
.test-refs-check-benches:
rules:
- if: $CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "parent_pipeline" && $CI_IMAGE =~ /staging$/
- if: $CI_COMMIT_REF_NAME == "master" && $CI_PIPELINE_SOURCE == "parent_pipeline" && $CI_IMAGE =~ /staging$/
when: never
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule"
Expand Down Expand Up @@ -313,10 +313,25 @@ cancel-pipeline-test-linux-stable-int:
needs:
- job: test-linux-stable-int

cancel-pipeline-cargo-check-subkey:
cancel-pipeline-cargo-check-each-crate-1:
extends: .cancel-pipeline-template
needs:
- job: cargo-check-subkey
- job: "cargo-check-each-crate 1/2"

cancel-pipeline-cargo-check-each-crate-2:
extends: .cancel-pipeline-template
needs:
- job: "cargo-check-each-crate 2/2"

cancel-pipeline-cargo-check-each-crate-macos-1:
extends: .cancel-pipeline-template
needs:
- job: "cargo-check-each-crate-macos 1/2"

cancel-pipeline-cargo-check-each-crate-macos-2:
extends: .cancel-pipeline-template
needs:
- job: "cargo-check-each-crate-macos 2/2"

cancel-pipeline-check-tracing:
extends: .cancel-pipeline-template
Expand Down
2 changes: 1 addition & 1 deletion frame/contracts/proc-macro/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ proc-macro = true
[dependencies]
proc-macro2 = "1"
quote = "1"
syn = "1.0.98"
syn = { version = "1.0.98", features = ["full"] }

[dev-dependencies]

Expand Down
33 changes: 33 additions & 0 deletions scripts/ci/gitlab/check-each-crate.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#!/usr/bin/env bash

## A script that checks each workspace crate individually.
## It's relevant to check workspace crates individually because otherwise their compilation problems
## due to feature misconfigurations won't be caught, as exemplified by
## https://github.com/paritytech/substrate/issues/12705

set -Eeu -o pipefail
shopt -s inherit_errexit

set -x

target_group="$1"
groups_total="$2"

readarray -t workspace_crates < <(\
cargo tree --workspace --depth 0 | \
awk '{ if (length($1) == 0 || substr($1, 1, 1) == "[") { skip } else { print $1 } }'
)

crates_total=${#workspace_crates[*]}
crates_per_group=$(( (crates_total / groups_total) + (crates_total % groups_total > 0) ))

group=1
for ((i=0; i < crates_total; i += crates_per_group)); do
if [ $group -eq "$target_group" ]; then
for crate in "${workspace_crates[@]:$i:$crates_per_group}"; do
cargo check --locked --release -p "$crate"
done
break
fi
group=$(( group + 1 ))
done
3 changes: 0 additions & 3 deletions scripts/ci/gitlab/pipeline/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,6 @@ build-linux-substrate:
variables:
# this variable gets overriden by "rusty-cachier environment inject", use the value as default
CARGO_TARGET_DIR: "$CI_PROJECT_DIR/target"
needs:
- job: cargo-check-subkey
artifacts: false
before_script:
- mkdir -p ./artifacts/subkey
- !reference [.rusty-cachier, before_script]
Expand Down
60 changes: 32 additions & 28 deletions scripts/ci/gitlab/pipeline/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -133,24 +133,8 @@ node-bench-regression-guard:
--compare-with artifacts/benches/$CI_COMMIT_REF_NAME-$CI_COMMIT_SHORT_SHA'
after_script: [""]

cargo-check-subkey:
stage: test
extends:
- .docker-env
- .test-refs
- .pipeline-stopper-artifacts
script:
- rusty-cachier snapshot create
- cd ./bin/utils/subkey
- SKIP_WASM_BUILD=1 time cargo check --locked --release
- rusty-cachier cache upload

cargo-check-try-runtime:
stage: test
# this is an artificial job dependency, for pipeline optimization using GitLab's DAGs
needs:
- job: cargo-check-subkey
artifacts: false
extends:
- .docker-env
- .test-refs
Expand Down Expand Up @@ -393,6 +377,9 @@ test-full-crypto-feature:

test-wasmer-sandbox:
stage: test
needs:
- job: cargo-check-wasmer-sandbox
artifacts: false
extends:
- .docker-env
- .test-refs-wasmer-sandbox
Expand All @@ -409,18 +396,6 @@ test-wasmer-sandbox:
- time cargo nextest run --locked --release --features runtime-benchmarks,wasmer-sandbox,disable-ui-tests --partition count:${CI_NODE_INDEX}/${CI_NODE_TOTAL}
- if [ ${CI_NODE_INDEX} == 1 ]; then rusty-cachier cache upload; fi

cargo-check-macos:
stage: test
extends: .test-refs-no-trigger
before_script:
- !reference [.rust-info-script, script]
variables:
SKIP_WASM_BUILD: 1
script:
- time cargo check --locked --release
tags:
- osx

check-rustdoc:
stage: test
variables:
Expand All @@ -435,3 +410,32 @@ check-rustdoc:
- rusty-cachier snapshot create
- time cargo +nightly doc --locked --workspace --all-features --verbose --no-deps
- rusty-cachier cache upload

.cargo-check-each-crate_template: &cargo-check-each-crate_template
stage: test
extends:
- .docker-env
- .test-refs
parallel: 2

cargo-check-each-crate:
<<: *cargo-check-each-crate_template
variables:
# $CI_JOB_NAME is set manually so that rusty-cachier can share the cache for all
# "cargo-check-each-crate I/N" jobs
CI_JOB_NAME: cargo-check-each-crate
before_script:
- !reference [.rust-info-script, script]
- !reference [.rusty-cachier, before_script]
script:
- rusty-cachier snapshot create
- ./scripts/ci/gitlab/check-each-crate.sh "$CI_NODE_INDEX" "$CI_NODE_TOTAL"
# need to update cache only from one job
- if [ "$CI_NODE_INDEX" == 1 ]; then rusty-cachier cache upload; fi

cargo-check-each-crate-macos:
<<: *cargo-check-each-crate_template
script:
- ./scripts/ci/gitlab/check-each-crate.sh "$CI_NODE_INDEX" "$CI_NODE_TOTAL"
tags:
- osx

0 comments on commit fe64411

Please sign in to comment.