# .gitlab-ci.yml stages: - test - build - publish image: parity/rust:nightly variables: CI_SERVER_NAME: "GitLab CI" CARGO_HOME: "${CI_PROJECT_DIR}/.cargo" # have OS based build containers in the future DOCKER_OS: "ubuntu:xenial" ARCH: "x86_64" cache: key: "${CI_JOB_NAME}" paths: - ${CARGO_HOME} - ./target .collect_artifacts: &collect_artifacts artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}" when: on_success expire_in: 7 days paths: - artifacts/ #### stage: test test:rust:stable: &test stage: test variables: RUST_TOOLCHAIN: stable TARGET: native only: - triggers - tags - master - schedules - web - /^pr-[0-9]+$/ - /^[0-9]+$/ tags: - linux-docker before_script: - ./scripts/build.sh script: - time cargo test --all --release --verbose --locked .optional_test: &optional_test <<: *test allow_failure: true only: - master .build_only: &build_only only: - master - tags - web #### stage: build build:rust:linux:release: &build stage: build <<: *collect_artifacts <<: *build_only tags: - linux-docker before_script: - ./scripts/build.sh script: - time cargo build --release --verbose - mkdir -p ./artifacts - mv ./target/release/substrate ./artifacts/. - echo -n "Substrate version = " - ./artifacts/substrate --version | sed -n -r 's/^substrate ([0-9.]+.*-[0-9a-f]{7,13})-.*$/\1/p' | tee ./artifacts/VERSION - sha256sum ./artifacts/substrate | tee ./artifacts/substrate.sha256 build:rust:doc:release: &build stage: build artifacts: name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}-doc" when: on_success expire_in: 7 days paths: - ./crate-docs only: - master - tags - web - publish-rustdoc tags: - linux-docker script: - time cargo doc --release --verbose - cp -R ./target/doc ./crate-docs - echo "" > ./crate-docs/index.html #### stage: publish .publish_build: &publish_build stage: publish dependencies: - build:rust:linux:release cache: {} <<: *build_only publish:docker:release: <<: *publish_build tags: - shell variables: GIT_STRATEGY: none DOCKERFILE: scripts/docker/Dockerfile CONTAINER_IMAGE: parity/substrate script: - VERSION="$(cat ./artifacts/VERSION)" - test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity" || ( echo "no docker credentials provided"; exit 1 ) - docker login -u "$Docker_Hub_User_Parity" -p "$Docker_Hub_Pass_Parity" - docker info - docker build --tag $CONTAINER_IMAGE:$VERSION --tag $CONTAINER_IMAGE:latest -f $DOCKERFILE ./artifacts/ - docker push $CONTAINER_IMAGE:$VERSION - docker push $CONTAINER_IMAGE:latest after_script: - docker logout publish:s3:release: <<: *publish_build image: parity/awscli:latest variables: GIT_STRATEGY: none BUCKET: "releases.parity.io" PREFIX: "substrate/${ARCH}-${DOCKER_OS}" script: - aws s3 sync ./artifacts/ s3://${BUCKET}/${PREFIX}/$(cat ./artifacts/VERSION)/ after_script: - aws s3 ls s3://${BUCKET}/${PREFIX}/ tags: - linux-docker publish:s3:doc: stage: publish dependencies: - build:rust:doc:release cache: {} only: - master - tags - web - publish-rustdoc variables: GIT_STRATEGY: none BUCKET: "releases.parity.io" PREFIX: "substrate-rustdoc" before_script: - mkdir -p ${HOME}/.aws - | cat > ${HOME}/.aws/config <