304 lines
9.2 KiB
YAML
304 lines
9.2 KiB
YAML
version: 2.1
|
|
|
|
parameters:
|
|
fingerprint:
|
|
type: string
|
|
default: SHA256:OkxsH8Z6Iim6WDJBaII9eTT9aaO1f3eDc6IpsgYYPVg
|
|
min-rust-version:
|
|
type: string
|
|
default: "1.88"
|
|
release-flag:
|
|
type: boolean
|
|
default: false
|
|
description: "If true, the release workflow will be executed."
|
|
success-flag:
|
|
type: boolean
|
|
default: false
|
|
description: "If true, the success pipeline will be executed."
|
|
validation-flag:
|
|
type: boolean
|
|
default: false
|
|
description: "If true, the validation pipeline will be executed."
|
|
|
|
orbs:
|
|
toolkit: jerus-org/circleci-toolkit@2.13.4
|
|
|
|
executors:
|
|
rust-env:
|
|
docker:
|
|
- image: jerusdp/ci-rust:<< pipeline.parameters.min-rust-version >>
|
|
|
|
commands:
|
|
cargo_nextest:
|
|
description: >
|
|
This command tests using the nextest test runner. The compiler version is as
|
|
specified in the parameters. If no version is specified, it defaults to
|
|
`stable`. The build will always include all features.
|
|
parameters:
|
|
cargo_all_features:
|
|
default: true
|
|
description: Build all features
|
|
type: boolean
|
|
cargo_args:
|
|
default: ""
|
|
description: Additional parameters to pass to cargo build
|
|
type: string
|
|
cargo_bin:
|
|
default: ""
|
|
description: Binary to build
|
|
type: string
|
|
cargo_package:
|
|
default: ""
|
|
description: Package to build
|
|
type: string
|
|
cargo_target:
|
|
default: ""
|
|
description: Target to build for
|
|
type: string
|
|
nextest_profile:
|
|
default: ""
|
|
description: Nextest profile to use
|
|
type: string
|
|
rust_version:
|
|
default: stable
|
|
description: The rust compiler version to use
|
|
type: string
|
|
steps:
|
|
- run:
|
|
command: |
|
|
set -ex
|
|
if [ "<< parameters.cargo_all_features >>" == true ]; then
|
|
all_features=" --all-features "
|
|
else
|
|
all_features=""
|
|
fi
|
|
|
|
if [ "<< parameters.nextest_profile >>" != "" ]; then
|
|
profile=" --profile << parameters.nextest_profile >>"
|
|
else
|
|
profile="ci"
|
|
fi
|
|
|
|
if [ "<< parameters.cargo_package >>" != "" ]; then
|
|
package=" --package << parameters.cargo_package >>"
|
|
else
|
|
package=""
|
|
fi
|
|
|
|
if [ "<< parameters.cargo_bin >>" != "" ]; then
|
|
bin=" --bin << parameters.cargo_bin >>"
|
|
else
|
|
bin=""
|
|
fi
|
|
|
|
if [ "<< parameters.cargo_target >>" != "" ]; then
|
|
target=" --target << parameters.cargo_target >>"
|
|
else
|
|
target=""
|
|
fi
|
|
|
|
cargo +<< parameters.rust_version >> nextest run \
|
|
$profile \
|
|
<< parameters.cargo_args >> \
|
|
$all_features \
|
|
$package \
|
|
$bin \
|
|
$target
|
|
name: Check test << parameters.rust_version >>
|
|
|
|
jobs:
|
|
common_tests:
|
|
description: >
|
|
Execute common tests for all rust crates including formatting, clippy and
|
|
default tests
|
|
executor:
|
|
name: rust-env
|
|
parameters:
|
|
cargo_all_features:
|
|
default: true
|
|
description: Build all features
|
|
type: boolean
|
|
cargo_args:
|
|
default: ""
|
|
description: Additional parameters to pass to cargo build
|
|
type: string
|
|
cargo_package:
|
|
default: ""
|
|
description: Package to pass to cargo build
|
|
type: string
|
|
cargo_target:
|
|
default: ""
|
|
description: Target to pass to cargo build
|
|
type: string
|
|
docker_tag_suffix:
|
|
default: ""
|
|
description: The suffix to append to the docker tag
|
|
type: string
|
|
min_rust_version:
|
|
description: "Required: The minimum version of the rust compiler to use"
|
|
type: string
|
|
test_runner:
|
|
default: cargo
|
|
description: The test runner to use
|
|
enum:
|
|
- cargo
|
|
- nextest
|
|
type: enum
|
|
nextest_profile:
|
|
default: ""
|
|
description: Nextest profile to use
|
|
type: string
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
command: cargo --version
|
|
name: Check rust version for code
|
|
- run:
|
|
command: |
|
|
rustfmt --version
|
|
cargo fmt --all -- --check
|
|
name: Check formatting for code
|
|
- when:
|
|
condition:
|
|
equal:
|
|
- cargo
|
|
- << parameters.test_runner >>
|
|
steps:
|
|
- toolkit/cargo_test:
|
|
cargo_all_features: << parameters.cargo_all_features >>
|
|
cargo_args: << parameters.cargo_args >>
|
|
cargo_package: << parameters.cargo_package >>
|
|
cargo_target: << parameters.cargo_target >>
|
|
rust_version: << parameters.min_rust_version >>
|
|
- when:
|
|
condition:
|
|
equal:
|
|
- nextest
|
|
- << parameters.test_runner >>
|
|
steps:
|
|
- cargo_nextest:
|
|
cargo_all_features: << parameters.cargo_all_features >>
|
|
cargo_args: << parameters.cargo_args >>
|
|
cargo_package: << parameters.cargo_package >>
|
|
cargo_target: << parameters.cargo_target >>
|
|
rust_version: << parameters.min_rust_version >>
|
|
nextest_profile: << parameters.nextest_profile >>
|
|
|
|
workflows:
|
|
check_last_commit:
|
|
when:
|
|
and:
|
|
- not:
|
|
equal: [scheduled_pipeline, << pipeline.trigger_source >>]
|
|
- not: << pipeline.parameters.success-flag >>
|
|
- not: << pipeline.parameters.release-flag >>
|
|
- not: << pipeline.parameters.validation-flag >>
|
|
|
|
jobs:
|
|
- toolkit/choose_pipeline:
|
|
name: choose pipeline based on committer
|
|
context: bot-check
|
|
|
|
validation:
|
|
when:
|
|
and:
|
|
- not:
|
|
equal: [scheduled_pipeline, << pipeline.trigger_source >>]
|
|
- not: << pipeline.parameters.success-flag >>
|
|
- << pipeline.parameters.validation-flag >>
|
|
- not: << pipeline.parameters.release-flag >>
|
|
jobs:
|
|
- toolkit/label:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
context: pcu-app
|
|
filters:
|
|
branches:
|
|
only:
|
|
- main
|
|
- toolkit/required_builds:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
- toolkit/optional_builds:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
- toolkit/test_doc_build:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
- common_tests:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
test_runner: nextest
|
|
nextest_profile: ci
|
|
post-steps:
|
|
- store_test_results:
|
|
path: target/nextest/ci/junit.xml
|
|
- toolkit/idiomatic_rust:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
- toolkit/security:
|
|
context: SonarCloud
|
|
ignore_advisories: RUSTSEC-2025-0066
|
|
- toolkit/update_prlog:
|
|
filters:
|
|
branches:
|
|
ignore:
|
|
- main
|
|
requires:
|
|
- toolkit/required_builds
|
|
- toolkit/test_doc_build
|
|
- toolkit/idiomatic_rust
|
|
- toolkit/security
|
|
- common_tests
|
|
context:
|
|
- release
|
|
- bot-check
|
|
ssh_fingerprint: << pipeline.parameters.fingerprint >>
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
|
|
on_success:
|
|
when:
|
|
and:
|
|
- not:
|
|
equal: [scheduled_pipeline, << pipeline.trigger_source >>]
|
|
- << pipeline.parameters.success-flag >>
|
|
- not: << pipeline.parameters.validation-flag >>
|
|
- not: << pipeline.parameters.release-flag >>
|
|
|
|
jobs:
|
|
- toolkit/end_success
|
|
|
|
release:
|
|
when:
|
|
and:
|
|
- or:
|
|
- and:
|
|
- equal: [scheduled_pipeline, << pipeline.trigger_source >>]
|
|
- equal: ["release check", << pipeline.schedule.name >>]
|
|
- << pipeline.parameters.release-flag >>
|
|
- not: << pipeline.parameters.success-flag >>
|
|
- not: << pipeline.parameters.validation-flag >>
|
|
jobs:
|
|
- toolkit/save_next_version:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
|
|
- toolkit/make_release:
|
|
requires:
|
|
- toolkit/save_next_version
|
|
pre-steps:
|
|
- attach_workspace:
|
|
at: /tmp/workspace
|
|
- run:
|
|
name: Set SEMVER based on next-version file
|
|
command: |
|
|
set +ex
|
|
export SEMVER=$(cat /tmp/workspace/next-version)
|
|
echo $SEMVER
|
|
echo "export SEMVER=$SEMVER" >> "$BASH_ENV"
|
|
context:
|
|
- release
|
|
- bot-check
|
|
ssh_fingerprint: << pipeline.parameters.fingerprint >>
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
when_get_version: false
|
|
|
|
- toolkit/no_release:
|
|
min_rust_version: << pipeline.parameters.min-rust-version >>
|
|
requires:
|
|
- toolkit/save_next_version:
|
|
- failed
|