gitlab 0.1610.0

Gitlab API client.
Documentation
include:
    # Metadata shared by many jobs
    - local: .gitlab/rules.yml
    - local: .gitlab/artifacts.yml

    # Builds.
    - local: .gitlab/cargo.yml

stages:
    - prep
    - build
    - test
    - advice
    - publish

.rust_minimum_mindeps:
    image: "rust:1.63"

    variables:
        CARGO_UPDATE_POLICY: newest
        GIT_CLONE_PATH: $CI_BUILDS_DIR/rust

.rust_minimum_mindeps_features:
    extends: .rust_minimum_mindeps
    image: "rust:1.64"

.rust_minimum:
    image: "rust:1.63"

    variables:
        CARGO_UPDATE_POLICY: newest
        GIT_CLONE_PATH: $CI_BUILDS_DIR/rust

.rust_stable:
    image: "rust:latest"

    variables:
        CARGO_UPDATE_POLICY: newest
        GIT_CLONE_PATH: $CI_BUILDS_DIR/rust

.rust_nightly:
    extends: .rust_stable

    image: "rustlang/rust:nightly"

.cargo_no_features:
    variables:
        CARGO_FEATURES: --no-default-features

.cargo_all_features:
    variables:
        CARGO_FEATURES: --features client_api

cache-newest:prep:
    extends:
        - .rust_stable
        - .cargo_fetch_job
        - .cargo_build_tags
        - .cargo_fetch_artifacts
        - .run_automatically

cache-mindeps:prep:
    extends:
        - .rust_nightly
        - .cargo_fetch_job
        - .cargo_build_tags
        - .cargo_fetch_artifacts
        - .run_automatically
    variables:
        GENERATE_LOCKFILE_ARGS: "-Z minimal-versions"
        CARGO_UPDATE_POLICY: mindeps
        CARGO_FEATURES: --features minimal_versions

clippy:build:
    extends:
        - .rust_stable
        - .cargo_no_features
        - .cargo_clippy_job
        - .cargo_build_tags
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

clippy-features:build:
    extends:
        - .rust_stable
        - .cargo_all_features
        - .cargo_clippy_job
        - .cargo_build_tags
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

.cargo_audit_ignore:
    variables:
        # Ignored advisories
        #
        # Use-after-free due to a lifetime error in `Vec::into_iter()`
        # https://rustsec.org/advisories/RUSTSEC-2022-0078
        #
        # Ascii allows out-of-bounds array indexing in safe code (mindeps)
        # https://rustsec.org/advisories/RUSTSEC-2023-0015
        CARGO_AUDIT_ARGS: --ignore RUSTSEC-2022-0078 --ignore RUSTSEC-2023-0015

semver-checks:prep:
    extends:
        - .rust_stable
        - .cargo_semver_checks_job
        - .cargo_build_tags
        - .run_automatically
    variables:
        CARGO_FEATURES: "--only-explicit-features --features _nohooks"
        CHANGELOG_PATH: CHANGELOG.md

semver-checks:features:prep:
    extends:
        - .rust_stable
        - .cargo_semver_checks_job
        - .cargo_build_tags
        - .run_automatically
    variables:
        CARGO_FEATURES: "--only-explicit-features --features _nohooks --features client_api"
        CHANGELOG_PATH: CHANGELOG.md

audit-mindeps:build:
    extends:
        - .rust_minimum_mindeps
        - .cargo_audit_job
        - .cargo_build_tags
        - .run_automatically
        - .cargo_audit_ignore
    stage: advice
    dependencies:
        - cache-mindeps:prep
    needs:
        - cache-mindeps:prep
    variables:
        CARGO_UPDATE_POLICY: mindeps
        RUSTGITLAB_CI_NO_MR: "true"

audit-newest:build:
    extends:
        - .rust_stable
        - .cargo_audit_job
        - .cargo_build_tags
        - .run_automatically
        - .cargo_audit_ignore
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

minimum:build:
    extends:
        - .rust_minimum
        - .cargo_no_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

minimum:test:
    extends:
        - .rust_minimum
        - .cargo_no_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - minimum:build
    needs:
        - minimum:build

stable:build:
    extends:
        - .rust_stable
        - .cargo_no_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

stable:test:
    extends:
        - .rust_stable
        - .cargo_no_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - stable:build
    needs:
        - stable:build

nightly:build:
    extends:
        - .rust_nightly
        - .cargo_no_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

nightly:test:
    extends:
        - .rust_nightly
        - .cargo_no_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - nightly:build
    needs:
        - nightly:build

mindeps:build:
    extends:
        - .rust_minimum_mindeps
        - .cargo_no_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-mindeps:prep
    needs:
      - cache-mindeps:prep

mindeps:test:
    extends:
        - .rust_minimum_mindeps
        - .cargo_no_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - mindeps:build
    needs:
        - mindeps:build

minimum-features:build:
    extends:
        - .rust_minimum
        - .cargo_all_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

minimum-features:test:
    extends:
        - .rust_minimum
        - .cargo_all_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - minimum-features:build
    needs:
        - minimum-features:build

stable-features:build:
    extends:
        - .rust_stable
        - .cargo_all_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

stable-features:test:
    extends:
        - .rust_stable
        - .cargo_all_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - stable-features:build
    needs:
        - stable-features:build

tarpaulin-features:build:
    extends:
        - .rust_stable
        - .cargo_all_features
        - .cargo_tarpaulin_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

tarpaulin-features:test:
    extends:
        - .rust_stable
        - .cargo_all_features
        - .cargo_tarpaulin_test_job
        - .cargo_privileged_tags
        - .run_automatically
    dependencies:
        - tarpaulin-features:build
    needs:
        - tarpaulin-features:build

nightly-features:build:
    extends:
        - .rust_nightly
        - .cargo_all_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-newest:prep
    needs:
        - cache-newest:prep

nightly-features:test:
    extends:
        - .rust_nightly
        - .cargo_all_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - nightly-features:build
    needs:
        - nightly-features:build

mindeps-features:build:
    extends:
        - .rust_minimum_mindeps_features
        - .cargo_all_features
        - .cargo_build_job
        - .cargo_build_tags
        - .cargo_build_artifacts
        - .run_automatically
    dependencies:
        - cache-mindeps:prep
    needs:
        - cache-mindeps:prep

mindeps-features:test:
    extends:
        - .rust_minimum_mindeps_features
        - .cargo_all_features
        - .cargo_test_job
        - .cargo_build_tags
        - .cargo_test_artifacts
        - .run_automatically
    dependencies:
        - mindeps-features:build
    needs:
        - mindeps-features:build

publish:
    extends:
        - .rust_stable
        - .cargo_publish_job
        - .cargo_build_tags
        - .run_automatically
    dependencies: []
    needs:
        #- audit-mindeps:build
        - audit-newest:build
        - clippy:build
        - clippy-features:build
        - mindeps:test
        - mindeps-features:test
        - minimum:test
        - minimum-features:test
        - nightly:test
        - nightly-features:test
        - stable:test
        - stable-features:test
        - tarpaulin-features:test