diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 53a5a221d..fc5335545 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -8,7 +8,7 @@ jobs: getinfo: runs-on: ubuntu-latest outputs: - tag: ${{ steps.data.outputs.tag }} + npmtag: ${{ steps.data.outputs.npmtag }} steps: - uses: actions/checkout@v2 - run: npm i @@ -28,7 +28,7 @@ jobs: - run: npm ci - run: npm publish --tag $TAG env: - TAG: ${{ needs.getinfo.outputs.tag }} + TAG: ${{ needs.getinfo.outputs.npmtag }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} # TODO: I'm pretty sure this is failing because the package.json name is not scoped (ex. `@dynamoosejs/dynamoose`). We should maybe add a step in here to scope it just for publishing this one package. @@ -44,5 +44,5 @@ jobs: # - run: npm ci # - run: npm publish --tag $TAG # env: - # TAG: ${{ needs.getinfo.outputs.tag }} + # TAG: ${{ needs.getinfo.outputs.npmtag }} # NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/publish/index.js b/publish/index.js index a87e21de7..c48eff642 100644 --- a/publish/index.js +++ b/publish/index.js @@ -12,6 +12,7 @@ const octokit = new Octokit({ }); const path = require("path"); const ora = require("ora"); +const os = require("os"); const npmFetch = require("npm-registry-fetch"); let package = require("../package.json"); @@ -22,6 +23,11 @@ let package = require("../package.json"); console.error("Exiting.\n"); process.exit(1); } + if (!process.env.GITHUBAUTH) { + console.error("You must set `GITHUBAUTH` in order to use this tool."); + console.error("Exiting.\n"); + process.exit(1); + } let results = await inquirer.prompt([ { "name": "branch", @@ -47,7 +53,7 @@ let package = require("../package.json"); "name": "isPrerelease", "type": "confirm", "message": "Is this version a prerelease version?", - "default": (res) => Boolean(retrieveInformation(res.version).tag) + "default": (res) => retrieveInformation(res.version).isPrerelease }, { "name": "confirm", @@ -95,13 +101,14 @@ let package = require("../package.json"); openurl.open(`https://github.com/dynamoosejs/dynamoose/compare/v${package.version}...${results.branch}`); const versionInfo = retrieveInformation(results.version); const versionFriendlyTitle = `Version ${[versionInfo.main, utils.capitalize_first_letter(versionInfo.tag || ""), versionInfo.tagNumber].filter((a) => Boolean(a)).join(" ")}`; - await fs.writeFile(`${results.version}-changelog.md`, `## ${versionFriendlyTitle}\n\nThis release ________\n\nPlease comment or [contact me](https://charlie.fish/contact) if you have any questions about this release.\n\n### Major New Features\n\n### General\n\n### Bug Fixes\n\n### Documentation\n\n### Other`); - await exec(`code ${results.version}-changelog.md`); + const changelogFilePath = path.join(os.tmpdir(), `${results.version}-changelog.md`); + await fs.writeFile(changelogFilePath, `## ${versionFriendlyTitle}\n\nThis release ________\n\nPlease comment or [contact me](https://charlie.fish/contact) if you have any questions about this release.\n\n### Major New Features\n\n### General\n\n### Bug Fixes\n\n### Documentation\n\n### Other`); + await exec(`code ${changelogFilePath}`); const pendingChangelogSpinner = ora("Waiting for user to finish changelog, press enter to continue.").start(); await keypress(); pendingChangelogSpinner.succeed("Finished changelog"); - const versionChangelog = await fs.readFile(`${results.version}-changelog.md`, "utf8"); - if (!versionInfo.tag) { + const versionChangelog = await fs.readFile(changelogFilePath, "utf8"); + if (!versionInfo.isPrerelease) { const existingChangelog = await fs.readFile(path.join(__dirname, "..", "CHANGELOG.md"), "utf8"); const existingChangelogArray = existingChangelog.split("\n---\n"); existingChangelogArray.splice(1, 0, `\n${versionChangelog}\n`); @@ -115,7 +122,15 @@ let package = require("../package.json"); } // Create PR const gitPR = ora("Creating PR on GitHub").start(); - const pr = (await octokit.pulls.create({"owner": "dynamoosejs", "repo": "dynamoose", "title": versionFriendlyTitle, "head": branch, "base": results.branch})).data; + const pr = (await octokit.pulls.create({ + "owner": "dynamoosejs", + "repo": "dynamoose", + "title": versionFriendlyTitle, + "body": versionChangelog, + "labels": ["version"], + "head": branch, + "base": results.branch + })).data; gitPR.succeed(`Created PR ${pr.number} on GitHub`); openurl.open(`https://github.com/dynamoosejs/dynamoose/pull/${pr.number}`); // Poll for PR to be merged @@ -131,7 +146,7 @@ let package = require("../package.json"); "target_commitish": results.branch, "name": `v${results.version}`, "body": versionChangelog, - "prerelease": Boolean(versionInfo.tag) + "prerelease": versionInfo.isPrerelease }); gitRelease.succeed("GitHub release created"); // Poll NPM for release @@ -174,4 +189,4 @@ async function isReleaseSubmiitted(release) { await utils.timeout(5000); isReleaseSubmiitted(release); } -} \ No newline at end of file +} diff --git a/publish/information/index.js b/publish/information/index.js index a3e63cdb9..e8980dcd3 100644 --- a/publish/information/index.js +++ b/publish/information/index.js @@ -1,10 +1,11 @@ const core = require("@actions/core"); const package = require("../../package.json"); const version = package.version; -const {main, tag, tagNumber} = require("./retrieve")(version); +const obj = require("./retrieve")(version); -core.setOutput("main", main); -core.setOutput("tag", tag); -core.setOutput("tagNumber", tagNumber); +Object.entries(obj).forEach((entry) => { + const [key, value] = entry; + core.setOutput(key, value); +}); -console.log({main, tag, tagNumber}); \ No newline at end of file +console.log(obj); diff --git a/publish/information/retrieve.js b/publish/information/retrieve.js index 15b4a3cbc..9b5bb9778 100644 --- a/publish/information/retrieve.js +++ b/publish/information/retrieve.js @@ -1,5 +1,11 @@ module.exports = (version) => { const regex = /^v?((?:\d\.?){1,3})(?:-(.*)\.(\d*))?$/gmu; const [,main,tag,tagNumber] = regex.exec(version); - return {main, tag, tagNumber}; -}; \ No newline at end of file + return { + main, + tag, + "npmtag": tag || "latest", + tagNumber, + "isPrerelease": Boolean(tag) + }; +};