stages: - test - build - package - publish - push-release image: parity/rust:gitlab-ci variables: CI_SERVER_NAME: "GitLab CI" CARGO_HOME: "${CI_PROJECT_DIR}/cargo" BUILD_TARGET: ubuntu BUILD_ARCH: amd64 CARGO_TARGET: x86_64-unknown-linux-gnu LIBSSL: "libssl1.0.0 (>=1.0.0)" cache: key: "${CI_JOB_NAME}" paths: - ${CI_PROJECT_DIR}/target/ - ${CI_PROJECT_DIR}/cargo/ .releaseable_branches: # list of git refs for building GitLab artifacts (think "pre-release binaries") only: &releaseable_branches - master - stable - beta - tags - nightly - triggers .publishable_branches: # list of git refs for publishing builds to the "production" locations only: &publishable_branches - nightly # Our nightly builds from schedule, on `master` - "v*" # Our version tags - triggers .collect_artifacts: &collect_artifacts artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" when: on_success expire_in: 1 mos paths: - artifacts/ .collect_packages: &collect_packages artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" when: on_success expire_in: 1 mos paths: - packages/ .determine_version: &determine_version | export VERSION=$(grep -m 1 "version =" Cargo.toml | awk '{print $3}' | tr -d '"' | tr -d "\n") echo "Version" $VERSION #### stage: test test:rust:stable: &test stage: test script: - scripts/gitlab/test.sh stable tags: - rust-stable .optional_test: &optional_test <<: *test allow_failure: true only: - triggers - master - nightly test:rust:beta: <<: *optional_test script: - scripts/gitlab/test.sh beta allow_failure: true test:rust:nightly: <<: *optional_test script: - scripts/gitlab/test.sh nightly allow_failure: true #test:rustfmt: # <<: *optional_test # script: # - scripts/gitlab/rustfmt.sh #test:clippy: # <<: *optional_test # script: # - scripts/gitlab/clippy.sh test:coverage: stage: test only: - master - gitlab-next script: - scripts/gitlab/coverage.sh tags: - shell allow_failure: true #### stage: build build:linux:ubuntu:amd64: &build stage: build only: *releaseable_branches variables: CARGO_TARGET: x86_64-unknown-linux-gnu script: - scripts/gitlab/build-unix.sh <<: *collect_artifacts tags: - rust-stable build:linux:debian:amd64: <<: *build image: parity/rust-debian:gitlab-ci variables: LIBSSL: "libssl1.1 (>=1.1.0)" CARGO_TARGET: x86_64-unknown-linux-gnu build:linux:centos:x86_64: <<: *build image: parity/rust-centos:gitlab-ci retry: 2 #if version `GLIBC_2.18' not found build:linux:ubuntu:arm64: <<: *build image: parity/rust-arm64:gitlab-ci variables: CARGO_TARGET: aarch64-unknown-linux-gnu build:linux:ubuntu:armhf: <<: *build image: parity/rust-armv7:gitlab-ci variables: CARGO_TARGET: armv7-unknown-linux-gnueabihf build:linux:android:armhf: <<: *build image: parity/rust-android:gitlab-ci variables: CARGO_TARGET: armv7-linux-androideabi build:macos:x86_64: <<: *build variables: CARGO_TARGET: x86_64-apple-darwin tags: - osx <<: *collect_artifacts build-windows-x86_64: stage: build only: *releaseable_branches cache: key: "%CI_JOB_NAME%" paths: - "%CI_PROJECT_DIR%/target/" - "%CI_PROJECT_DIR%/cargo/" variables: CARGO_TARGET: x86_64-pc-windows-msvc script: - sh scripts/gitlab/build-windows.sh tags: - rust-windows <<: *collect_artifacts #### stage: package package:ubuntu:deb:amd64: &package_unix stage: package only: *releaseable_branches before_script: - *determine_version variables: BUILD_ARCH: amd64 IDENT: ubuntu PKG: deb LIBSSL: "libssl1.1 (>=1.1.0)" dependencies: - build:linux:ubuntu:amd64 script: - scripts/gitlab/package-unix.sh tags: - rust-stable <<: *collect_packages package:ubuntu:deb:arm64: <<: *package_unix variables: BUILD_ARCH: arm64 IDENT: ubuntu PKG: deb dependencies: - build:linux:ubuntu:arm64 package:ubuntu:deb:armhf: <<: *package_unix variables: BUILD_ARCH: armhf IDENT: ubuntu PKG: deb dependencies: - build:linux:ubuntu:armhf package:debian:deb:amd64: <<: *package_unix variables: BUILD_ARCH: amd64 IDENT: debian PKG: deb dependencies: - build:linux:debian:amd64 package:centos:rpm:x86_64: <<: *package_unix variables: BUILD_ARCH: x86_64 IDENT: centos PKG: rpm LIBSSL: "libssl >= 1.0.0" dependencies: - build:linux:centos:x86_64 package:macos:pkg:x86_64: <<: *package_unix dependencies: - build:macos:x86_64 script: - scripts/gitlab/package-macos.sh tags: - osx package:linux:snap:amd64: &package_snap stage: package only: *releaseable_branches before_script: - *determine_version dependencies: - build:linux:ubuntu:amd64 script: - scripts/gitlab/package-snap.sh tags: - rust-stable <<: *collect_packages package:linux:snap:arm64: <<: *package_snap variables: BUILD_ARCH: arm64 dependencies: - build:linux:ubuntu:arm64 package:linux:snap:armhf: <<: *package_snap variables: BUILD_ARCH: armhf dependencies: - build:linux:ubuntu:armhf package-windows-exe-x86_64: stage: package only: *releaseable_branches dependencies: - build-windows-x86_64 script: - sh scripts/gitlab/package-windows.sh <<: *collect_packages tags: - rust-windows #### stage: publish publish:linux:snap:amd64: &publish_snap stage: publish only: *publishable_branches image: snapcore/snapcraft:stable before_script: - *determine_version variables: BUILD_ARCH: amd64 dependencies: - package:linux:snap:amd64 script: - scripts/gitlab/publish-snap.sh tags: - rust-stable publish:linux:snap:arm64: <<: *publish_snap before_script: - *determine_version - sleep 120 variables: BUILD_ARCH: arm64 dependencies: - package:linux:snap:arm64 publish:linux:snap:armhf: <<: *publish_snap before_script: - *determine_version - sleep 360 variables: BUILD_ARCH: armhf dependencies: - package:linux:snap:armhf publish:docker:parity:amd64: &publish_docker stage: publish only: *publishable_branches dependencies: - build:linux:ubuntu:amd64 tags: - shell script: - scripts/gitlab/publish-docker.sh parity publish:docker:parity-evm:amd64: <<: *publish_docker script: - scripts/gitlab/publish-docker.sh parity-evm publish:github: stage: publish only: *publishable_branches dependencies: - package:ubuntu:deb:amd64 - package:ubuntu:deb:armhf - package:ubuntu:deb:arm64 - package:debian:deb:amd64 - package:centos:rpm:x86_64 - package:macos:pkg:x86_64 - package-windows-exe-x86_64 before_script: - *determine_version script: - scripts/gitlab/push-github.sh #### stage: push-release push:release: stage: push-release only: - tags - triggers image: parity/rust:gitlab-ci script: - scripts/gitlab/push-release.sh tags: - curl