Loading .gitlab-ci.yml +8 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,14 @@ gitlab:recommended: tbump: stage: pre-release badge:test: extends: .badge stage: test variables: NAME: "branch" MESSAGE: "${CI_COMMIT_REF_NAME}" COLOR: "fuchsia" # child pipeline to unit tests all our jobs jobs:c: Loading project-automation/badge.yml +46 −42 Original line number Diff line number Diff line --- # This job will create or update any badges set through other jobs # This job will create or update any badges set through other jobs. # It requires a Project Access Token or Personal Access Token with api scope set # as a CI/CD variable called GL_TOKEN. # To create your own automatic badges, add the following to your .gitlab-ci.yml: # It requires: # - A Project Access Token set as a CI/CD variable called GL_TOKEN # - Protected tags set with a wildcard: "v*" # - A variable called I_WANT_BADGES set to a truthy value # To create your own automatic badges, add the following global variables to a job: # badge:your_custom_job: # extends: .badge # variables: # BADGE_job_name: "label-message-color" # See https://shields.io/ # BADGE_job_name_URL: "https://some_url/${WITH_VARIABLES}" # Make sure job_name is replaced and unique, and only contains ASCII or underscores # NAME: "version" # MESSAGE: "1.2.3" # COLOR: "red" # URL: "${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}" # rules: # - if: ($CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+){2}$/ && $GL_TOKEN) badge: image: registry.gitlab.com/notno/tool/bash:latest stage: .post script: - | IFS='-' for BADGE_VARIABLE in ${!BADGE_@}; do case "${BADGE_VARIABLE}" in *_URL) continue;; esac # Make sure your_custom_job is replaced and unique, and you've changed the variables # according to your preferences. read -ra BADGE_ELEMENTS <<< "${!BADGE_VARIABLE}" BADGE_NAME="${BADGE_ELEMENTS[0]}" BADGE_URL_VARIABLE=${BADGE_VARIABLE}_URL BADGE_URL=${!BADGE_URL_VARIABLE} # Choose a color from this list: https://github.com/jongracecox/anybadge#colors if [ -z "${BADGE_URL}" ]; then BADGE_URL="${CI_PROJECT_URL}" fi # Make sure your rules at least includes the requirement of $GL_TOKEN echo "[*] Creating/updating badge '${BADGE_NAME}'..." BADGE_ID=$(curl --silent --fail --header "PRIVATE-TOKEN: ${GL_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" | jq --arg BADGE_NAME "${BADGE_NAME}" '.[] | select(.name==$BADGE_NAME) | .id') || true .badge: image: registry.gitlab.com/just-ci/images/anybadge:latest stage: .post variables: GIT_STRATEGY: "none" script: - IMAGE_URL=${CI_PROJECT_URL}/-/jobs/artifacts/${CI_DEFAULT_BRANCH}/raw/badges/${NAME}.svg?job=${CI_JOB_NAME} - mkdir -p ci_badges - anybadge -l "${NAME}" -v "${MESSAGE}" -c "${COLOR}" -f "ci_badges/${NAME}.svg" - echo "[*] Creating/updating badge..." - | if [ -z "${GL_TOKEN}" ]; then echo "[!] GL_TOKEN not set. You can check the resulting badge in the artifacts. It will not be set." else BADGE_ID=$(curl -SsLF -H "PRIVATE-TOKEN: ${GL_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" | jq --arg NAME "${NAME}" '.[] | select(.name==$NAME) | .id') || true if [ -z "${BADGE_ID}" ]; then echo "[-] Unable to get badge id. It probably doesn't exist yet, so we'll create a new one." echo "[-] Badge doesn't exist yet. We'll create a new one..." curl -SsLF -X POST -H "PRIVATE-TOKEN: ${GL_TOKEN}" -d "image_url=${IMAGE_URL}&link_url=${URL:-$CI_PROJECT_URL}&name=${NAME}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" >/dev/null echo "[+] Badge created successfully." else echo "Badge '${BADGE_NAME}' id is ${BADGE_ID}." echo "[*] Updating badge ID ${BADGE_ID}..." curl -SsLF -X PUT -H "PRIVATE-TOKEN: ${GL_TOKEN}" -d "image_url=${IMAGE_URL}&link_url=${URL:-$CI_PROJECT_URL}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges/${BADGE_ID}" >/dev/null echo "[+] Badge updated successfully." fi IMAGE_URL="https://img.shields.io/badge/${!BADGE_VARIABLE}" case ${BADGE_ID} in ''|*[!0-9]*) echo "[*] Creating badge..." && curl --silent --fail --request POST --header "PRIVATE-TOKEN: ${GL_TOKEN}" --data "image_url=${IMAGE_URL}&link_url=${BADGE_URL}&name=${BADGE_NAME}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" >/dev/null && echo "[+] Badge '${BADGE_NAME}' created successfully." || echo "[!] Badge '${BADGE_NAME}' creation failed" ;; *) echo "[*] Updating badge..." && curl --silent --fail --request PUT --header "PRIVATE-TOKEN: ${GL_TOKEN}" --data "image_url=${IMAGE_URL}&link_url=${BADGE_URL}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges/${BADGE_ID}" >/dev/null && echo "[+] Badge '${BADGE_NAME}' updated successfully." || echo "[!] Badge '${BADGE_NAME}' update failed" ;; esac done rules: - if: ($CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+){2}$/ && $GL_TOKEN && $I_WANT_BADGES) fi artifacts: paths: - ci_badges/*.svg needs: [] project-automation/semantic-release.yml +10 −4 Original line number Diff line number Diff line Loading @@ -2,10 +2,6 @@ # https://github.com/semantic-release/semantic-release#commit-message-format # https://levelup.gitconnected.com/semantic-versioning-and-release-automation-on-gitlab-9ba16af0c21 variables: BADGE_semantic_release: "version-${CI_COMMIT_TAG}-informational" BADGE_semantic_release_URL: "${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}" semantic-release: image: registry.gitlab.com/just-ci/images/node:latest stage: .post Loading Loading @@ -40,3 +36,13 @@ semantic-release: only: variables: - $GL_TOKEN badge:semantic-release: extends: .badge variables: NAME: "version" MESSAGE: "${CI_COMMIT_TAG}" COLOR: "green" URL: "${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}" rules: - if: ($CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+){2}$/ && $GL_TOKEN) Loading
.gitlab-ci.yml +8 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,14 @@ gitlab:recommended: tbump: stage: pre-release badge:test: extends: .badge stage: test variables: NAME: "branch" MESSAGE: "${CI_COMMIT_REF_NAME}" COLOR: "fuchsia" # child pipeline to unit tests all our jobs jobs:c: Loading
project-automation/badge.yml +46 −42 Original line number Diff line number Diff line --- # This job will create or update any badges set through other jobs # This job will create or update any badges set through other jobs. # It requires a Project Access Token or Personal Access Token with api scope set # as a CI/CD variable called GL_TOKEN. # To create your own automatic badges, add the following to your .gitlab-ci.yml: # It requires: # - A Project Access Token set as a CI/CD variable called GL_TOKEN # - Protected tags set with a wildcard: "v*" # - A variable called I_WANT_BADGES set to a truthy value # To create your own automatic badges, add the following global variables to a job: # badge:your_custom_job: # extends: .badge # variables: # BADGE_job_name: "label-message-color" # See https://shields.io/ # BADGE_job_name_URL: "https://some_url/${WITH_VARIABLES}" # Make sure job_name is replaced and unique, and only contains ASCII or underscores # NAME: "version" # MESSAGE: "1.2.3" # COLOR: "red" # URL: "${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}" # rules: # - if: ($CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+){2}$/ && $GL_TOKEN) badge: image: registry.gitlab.com/notno/tool/bash:latest stage: .post script: - | IFS='-' for BADGE_VARIABLE in ${!BADGE_@}; do case "${BADGE_VARIABLE}" in *_URL) continue;; esac # Make sure your_custom_job is replaced and unique, and you've changed the variables # according to your preferences. read -ra BADGE_ELEMENTS <<< "${!BADGE_VARIABLE}" BADGE_NAME="${BADGE_ELEMENTS[0]}" BADGE_URL_VARIABLE=${BADGE_VARIABLE}_URL BADGE_URL=${!BADGE_URL_VARIABLE} # Choose a color from this list: https://github.com/jongracecox/anybadge#colors if [ -z "${BADGE_URL}" ]; then BADGE_URL="${CI_PROJECT_URL}" fi # Make sure your rules at least includes the requirement of $GL_TOKEN echo "[*] Creating/updating badge '${BADGE_NAME}'..." BADGE_ID=$(curl --silent --fail --header "PRIVATE-TOKEN: ${GL_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" | jq --arg BADGE_NAME "${BADGE_NAME}" '.[] | select(.name==$BADGE_NAME) | .id') || true .badge: image: registry.gitlab.com/just-ci/images/anybadge:latest stage: .post variables: GIT_STRATEGY: "none" script: - IMAGE_URL=${CI_PROJECT_URL}/-/jobs/artifacts/${CI_DEFAULT_BRANCH}/raw/badges/${NAME}.svg?job=${CI_JOB_NAME} - mkdir -p ci_badges - anybadge -l "${NAME}" -v "${MESSAGE}" -c "${COLOR}" -f "ci_badges/${NAME}.svg" - echo "[*] Creating/updating badge..." - | if [ -z "${GL_TOKEN}" ]; then echo "[!] GL_TOKEN not set. You can check the resulting badge in the artifacts. It will not be set." else BADGE_ID=$(curl -SsLF -H "PRIVATE-TOKEN: ${GL_TOKEN}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" | jq --arg NAME "${NAME}" '.[] | select(.name==$NAME) | .id') || true if [ -z "${BADGE_ID}" ]; then echo "[-] Unable to get badge id. It probably doesn't exist yet, so we'll create a new one." echo "[-] Badge doesn't exist yet. We'll create a new one..." curl -SsLF -X POST -H "PRIVATE-TOKEN: ${GL_TOKEN}" -d "image_url=${IMAGE_URL}&link_url=${URL:-$CI_PROJECT_URL}&name=${NAME}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" >/dev/null echo "[+] Badge created successfully." else echo "Badge '${BADGE_NAME}' id is ${BADGE_ID}." echo "[*] Updating badge ID ${BADGE_ID}..." curl -SsLF -X PUT -H "PRIVATE-TOKEN: ${GL_TOKEN}" -d "image_url=${IMAGE_URL}&link_url=${URL:-$CI_PROJECT_URL}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges/${BADGE_ID}" >/dev/null echo "[+] Badge updated successfully." fi IMAGE_URL="https://img.shields.io/badge/${!BADGE_VARIABLE}" case ${BADGE_ID} in ''|*[!0-9]*) echo "[*] Creating badge..." && curl --silent --fail --request POST --header "PRIVATE-TOKEN: ${GL_TOKEN}" --data "image_url=${IMAGE_URL}&link_url=${BADGE_URL}&name=${BADGE_NAME}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges" >/dev/null && echo "[+] Badge '${BADGE_NAME}' created successfully." || echo "[!] Badge '${BADGE_NAME}' creation failed" ;; *) echo "[*] Updating badge..." && curl --silent --fail --request PUT --header "PRIVATE-TOKEN: ${GL_TOKEN}" --data "image_url=${IMAGE_URL}&link_url=${BADGE_URL}" "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/badges/${BADGE_ID}" >/dev/null && echo "[+] Badge '${BADGE_NAME}' updated successfully." || echo "[!] Badge '${BADGE_NAME}' update failed" ;; esac done rules: - if: ($CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+){2}$/ && $GL_TOKEN && $I_WANT_BADGES) fi artifacts: paths: - ci_badges/*.svg needs: []
project-automation/semantic-release.yml +10 −4 Original line number Diff line number Diff line Loading @@ -2,10 +2,6 @@ # https://github.com/semantic-release/semantic-release#commit-message-format # https://levelup.gitconnected.com/semantic-versioning-and-release-automation-on-gitlab-9ba16af0c21 variables: BADGE_semantic_release: "version-${CI_COMMIT_TAG}-informational" BADGE_semantic_release_URL: "${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}" semantic-release: image: registry.gitlab.com/just-ci/images/node:latest stage: .post Loading Loading @@ -40,3 +36,13 @@ semantic-release: only: variables: - $GL_TOKEN badge:semantic-release: extends: .badge variables: NAME: "version" MESSAGE: "${CI_COMMIT_TAG}" COLOR: "green" URL: "${CI_PROJECT_URL}/tags/${CI_COMMIT_TAG}" rules: - if: ($CI_COMMIT_TAG =~ /^v[0-9]+(\.[0-9]+){2}$/ && $GL_TOKEN)