variables:
RUNNER_IMAGE: $CI_REGISTRY_IMAGE/builder:$CI_PIPELINE_ID
ARTIFACT_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
.buildable: &buildable
only:
- tags
except:
- branches
stages:
- Prepare - Quality
- Build
Build Runner:
stage: Prepare
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker build . -t $RUNNER_IMAGE -f .gitlab-ci/runner/Dockerfile
- docker push $RUNNER_IMAGE
.quality: &quality
stage: Quality
image: $RUNNER_IMAGE
Unit test:
<<: *quality
script:
- cargo test
Lint:
<<: *quality
allow_failure: true
script:
- cargo clippy
Audit:
<<: *quality
allow_failure: true
script:
- cargo audit
Dependencies:
<<: *quality
allow_failure: true
script:
- cargo outdated
Docker Image:
<<: *buildable
stage: Build
image: docker:stable
services:
- docker:dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
script:
- docker build . -t $ARTIFACT_IMAGE
- docker push $ARTIFACT_IMAGE
Publish:
<<: *buildable
stage: Build
image: $RUNNER_IMAGE
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_DRIVER: overlay2
before_script:
- cargo login $CARGO_TOKEN
script:
- cargo publish