Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 80 additions & 56 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,37 @@
include:
- project: parity/infrastructure/ci_cd/shared
ref: main
file: /common/ci-unified.yml

file: /common/ci-unified.yml

stages:
- check
- test
- build
- publish

variables:
GIT_STRATEGY: fetch
GIT_DEPTH: "100"
CARGO_INCREMENTAL: 0
CI_IMAGE: !reference [.ci-unified, variables, CI_IMAGE]
GIT_STRATEGY: fetch
GIT_DEPTH: "100"
CARGO_INCREMENTAL: 0
CI_IMAGE: !reference [.ci-unified, variables, CI_IMAGE]

default:
cache: {}
interruptible: true
cache: {}
interruptible: true
retry:
max: 2
when:
- runner_system_failure
- unknown_failure
- api_failure

.docker-env: &docker-env
image: $CI_IMAGE
.kubernetes-env:
image: $CI_IMAGE
tags:
- kubernetes-parity-build

.docker-env:
image: $CI_IMAGE
before_script:
- cargo -vV
- rustc -vV
Expand All @@ -41,123 +46,120 @@ default:
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master"
- if: $CI_COMMIT_REF_NAME == "tags"
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
- if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
- if: $CI_COMMIT_REF_NAME =~ /^v[0-9]+\.[0-9]+.*$/ # i.e. v1.0, v2.1rc1
tags:
- linux-docker-vm-c2
- linux-docker

#### stage: check

check-clippy:
stage: check
<<: *docker-env
stage: check
extends: .docker-env
script:
- rustup component add clippy --toolchain stable-x86_64-unknown-linux-gnu
- time cargo +stable clippy --locked -- -Dwarnings
- time cargo +stable clippy --locked -p parity-scale-codec-derive -- -Dwarnings
- time cargo +stable clippy --locked --test clippy -- -Dwarnings

check-rust-stable-no_derive_no_std:
stage: check
<<: *docker-env
stage: check
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable check --verbose --no-default-features --features bit-vec,bytes,generic-array


check-rust-stable-no_std-chain-error:
stage: check
<<: *docker-env
stage: check
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable check --verbose --no-default-features --features chain-error


check-rust-stable-no_derive:
stage: check
<<: *docker-env
stage: check
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable check --verbose --features bit-vec,bytes,generic-array

check-rust-stable-only_mel:
stage: check
<<: *docker-env
stage: check
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable check --verbose --features max-encoded-len

#### stage: test

test-rust-stable:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable test --verbose --all --features bit-vec,bytes,generic-array,derive,max-encoded-len


test-rust-stable-no_derive:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable test --verbose --features bit-vec,bytes,generic-array

test-rust-stable-only_mel:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable test --verbose --features max-encoded-len

test-rust-stable-only_mel-no_default_std:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
RUSTFLAGS: "-Cdebug-assertions=y -Dwarnings"
script:
- time cargo +stable test --verbose --features max-encoded-len,std --no-default-features

bench-rust-nightly:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
script:
- time cargo +nightly bench --features bit-vec,bytes,generic-array,derive

miri:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUST_BACKTRACE: 1
MIRIFLAGS: "-Zmiri-disable-isolation"
RUST_BACKTRACE: 1
MIRIFLAGS: "-Zmiri-disable-isolation"
script:
- time cargo +nightly miri test --features bit-vec,bytes,generic-array,arbitrary --release

# check that build is no_std compatible
# more info: https://github.com/paritytech/parity-scale-codec/pull/389
build-no-std:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUST_BACKTRACE: 1
RUST_BACKTRACE: 1
script:
# this target doesn't support std envs; it should flag any unexpected uses of std
- rustup target add thumbv6m-none-eabi
- time cargo build --target thumbv6m-none-eabi --no-default-features

build-no-atomic-ptrs:
stage: test
<<: *docker-env
stage: test
extends: .docker-env
variables:
RUST_BACKTRACE: 1
RUST_BACKTRACE: 1
script:
# this target doesn't have atomic ptrs. Some parts of alloc are not available there
# we want to make sure that this crate still works on those targets
Expand All @@ -166,12 +168,34 @@ build-no-atomic-ptrs:
#### stage: build

build-linux-ubuntu-amd64:
stage: build
<<: *docker-env
stage: build
extends: .docker-env
rules:
- if: $CI_PIPELINE_SOURCE == "web"
- if: $CI_PIPELINE_SOURCE == "schedule"
- if: $CI_COMMIT_REF_NAME == "master"
- if: $CI_COMMIT_REF_NAME == "tags"
script:
- cargo build --verbose --release --features bit-vec,bytes,generic-array,derive

#### stage: publish

publish-dry-run:
stage: publish
extends: .kubernetes-env
# artificial dependency in order not to wait miri job
needs:
- job: check-clippy
artifacts: false
rules:
- if: $CI_COMMIT_REF_NAME =~ /^[0-9]+$/ # PRs
script:
- cargo publish -p parity-scale-codec --dry-run

publish-crate:
stage: publish
extends: .kubernetes-env
rules:
- if: $CI_COMMIT_REF_NAME =~ /^v.[0-9]+\.[0-9]+.*$/ # i.e. v.1.0, v.2.1rc1
script:
- cargo publish -p parity-scale-codec