Skip to content
Snippets Groups Projects
.gitlab-ci.yml 2.86 KiB
stages:
  - quality
  - build
  - tests
  - deploy

workflow:
  rules:
    - changes:
      - node/**/*
      - pallets/**/*
      - runtime/**/*
      - .gitlab-ci.yml
      - Cargo.toml
      - Cargo.lock

.env:
  image: paritytech/ci-linux:production
  tags:
    - elois-boson

fmt_and_clippy:
  extends: .env
  rules:
    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH == "master"'
      when: never
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - when: manual
  stage: quality
  script:
    - cargo fmt -- --version
    - cargo fmt -- --check
    - cargo clippy -- -V
    - cargo clippy --all --tests -- -D warnings

build_debug:
  extends: .env
  rules:
    - if: $CI_COMMIT_TAG
      when: never
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
    - when: manual
  stage: build
  script:
    - cargo clean -p duniter
    - cargo build
    - mkdir build
    - mv target/debug/duniter build/duniter
  artifacts:
    paths:
      - build/
  cache:
    - key:
        files:
          - Cargo.lock
      paths:
        - target/debug

build_release:
  extends: .env
  rules:
    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH =~ /^release/'
    - when: never
  stage: build
  script:
    - cargo build --release
    - mkdir build
    - mv target/release/duniter build/duniter
  artifacts:
    paths:
      - build/
    expire_in: 1 day

tests_debug:
  extends: .env
  rules:
    - if: $CI_COMMIT_REF_NAME =~ /^wip*$/
      when: manual
    - if: $CI_COMMIT_TAG
      when: never
    - if: '$CI_MERGE_REQUEST_ID || $CI_COMMIT_BRANCH == "master"'
    - when: manual
  stage: tests
  variables:
    DUNITER_BINARY_PATH: "../build/duniter"
    DUNITER_INTEGRATION_TESTS_SPAWN_NODE_DURATION: "20"
  script:
    - cargo test
  dependencies:
    - build_debug

tests_release:
  extends: .env
  rules:
    - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH =~ /^release/'
    - when: never
  stage: tests
  variables:
    DUNITER_BINARY_PATH: "../build/duniter"
    DUNITER_INTEGRATION_TESTS_SPAWN_NODE_DURATION: "10"
  script:
    - cargo test
  dependencies:
    - build_release

.docker-build-app-image:
  stage: deploy
  image: docker:18.06
  tags:
    - redshift
  services:
    - docker:18.06-dind
  before_script:
    - docker info
  script:
    - docker pull $CI_REGISTRY_IMAGE:$IMAGE_TAG || true
    - docker build --cache-from $CI_REGISTRY_IMAGE:$IMAGE_TAG --pull -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" -f $DOCKERFILE_PATH .
    - docker login -u "duniterteam" -p "$DUNITERTEAM_PASSWD"
    - docker tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" "duniter/duniter-v2s:$IMAGE_TAG"
    - docker push "duniter/duniter-v2s:$IMAGE_TAG"

deploy_docker_debug:
  extends: .docker-build-app-image
  rules:
    - if: $CI_COMMIT_TAG
      when: never
    - if: $CI_COMMIT_BRANCH == "master"
  variables:
    DOCKERFILE_PATH: "docker/duniter-debug.Dockerfile"
    IMAGE_TAG: "debug-sha-$CI_COMMIT_SHORT_SHA"