.gitlab-ci.yml 4.54 KiB
Newer Older
default:
  interruptible:                   true
  retry:
    max: 2
    when:
      - runner_system_failure
      - unknown_failure
      - api_failure

stages:
  - lint
  - test
  - benchmark
  - publish

variables:                         &default-vars
  GIT_STRATEGY:                    fetch
  GIT_DEPTH:                       100
  CARGO_INCREMENTAL:               0
  CARGO_TARGET_DIR:                "/ci-cache/${CI_PROJECT_NAME}/targets/${CI_COMMIT_REF_NAME}/${CI_JOB_NAME}"
  CI_IMAGE:                        "paritytech/ci-linux:production"
  VAULT_SERVER_URL:                "https://vault.parity-mgmt-vault.parity.io"
  VAULT_AUTH_PATH:                 "gitlab-parity-io-jwt"
  VAULT_AUTH_ROLE:                 "cicd_gitlab_parity_${CI_PROJECT_NAME}"

.vault-secrets:                    &vault-secrets
  secrets:
    GITHUB_TOKEN:
      vault:                       cicd/gitlab/parity/GITHUB_TOKEN@kv
      file:                        false
    GITHUB_USER:
      vault:                       cicd/gitlab/parity/GITHUB_USER@kv
      file:                        false

.common-refs:                      &common-refs
  rules:
    - if: $CI_PIPELINE_SOURCE == "web"
    - if: $CI_COMMIT_REF_NAME == "main"
    - if: $CI_COMMIT_REF_NAME == "master"
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: never
    - if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/                         # PRs

# run nightly by schedule
.schedule-refs:                    &schedule-refs
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"

.rust-info-script:                 &rust-info-script
  - rustup show
  - cargo --version
  - rustup +nightly show
  - cargo +nightly --version
  - bash --version
  - sccache -s

.docker-env:                       &docker-env
  image:                           "${CI_IMAGE}"
  before_script:
    - *rust-info-script
    - sccache -s
  tags:
    - linux-docker

.kubernetes-env:                   &kubernetes-env
  image:                           "${CI_IMAGE}"
  tags:
    - kubernetes-parity-build

.collect-artifacts:                &collect-artifacts
  artifacts:
    name:                          "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
    when:                          on_success
    expire_in:                     28 days
    paths:
      - ./artifacts/
    reports:
      dotenv: runner.env
#### stage:                        lint

fmt:
  stage:                           lint
  <<:                              *docker-env
  <<:                              *common-refs
  script:
    # FIXME: remove component add after https://github.com/paritytech/substrate/issues/10411 is fixed
    - rustup component add rustfmt
    - cargo fmt --all -- --check

clippy:
  stage:                           lint
  <<:                              *docker-env
  <<:                              *common-refs
  script:
    # FIXME: remove component add after https://github.com/paritytech/substrate/issues/10411 is fixed
    - rustup component add clippy
    - cargo clippy --all-targets

check-rustdoc-links:
  stage:                           lint
  <<:                              *docker-env
  <<:                              *common-refs
  script:
    - RUSTDOCFLAGS="--deny broken_intra_doc_links" cargo doc --workspace --no-deps --document-private-items

#### stage:                       test

check-code:
  stage:                           test
  <<:                              *docker-env
  <<:                              *common-refs
  script:
    - cargo install cargo-hack
    - cargo hack check --workspace --each-feature

test:
  stage:                           test
  <<:                              *docker-env
  <<:                              *common-refs
  script:
    - cargo test

benchmarks:
  stage:                           benchmark
  <<:                              *docker-env
  <<:                              *collect-artifacts
  <<:                              *schedule-refs
  script:
    - cargo bench -p jsonrpsee-benchmarks -- --output-format bencher | tee output.txt
    - mkdir artifacts
    - cp output.txt artifacts/
    - echo ${CI_RUNNER_DESCRIPTION}
    - echo "RUNNER_NAME=${CI_RUNNER_DESCRIPTION}" > runner.env
  tags:
    - linux-docker-benches

publish-bench:
  stage:                           publish
  variables:
    CI_IMAGE:                      "paritytech/tools:latest"
  <<:                              *kubernetes-env
  <<:                              *schedule-refs
  needs:
    - job:                         benchmarks
      artifacts:                   true
  script:
    - echo $RUNNER_NAME
    - .scripts/ci/push_bench_results.sh artifacts/output.txt