From 46b15b7ffdefa43805e9b94f1a278c75fe7df524 Mon Sep 17 00:00:00 2001 From: Vladimir Razuvaev Date: Thu, 26 Aug 2021 01:14:08 +0700 Subject: [PATCH] draft: open PR script --- scripts/gatsby-changelog-generator/cli.js | 4 +- .../gatsby-changelog-generator/generate.js | 15 ++--- .../lerna-version-lifecycle.js | 4 +- .../update-and-open-pr.js | 62 +++++++++++++++++++ 4 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 scripts/gatsby-changelog-generator/update-and-open-pr.js diff --git a/scripts/gatsby-changelog-generator/cli.js b/scripts/gatsby-changelog-generator/cli.js index ee624125da415..b8e359461ea09 100644 --- a/scripts/gatsby-changelog-generator/cli.js +++ b/scripts/gatsby-changelog-generator/cli.js @@ -28,7 +28,7 @@ const argv = yargs try { await regenerateChangelog(pkg) } catch (e) { - console.error(`${pkg} error: ${e.message}`) + console.error(`${pkg}: ${e.stack}`) } } } @@ -55,7 +55,7 @@ const argv = yargs try { await updateChangelog(pkg) } catch (e) { - console.error(`${pkg} error: ${e.message}`) + console.error(`${pkg}: ${e.stack}`) } } } diff --git a/scripts/gatsby-changelog-generator/generate.js b/scripts/gatsby-changelog-generator/generate.js index db9edf22584b2..fe1fb1eefb286 100644 --- a/scripts/gatsby-changelog-generator/generate.js +++ b/scripts/gatsby-changelog-generator/generate.js @@ -250,7 +250,10 @@ function addChangelogEntries(packageName, entries, contents) { entries.trimRight(), contents.substr(header.length), ] - fs.writeFileSync(changelogPath(packageName), updatedChangelogParts.join(`\n\n`)) + fs.writeFileSync( + changelogPath(packageName), + updatedChangelogParts.join(`\n\n`) + ) } /** @@ -269,14 +272,12 @@ async function updateChangelog(packageName) { } const changeLog = await generateChangelog(packageName, latestVersion) if (!changeLog) { - console.log( - `Skipping ${packageName}: no new versions after ${latestVersion}` - ) - return + return false } addChangelogEntries(packageName, changeLog, contents) console.log(`Updated ${path}`) + return true } /** @@ -285,7 +286,7 @@ async function updateChangelog(packageName) { * Should be used inside lerna "version" hook (version is changed in package.json but not committed/tagged yet). * See https://github.com/lerna/lerna/tree/main/commands/version#lifecycle-scripts */ -async function onVersion() { +async function onNewVersion() { // get list of changed files (package.json of published packages are expected to be dirty) const { stdout } = await execa("git", ["ls-files", "-m"]) const packages = String(stdout).split(`\n`).map(toPackageName).filter(Boolean) @@ -349,4 +350,4 @@ async function onVersion() { exports.getAllPackageNames = getAllPackageNames exports.regenerateChangelog = regenerateChangelog exports.updateChangelog = updateChangelog -exports.onVersion = onVersion +exports.onNewVersion = onNewVersion diff --git a/scripts/gatsby-changelog-generator/lerna-version-lifecycle.js b/scripts/gatsby-changelog-generator/lerna-version-lifecycle.js index 5fe4112704bb1..f9327c23ffd69 100644 --- a/scripts/gatsby-changelog-generator/lerna-version-lifecycle.js +++ b/scripts/gatsby-changelog-generator/lerna-version-lifecycle.js @@ -1,2 +1,2 @@ -const { onVersion } = require(`./generate`) -onVersion().catch(console.error) +const { onNewVersion } = require(`./generate`) +onNewVersion().catch(console.error) diff --git a/scripts/gatsby-changelog-generator/update-and-open-pr.js b/scripts/gatsby-changelog-generator/update-and-open-pr.js new file mode 100644 index 0000000000000..5aebf01441972 --- /dev/null +++ b/scripts/gatsby-changelog-generator/update-and-open-pr.js @@ -0,0 +1,62 @@ +const execa = require(`execa`) +const { getAllPackageNames, updateChangelog } = require(`./generate`) + +if (!process.env.GITHUB_ACCESS_TOKEN) { + throw new Error(`GITHUB_ACCESS_TOKEN env var not set`) +} + +async function run() { + await execa(`git`, [`checkout`, `master`]) + await execa(`git`, [`pull`, `--tags`]) + + const updatedPackages = [] + for (const pkg of getAllPackageNames()) { + try { + const updated = await updateChangelog(pkg) + if (updated) { + updatedPackages.push(pkg) + } + } catch (e) { + console.error(`${pkg}: ${e.stack}`) + } + } + + if (!updatedPackages.length) { + console.log(`Nothing to do`) + return + } + + // Commit to the same branch + const branchName = `bot-changelog-update` + const commitMessage = `DO NOT MERGE: testing` + try { + await execa(`git`, [`checkout`, `-b`, branchName, `origin/${branchName}`]) + } catch { + await execa(`git`, [`checkout`, branchName]) + } + await execa(`git`, [`commit`, `-m`, commitMessage]) + + try { + const pr = await octokit.pulls.create({ + owner: `gatsby`, + repo: `gatsbyjs`, + title: commitMessage, + head: branchName, + base: `master`, + body: `Update changelogs of the following packages:\n\n${updatedPackages + .map(p => `- ${p}`) + .join(`\n`)}`, + }) + + console.log(`\n---\n\nPR opened - ${pr.data.html_url}`) + + await octokit.issues.addLabels({ + owner, + repo, + issue_number: pr.data.number, + labels: [`bot: merge on green`], + }) + } catch (e) { + console.log(e) + } +}