stages:
  - test
  - push-release
  - build
variables:
  RUST_BACKTRACE: "1"
  RUSTFLAGS: ""
  CARGOFLAGS: ""
  CI_SERVER_NAME: "GitLab CI"
  LIBSSL: "libssl1.0.0 (>=1.0.0)"
  CARGO_HOME: $CI_PROJECT_DIR/cargo
cache:
  key: "$CI_BUILD_STAGE-$CI_BUILD_REF_NAME"
  paths:
    - target/
    - cargo/
  untracked: true
linux-stable:
  stage: build
  image: parity/rust:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - rustup default stable
    # ARGUMENTS: 1. BUILD_PLATFORM (target for binaries) 2. PLATFORM (target for cargo) 3. ARC (architecture) 4. & 5. CC & CXX flags 6. binary identifier
    - scripts/gitlab-build.sh x86_64-unknown-linux-gnu x86_64-unknown-linux-gnu amd64 gcc g++ ubuntu
  tags:
    - rust-stable
  artifacts:
    paths:
    - parity.zip
    name: "stable-x86_64-unknown-linux-gnu_parity"
linux-stable-debian:
  stage: build
  image: parity/rust-debian:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - export LIBSSL="libssl1.1 (>=1.1.0)"
    - scripts/gitlab-build.sh x86_64-unknown-debian-gnu x86_64-unknown-linux-gnu amd64 gcc g++ debian
  tags:
    - rust-debian
  artifacts:
    paths:
    - parity.zip
    name: "stable-x86_64-unknown-debian-gnu_parity"
linux-centos:
  stage: build
  image: parity/rust-centos:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh x86_64-unknown-centos-gnu x86_64-unknown-linux-gnu x86_64 gcc g++ centos
  tags:
    - rust-centos
  artifacts:
    paths:
    - parity.zip
    name: "x86_64-unknown-centos-gnu_parity"
linux-i686:
  stage: build
  image: parity/rust-i686:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh i686-unknown-linux-gnu i686-unknown-linux-gnu i386 gcc g++ ubuntu
  tags:
    - rust-i686
  artifacts:
    paths:
      - parity.zip
    name: "i686-unknown-linux-gnu"
linux-armv7:
  stage: build
  image: parity/rust-armv7:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh armv7-unknown-linux-gnueabihf armv7-unknown-linux-gnueabihf armhf arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++ ubuntu
  tags:
    - rust-arm
  artifacts:
    paths:
    - parity.zip
    name: "armv7_unknown_linux_gnueabihf_parity"
linux-arm:
  stage: build
  image: parity/rust-arm:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh arm-unknown-linux-gnueabihf arm-unknown-linux-gnueabihf armhf arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++ ubuntu
  tags:
    - rust-arm
  artifacts:
    paths:
    - parity.zip
    name: "arm-unknown-linux-gnueabihf_parity"
linux-aarch64:
  stage: build
  image: parity/rust-arm64:gitlab-ci
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh aarch64-unknown-linux-gnu aarch64-unknown-linux-gnu arm64 aarch64-linux-gnu-gcc aarch64-linux-gnu-g++ ubuntu
  tags:
    - rust-arm
  artifacts:
    paths:
    - parity.zip
    name: "aarch64-unknown-linux-gnu_parity"
linux-snap:
  stage: build
  image: snapcore/snapcraft:stable
  only:
    - stable
    - beta
    - tags
    - triggers
  script:
    - scripts/gitlab-build.sh x86_64-unknown-snap-gnu x86_64-unknown-linux-gnu amd64 gcc g++ snap
  tags:
    - rust-stable
  artifacts:
    paths:
    - parity.zip
    name: "stable-x86_64-unknown-snap-gnu_parity"
darwin:
  stage: build
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh x86_64-apple-darwin x86_64-apple-darwin macos gcc g++ macos
  tags:
    - osx
  artifacts:
    paths:
    - parity.zip
    name: "x86_64-apple-darwin_parity"
windows:
  cache:
    key: "%CI_BUILD_STAGE%-%CI_BUILD_REF_NAME%"
    untracked: true
  stage: build
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - sh scripts/gitlab-build.sh x86_64-pc-windows-msvc x86_64-pc-windows-msvc installer "" "" windows
  tags:
   - rust-windows
  artifacts:
    paths:
    - parity.zip
    name: "x86_64-pc-windows-msvc_parity"
docker-build:
  stage: build
  only:
    - tags
    - triggers
  before_script:
    - docker info
  script:
    - if [ "$CI_BUILD_REF_NAME" == "beta-release" ]; then DOCKER_TAG="latest"; else DOCKER_TAG=$CI_BUILD_REF_NAME; fi
    - echo "Tag:" $DOCKER_TAG
    - docker login -u $Docker_Hub_User_Parity -p $Docker_Hub_Pass_Parity
    - scripts/docker-build.sh $DOCKER_TAG
    - docker logout
  tags:
    - docker
test-coverage:
  stage: test
  only:
    - master
  script:
    - scripts/gitlab-test.sh test-coverage
  tags:
    - kcov
  allow_failure: true
test-rust-stable:
  stage: test
  image: parity/rust:gitlab-ci
  script:
    - scripts/gitlab-test.sh stable
  tags:
    - rust-stable
test-rust-beta:
  stage: test
  only:
    - triggers
    - master
  image: parity/rust:gitlab-ci
  script:
    - scripts/gitlab-test.sh beta
  tags:
    - rust-beta
  allow_failure: true
test-rust-nightly:
  stage: test
  only:
    - triggers
    - master
  image: parity/rust:gitlab-ci
  script:
    - scripts/gitlab-test.sh nightly
  tags:
    - rust
    - rust-nightly
  allow_failure: true
push-release:
  stage: push-release
  only:
    - tags
    - triggers
  image: parity/rust:gitlab-ci
  script:
    - scripts/gitlab-push-release.sh
  tags:
    - curl