Skip to content

Release - Changelog

Release - Changelog #4

name: "Release - Changelog"
# This action will run when it is triggered manually
on:
workflow_dispatch:
inputs:
release-version:
description: "The release version for which the action should process the changelog (e.g. 4.5.0) (default: will try to figure it out)"
default: 'figure-it-out'
required: true
type: string
release-date:
description: "The release date in human-readable format (default: 'today')."
required: false
default: "today"
type: string
action-type:
description: "Whether this is to amend or generate the changelog entries (default: 'generate')."
required: true
default: "generate"
type: choice
options:
- amend
- generate
defaults:
run:
shell: bash
jobs:
process-changelog:
name: "Process the changelog"
runs-on: ubuntu-latest
env:
CHANGELOG_ACTION: ${{ inputs.action-type }}
RELEASE_VERSION: ${{ inputs.release-version }}
RELEASE_DATE: ${{ inputs.release-date }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
- name: Set Variables
id: vars
run: echo "sha_short=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_OUTPUT
- name: Set up Git configuration
run: |
git config --global user.email "actions@github.com"
git config --global user.name "github-actions"
- name: Check for .puprc file and paths.versions
id: check-puprc
run: |
if [ ! -f ".puprc" ]; then
echo "Error: .puprc file not found" >> $GITHUB_STEP_SUMMARY
exit 1
fi
if ! jq -e '.paths.versions' .puprc > /dev/null; then
echo "Error: paths.versions not found in .puprc" >> $GITHUB_STEP_SUMMARY
exit 1
fi
- name: Figure out Version
id: figure_out_version
run: |
if [ "$RELEASE_VERSION" == "figure-it-out" ]; then
existing_version=""
while read -r version; do
echo "Processing version info: $version"
file=$(echo "$version" | jq -r '.file')
regex=$(echo "$version" | jq -r '.regex')
existing_version=$(grep -Po "$regex" "$file" | grep -Po '(\d+\.\d+\.\d+(\.\d+)?)')
echo "Current version: $existing_version"
if [ -n "$existing_version" ]; then
echo "Release version: $existing_version"
echo "RELEASE_VERSION=$existing_version" >> $GITHUB_OUTPUT
break
fi
done < <(jq -c '.paths.versions[]' .puprc)
else
echo "Release version: $RELEASE_VERSION"
echo "RELEASE_VERSION=$RELEASE_VERSION" >> $GITHUB_OUTPUT
fi
- name: "Format the release date"
id: format_date
run: |
RELEASE_DATE=$( date "+%Y-%m-%d" -d "$RELEASE_DATE" ) # Release date formatted as YYYY-MM-DD
echo "RELEASE_DATE=$RELEASE_DATE" >> $GITHUB_OUTPUT
- name: Create new branch
id: versions
run: |
changeBranch="task/process-changelog/${{ steps.format_date.outputs.RELEASE_DATE }}/${{ steps.figure_out_version.outputs.RELEASE_VERSION }}/${{ steps.vars.outputs.sha_short }}"
git checkout -b "$changeBranch"
git push origin "$changeBranch"
- name: "Process changelog"
id: process_changelog
uses: ./.github/actions/process-changelog
with:
release-version: ${{ steps.figure_out_version.outputs.RELEASE_VERSION }}
release-date: ${{ steps.format_date.outputs.RELEASE_DATE }}
action-type: ${{ env.CHANGELOG_ACTION }}
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
id: cpr
with:
token: ${{ secrets.GITHUB_TOKEN }}
base: ${{ github.ref }}
branch: "task/process-changelog/${{ steps.format_date.outputs.RELEASE_DATE }}/${{ steps.figure_out_version.outputs.RELEASE_VERSION }}/${{ steps.vars.outputs.sha_short }}"
title: "Process changelog for ${{ github.ref }}"
body: |
This is an automated PR created by ${{ github.actor }}.
It was generated by [this GitHub Action](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}).
labels: "automation"
commit-message: |
Process changelog for ${{ github.ref }}
This is an automated PR created by ${{ github.actor }}.
Generated by: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
- name: Check outputs
if: ${{ steps.cpr.outputs.pull-request-number }}
run: |
echo "## Pull Request" >> $GITHUB_STEP_SUMMARY
echo "* Number - ${{ steps.cpr.outputs.pull-request-number }}" >> $GITHUB_STEP_SUMMARY
echo "* URL - [${{ steps.cpr.outputs.pull-request-url }}](${{ steps.cpr.outputs.pull-request-url }})" >> $GITHUB_STEP_SUMMARY