Files
cull-gmail/.circleci/config.yml
Jeremiah Russell edb98980c7 👷 ci(circleci): fix store test results path
- correct indentation for `store_test_results` step in `circleci/config.yml`
2025-10-20 13:46:10 +01:00

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:
- << parameters.test_runner >>
- cargo
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:
- << parameters.test_runner >>
- nextest
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