simple_config 0.134.0

A config language for humans that is not self-describing.
Documentation
variables:
  # Hack to "expand" file variables: https://gitlab.com/gitlab-org/gitlab/-/issues/29407
  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