.gitlab-ci.yml 2.56 KiB
Newer Older
# .gitlab-ci.yml
#
# cargo-contract
#
# pipelines can be triggered manually in the web


stages:
  - check
  - test
  - build

variables:
  GIT_STRATEGY:                    fetch
  CARGO_HOME:                      "/ci-cache/${CI_PROJECT_NAME}/cargo/${CI_JOB_NAME}"
  CARGO_TARGET_DIR:                "/ci-cache/${CI_PROJECT_NAME}/targets/${CI_COMMIT_REF_NAME}/${CI_JOB_NAME}"
  CI_SERVER_NAME:                  "GitLab CI"
  REGISTRY:                        "paritytech"
  RUSTUP_TOOLCHAIN:                nightly-2020-10-01

.collect-artifacts:                &collect-artifacts
  artifacts:
    name:                          "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
    when:                          on_success
    expire_in:                     7 days
    paths:
      - artifacts/

.docker-env:                       &docker-env
  image:                          ${REGISTRY}/contracts-ci-linux:latest
  before_script:
    - cargo -vV
    - rustc -vV
    - rustup show
    - bash --version
    - mkdir -p ${CARGO_HOME}; touch ${CARGO_HOME}/config
    - mkdir -p ${CARGO_TARGET_DIR}
    # global RUSTFLAGS overrides the linker args so this way is better to pass the flags
    - printf '[build]\nrustflags = ["-C", "link-dead-code"]\n' | tee ${CARGO_HOME}/config
    - sccache -s
  only:
    - master
    - /^v[0-9]+\.[0-9]+.*$/        # i.e. v1.0, v2.1rc1
    - schedules
    - web
    - /^[0-9]+$/                   # PRs
  dependencies:                    []
  interruptible:                   true
  retry:
    max: 2
    when:
      - runner_system_failure
      - unknown_failure
      - api_failure
  tags:
    - linux-docker


#### stage:                        check
# be aware that the used image has cargo-contract installed

fmt:
  stage:                           check
  <<:                              *docker-env
  script:
    - cargo fmt --verbose --all -- --check

#### stage:                        test (all features)

test:
  stage:                           test
  <<:                              *docker-env
  script:
    - cargo test --verbose --all --all-features
#### stage:                        build (default features)
build:
  stage:                           build
  <<:                              *docker-env
  only:
    - schedules
    - master
  script:
    - cargo build --verbose --release
Denis_P's avatar
Denis_P committed
  after_script:
    - mkdir -p ./artifacts/cargo-contract/
    - cp ${CARGO_TARGET_DIR}/release/cargo-contract ./artifacts/cargo-contract/