Skip to content

Commit

Permalink
Merge pull request #3516 from the-events-calendar/repo-sync/actions/m…
Browse files Browse the repository at this point in the history
…aster

🔄 synced file(s) with the-events-calendar/actions
  • Loading branch information
bordoni authored Jan 30, 2025
2 parents 7140ac3 + c02cf24 commit cfd029d
Show file tree
Hide file tree
Showing 3 changed files with 405 additions and 0 deletions.
167 changes: 167 additions & 0 deletions .github/workflows/release-prepare-branch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
name: Release: Prepare Branch

on:
workflow_dispatch:
inputs:
new-branch:
description: 'Name of the new branch (e.g. release/T24.centaur)'
default: release/T24.release-name
required: true
version-bump-type:
description: 'Type of version bump'
required: true
type: choice
options:
- major (X.x.x)
- feature (x.X.x)
- maintenance (x.x.X)
- hotfix (x.x.x.X)

jobs:
create-pull-request:
runs-on: ubuntu-latest

steps:
- name: Print input vars to summary
run: |
echo "### Debugging Inputs" >> $GITHUB_STEP_SUMMARY
echo "- version-bump-type: \`${{ github.event.inputs['version-bump-type'] }}\`" >> $GITHUB_STEP_SUMMARY
echo "- new-branch: \`${{ github.event.inputs['new-branch'] }}\`" >> $GITHUB_STEP_SUMMARY
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}

- name: Set Variables
id: vars
run: |
versionBumpType="${{ github.event.inputs.version-bump-type }}"
echo "sha_short=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_OUTPUT
echo "version_bump_type=${versionBumpType%% *}" >> $GITHUB_OUTPUT
- name: Set up Git configuration
run: |
git config --global user.email "[email protected]"
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: Create and push release branch
id: create-release-branch
run: |
newBranch="${{ github.event.inputs.new-branch }}"
if git show-ref --quiet "refs/heads/$newBranch"; then
echo "Branch $newBranch already exists, skipping creation."
git fetch origin "$newBranch"
git checkout "$newBranch"
else
git checkout -b "$newBranch"
git push origin "$newBranch" || (git fetch origin "$newBranch" && git reset --hard "origin/$newBranch")
fi
- name: Read and apply version bump
id: versions
run: |
changeBranch="task/version-bump-${{ github.event.inputs.new-branch }}-${{ steps.vars.outputs.sha_short }}"
git checkout -b "$changeBranch"
git push origin "$changeBranch"
versionBumpType="${{ steps.vars.outputs.version_bump_type }}"
jq -c '.paths.versions[]' .puprc | while read -r version; do
echo "Processing version info: $version"
file=$(echo "$version" | jq -r '.file')
regex=$(echo "$version" | jq -r '.regex')
echo "## \`$file\`" >> $GITHUB_STEP_SUMMARY
if [ -f "$file" ]; then
existing_version=$(grep -Po "$regex" "$file" | grep -Po '(\d+\.\d+\.\d+(\.\d+)?)')
if [ -z "$existing_version" ]; then
echo "Error: No version found in \`$file\` using regex \`$regex\`" >> $GITHUB_STEP_SUMMARY
exit 1
fi
echo "* Found: \`$existing_version\`" >> $GITHUB_STEP_SUMMARY
if [ "$versionBumpType" = "hotfix" ] && [ "$file" = "package.json" ]; then
echo "Skipping version bump in \`package.json\` for \`hotfix\` mode" >> $GITHUB_STEP_SUMMARY
continue
fi
IFS='.' read -r -a version_parts <<< "$existing_version"
case "$versionBumpType" in
major)
version_parts[0]=$((version_parts[0] + 1))
version_parts[1]=0
version_parts[2]=0
unset version_parts[3]
;;
feature)
version_parts[1]=$((version_parts[1] + 1))
version_parts[2]=0
unset version_parts[3]
;;
maintenance)
version_parts[2]=$((version_parts[2] + 1))
unset version_parts[3]
;;
hotfix)
if [ -z "${version_parts[3]}" ]; then
version_parts[3]=1
else
version_parts[3]=$((version_parts[3] + 1))
fi
;;
esac
new_version="${version_parts[0]}.${version_parts[1]}.${version_parts[2]}"
if [ -n "${version_parts[3]}" ]; then
new_version="$new_version.${version_parts[3]}"
fi
echo "* Modified: \`$new_version\`" >> $GITHUB_STEP_SUMMARY
php_regex=$(echo "$regex" | sed "s/'/\\\\'/g")
php -r "file_put_contents('$file', preg_replace('/$php_regex/', '\${1}$new_version', file_get_contents('$file')));"
echo "new_version=$new_version" >> $GITHUB_OUTPUT
else
echo "Error: File \`$file\` not found" >> $GITHUB_STEP_SUMMARY
exit 1
fi
done
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
id: cpr
with:
token: ${{ secrets.GHA_BOT_TOKEN_MANAGER }}
base: "${{ github.event.inputs.new-branch }}"
branch: "task/version-bump-${{ github.event.inputs.new-branch }}-${{ steps.vars.outputs.sha_short }}"
title: "[BOT] Version bump for '${{ github.event.inputs.new-branch }}'"
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: |
Version bump for ${{ github.event.inputs.new-branch }}
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
142 changes: 142 additions & 0 deletions .github/workflows/release-process-changelog.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
name: "Release: Process Changelogs"

# 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
- amend-version

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 }}
fetch-depth: 0

- name: Configure PHP environment
uses: shivammathur/setup-php@v2
with:
php-version: 7.4

- name: Set up Composer
run: composer install --no-progress --ignore-platform-reqs

- 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 "[email protected]"
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+)?)')
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"
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: the-events-calendar/actions/.github/actions/process-changelog@main
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.GHA_BOT_TOKEN_MANAGER }}
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: "[BOT] Process changelog for '${{ github.head_ref || github.ref_name }}'"
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
Loading

0 comments on commit cfd029d

Please sign in to comment.