stages:
  - test
  - js-build
  - push-release
  - build
variables:
  RUST_BACKTRACE: "1"
  RUSTFLAGS: ""
  CARGOFLAGS: ""
  CI_SERVER_NAME: "GitLab CI"
  LIBSSL: "libssl1.0.0 (>=1.0.0)"
cache:
  key: "$CI_BUILD_STAGE-$CI_BUILD_REF_NAME"
  paths:
    - target
  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
    - scripts/gitlab-build.sh x86_64-unknown-linux-gnu x86_64-unknown-linux-gnu amd64 gcc g++
  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++
  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++
  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++
  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++
  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++
  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++
  tags:
    - rust-arm
  artifacts:
    paths:
    - parity.zip
    name: "aarch64-unknown-linux-gnu_parity"
linux-snap:
  stage: build
  image: parity/snapcraft:gitlab-ci
  only:
    - stable
    - beta
    - tags
    - triggers
  script:
    - scripts/gitlab-build.sh x86_64-unknown-snap-gnu x86_64-unknown-linux-gnu amd64 gcc g++
  tags:
    - rust-stable
  artifacts:
    paths:
    - scripts/parity_*_amd64.snap
    name: "stable-x86_64-unknown-snap-gnu_parity"
  allow_failure: true
darwin:
  stage: build
  only:
    - beta
    - tags
    - stable
    - triggers
  script:
    - scripts/gitlab-build.sh x86_64-apple-darwin x86_64-apple-darwin macos gcc g++
  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 "" "" ""
  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
js-test:
  stage: test
  image: parity/rust:gitlab-ci
  script:
    - scripts/gitlab-test.sh js-test
  tags:
    - rust-stable
js-release:
  stage: js-build
  only:
    - master
    - beta
    - stable
    - tags
    - triggers
  image: parity/rust:gitlab-ci
  script:
    - scripts/gitlab-test.sh js-release
  tags:
    - javascript
push-release:
  stage: push-release
  only:
    - tags
    - triggers
  image: parity/rust:gitlab-ci
  script:
    - rustup default stable
    - curl --data "secret=$RELEASES_SECRET" http://update.parity.io:1337/push-release/$CI_BUILD_REF_NAME/$CI_BUILD_REF
    - curl --data "secret=$RELEASES_SECRET" http://update.parity.io:1338/push-release/$CI_BUILD_REF_NAME/$CI_BUILD_REF
  tags:
    - curl