Skip to content

Commit

Permalink
chore: fix release process issues
Browse files Browse the repository at this point in the history
Signed-off-by: Ahmed AbouZaid <[email protected]>
  • Loading branch information
aabouzaid committed Jul 25, 2024
1 parent 64f9a40 commit 64899fb
Show file tree
Hide file tree
Showing 10 changed files with 158 additions and 93 deletions.
45 changes: 0 additions & 45 deletions .chglog/CHANGELOG.tpl.md

This file was deleted.

25 changes: 0 additions & 25 deletions .chglog/config.yml

This file was deleted.

79 changes: 79 additions & 0 deletions .github/config/cliff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# git-cliff ~ default configuration file
# https://git-cliff.org/docs/configuration
#
# Lines starting with "#" are comments.
# Configuration options are organized into tables and keys.
# See documentation for more information on available options.

[changelog]
# template for the changelog footer
header = """
The changelog is automatically generated and it follows [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format.
"""
# template for the changelog body
# https://keats.github.io/tera/docs/#introduction
body = """
{% if version %}\
## [{{ version | trim_start_matches(pat="v") }}](https://github.com/camunda/camunda-platform-helm/releases/tag/{{ version }}) ({{ timestamp | date(format="%Y-%m-%d") }})
{% else %}\
## [unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits %}
- {% if commit.breaking %}**⚠ BREAKING CHANGE** {% endif %}\
{{ commit.message | upper_first }}\
{% endfor %}
{% endfor %}\n
"""
# template for the changelog footer
footer = """
<!-- generated by git-cliff -->
"""
# remove the leading and trailing s
trim = true
# postprocessors
postprocessors = [
# { pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL
]

[git]
# parse the commits based on https://www.conventionalcommits.org
conventional_commits = true
# filter out the commits that are not conventional
filter_unconventional = true
# process each line of a commit as an individual commit
split_commits = false
# regex for preprocessing the commit messages
commit_preprocessors = [
# Replace issue numbers
#{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"},
# Check spelling of the commit with https://github.com/crate-ci/typos
# If the spelling is incorrect, it will be automatically fixed.
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
]
# regex for parsing and grouping commits
commit_parsers = [
{ message = "^feat:", group = "<!-- 0 -->Features" },
{ message = "^refactor:", group = "<!-- 1 -->Refactor" },
{ message = "^fix:", group = "<!-- 2 -->Fixes" },
{ message = "^doc:", group = "<!-- 3 -->Documentation" },
{ message = "^revert:", group = "<!-- 4 -->Revert" },
]
# protect breaking changes from being skipped due to matching a skipping commit_parser
protect_breaking_commits = false
# filter out the commits that are not matched by commit parsers
filter_commits = true
# regex for matching git tags
# tag_pattern = "v[0-9].*"
# regex for skipping tags
# skip_tags = ""
# regex for ignoring tags
# ignore_tags = ""
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "oldest"
# limit the number of commits included in the changelog.
# limit_commits = 42
9 changes: 5 additions & 4 deletions .github/config/release-please/release-please-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,18 @@
"bump-minor-pre-major": false,
"prerelease": false,
"draft": false,
"last-release-sha": "e098c6f7f1d6870acde813b2d38f3db33f89e662",
"packages": {
"charts/camunda-platform-latest": {
"release-type": "helm",
"extra-label": "version/8.5,automation/release-please,release/pr,kind/chore,chart/camunda-platform",
"component": "camunda-platform",
"component": "camunda-platform-latest",
"include-v-in-tag": false
},
"charts/camunda-platform-8.4": {
"release-type": "helm",
"extra-label": "version/8.4,automation/release-please,release/pr,kind/chore,chart/camunda-platform",
"component": "camunda-platform",
"component": "camunda-platform-8.4",
"include-v-in-tag": false,
"extra-files": [
{
Expand All @@ -28,7 +29,7 @@
"charts/camunda-platform-8.3": {
"release-type": "helm",
"extra-label": "version/8.3,automation/release-please,release/pr,kind/chore,chart/camunda-platform",
"component": "camunda-platform",
"component": "camunda-platform-8.3",
"include-v-in-tag": false,
"extra-files": [
{
Expand All @@ -41,7 +42,7 @@
"charts/camunda-platform-8.2": {
"release-type": "helm",
"extra-label": "version/8.2,automation/release-please,release/pr,kind/chore,chart/camunda-platform",
"component": "camunda-platform",
"component": "camunda-platform-8.2",
"include-v-in-tag": false,
"extra-files": [
{
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/chart-release-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ permissions:
contents: write
pull-requests: write

env:
RELEASE_PLEASE_CONFIG_FILE: .github/config/release-please/release-please-config.json
RELEASE_PLEASE_MANIFEST_FILE: .github/config/release-please/.release-please-manifest.json

jobs:
release-please:
name: Run Release Please
Expand All @@ -24,5 +28,5 @@ jobs:
with:
token: '${{ steps.generate-github-token.outputs.token }}'
# Config docs: https://github.com/googleapis/release-please/blob/main/docs/manifest-releaser.md
config-file: .github/config/release-please/release-please-config.json
manifest-file: .github/config/release-please/.release-please-manifest.json
config-file: "${{ env.RELEASE_PLEASE_CONFIG_FILE }}"
manifest-file: "${{ env.RELEASE_PLEASE_MANIFEST_FILE }}"
42 changes: 42 additions & 0 deletions .github/workflows/chart-release-update-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: "Chart - Release - Update Config"

on:
push:
branches:
- main
paths:
- .github/config/release-please/.release-please-manifest.json

permissions:
contents: write

env:
RELEASE_PLEASE_CONFIG: ".github/config/release-please/release-please-config.json"

jobs:
# A workaround for https://github.com/googleapis/release-please/issues/2202
update-config:
name: Update release-please config
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
with:
fetch-depth: 0
- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "[email protected]"
- name: Get latest release commit
run: |
last_release_commit="$(git log -n1 --pretty=format:'%H' --grep='chore(release):')"
cat "${RELEASE_PLEASE_CONFIG_FILE}" |
jq --arg last_release_commit "${last_release_commit}" \
'."last-release-sha" = $last_release_commit' | tee "${RELEASE_PLEASE_CONFIG_FILE}"
- name: Git pull
run: git pull --rebase --autostash .
- uses: EndBug/add-and-commit@a94899bca583c204427a224a7af87c02f9b325d5 # v9.1.4
with:
author_name: "distro-ci[bot]"
author_email: "122795778+distro-ci[bot]@users.noreply.github.com"
message: "chore(release): update release-please config"
4 changes: 2 additions & 2 deletions .github/workflows/chart-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,11 @@ jobs:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
with:
# The verification step happens in the "release" branch before merging into the "main" branch.
# The verification step happens in the release branch before merging into the "main" branch.
fetch-depth: 0
ref: release-please--branches--main
- name: Install env dependencies
uses: asdf-vm/actions/install@05e0d2ed97b598bfce82fd30daf324ae0c4570e6 # v3
# NOTE: This simple test is under review. So it could fail (it should be fixed in that case).
- name: Simple smoke test
uses: nick-fields/retry@7152eba30c6575329ac0576536151aca5a72780e # v3
with:
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/repo-pr-conventions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ jobs:
# Configure additional validation for the subject based on a regex.
# Ensures the subject doesn't start with an uppercase character.
subjectPattern: ^(?![A-Z]).+$
# Ignore release PR since it's different and already automated.
ignoreLabels: |
release/pr
# When using "Squash and merge" on a PR with only one commit, GitHub
# will suggest using that commit message instead of the PR title for the
# merge commit, and it's easy to commit this by mistake. Enable this option
Expand Down
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
git-chglog 0.15.4
git-cliff 2.4.0
golang 1.22.5
gomplate v4.1.0
helm 3.15.3
Expand Down
34 changes: 20 additions & 14 deletions scripts/generate-release-notes.sh
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
#!/bin/bash
set -euo pipefail
set -euox pipefail


main () {
test "$(git branch --show-current)" != "main" && git fetch origin main:main
latest_release_commit="$(git log main -n1 --pretty=format:'%H' --grep='chore(release):')"
cliff_config_file=".github/config/cliff.toml"

chart_dir="${1}"
chart_file="${chart_dir}/Chart.yaml"
chart_name="$(yq '.name' ${chart_file})"
chart_version="$(yq '.version' ${chart_file})"
chart_version_previous="$(git show main:${chart_file} | yq '.version')"
chart_tag="${chart_name}-${chart_version}"
chart_tag_previous="${chart_name}-${chart_version_previous}"

#
# Early exit if the tag already exists.
Expand All @@ -24,24 +25,29 @@ main () {

#
# Generate RELEASE-NOTES.md file (used for Github release notes and ArtifactHub "changes" annotation).
git-chglog \
git-cliff ${latest_release_commit}.. \
--config "${cliff_config_file}" \
--output "${chart_dir}/RELEASE-NOTES.md" \
--tag-filter-pattern "${chart_tag}" \
--next-tag "${chart_tag}" \
--path "${chart_dir}" \
"${chart_tag_previous}".."${chart_tag}"
--include-path "${chart_dir}/**" \
--tag "${chart_tag}"

cat "${chart_dir}/RELEASE-NOTES.md"

#
# Update ArtifactHub "changes" annotation in the Chart.yaml file.
# https://artifacthub.io/docs/topics/annotations/helm/#supported-annotations
change_types="$(yq e '.options.commits.filters.Type | join(" ")' .chglog/config.yml)"
change_types () {
yq -oy "${cliff_config_file}" |
yq '[.git.commit_parsers[].group] | join(" ")' |
tr -d '[:punct:]' | tr -d '[:digit:]'
}

#
declare -A kac_map
kac_map+=(
["feat"]=added
["refactor"]=changed
["fix"]=fixed
["Features"]=added
["Refactor"]=changed
["Fixes"]=fixed
)

# Workaround to rest with empty literal block which is not possible in yq.
Expand All @@ -52,10 +58,10 @@ main () {
artifacthub_changes_tmp="/tmp/changes-for-artifacthub.yaml.tmp"
echo -e 'annotations:\n artifacthub.io/changes: |' > "${artifacthub_changes_tmp}"

for change_type in ${change_types}; do
for change_type in $(change_types); do
change_type_section=$(sed -rn "/^\#+\s${change_type^}/,/^#/p" "${chart_dir}/RELEASE-NOTES.md")
if [[ -n "${change_type_section}" && "${!kac_map[@]}" =~ "${change_type}" ]]; then
echo "${change_type_section}" | egrep '^\*' | sed 's/^* //g' | while read commit_message; do
echo "${change_type_section}" | egrep '^\-' | sed 's/^- //g' | while read commit_message; do
echo " - kind: ${kac_map[${change_type}]}"
echo " description: \"$(echo ${commit_message} | sed -r "s/ \(.+\)$//")\""
done >> "${artifacthub_changes_tmp}"
Expand Down

0 comments on commit 64899fb

Please sign in to comment.