variables:
GIT_SSH_COMMAND: ssh -i $CI_PROJECT_DIR/../$CI_PROJECT_NAME.tmp/SSH_PRIVATE_KEY -o StrictHostKeyChecking=no
cache:
key: "$CI_JOB_NAME"
paths:
- target/
jobs:
rust-ci-test:
only: [branches]
stage: test
image: rust
script:
- >
[[ "$RUST_CI__DEBIAN_PACKAGES" ]] \
&& apt-get update \
&& apt-get install -y $RUST_CI__DEBIAN_PACKAGES
- cargo --version
- cargo test --all
rust-ci-tag:
stage: deploy
image: rust
rules:
- if: '$CI_COMMIT_BRANCH =~ /^v\d+(\.\d+)?$/'
when: on_success
- when: never
variables:
GIT_DEPTH: "100"
script:
- git fetch
- desc="$(git describe --first-parent --tags --match "$CI_COMMIT_BRANCH.*" --long || echo "$CI_COMMIT_BRANCH.0.0-00-g0")"
- '[[ "${desc#$CI_COMMIT_BRANCH}" =~ ^\.([0-9]+)((\.[0-9]+)*)-([0-9]+)-g[0-9a-f]+ ]]'
- current="${BASH_REMATCH[1]}"
- suffix="$(sed -E 's/[0-9]+/0/g' <<<"${BASH_REMATCH[3]}")"
- distance="${BASH_REMATCH[4]}"
- '[[ "$distance" != 0 ]] || exit 0'
- version="$CI_COMMIT_BRANCH.$((current + distance))$suffix"
- 'echo "Releasing version: $version"'
- git tag "$version"
- chmod 600 "$SSH_PRIVATE_KEY"
- git push "$(sed -E 's_^.*@([^/]*)/_git@\1:_' <<<"$CI_REPOSITORY_URL")" "$version"
rust-ci-publish:
stage: deploy
image: rust
rules:
- if: '$CI_COMMIT_TAG =~ /^v\d+.\d+.\d+$/'
when: on_success
- when: never
script:
- 'echo "Releasing version: $CI_COMMIT_TAG"'
- sed -i -E "s/^version\s+=.*/version = \"${CI_COMMIT_TAG#v}\"/" Cargo.toml
- cargo publish --no-verify --allow-dirty