| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | import github from '@actions/github' |
| | import core from '@actions/core' |
| | import { program } from 'commander' |
| |
|
| | const { GITHUB_TOKEN, GITHUB_REPOSITORY } = process.env |
| |
|
| | if (!GITHUB_TOKEN) { |
| | throw new Error(`GITHUB_TOKEN environment variable not set`) |
| | } |
| |
|
| | if (GITHUB_REPOSITORY) { |
| | const context = github.context |
| |
|
| | const owner = context.repo.owner |
| | const repo = context.payload.repository!.name |
| | const baseSHA = process.env.BASE_SHA || context.payload.pull_request!.base.sha |
| | const headSHA = process.env.HEAD_SHA || context.payload.pull_request!.head.sha |
| |
|
| | const markdown = await main(owner, repo, baseSHA, headSHA) |
| | core.setOutput('markdown', markdown) |
| | } else { |
| | program |
| | .description('Print a nice Markdown comment if there were features deleted in a PR.') |
| | .arguments('owner repo bash_sha head_sha') |
| | .parse(process.argv) |
| |
|
| | const args = program.args |
| | const [owner, repo, baseSHA, headSHA] = args |
| | console.log(await main(owner, repo, baseSHA, headSHA)) |
| | } |
| |
|
| | async function main(owner: string, repo: string, baseSHA: string, headSHA: string) { |
| | if (!GITHUB_TOKEN) { |
| | throw new Error(`GITHUB_TOKEN environment variable not set`) |
| | } |
| | const octokit = github.getOctokit(GITHUB_TOKEN) |
| | |
| | const response = await octokit.rest.repos.compareCommitsWithBasehead({ |
| | owner, |
| | repo, |
| | basehead: `${baseSHA}...${headSHA}`, |
| | }) |
| |
|
| | const { files } = response.data |
| |
|
| | if (!files) return '' |
| |
|
| | const oldFilenames = [] |
| | for (const file of files) { |
| | const { filename, status } = file |
| | if (!filename.startsWith('data/features')) continue |
| |
|
| | console.warn(`Feature involved in this PR: ${filename}; Status: ${status}`) |
| | if (status === 'removed') { |
| | |
| | oldFilenames.push(filename) |
| | } else if (status === 'renamed') { |
| | |
| | const previousFilename = file.previous_filename |
| | oldFilenames.push(previousFilename) |
| | } else { |
| | console.warn(`${filename} was not removed or renamed. Skipping.`) |
| | } |
| | } |
| |
|
| | if (!oldFilenames.length) { |
| | console.warn("No old file names in this PR. And that's perfectly cool.") |
| | return '' |
| | } |
| |
|
| | let markdown = '**Please restore deleted features**\n\n' |
| | markdown += |
| | "Even if you don't reference these features anymore, as of this branch, please do not delete them.\n" |
| | markdown += 'They might still be referenced in translated content.\n' |
| | markdown += 'The weekly "Delete orphaned features" workflow will clean those up.\n\n' |
| | markdown += '**To *undo* these removals run this command:**\n\n' |
| | markdown += ` |
| | \`\`\`sh |
| | git checkout origin/main -- ${oldFilenames.join(' ')} |
| | \`\`\` |
| | ` |
| |
|
| | return markdown |
| | } |
| |
|
| | export default main |
| |
|