|
| 1 | +default: |
| 2 | + image: alpine:latest |
| 3 | + |
| 4 | +variables: |
| 5 | + QUAY_REGISTRY_URL: "quay.io" |
| 6 | + PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/rockpass/${CI_COMMIT_TAG}" |
| 7 | + PACKAGE: rockpass-release-${CI_COMMIT_TAG}.tar.xz |
| 8 | + |
| 9 | +stages: |
| 10 | + - Build |
| 11 | + - Package |
| 12 | + - Docker |
| 13 | + - Publish |
| 14 | + - Release |
| 15 | + |
| 16 | +Build Rockpass: |
| 17 | + stage: Build |
| 18 | + image: rust:alpine |
| 19 | + script: |
| 20 | + - apk -U --no-progress add libc-dev sqlite-dev |
| 21 | + - cargo build --release --locked |
| 22 | + artifacts: |
| 23 | + name: rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA} |
| 24 | + paths: |
| 25 | + - target/release/rockpass |
| 26 | + cache: |
| 27 | + key: ${CI_COMMIT_REF_SLUG} |
| 28 | + paths: |
| 29 | + - target |
| 30 | + |
| 31 | +Package Rockpass: |
| 32 | + stage: Package |
| 33 | + script: |
| 34 | + - apk -U --no-progress add xz |
| 35 | + - install -Dm755 "target/release/rockpass" "rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/rockpass" |
| 36 | + - install -Dm644 "rockpass.toml.example" "rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/rockpass.toml.example" |
| 37 | + - install -Dm644 "README.md" "rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/README.md" |
| 38 | + - install -Dm644 "LICENSE" "rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}/LICENSE" |
| 39 | + - tar cvJf "rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}.tar.xz" "rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}" |
| 40 | + artifacts: |
| 41 | + name: rockpass-package-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA} |
| 42 | + paths: |
| 43 | + - rockpass-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}.tar.xz |
| 44 | + rules: |
| 45 | + - if: $CI_COMMIT_TAG == null |
| 46 | + |
| 47 | +Package Rockpass release: |
| 48 | + stage: Package |
| 49 | + script: |
| 50 | + - apk -U --no-progress add xz |
| 51 | + - install -Dm755 "target/release/rockpass" "rockpass-${CI_COMMIT_TAG}/rockpass" |
| 52 | + - install -Dm644 "rockpass.toml.example" "rockpass-${CI_COMMIT_TAG}/rockpass.toml.example" |
| 53 | + - install -Dm644 "README.md" "rockpass-${CI_COMMIT_TAG}/README.md" |
| 54 | + - install -Dm644 "LICENSE" "rockpass-${CI_COMMIT_TAG}/LICENSE" |
| 55 | + - tar cvJf ${PACKAGE} "rockpass-${CI_COMMIT_TAG}" |
| 56 | + artifacts: |
| 57 | + name: rockpass-release-package-${CI_COMMIT_TAG} |
| 58 | + paths: |
| 59 | + - ${PACKAGE} |
| 60 | + rules: |
| 61 | + - if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "43241571" |
| 62 | + |
| 63 | +Build and publish Docker image: |
| 64 | + stage: Docker |
| 65 | + image: docker |
| 66 | + services: |
| 67 | + - docker:dind |
| 68 | + script: |
| 69 | + - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME} . |
| 70 | + - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} |
| 71 | + - docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME} |
| 72 | + - docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_TOKEN} |
| 73 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME} ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} |
| 74 | + - docker push ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} |
| 75 | + - docker login -u ${QUAY_USERNAME} -p ${QUAY_PASSWORD} ${QUAY_REGISTRY_URL} |
| 76 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME} ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} |
| 77 | + - docker push ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_NAME} |
| 78 | + rules: |
| 79 | + - if: $CI_COMMIT_TAG == null && $CI_PROJECT_ID == "43241571" |
| 80 | + |
| 81 | +Build and publish release Docker image: |
| 82 | + stage: Docker |
| 83 | + image: docker |
| 84 | + services: |
| 85 | + - docker:dind |
| 86 | + script: |
| 87 | + - | |
| 88 | + semver() { |
| 89 | + NUM='0|[1-9][0-9]*' |
| 90 | + SEMVER_REGEX="^(${NUM})\\.(${NUM})\\.(${NUM})$" |
| 91 | + if [[ "${1}" =~ "${SEMVER_REGEX}" ]]; then |
| 92 | + MINOR_PATCH="${1#*.}" |
| 93 | + MAJOR="${1%%.*}" |
| 94 | + MINOR="${MINOR_PATCH%.*}" |
| 95 | + PATCH="${MINOR_PATCH#*.}" |
| 96 | + IMAGE="${2:-$CI_REGISTRY_IMAGE}" |
| 97 | + docker tag ${IMAGE}:latest ${IMAGE}:${MAJOR} |
| 98 | + docker tag ${IMAGE}:latest ${IMAGE}:${MAJOR}.${MINOR} |
| 99 | + docker push ${IMAGE}:${MAJOR} |
| 100 | + docker push ${IMAGE}:${MAJOR}.${MINOR} |
| 101 | + fi |
| 102 | + } |
| 103 | + - docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} . |
| 104 | + - docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY} |
| 105 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} ${CI_REGISTRY_IMAGE}:latest |
| 106 | + - docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} |
| 107 | + - docker push ${CI_REGISTRY_IMAGE}:latest |
| 108 | + - semver ${CI_COMMIT_TAG} |
| 109 | + - docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_TOKEN} |
| 110 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG} |
| 111 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:latest |
| 112 | + - docker push ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG} |
| 113 | + - docker push ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:latest |
| 114 | + - semver ${CI_COMMIT_TAG} ${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME} |
| 115 | + - docker login -u ${QUAY_USERNAME} -p ${QUAY_PASSWORD} ${QUAY_REGISTRY_URL} |
| 116 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG} |
| 117 | + - docker tag ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:latest |
| 118 | + - docker push ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:${CI_COMMIT_TAG} |
| 119 | + - docker push ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME}:latest |
| 120 | + - semver ${CI_COMMIT_TAG} ${QUAY_REGISTRY_URL}/${CI_PROJECT_NAMESPACE}/${CI_PROJECT_NAME} |
| 121 | + rules: |
| 122 | + - if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "43241571" |
| 123 | + |
| 124 | +Publish Rockpass release: |
| 125 | + stage: Publish |
| 126 | + image: curlimages/curl:latest |
| 127 | + script: |
| 128 | + - | |
| 129 | + curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ${PACKAGE} "${PACKAGE_REGISTRY_URL}/${PACKAGE}" |
| 130 | + rules: |
| 131 | + - if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "43241571" |
| 132 | + |
| 133 | +Release: |
| 134 | + stage: Release |
| 135 | + image: registry.gitlab.com/gitlab-org/release-cli:latest |
| 136 | + script: | |
| 137 | + release-cli create --name "Release ${CI_COMMIT_TAG}" --tag-name ${CI_COMMIT_TAG} \ |
| 138 | + --assets-link "{\"name\":\"${PACKAGE}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${PACKAGE}\"}" |
| 139 | + rules: |
| 140 | + - if: $CI_COMMIT_TAG && $CI_PROJECT_ID == "43241571" |
0 commit comments