stages: - test - lint - utility variables: GIT_STRATEGY: clone CI_IMAGE_REPOSITORY: docker-picodata.binary.picodata.io CI_IMAGE: "${CI_IMAGE_REPOSITORY}/${CI_PROJECT_NAME}:0.1.0" DOCKER_AUTH_CONFIG: $DOCKER_AUTH_RO CARGO_NET_GIT_FETCH_WITH_CLI: "true" default: image: $CI_IMAGE .rust_cache: &rust_cache - paths: - $CI_PROJECT_DIR/.cargo/.crates.toml - $CI_PROJECT_DIR/.cargo/.crates2.json - $CI_PROJECT_DIR/.cargo/bin - $CI_PROJECT_DIR/.cargo/registry/index - $CI_PROJECT_DIR/.cargo/registry/cache - $CI_PROJECT_DIR/.cargo/git/db - $CI_PROJECT_DIR/.cache/sccache - $CI_PROJECT_DIR/target/debug/libexample.so key: files: - ./Cargo.lock when: "always" .base: variables: # variables for rust cache CARGO_HOME: $CI_PROJECT_DIR/.cargo SCCACHE_DIR: $CI_PROJECT_DIR/.cache/sccache RUSTC_WRAPPER: sccache image: name: $CI_IMAGE pull_policy: [always, if-not-present] tags: - docker needs: [] interruptible: true cache: - *rust_cache int-test: stage: "test" extends: .base script: - make int-test rust-lint: extends: .base stage: lint script: - make rust-lint rust-fmt: stage: lint extends: .base script: - cargo fmt --check publish-dry-run: stage: utility extends: .base script: - make publish-dry-run publish: stage: utility extends: .base when: manual script: - make publish needs: [publish-dry-run] build_ci: stage: utility tags: - shell inherit: default: false variables: DOCKER_AUTH_CONFIG: $DOCKER_AUTH_RW # Image version MUST be passed to CI job, or job will be failed. CI_IMAGE_VERSION: "" # If true is passed here, job will overwrite existing image with the same tag. # If it is false(default) and image with the same tag already resides in docker registry, job will be failed. CI_IMAGE_OVERWRITE_TAG: "false" # If true is passed here, resulting image would also be tagged as latest. CI_IMAGE_IS_LATEST: "true" BASE_IMAGE_NAME: "${CI_IMAGE_REPOSITORY}/${CI_PROJECT_NAME}" IMAGE_TAG: "${BASE_IMAGE_NAME}:${CI_IMAGE_VERSION}" LATEST_IMAGE_TAG: "${BASE_IMAGE_NAME}:latest" before_script: - if [ -z "$CI_IMAGE_VERSION" ]; then echo "Image version should be specified, got '$CI_IMAGE_VERSION'" 1>&2 && exit 1; fi - IMAGE_EXIST=$(docker manifest inspect $IMAGE_TAG > /dev/null; echo $?) - if [[ "$CI_IMAGE_OVERWRITE_TAG" == "false" && "$IMAGE_EXIST" == "0" ]]; then echo "Image tag already resides in registry and it must not be overwritten" 1>&2 && exit 1; fi script: - docker build --file Dockerfile.ci -t $IMAGE_TAG . - if [ $CI_IMAGE_IS_LATEST = "true" ]; then docker tag $IMAGE_TAG $LATEST_IMAGE_TAG; fi - docker push --all-tags $BASE_IMAGE_NAME when: manual only: changes: - Dockerfile.ci needs: []