This is an automated email from the ASF dual-hosted git repository. wangzx pushed a commit to branch workflow/update-notice-year in repository https://gitbox.apache.org/repos/asf/echarts.git
commit 437e0028b4cd1067104453bb4747f1ee1d8c322f Author: plainheart <y...@all-my-life.cn> AuthorDate: Sun Dec 31 18:46:14 2023 +0800 chore(workflow): add a scheduled workflow to update the NOTICE year automatically --- .github/workflows/.scripts/update-notice-year.js | 90 ++++++++++++++++++++++++ .github/workflows/update-notice-year.yml | 27 +++++++ 2 files changed, 117 insertions(+) diff --git a/.github/workflows/.scripts/update-notice-year.js b/.github/workflows/.scripts/update-notice-year.js new file mode 100644 index 000000000..61505ff5a --- /dev/null +++ b/.github/workflows/.scripts/update-notice-year.js @@ -0,0 +1,90 @@ +/** + * @typedef {import('@octokit/rest').Octokit} Octokit + * @typedef {import('@actions/github')['context']} Context + */ + +module.exports = async function updateNoticeYear( + /** @type {{ octokit: Octokit, context: Context }} */ + { octokit, context } +) { + const newYear = new Date().getFullYear() + console.log('Prepare to update notice year to', newYear) + + const noticeContent = `Apache ECharts +Copyright 2017-${newYear} The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (https://www.apache.org/).` + + const repoCtx = context.repo + + const repoInfo = (await octokit.rest.repos.get(repoCtx)).data + const defaultBranchName = repoInfo.default_branch + const remoteNoticeFile = (await octokit.rest.repos.getContent({ + ...repoCtx, + path: 'NOTICE', + ref: defaultBranchName + })).data + const remoteNoticeContent = base64ToUtf8(remoteNoticeFile.content) + if (remoteNoticeContent === noticeContent) { + console.log('NOTICE year is already updated.') + return + } + + console.log('Ready to update the NOTICE file:\n' + noticeContent) + + const defaultBranch = (await octokit.rest.repos.getBranch({ + ...repoCtx, + branch: defaultBranchName + })).data + + const newBranchName = `bot/update-notice-year/${newYear}` + await octokit.rest.git.createRef({ + ...repoCtx, + ref: `refs/heads/${newBranchName}`, + sha: defaultBranch.commit.sha + }) + console.log('Created a new branch:', newBranchName) + + await octokit.rest.repos.createOrUpdateFileContents({ + ...repoCtx, + path: 'NOTICE', + message: `chore: update NOTICE year to ${newYear}`, + content: utf8ToBase64(noticeContent), + sha: remoteNoticeFile.sha, + branch: newBranchName + }) + + console.log('Updated the NOTICE file on the new branch') + + const pr = (await octokit.rest.pulls.create({ + ...repoCtx, + head: newBranchName, + base: defaultBranchName, + maintainer_can_modify: true, + title: `chore: update NOTICE year to ${newYear}`, + body: `## Brief Information + +This pull request is in the type of: + +- [ ] bug fixing +- [ ] new feature +- [x] others + +### What does this PR do? + +Update notice year to ${newYear}. 💖 + +Happy new year! 祝大家新年快乐!🎇` + })).data + + console.log(`Opened PR #${pr.number} for updating the NOTICE file`) +} + +function utf8ToBase64(data) { + return Buffer.from(data, 'utf-8').toString('base64') +} + +function base64ToUtf8(data) { + return Buffer.from(data, 'base64').toString('utf-8') +} diff --git a/.github/workflows/update-notice-year.yml b/.github/workflows/update-notice-year.yml new file mode 100644 index 000000000..bf396a065 --- /dev/null +++ b/.github/workflows/update-notice-year.yml @@ -0,0 +1,27 @@ +name: Update NOTICE year + +on: + schedule: + - cron: '0 0 1 1 *' + workflow_dispatch: + +jobs: + update-notice-year: + if: ${{ github.repository_owner == 'apache' }} + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + with: + sparse-checkout: | + .github/workflows/.scripts + + - uses: actions/github-script@v7 + with: + script: | + const updateNoticeYear = require('.github/workflows/.scripts/update-notice-year.js') + await updateNoticeYear({ octokit: github, context }) + + + + --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@echarts.apache.org For additional commands, e-mail: commits-h...@echarts.apache.org