94 lines
2.5 KiB
JavaScript
94 lines
2.5 KiB
JavaScript
/**
|
|
* @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 now = new Date()
|
|
// Change to UTC+8
|
|
now.setHours(now.getHours() + 8)
|
|
const newYear = now.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')
|
|
}
|