From a10b2801d285946afb8768e08aa7151840a7a971 Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Sun, 16 Aug 2026 21:58:47 +0200 Subject: [PATCH] refactor(ci): replace inline annotation script with ah-annotations action Remove the local add-annotations.sh script and the inline tag detection logic from the release workflow. Use the reusable GitHub Action volker-raschek/ah-annotations@v0.1.1 which handles tag detection and changelog generation internally. Co-authored-by: Copilot --- .gitea/scripts/add-annotations.sh | 133 ------------------------------ .gitea/workflows/release.yaml | 6 +- 2 files changed, 1 insertion(+), 138 deletions(-) delete mode 100755 .gitea/scripts/add-annotations.sh diff --git a/.gitea/scripts/add-annotations.sh b/.gitea/scripts/add-annotations.sh deleted file mode 100755 index dbe206c..0000000 --- a/.gitea/scripts/add-annotations.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/bash - -# ============================================================================ -# Generate ArtifactHub changelog annotations from git commit history -# ============================================================================ - -set -euo pipefail - -readonly CHART_FILE="Chart.yaml" -readonly RC_PATTERN="\-rc([-\.][0-9]+)?$" - -CHANGE_LOG_YAML="" - -cleanup() { - if [[ -n "${CHANGE_LOG_YAML:-}" && -f "${CHANGE_LOG_YAML}" ]]; then - rm -f "${CHANGE_LOG_YAML}" - fi -} -trap cleanup EXIT - -if [[ ! -f "${CHART_FILE}" ]]; then - echo "ERROR: ${CHART_FILE} not found!" >&2 - exit 1 -fi - -# Exclude prerelease tags (matching -rc or -rc.) from default tag selection -DEFAULT_NEW_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${RC_PATTERN}" | head --lines 1)" -DEFAULT_OLD_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${RC_PATTERN}" | head --lines 2 | tail --lines 1)" - -if [[ -z "${1:-}" ]]; then - read -rp "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!" >&2 - read -rp "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!" >&2 - exit 1 - fi -fi - -if [[ -z "${2:-}" ]]; then - read -rp "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!" >&2 - read -rp "Enter end tag [${DEFAULT_NEW_TAG}]: " NEW_TAG - if [[ -z "${NEW_TAG}" ]]; then - NEW_TAG="${DEFAULT_NEW_TAG}" - fi - done -else - NEW_TAG="${2}" - - if [[ -z "$(git tag --list "${NEW_TAG}")" ]]; then - echo "ERROR: Tag '${NEW_TAG}' not found!" >&2 - exit 1 - fi -fi - -if [[ "${NEW_TAG}" =~ ${RC_PATTERN} ]]; then - echo "INFO: Tag '${NEW_TAG}' is a prerelease, setting prerelease annotation and skipping changelog." - yq --no-colors --inplace ".annotations.\"artifacthub.io/prerelease\" = \"true\" | sort_keys(.)" "${CHART_FILE}" - exit 0 -fi - -CHANGE_LOG_YAML="$(mktemp)" -echo "[]" > "${CHANGE_LOG_YAML}" - -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 --pretty=format:"%s" "${OLD_TAG}..${NEW_TAG}")" - -echo "INFO: Generate change log entries from ${OLD_TAG} until ${NEW_TAG}" - -while IFS= read -r line; do - if [[ "${line}" =~ ^([a-zA-Z]+)(\([^\)]+\))?\:\ (.+)$ ]]; then - TYPE="${BASH_REMATCH[1]}" - KIND="$(map_type_to_kind "${TYPE}")" - - if [[ "${KIND}" == "skip" ]]; then - continue - fi - - DESC="${BASH_REMATCH[3]}" - - echo "- ${KIND}: ${DESC}" - - jq --arg kind "${KIND}" --arg description "${DESC}" '. += [ $ARGS.named ]' < "${CHANGE_LOG_YAML}" > "${CHANGE_LOG_YAML}.new" - mv "${CHANGE_LOG_YAML}.new" "${CHANGE_LOG_YAML}" - fi -done <<< "${COMMIT_TITLES}" - -if [[ -s "${CHANGE_LOG_YAML}" ]]; then - yq --inplace --input-format json --output-format yml "${CHANGE_LOG_YAML}" - yq --no-colors --inplace ".annotations.\"artifacthub.io/changes\" |= loadstr(\"${CHANGE_LOG_YAML}\") | sort_keys(.)" "${CHART_FILE}" -else - echo "ERROR: Changelog file is empty: ${CHANGE_LOG_YAML}" >&2 - exit 1 -fi diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 98bfa5a..85fb165 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -70,11 +70,7 @@ jobs: fetch-depth: 0 - name: Add Artifacthub.io annotations - run: | - rc_pattern="\-rc([-\.][0-9]+)?$" - NEW_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${rc_pattern}" | head --lines 1)" - OLD_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${rc_pattern}" | head --lines 2 | tail --lines 1)" - .gitea/scripts/add-annotations.sh "${OLD_TAG}" "${NEW_TAG}" + uses: volker-raschek/ah-annotations@v0.1.1 - name: Extract meta information run: |