Skip to content

Update copyright years #3

Update copyright years

Update copyright years #3

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