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

Reply via email to