gitlab 0.1808.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.65"

    variables:
        CARGO_UPDATE_POLICY: newest
        GIT_CLONE_PATH: $CI_BUILDS_DIR/rust

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

.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
        - .rules

cache-mindeps:prep:
    extends:
        - .rust_nightly
        - .cargo_fetch_job
        - .cargo_build_tags
        - .cargo_fetch_artifacts
        - .rules
    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
        - .rules
    needs:
        - cache-newest:prep

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

.cargo_audit_ignore:
    variables:
        # Ignored advisories
        # ring is unmaintained (rustls team picked up in the meantime)
        # https://rustsec.org/advisories/RUSTSEC-2025-0007
        CARGO_AUDIT_ARGS: --ignore RUSTSEC-2025-0007

semver-checks:prep:
    extends:
        - .rust_stable
        - .cargo_semver_checks_job
        - .cargo_build_tags
        - .rules
    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
        - .rules
    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
        - .rules
        - .cargo_audit_ignore
    stage: advice
    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
        - .rules
        - .cargo_audit_ignore
    needs:
        - cache-newest:prep

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

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

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

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

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

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

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

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

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

tarpaulin-features:test:
    extends:
        - .rust_stable
        - .cargo_all_features
        - .cargo_tarpaulin_test_job
        - .cargo_build_tags
        - .rules
    needs:
        - tarpaulin-features:build

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

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

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

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

publish:
    extends:
        - .rust_stable
        - .cargo_publish_job
        - .cargo_build_tags
        - .rules
    needs:
        # - job: audit-mindeps:build
        #   artifacts: false
        - job: audit-newest:build
          artifacts: false
        - job: clippy:build
          artifacts: false
        - job: clippy-features:build
          artifacts: false
        - job: mindeps:test
          artifacts: false
        - job: mindeps-features:test
          artifacts: false
        - job: nightly:test
          artifacts: false
        - job: nightly-features:test
          artifacts: false
        - job: stable:test
          artifacts: false
        - job: stable-features:test
          artifacts: false
        - job: tarpaulin-features:test
          artifacts: false