feat: add Artifacthub annotation 'artifacthub.io/changes'
The following PR add the annotation 'artifacthub.io/changes'. For each semantic commit will be the annotation extended. Further information can be found in the documentation of [Artifacthub.io](https://artifacthub.io/docs/topics/annotations/helm/#supported-annotations). The CI has been adapted. The binary jq as well as yq in >= v4.0 is required. Otherwise will not be concatenated the YAML file correctly via the yq expression, because the `loadstr()` expression is not available in lower versions. Additionally the relation between the semantic commit and the Artifacthub.io change log type should be clarified. The current relationshiop can be adapted if needed. Furthermore, yq will be installed as part of the CI steps. It would be great if yq is also available as deb package in >=v4.0. This would reduce the boiler plate to install yq and maintain the version via renovate. Regarding the renovate expression. In my environment works this expression, but I don't know if it also works in this gitea/renovate instance.
This commit is contained in:
parent
0d532363eb
commit
16d82e3c9c
114
.gitea/scripts/add-annotations.sh
Executable file
114
.gitea/scripts/add-annotations.sh
Executable file
@ -0,0 +1,114 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
CHART_FILE="Chart.yaml"
|
||||||
|
if [ ! -f "${CHART_FILE}" ]; then
|
||||||
|
echo "ERROR: ${CHART_FILE} not found!" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEFAULT_NEW_TAG="$(git tag --sort=-version:refname | head -n 1)"
|
||||||
|
DEFAULT_OLD_TAG="$(git tag --sort=-version:refname | head -n 2 | tail -n 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!" 1>&2
|
||||||
|
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!" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${2}" ]; 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!" 1>&2
|
||||||
|
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=${2}
|
||||||
|
|
||||||
|
if [ -z "$(git tag --list "${NEW_TAG}")" ]; then
|
||||||
|
echo "ERROR: Tag '${NEW_TAG}' not found!" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
CHANGE_LOG_YAML=$(mktemp)
|
||||||
|
echo "[]" > "${CHANGE_LOG_YAML}"
|
||||||
|
|
||||||
|
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 --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 changed --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}" 1>&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm "${CHANGE_LOG_YAML}"
|
@ -1,32 +0,0 @@
|
|||||||
name: changelog
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
changelog:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: docker.io/thegeeklab/git-sv:2.0.1
|
|
||||||
steps:
|
|
||||||
- name: install tools
|
|
||||||
run: |
|
|
||||||
apk add -q --update --no-cache nodejs curl jq sed
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Generate upcoming changelog
|
|
||||||
run: |
|
|
||||||
git sv rn -o changelog.md
|
|
||||||
export RELEASE_NOTES=$(cat changelog.md)
|
|
||||||
export ISSUE_NUMBER=$(curl -s "https://gitea.com/api/v1/repos/gitea/helm-gitea/issues?state=open&q=Changelog%20for%20upcoming%20version" | jq '.[].number')
|
|
||||||
|
|
||||||
echo $RELEASE_NOTES
|
|
||||||
JSON_DATA=$(echo "" | jq -Rs --arg title 'Changelog for upcoming version' --arg body "$(cat changelog.md)" '{title: $title, body: $body}')
|
|
||||||
|
|
||||||
if [ -z "$ISSUE_NUMBER" ]; then
|
|
||||||
curl -s -X POST "https://gitea.com/api/v1/repos/gitea/helm-gitea/issues" -H "Authorization: token ${{ secrets.ISSUE_RW_TOKEN }}" -H "Content-Type: application/json" -d "$JSON_DATA"
|
|
||||||
else
|
|
||||||
curl -s -X PATCH "https://gitea.com/api/v1/repos/gitea/helm-gitea/issues/$ISSUE_NUMBER" -H "Authorization: token ${{ secrets.ISSUE_RW_TOKEN }}" -H "Content-Type: application/json" -d "$JSON_DATA"
|
|
||||||
fi
|
|
@ -1,19 +0,0 @@
|
|||||||
name: commitlint
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- "*"
|
|
||||||
types:
|
|
||||||
- opened
|
|
||||||
- edited
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-and-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: commitlint/commitlint:19.8.1
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: check PR title
|
|
||||||
run: |
|
|
||||||
echo "${{ gitea.event.pull_request.title }}" | commitlint --config .commitlintrc.json
|
|
@ -5,33 +5,71 @@ on:
|
|||||||
tags:
|
tags:
|
||||||
- "*"
|
- "*"
|
||||||
|
|
||||||
env:
|
|
||||||
# renovate: datasource=docker depName=alpine/helm
|
|
||||||
HELM_VERSION: "3.17.3"
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
generate-chart-publish:
|
generate-chart-publish:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- name: install tools
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Determine Architecture and Operating System to support x86_64 and ARM based CI nodes
|
||||||
run: |
|
run: |
|
||||||
apt update -y
|
# determine operating system
|
||||||
apt install -y curl ca-certificates curl gnupg
|
OS=$(uname | tr '[:upper:]' '[:lower:]')
|
||||||
# helm
|
echo "OS=${OS}" >> $GITHUB_ENV
|
||||||
curl -O https://get.helm.sh/helm-v${{ env.HELM_VERSION }}-linux-amd64.tar.gz
|
echo "INFO: Set environment variable OS=${OS}"
|
||||||
tar -xzf helm-v${{ env.HELM_VERSION }}-linux-amd64.tar.gz
|
|
||||||
mv linux-amd64/helm /usr/local/bin/
|
# determine architecture
|
||||||
rm -rf linux-amd64 helm-v${{ env.HELM_VERSION }}-linux-amd64.tar.gz
|
ARCH="$(uname -m)"
|
||||||
|
case "${ARCH}" in
|
||||||
|
aarch64) ARCH=arm64;;
|
||||||
|
x86_64) ARCH=amd64;;
|
||||||
|
esac
|
||||||
|
echo "ARCH=${ARCH}" >> $GITHUB_ENV
|
||||||
|
echo "INFO: Set environment variable ARCH=${ARCH}"
|
||||||
|
|
||||||
|
- name: Install packages via apt
|
||||||
|
run: |
|
||||||
|
apt update --yes
|
||||||
|
|
||||||
|
echo "INFO: Install packages via apt"
|
||||||
|
apt install --yes curl ca-certificates curl gnupg jq
|
||||||
|
|
||||||
|
- name: Install helm
|
||||||
|
env:
|
||||||
|
# renovate: datasource=docker depName=alpine/helm
|
||||||
|
HELM_VERSION: "3.17.3"
|
||||||
|
run: |
|
||||||
|
curl --fail --location --output /dev/stdout --silent --show-error https://get.helm.sh/helm-v${HELM_VERSION}-${OS}-${ARCH}.tar.gz | tar --extract --gzip --file /dev/stdin
|
||||||
|
mv ${OS}-${ARCH}/helm /usr/local/bin/
|
||||||
|
rm --force --recursive ${OS}-${ARCH} helm-v${HELM_VERSION}-${OS}-${ARCH}.tar.gz
|
||||||
helm version
|
helm version
|
||||||
# docker
|
|
||||||
|
- name: Install yq
|
||||||
|
env:
|
||||||
|
YQ_VERSION: v4.45.4 # renovate: datasource=github-releases depName=mikefarah/yq
|
||||||
|
run: |
|
||||||
|
curl --fail --location --output /dev/stdout --silent --show-error https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_${OS}_${ARCH}.tar.gz | tar --extract --gzip --file /dev/stdin
|
||||||
|
mv yq_${OS}_${ARCH} /usr/local/bin
|
||||||
|
rm --force --recursive yq_${OS}_${ARCH} yq_${OS}_${ARCH}.tar.gz
|
||||||
|
yq --version
|
||||||
|
|
||||||
|
- name: Install docker-ce via apt
|
||||||
|
run: |
|
||||||
|
echo "INFO: Install docker"
|
||||||
install -m 0755 -d /etc/apt/keyrings
|
install -m 0755 -d /etc/apt/keyrings
|
||||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
curl --fail --location --silent --show-error https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
chmod a+r /etc/apt/keyrings/docker.gpg
|
chmod a+r /etc/apt/keyrings/docker.gpg
|
||||||
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
apt update -y
|
apt update --yes
|
||||||
apt install -y python3 python3-pip apt-transport-https docker-ce-cli
|
apt install --yes python3 python3-pip apt-transport-https docker-ce-cli
|
||||||
|
|
||||||
|
- name: Install awscli
|
||||||
|
run: |
|
||||||
|
echo "INFO: Install awscli via python pip"
|
||||||
pip install awscli --break-system-packages
|
pip install awscli --break-system-packages
|
||||||
|
aws --version
|
||||||
|
|
||||||
- name: Import GPG key
|
- name: Import GPG key
|
||||||
id: import_gpg
|
id: import_gpg
|
||||||
@ -41,6 +79,15 @@ jobs:
|
|||||||
passphrase: ${{ secrets.GPGSIGN_PASSPHRASE }}
|
passphrase: ${{ secrets.GPGSIGN_PASSPHRASE }}
|
||||||
fingerprint: CC64B1DB67ABBEECAB24B6455FC346329753F4B0
|
fingerprint: CC64B1DB67ABBEECAB24B6455FC346329753F4B0
|
||||||
|
|
||||||
|
- name: Add Artifacthub.io annotations
|
||||||
|
run: |
|
||||||
|
NEW_TAG="$(git tag --sort=-version:refname | head --lines 1)"
|
||||||
|
OLD_TAG="$(git tag --sort=-version:refname | head --lines 2 | tail --lines 1)"
|
||||||
|
.gitea/scripts/add-annotations.sh "${OLD_TAG}" "${NEW_TAG}"
|
||||||
|
|
||||||
|
- name: Print Chart.yaml
|
||||||
|
run: cat Chart.yaml
|
||||||
|
|
||||||
# Using helm gpg plugin as 'helm package --sign' has issues with gpg2: https://github.com/helm/helm/issues/2843
|
# Using helm gpg plugin as 'helm package --sign' has issues with gpg2: https://github.com/helm/helm/issues/2843
|
||||||
- name: package chart
|
- name: package chart
|
||||||
run: |
|
run: |
|
||||||
@ -51,7 +98,7 @@ jobs:
|
|||||||
helm package --version "${GITHUB_REF#refs/tags/v}" ./
|
helm package --version "${GITHUB_REF#refs/tags/v}" ./
|
||||||
mkdir gitea
|
mkdir gitea
|
||||||
mv gitea*.tgz gitea/
|
mv gitea*.tgz gitea/
|
||||||
curl -s -L -o gitea/index.yaml https://dl.gitea.com/charts/index.yaml
|
curl --fail --location --output gitea/index.yaml --silent --show-error https://dl.gitea.com/charts/index.yaml
|
||||||
helm repo index gitea/ --url https://dl.gitea.com/charts --merge gitea/index.yaml
|
helm repo index gitea/ --url https://dl.gitea.com/charts --merge gitea/index.yaml
|
||||||
# push to dockerhub
|
# push to dockerhub
|
||||||
echo ${{ secrets.DOCKER_CHARTS_PASSWORD }} | helm registry login -u ${{ secrets.DOCKER_CHARTS_USERNAME }} registry-1.docker.io --password-stdin
|
echo ${{ secrets.DOCKER_CHARTS_PASSWORD }} | helm registry login -u ${{ secrets.DOCKER_CHARTS_USERNAME }} registry-1.docker.io --password-stdin
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
name: check-and-test
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- "*"
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
|
|
||||||
env:
|
|
||||||
# renovate: datasource=github-releases depName=helm-unittest/helm-unittest
|
|
||||||
HELM_UNITTEST_VERSION: "v0.8.2"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check-and-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: alpine/helm:3.17.3
|
|
||||||
steps:
|
|
||||||
- name: install tools
|
|
||||||
run: |
|
|
||||||
apk update
|
|
||||||
apk add --update bash make nodejs npm yamllint ncurses
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: install chart dependencies
|
|
||||||
run: helm dependency build
|
|
||||||
- name: lint
|
|
||||||
run: helm lint
|
|
||||||
- name: template
|
|
||||||
run: helm template --debug gitea-helm .
|
|
||||||
- name: prepare unit test environment
|
|
||||||
run: |
|
|
||||||
helm plugin install --version ${{ env.HELM_UNITTEST_VERSION }} https://github.com/helm-unittest/helm-unittest
|
|
||||||
git submodule update --init --recursive
|
|
||||||
- name: unit tests
|
|
||||||
env:
|
|
||||||
TERM: xterm
|
|
||||||
run: |
|
|
||||||
make unittests
|
|
||||||
- name: verify readme
|
|
||||||
run: |
|
|
||||||
make readme
|
|
||||||
git diff --exit-code --name-only README.md
|
|
||||||
- name: yaml lint
|
|
||||||
uses: https://github.com/ibiqlik/action-yamllint@v3
|
|
Loading…
x
Reference in New Issue
Block a user