Compare commits
29
Commits
a6335bfb0e
...
v0.2.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f99244b6ac | ||
|
|
f21649ef98
|
||
|
|
4124d2c0c5
|
||
|
|
394c453acc
|
||
|
|
99b0a4be64 | ||
|
|
8f1758ecbe
|
||
|
|
994de3ecec
|
||
|
|
1aaa54e066
|
||
|
|
27e819682f | ||
|
|
e0b71d8aa5
|
||
|
|
b2935585a4 | ||
|
|
5ae2226870
|
||
|
|
7cdb450303
|
||
|
|
d08d955819
|
||
|
|
e37c1f1fcc
|
||
|
|
82444f39b6 | ||
|
|
eeb09fdeb4
|
||
|
|
d5154c8f3c
|
||
|
|
2d35007630 | ||
|
|
f2c542c849
|
||
|
|
1f3c3084cb
|
||
|
|
896608c49c
|
||
|
|
f51c290f04
|
||
|
|
6f174f4aac
|
||
|
|
68d8884ddd
|
||
|
|
9b964d0089 | ||
|
|
57d5864e69
|
||
|
|
7eb7e2a458 | ||
|
|
62f719e55e
|
@@ -0,0 +1,70 @@
|
|||||||
|
name: Auto release tagged
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "master" ]
|
||||||
|
paths:
|
||||||
|
- install-yq.sh
|
||||||
|
|
||||||
|
env:
|
||||||
|
GIT_EMAIL: noreply@cryptic.systems
|
||||||
|
GIT_USER: CSRBot
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
tag_on_change:
|
||||||
|
permissions:
|
||||||
|
actions: write
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Check if DC_VERSION line changed
|
||||||
|
id: check_change
|
||||||
|
run: |
|
||||||
|
echo "changed=false" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
for file in install-yq.sh; do
|
||||||
|
if git diff HEAD~1 HEAD -- "${file}" | grep --quiet '^[+-]internal_yq_version'; then
|
||||||
|
echo "internal_yq_version line changed."
|
||||||
|
echo "changed=true" >> $GITHUB_OUTPUT
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Stop if no change detected
|
||||||
|
if: steps.check_change.outputs.changed == 'false'
|
||||||
|
run: echo "No internal_yq_version change. Exiting..."
|
||||||
|
|
||||||
|
- name: Get latest tag
|
||||||
|
if: steps.check_change.outputs.changed == 'true'
|
||||||
|
id: get_tag
|
||||||
|
run: |
|
||||||
|
latest_tag=$(git tag --sort=-v:refname | grep --extended-regexp '^v[0-9]+\.[0-9]+\.[0-9]+$' | head --lines 1 || echo "v0.0.0")
|
||||||
|
echo "latest_tag=$latest_tag" >> $GITHUB_OUTPUT
|
||||||
|
echo "Latest tag: $latest_tag"
|
||||||
|
|
||||||
|
- name: Increment patch version
|
||||||
|
if: steps.check_change.outputs.changed == 'true'
|
||||||
|
id: bump
|
||||||
|
run: |
|
||||||
|
latest_tag="${{ steps.get_tag.outputs.latest_tag }}"
|
||||||
|
IFS='.' read -r major minor patch <<< "${latest_tag#v}"
|
||||||
|
patch=$((patch + 1))
|
||||||
|
new_tag="v${major}.${minor}.${patch}"
|
||||||
|
echo "new_tag=$new_tag" >> $GITHUB_OUTPUT
|
||||||
|
echo "New tag: $new_tag"
|
||||||
|
|
||||||
|
- name: Create and push new tag
|
||||||
|
if: steps.check_change.outputs.changed == 'true'
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
new_tag=${{ steps.bump.outputs.new_tag }}
|
||||||
|
git config --local user.name "${GIT_USER}"
|
||||||
|
git config --local user.email "${GIT_EMAIL}"
|
||||||
|
git tag -a "${new_tag}" -m "${new_tag}"
|
||||||
|
git push origin "${new_tag}"
|
||||||
@@ -1,23 +1,25 @@
|
|||||||
# ah-annotation
|
# ah-annotation
|
||||||
|
|
||||||
GitHub Action to generate ArtifactHub changelog annotations from Git commit history and add them to `Chart.yaml`.
|
GitHub Action to generate [ArtifactHub
|
||||||
|
annotations](https://artifacthub.io/docs/topics/annotations/helm/#supported-annotations) from Git commit history and add
|
||||||
|
them to `Chart.yaml`.
|
||||||
|
|
||||||
The action parses conventional commit messages between two Git tags and produces an `artifacthub.io/changes` annotation.
|
The action parses conventional commit messages between two Git tags and produces an `artifacthub.io/changes` annotation.
|
||||||
Pre-release tags (matching `-rc`) are detected automatically and result in an `artifacthub.io/prerelease` annotation
|
Pre-release tags according to [SemVer 2.0](https://semver.org/) (e.g. `-alpha`, `-beta.1`, `-rc.2`) are detected
|
||||||
instead.
|
automatically and result in an `artifacthub.io/prerelease` annotation instead.
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Auto-detect tags
|
### Auto-detect tags
|
||||||
|
|
||||||
Without explicit inputs the action determines the two most recent non-RC tags from the Git history:
|
Without explicit inputs the action determines the two most recent stable (non-pre-release) tags from the Git history:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5.0.0
|
- uses: actions/checkout@v7.0.1
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: volker.raschek/ah-annotations@v0.0.1
|
- uses: volker.raschek/ah-annotations@v0.2.0
|
||||||
```
|
```
|
||||||
|
|
||||||
### Explicit tags
|
### Explicit tags
|
||||||
@@ -26,10 +28,10 @@ Pass `old-tag` and `new-tag` to control the commit range:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5.0.0
|
- uses: actions/checkout@v7.0.1
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- uses: volker.raschek/ah-annotations@v0.0.1
|
- uses: volker.raschek/ah-annotations@v0.2.0
|
||||||
with:
|
with:
|
||||||
old-tag: v1.0.0
|
old-tag: v1.0.0
|
||||||
new-tag: v2.0.0
|
new-tag: v2.0.0
|
||||||
@@ -38,16 +40,33 @@ steps:
|
|||||||
## Inputs
|
## Inputs
|
||||||
|
|
||||||
| Name | Required | Default | Description |
|
| Name | Required | Default | Description |
|
||||||
| --------- | -------- | ------------- | ------------------------------------ |
|
| ------------------ | -------- | ------------------------------------ | ------------------------------------------ |
|
||||||
|
| `chart-path` | no | `${{ github.workspace }}/Chart.yaml` | Path to the Helm chart file. |
|
||||||
| `old-tag` | no | auto-detected | Start tag for changelog generation. |
|
| `old-tag` | no | auto-detected | Start tag for changelog generation. |
|
||||||
| `new-tag` | no | auto-detected | End tag for changelog generation. |
|
| `new-tag` | no | auto-detected | End tag for changelog generation. |
|
||||||
|
| `yq-version` | no | `v4.53.4` | Version of yq to install. |
|
||||||
|
| `yq-arch` | no | auto-detected | Architecture of yq binary to download. |
|
||||||
|
| `yq-os` | no | auto-detected | Operating system of yq binary to download. |
|
||||||
|
| `yq-binary-name` | no | `yq` | Name of the yq binary to download. |
|
||||||
|
| `yq-download-url` | no | auto-built | Full URL to download yq from. |
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
- The repository must be checked out with full history (`fetch-depth: 0`).
|
- The repository must be checked out with full history (`fetch-depth: 0`).
|
||||||
- A `Chart.yaml` file must exist in the working directory.
|
- A `Chart.yaml` file must exist at the path specified by `chart-path`.
|
||||||
- Commit messages must follow the [Conventional Commits](https://www.conventionalcommits.org/) format.
|
- Commit messages must follow the [Conventional Commits](https://www.conventionalcommits.org/) format.
|
||||||
|
|
||||||
|
## Pre-releases
|
||||||
|
|
||||||
|
Tags containing a hyphen-separated pre-release identifier according to [SemVer 2.0](https://semver.org/) are treated as
|
||||||
|
pre-releases (e.g. `v1.0.0-alpha`, `v1.0.0-beta.1`, `v2.0.0-rc.2`). When `new-tag` is a pre-release tag, the action:
|
||||||
|
|
||||||
|
1. Sets `artifacthub.io/prerelease: "true"` in `Chart.yaml`.
|
||||||
|
2. Skips changelog generation entirely.
|
||||||
|
|
||||||
|
When auto-detecting tags (no explicit `old-tag`/`new-tag`), the action ignores pre-release tags and selects the two
|
||||||
|
most recent stable tags instead.
|
||||||
|
|
||||||
## Commit type mapping
|
## Commit type mapping
|
||||||
|
|
||||||
| Commit type | ArtifactHub kind |
|
| Commit type | ArtifactHub kind |
|
||||||
|
|||||||
+6
-2
@@ -2,6 +2,10 @@ name: "ArtifactHub Annotations"
|
|||||||
description: "Generate ArtifactHub changelog annotations from git commit history and add them to Chart.yaml"
|
description: "Generate ArtifactHub changelog annotations from git commit history and add them to Chart.yaml"
|
||||||
|
|
||||||
inputs:
|
inputs:
|
||||||
|
chart-path:
|
||||||
|
description: "Path to the Helm chart file"
|
||||||
|
default: "${{ github.workspace }}/Chart.yaml"
|
||||||
|
required: false
|
||||||
old-tag:
|
old-tag:
|
||||||
description: "Start tag for changelog generation. If not set, auto-detected from git tags."
|
description: "Start tag for changelog generation. If not set, auto-detected from git tags."
|
||||||
required: false
|
required: false
|
||||||
@@ -31,7 +35,7 @@ inputs:
|
|||||||
yq-version:
|
yq-version:
|
||||||
description: "Version of yq to install"
|
description: "Version of yq to install"
|
||||||
required: false
|
required: false
|
||||||
default: "v4.44.6"
|
default: "v4.53.4" # renovate: datasource=github-releases depName=mikefarah/yq versioning=semver
|
||||||
|
|
||||||
runs:
|
runs:
|
||||||
using: "composite"
|
using: "composite"
|
||||||
@@ -49,7 +53,7 @@ runs:
|
|||||||
- name: Add ArtifactHub annotations
|
- name: Add ArtifactHub annotations
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
|
CHART_FILE: ${{ inputs.chart-path }}
|
||||||
INPUT_OLD_TAG: ${{ inputs.old-tag }}
|
INPUT_OLD_TAG: ${{ inputs.old-tag }}
|
||||||
INPUT_NEW_TAG: ${{ inputs.new-tag }}
|
INPUT_NEW_TAG: ${{ inputs.new-tag }}
|
||||||
run: "${GITHUB_ACTION_PATH}/add-annotations.sh"
|
run: "${GITHUB_ACTION_PATH}/add-annotations.sh"
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
readonly CHART_FILE="Chart.yaml"
|
readonly CHART_FILE="${CHART_FILE:="Chart.yaml"}"
|
||||||
readonly RC_PATTERN="\-rc([-\.][0-9]+)?$"
|
readonly PRERELEASE_PATTERN="\-[a-zA-Z0-9]+([-\.][a-zA-Z0-9]+)*$"
|
||||||
|
|
||||||
CHANGE_LOG_YAML=""
|
CHANGE_LOG_YAML=""
|
||||||
|
|
||||||
@@ -24,8 +24,8 @@ if [[ ! -f "${CHART_FILE}" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Determine old and new tags
|
# Determine old and new tags
|
||||||
DEFAULT_NEW_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${RC_PATTERN}" | head --lines 1)"
|
DEFAULT_NEW_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${PRERELEASE_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)"
|
DEFAULT_OLD_TAG="$(git tag --sort=-version:refname | grep --invert-match --perl-regexp "${PRERELEASE_PATTERN}" | head --lines 2 | tail --lines 1)"
|
||||||
|
|
||||||
if [[ -n "${INPUT_OLD_TAG:-}" ]]; then
|
if [[ -n "${INPUT_OLD_TAG:-}" ]]; then
|
||||||
OLD_TAG="${INPUT_OLD_TAG}"
|
OLD_TAG="${INPUT_OLD_TAG}"
|
||||||
@@ -49,7 +49,7 @@ if [[ -z "$(git tag --list "${NEW_TAG}")" ]]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${NEW_TAG}" =~ ${RC_PATTERN} ]]; then
|
if [[ "${NEW_TAG}" =~ ${PRERELEASE_PATTERN} ]]; then
|
||||||
echo "INFO: Tag '${NEW_TAG}' is a prerelease, setting prerelease annotation and skipping changelog."
|
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}"
|
yq --no-colors --inplace ".annotations.\"artifacthub.io/prerelease\" = \"true\" | sort_keys(.)" "${CHART_FILE}"
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
+7
-7
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
internal_yq_version=v4.44.6 # renovate: datasource=github-releases depName=mikefarah/yq versioning=semver
|
internal_yq_version=v4.53.4 # renovate: datasource=github-releases depName=mikefarah/yq versioning=semver
|
||||||
|
|
||||||
# Use :- for unset and handle empty strings from composite action inputs
|
# Use :- for unset and handle empty strings from composite action inputs
|
||||||
YQ_BINARY_NAME="${YQ_BINARY_NAME:="yq"}"
|
YQ_BINARY_NAME="${YQ_BINARY_NAME:="yq"}"
|
||||||
@@ -14,7 +14,7 @@ YQ_VERSION="${YQ_VERSION:="${internal_yq_version}"}"
|
|||||||
case "${YQ_OS:-}" in
|
case "${YQ_OS:-}" in
|
||||||
linux*) ;;
|
linux*) ;;
|
||||||
darwin*) ;;
|
darwin*) ;;
|
||||||
*) echo "Unsupported OS: $(uname -s)"; exit 1;;
|
*) echo "ERROR: Unsupported OS: $(uname -s)"; exit 1;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
@@ -22,7 +22,7 @@ esac
|
|||||||
case "${YQ_ARCH:-}" in
|
case "${YQ_ARCH:-}" in
|
||||||
amd64* | x86_64*) YQ_ARCH="amd64" ;;
|
amd64* | x86_64*) YQ_ARCH="amd64" ;;
|
||||||
aarch64 | arm64*) YQ_ARCH="arm64" ;;
|
aarch64 | arm64*) YQ_ARCH="arm64" ;;
|
||||||
*) echo "Unsupported architecture: $(uname -m)"; exit 1;;
|
*) echo "ERROR: Unsupported architecture: $(uname -m)"; exit 1;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Build download URL if not explicitly provided
|
# Build download URL if not explicitly provided
|
||||||
@@ -41,7 +41,7 @@ fi
|
|||||||
|
|
||||||
# Download and extract yq binary from .tar.gz
|
# Download and extract yq binary from .tar.gz
|
||||||
if [[ "${YQ_DOWNLOAD_URL}" =~ \.tar\.gz$ ]]; then
|
if [[ "${YQ_DOWNLOAD_URL}" =~ \.tar\.gz$ ]]; then
|
||||||
echo "Downloading and extracting yq from ${YQ_DOWNLOAD_URL}..."
|
echo "INFO: Downloading and extracting yq from ${YQ_DOWNLOAD_URL}..."
|
||||||
tmp_dir="$(mktemp -d)"
|
tmp_dir="$(mktemp -d)"
|
||||||
trap 'rm -rf "${tmp_dir}"' EXIT
|
trap 'rm -rf "${tmp_dir}"' EXIT
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ if [[ "${YQ_DOWNLOAD_URL}" =~ \.tar\.gz$ ]]; then
|
|||||||
|
|
||||||
# Download yq binary directly
|
# Download yq binary directly
|
||||||
else
|
else
|
||||||
echo "Downloading yq from ${YQ_DOWNLOAD_URL}..."
|
echo "INFO: Downloading yq from ${YQ_DOWNLOAD_URL}..."
|
||||||
|
|
||||||
curl \
|
curl \
|
||||||
--fail \
|
--fail \
|
||||||
@@ -74,9 +74,9 @@ fi
|
|||||||
chmod +x "${bin_path}"
|
chmod +x "${bin_path}"
|
||||||
|
|
||||||
yq_installed_version="$("${bin_path}" --version)"
|
yq_installed_version="$("${bin_path}" --version)"
|
||||||
echo "Installed ${yq_installed_version} in ${bin_path}"
|
echo "INFO: Installed ${yq_installed_version} in ${bin_path}"
|
||||||
|
|
||||||
# Ensure yq is in PATH for subsequent steps
|
# Ensure yq is in PATH for subsequent steps
|
||||||
if [[ -n "${GITHUB_PATH:-}" ]]; then
|
if [[ -n "${GITHUB_PATH:-}" ]]; then
|
||||||
echo "$(dirname "${bin_path}")" >> "${GITHUB_PATH}"
|
dirname "${bin_path}" >> "${GITHUB_PATH}"
|
||||||
fi
|
fi
|
||||||
@@ -31,9 +31,34 @@
|
|||||||
"depNameTemplate": "actions/checkout",
|
"depNameTemplate": "actions/checkout",
|
||||||
"datasourceTemplate": "github-releases",
|
"datasourceTemplate": "github-releases",
|
||||||
"versioningTemplate": "semver"
|
"versioningTemplate": "semver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"fileMatch": [
|
||||||
|
"^README\\.md$"
|
||||||
|
],
|
||||||
|
"matchStrings": [
|
||||||
|
"yq-version.[ \\t]+\\|[ \\t]+no[ \\t]+\\|[ \\t]+.(?<currentValue>v[\\d]+\\.[\\d]+\\.[\\d]+)"
|
||||||
|
],
|
||||||
|
"depNameTemplate": "mikefarah/yq",
|
||||||
|
"datasourceTemplate": "github-releases",
|
||||||
|
"versioningTemplate": "semver"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packageRules": [
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"addLabels": [
|
||||||
|
"renovate/automerge"
|
||||||
|
],
|
||||||
|
"automerge": true,
|
||||||
|
"matchDepNames": [
|
||||||
|
"mikefarah/yq"
|
||||||
|
],
|
||||||
|
"matchUpdateTypes": [
|
||||||
|
"minor",
|
||||||
|
"patch"
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"addLabels": [
|
"addLabels": [
|
||||||
"renovate/automerge",
|
"renovate/automerge",
|
||||||
|
|||||||
Reference in New Issue
Block a user