Update copyright years #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Update copyright years | |
on: | |
schedule: | |
- cron: '42 13 3 1 *' # 3rd of January at 13:42 UTC | |
workflow_dispatch: | |
inputs: | |
year: | |
type: number | |
required: true | |
description: 'The (new) year to update the copyright to' | |
permissions: | |
contents: write | |
pull-requests: write | |
jobs: | |
update-copyrights: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Determine years | |
id: years | |
env: | |
TRIGGER_NAME: ${{ github.event_name }} | |
YEAR_INPUT: ${{ inputs.year }} | |
run: | | |
if [ "${TRIGGER_NAME}" = 'workflow_dispatch' ]; then | |
NEW_YEAR=${YEAR_INPUT} | |
else | |
NEW_YEAR=$(date '+%Y') | |
fi | |
echo "new-year=${NEW_YEAR}" >> "${GITHUB_OUTPUT}" | |
echo "old-year=$(($NEW_YEAR - 1))" >> "${GITHUB_OUTPUT}" | |
- name: Checkout branch | |
id: branch | |
env: | |
OLD_YEAR: ${{ steps.years.outputs.old-year }} | |
NEW_YEAR: ${{ steps.years.outputs.new-year }} | |
run: | | |
BRANCH_NAME="update-copyright/${OLD_YEAR}-to-${NEW_YEAR}" | |
echo "branch-name=${BRANCH_NAME}" >> "${GITHUB_OUTPUT}" | |
git checkout -B "${BRANCH_NAME}" | |
- name: Update copyrights | |
run: ./Scripts/update-copyright.sh | |
env: | |
OLD_YEAR: ${{ steps.years.outputs.old-year }} | |
NEW_YEAR: ${{ steps.years.outputs.new-year }} | |
- name: Commit changes if needed | |
id: commit | |
env: | |
ACTOR: ${{ github.actor }} | |
OLD_YEAR: ${{ steps.years.outputs.old-year }} | |
NEW_YEAR: ${{ steps.years.outputs.new-year }} | |
BRANCH_NAME: ${{ steps.branch.outputs.branch-name }} | |
run: | | |
if [ -n "$(git status --porcelain)" ]; then | |
git config --local user.email "${ACTOR}@noreply.github.com" | |
git config --local user.name "${ACTOR}" | |
git add . | |
git commit -m "Update copyright from ${OLD_YEAR} to ${NEW_YEAR}" | |
git push --set-upstream origin "${BRANCH_NAME}" | |
echo 'has-changes=true' >> "${GITHUB_OUTPUT}" | |
else | |
echo 'has-changes=false' >> "${GITHUB_OUTPUT}" | |
fi | |
- name: Create PR if needed | |
if: ${{ steps.commit.outputs.has-changes == 'true' }} | |
env: | |
OLD_YEAR: ${{ steps.years.outputs.old-year }} | |
NEW_YEAR: ${{ steps.years.outputs.new-year }} | |
REPO: ${{ github.repository }} | |
SOURCE_BRANCH: ${{ steps.branch.outputs.branch-name }} | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
TARGET_BRANCH="$(gh repo view "${REPO}" --json 'defaultBranchRef' --jq '.defaultBranchRef.name')" | |
PR_COUNT="$(gh pr list \ | |
--repo "${REPO}" \ | |
--state 'open' \ | |
--head "${SOURCE_BRANCH}" \ | |
--base "${TARGET_BRANCH}" \ | |
--json 'number' \ | |
--jq 'length')" | |
if [ "${PR_COUNT}" -eq 0 ]; then | |
gh pr create \ | |
--repo "${REPO}" \ | |
--head "${SOURCE_BRANCH}" \ | |
--base "${TARGET_BRANCH}" \ | |
--title "Update copyright years from ${OLD_YEAR} to ${NEW_YEAR}" \ | |
--body "This is an automated PR that updates the copyright years from \`${OLD_YEAR}\` to \`${NEW_YEAR}\`." | |
fi |