From fc1c83a377942dfcdaa982e96c9c0b97f7cc8fbd Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Tue, 3 Jun 2025 19:34:54 +0200 Subject: [PATCH] feat: support Artifacthub annotations --- .gitea/scripts/add-annotations.sh | 103 ++++++++++++++++++++++++++++++ .gitea/workflows/release.yaml | 17 +++-- 2 files changed, 115 insertions(+), 5 deletions(-) create mode 100755 .gitea/scripts/add-annotations.sh diff --git a/.gitea/scripts/add-annotations.sh b/.gitea/scripts/add-annotations.sh new file mode 100755 index 0000000..af3c261 --- /dev/null +++ b/.gitea/scripts/add-annotations.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +set -e + +CHART_FILE="Chart.yaml" +if [ ! -f "${CHART_FILE}" ]; then + echo "ERROR: ${CHART_FILE} not found!" + exit 1 +fi + + +DEFAULT_NEW_TAG="$(git describe --abbrev=0)" +DEFAULT_OLD_TAG="$(git describe --abbrev=0 --tags "$(git rev-list --tags --skip=1 --max-count=1)")" + +if [ -z "${1}" ]; then + read -p "Enter start tag [${DEFAULT_OLD_TAG}]: " OLD_TAG + if [ -z "${OLD_TAG}" ]; then + OLD_TAG="${DEFAULT_OLD_TAG}" + fi + + while [ -z "$(git tag --list "${OLD_TAG}")" ]; do + echo "ERROR: Tag '${OLD_TAG}' not found!" + read -p "Enter start tag [${DEFAULT_OLD_TAG}]: " OLD_TAG + if [ -z "${OLD_TAG}" ]; then + OLD_TAG="${DEFAULT_OLD_TAG}" + fi + done +else + OLD_TAG=${1} + if [ -z "$(git tag --list "${OLD_TAG}")" ]; then + echo "ERROR: Tag '${OLD_TAG}' not found!" + exit 1 + fi +fi + +if [ -z "${1}" ]; then + read -p "Enter end tag [${DEFAULT_NEW_TAG}]: " NEW_TAG + if [ -z "${NEW_TAG}" ]; then + NEW_TAG="${DEFAULT_NEW_TAG}" + fi + + while [ -z "$(git tag --list "${NEW_TAG}")" ]; do + echo "ERROR: Tag '${NEW_TAG}' not found!" + read -p "Enter end tag [${DEFAULT_NEW_TAG}]: " NEW_TAG + if [ -z "${NEW_TAG}" ]; then + NEW_TAG="${DEFAULT_NEW_TAG}" + fi + done +else + NEW_TAG=${1} + + if [ -z "$(git tag --list "${NEW_TAG}")" ]; then + echo "ERROR: Tag '${NEW_TAG}' not found!" + exit 1 + fi +fi + +YAML_FILE=$(mktemp) + +function map_type_to_kind() { + case "${1}" in + feat) + echo "added" + ;; + fix) + echo "fixed" + ;; + chore|style|test|ci|docs|refac) + echo "changed" + ;; + revert) + echo "removed" + ;; + sec) + echo "security" + ;; + *) + echo "skip" + ;; + esac +} + +COMMIT_TITLES=$(git log "${OLD_TAG}..${NEW_TAG}" --pretty=format:"%s") + +while IFS= read -r line; do + if [[ "${line}" =~ ^([a-zA-Z]+)(\([^\)]+\))?\:\ (.+)$ ]]; then + TYPE="${BASH_REMATCH[1]}" + + if [ "${TYPE}" == "skip" ]; then + continue + fi + + DESC="${BASH_REMATCH[3]}" + KIND=$(map_type_to_kind "${TYPE}") + + yq --inplace ". += [ {\"kind\": \"${KIND}\", \"description\": \"${DESC}\"}]" "${YAML_FILE}" + fi +done <<< "${COMMIT_TITLES}" + +yq --no-colors --inplace ".annotations.\"artifacthub.io/changes\" |= loadstr(\"${YAML_FILE}\") | sort_keys(.)" "${CHART_FILE}" +yq --no-colors --inplace ".version = \"${NEW_TAG}\"" "${CHART_FILE}" + +rm "${YAML_FILE}" \ No newline at end of file diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index f712a9c..f0962d3 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -14,12 +14,19 @@ jobs: - name: Install tooling run: | apk update - apk add git npm + apk add git npm yq - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Add Artifacthub.io annotations + run: | + NEW_TAG="$(git describe --abbrev=0)" + OLD_TAG="$(git describe --abbrev=0 --tags "$(git rev-list --tags --skip=1 --max-count=1)")" + .gitea/scripts/add-annotations.sh "${NEW_TAG}" "${OLD_TAG}" + - name: Package chart env: - HELM_REPO_NAME: upload - CHARTMUSEUM_PASSWORD: ${{ secrets.CHARTMUSEUM_PASSWORD }} CHARTMUSEUM_REPOSITORY: ${{ vars.CHARTMUSEUM_REPOSITORY }} CHARTMUSEUM_USERNAME: ${{ secrets.CHARTMUSEUM_USERNAME }} @@ -29,8 +36,8 @@ jobs: GITEA_SERVER_URL: ${{ github.server_url }} run: | PACKAGE_VERSION=${GITHUB_REF#refs/tags/} - REPOSITORY_NAME=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 2 | sed --regexp-extended 's/-charts?//g') - REPOSITORY_OWNER=$(echo ${GITHUB_REPOSITORY} | cut -d '/' -f 1) + REPOSITORY_NAME=$(echo ${GITHUB_REPOSITORY} | cut --delimiter '/' --fields 2 | sed --regexp-extended 's/-charts?//g') + REPOSITORY_OWNER=$(echo ${GITHUB_REPOSITORY} | cut --delimiter '/' --fields 1) helm dependency build helm package --version "${PACKAGE_VERSION}" ./