diff --git a/dist/index.js b/dist/index.js index 0923575..3e841d6 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1441,5 +1441,5 @@ var e=require("./conversions"),n=require("./route"),r={},o=Object.keys(e);functi },{"chalk":"ug4C"}],"PCsh":[function(require,module,exports) { "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=c(require("@babel/runtime/helpers/esm/defineProperty")),r=l(require("fs-extra")),t=c(require("path")),n=c(require("@changesets/parse")),a=require("@changesets/git"),i=c(require("chalk")),o=c(require("p-filter")),s=require("@changesets/logger");function l(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=Object.defineProperty&&Object.getOwnPropertyDescriptor?Object.getOwnPropertyDescriptor(e,t):{};n.get||n.set?Object.defineProperty(r,t,n):r[t]=e[t]}return r.default=e,r}function c(e){return e&&e.__esModule?e:{default:e}}let u=i.default.red("===============================IMPORTANT!==============================="),d=i.default.red("----------------------------------------------------------------------");async function f(e,n){const a=(await(0,o.default)(n,async n=>(await(0,r.lstat)(t.default.join(e,n))).isDirectory())).map(async n=>{const a=t.default.join(e,n,"changes.json"),[i,o]=await Promise.all([(0,r.readFile)(t.default.join(e,n,"changes.md"),"utf-8"),(0,r.readJson)(a)]);return{releases:o.releases,summary:i,id:n}});return Promise.all(a)}async function p(e,r){let t=await f(e,r);return 0===t.length?[]:((0,s.warn)(u),(0,s.warn)("There were old changesets from version 1 found"),(0,s.warn)("Theses are being applied now but the dependents graph may have changed"),(0,s.warn)("Make sure you validate all your dependencies"),(0,s.warn)("In a future major version, we will no longer apply these old changesets, and will instead throw here"),(0,s.warn)(d),t)}function h(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function w(r){for(var t=1;te.split("/")[1]);return e.filter(e=>n.includes(e))}async function g(e,a){let i,o=t.default.join(e,".changeset");try{i=await r.default.readdir(o)}catch(c){if("ENOENT"===c.code)throw new Error("There is no .changeset directory in this project");throw c}void 0!==a&&(i=await y(i,o,a));let s=p(o,i);const l=i.filter(e=>e.endsWith(".md")&&"README.md"!==e).map(async e=>{const a=await r.default.readFile(t.default.join(o,e),"utf-8");return w({},(0,n.default)(a),{id:e.replace(".md","")})});return[...await s,...await Promise.all(l)]}var O=g;exports.default=O; },{"@babel/runtime/helpers/esm/defineProperty":"9iDM","fs-extra":"rdZu","@changesets/parse":"boSt","@changesets/git":"It5m","chalk":"ug4C","p-filter":"PNks","@changesets/logger":"cocj"}],"7QCb":[function(require,module,exports) { -"use strict";function e(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function t(t){for(var n=1;n{try{let o=u.default.join(a.dir,"CHANGELOG.md"),l=await c.default.readFile(o,"utf8"),g=p.getChangelogEntry(l,a.packageJson.version);if(!g)return i.setFailed(`Could not find changelog entry for ${a.packageJson.name}@${a.packageJson.version}`);await e.repos.createRelease(t({tag_name:n,body:g.content,prerelease:a.packageJson.version.includes("-")},r.context.repo))}catch(s){if("ENOENT"!==s.code)throw s}};(async()=>{let e=process.env.GITHUB_TOKEN;if(!e)return void i.setFailed("Please add the GITHUB_TOKEN to the changesets action");let a=`${r.context.repo.owner}/${r.context.repo.repo}`,n=r.context.ref.replace("refs/heads/",""),s=await h.readPreState(process.cwd()),b=void 0!==s&&"pre"===s.mode;const m=new r.GitHub(e);console.log("setting git user"),await o.exec("git",["config","--global","user.name",'"github-actions[bot]"']),await o.exec("git",["config","--global","user.email",'"github-actions[bot]@users.noreply.github.com"']),console.log("setting GitHub credentials"),await c.default.writeFile(`${process.env.HOME}/.netrc`,`machine github.com\nlogin github-actions[bot]\npassword ${e}`);let w=await d.default(process.cwd());if(b){let e=new Set(s.changesets);w=w.filter(t=>!e.has(t.id))}let y=0!==w.length,v={publishScript:i.getInput("publish"),versionScript:i.getInput("version"),commit:i.getInput("commit")||"Version Packages",prTitle:i.getInput("title")||"Version Packages"};if(i.setOutput("published","false"),i.setOutput("publishedPackages","[]"),y||v.publishScript)if(y||!v.publishScript){if(y){let e=`changeset-release/${n}`,{stderr:i}=await p.execWithOutput("git",["checkout",e],{ignoreReturnCode:!0});if(!i.toString().includes(`Switched to a new branch '${e}'`)&&await o.exec("git",["checkout","-b",e]),await o.exec("git",["reset","--hard",r.context.sha]),v.versionScript){let[e,...t]=v.versionScript.split(/\s+/);await o.exec(e,t)}else{let e=await c.default.readJson(u.default.join("node_modules","@changesets","cli","package.json")),t=g.lt(e.version,"2.0.0")?"bump":"version";await o.exec("node",["./node_modules/@changesets/cli/bin.js",t])}let l=`repo:${a}+state:open+head:${e}+base:${n}`,h=m.search.issuesAndPullRequests({q:l}),d=await p.getChangedPackages(process.cwd()),f=(async()=>`This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and ${v.publishScript?"the packages will be published to npm automatically":"publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing)"}. If you're not ready to do a release yet, that's fine, whenever you add more changesets to ${n}, this PR will be updated.\n${b?`\n⚠️⚠️⚠️⚠️⚠️⚠️\n\n\`${n}\` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run \`changeset pre exit\` on \`${n}\`.\n\n⚠️⚠️⚠️⚠️⚠️⚠️\n`:""}\n# Releases\n`+(await Promise.all(d.map(async e=>{let t=await c.default.readFile(u.default.join(e.dir,"CHANGELOG.md"),"utf8"),a=p.getChangelogEntry(t,e.packageJson.version);return{highestLevel:a.highestLevel,private:!!e.packageJson.private,content:`## ${e.packageJson.name}@${e.packageJson.version}\n\n`+a.content}}))).filter(e=>e).sort(p.sortTheThings).map(e=>e.content).join("\n "))();const w=`${v.prTitle}${b?` (${s.tag})`:""}`,y=`${v.commit}${b?` (${s.tag})`:""}`;await o.exec("git",["add","."]),await o.exec("git",["commit","-m",y]),await o.exec("git",["push","origin",e,"--force"]);let k=await h;console.log(JSON.stringify(k.data,null,2)),0===k.data.items.length?(console.log("creating pull request"),await m.pulls.create(t({base:n,head:e,title:w,body:await f},r.context.repo))):(m.pulls.update(t({pull_number:k.data.items[0].number,title:w,body:await f},r.context.repo)),console.log("pull request found"))}}else{console.log("No changesets found, attempting to publish any unpublished packages to npm");let e=`${process.env.HOME}/.npmrc`;c.default.existsSync(e)?console.log("Found existing .npmrc file"):(console.log("No .npmrc file found, creating one"),c.default.writeFileSync(e,`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}`));let[t,...a]=v.publishScript.split(/\s+/),s=await p.execWithOutput(t,a);await o.exec("git",["pull","origin",n]),await o.exec("git",["push","origin",`HEAD:${n}`,"--tags"]);let{packages:r,tool:u}=await l.getPackages(process.cwd()),g=[];if("root"!==u){let e=/New tag:\s+(@[^\/]+\/[^@]+|[^\/]+)@([^\s]+)/,t=new Map(r.map(e=>[e.packageJson.name,e]));for(let a of s.stdout.split("\n")){let n=a.match(e);if(null===n)continue;let s=n[1],o=t.get(s);if(void 0===o)return i.setFailed(`Package "${s}" not found.`+"This is probably a bug in the action, please open an issue");g.push(o)}await Promise.all(g.map(e=>f(m,{pkg:e,tagName:`${e.packageJson.name}@${e.packageJson.version}`})))}else{if(0===r.length)return i.setFailed("No package found.This is probably a bug in the action, please open an issue");const e=r[0];g.push(e),await f(m,{pkg:e,tagName:`v${e.packageJson.version}`})}g.length&&(i.setOutput("published","true"),i.setOutput("publishedPackages",JSON.stringify(g.map(e=>({name:e.packageJson.name,version:e.packageJson.version})))))}else console.log("No changesets found")})().catch(e=>{console.error(e),i.setFailed(e.message)}); +"use strict";function e(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,n)}return a}function t(t){for(var n=1;n{try{let o=u.default.join(a.dir,"CHANGELOG.md"),l=await c.default.readFile(o,"utf8"),g=p.getChangelogEntry(l,a.packageJson.version);if(!g)return i.setFailed(`Could not find changelog entry for ${a.packageJson.name}@${a.packageJson.version}`);await e.repos.createRelease(t({tag_name:n,body:g.content,prerelease:a.packageJson.version.includes("-")},r.context.repo))}catch(s){if("ENOENT"!==s.code)throw s}};(async()=>{let e=process.env.GITHUB_TOKEN;if(!e)return void i.setFailed("Please add the GITHUB_TOKEN to the changesets action");let a=`${r.context.repo.owner}/${r.context.repo.repo}`,n=r.context.ref.replace("refs/heads/",""),s=await h.readPreState(process.cwd()),b=void 0!==s&&"pre"===s.mode;const m=new r.GitHub(e);console.log("setting git user"),await o.exec("git",["config","--global","user.name",'"github-actions[bot]"']),await o.exec("git",["config","--global","user.email",'"github-actions[bot]@users.noreply.github.com"']),console.log("setting GitHub credentials"),await c.default.writeFile(`${process.env.HOME}/.netrc`,`machine github.com\nlogin github-actions[bot]\npassword ${e}`);let w=await d.default(process.cwd());if(b){let e=new Set(s.changesets);w=w.filter(t=>!e.has(t.id))}let y=0!==w.length,v={publishScript:i.getInput("publish"),versionScript:i.getInput("version"),commit:i.getInput("commit")||"Version Packages",prTitle:i.getInput("title")||"Version Packages"};if(i.setOutput("published","false"),i.setOutput("publishedPackages","[]"),y||v.publishScript)if(y||!v.publishScript){if(y){let e=`changeset-release/${n}`,{stderr:i}=await p.execWithOutput("git",["checkout",e],{ignoreReturnCode:!0});if(!i.toString().includes(`Switched to a new branch '${e}'`)&&await o.exec("git",["checkout","-b",e]),await o.exec("git",["reset","--hard",r.context.sha]),v.versionScript){let[e,...t]=v.versionScript.split(/\s+/);await o.exec(e,t)}else{let e=await c.default.readJson(u.default.join("node_modules","@changesets","cli","package.json")),t=g.lt(e.version,"2.0.0")?"bump":"version";await o.exec("node",["./node_modules/@changesets/cli/bin.js",t])}let l=`repo:${a}+state:open+head:${e}+base:${n}`,h=m.search.issuesAndPullRequests({q:l}),d=await p.getChangedPackages(process.cwd()),f=(async()=>`This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and ${v.publishScript?"the packages will be published to npm automatically":"publish to npm yourself or [setup this action to publish automatically](https://github.com/changesets/action#with-publishing)"}. If you're not ready to do a release yet, that's fine, whenever you add more changesets to ${n}, this PR will be updated.\n${b?`\n⚠️⚠️⚠️⚠️⚠️⚠️\n\n\`${n}\` is currently in **pre mode** so this branch has prereleases rather than normal releases. If you want to exit prereleases, run \`changeset pre exit\` on \`${n}\`.\n\n⚠️⚠️⚠️⚠️⚠️⚠️\n`:""}\n# Releases\n`+(await Promise.all(d.map(async e=>{let t=await c.default.readFile(u.default.join(e.dir,"CHANGELOG.md"),"utf8"),a=p.getChangelogEntry(t,e.packageJson.version);return{highestLevel:a.highestLevel,private:!!e.packageJson.private,content:`## ${e.packageJson.name}@${e.packageJson.version}\n\n`+a.content}}))).filter(e=>e).sort(p.sortTheThings).map(e=>e.content).join("\n "))();const w=`${v.prTitle}${b?` (${s.tag})`:""}`,y=`${v.commit}${b?` (${s.tag})`:""}`;await o.exec("git",["add","."]),await o.exec("git",["commit","-m",y]),await o.exec("git",["push","origin",e,"--force"]);let k=await h;console.log(JSON.stringify(k.data,null,2)),0===k.data.items.length?(console.log("creating pull request"),await m.pulls.create(t({base:n,head:e,title:w,body:await f},r.context.repo))):(m.pulls.update(t({pull_number:k.data.items[0].number,title:w,body:await f},r.context.repo)),console.log("pull request found"))}}else{console.log("No changesets found, attempting to publish any unpublished packages to npm");let e=`${process.env.HOME}/.npmrc`;c.default.existsSync(e)?console.log("Found existing .npmrc file"):(console.log("No .npmrc file found, creating one"),c.default.writeFileSync(e,`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}`));let[t,...a]=v.publishScript.split(/\s+/),s=await p.execWithOutput(t,a);await o.exec("git",["pull","origin",n]),await o.exec("git",["push","origin",`HEAD:${n}`,"--tags"]);let{packages:r,tool:u}=await l.getPackages(process.cwd()),g=[];if("root"!==u){let e=/New tag:\s+(@[^/]+\/[^@]+|[^/]+)@([^\s]+)/,t=new Map(r.map(e=>[e.packageJson.name,e]));for(let a of s.stdout.split("\n")){let n=a.match(e);if(null===n)continue;let s=n[1],o=t.get(s);if(void 0===o)return i.setFailed(`Package "${s}" not found.`+"This is probably a bug in the action, please open an issue");g.push(o)}await Promise.all(g.map(e=>f(m,{pkg:e,tagName:`${e.packageJson.name}@${e.packageJson.version}`})))}else{if(0===r.length)return i.setFailed("No package found.This is probably a bug in the action, please open an issue");const e=r[0];g.push(e),await f(m,{pkg:e,tagName:`v${e.packageJson.version}`})}g.length&&(i.setOutput("published","true"),i.setOutput("publishedPackages",JSON.stringify(g.map(e=>({name:e.packageJson.name,version:e.packageJson.version})))))}else console.log("No changesets found")})().catch(e=>{console.error(e),i.setFailed(e.message)}); },{"@actions/core":"4FTV","@actions/exec":"utFe","@actions/github":"8Dol","fs-extra":"JTJ9","@manypkg/get-packages":"2/T/","./utils":"UnXq","semver":"aric","@changesets/pre":"jEAA","@changesets/read":"PCsh"}]},{},["7QCb"], null) \ No newline at end of file diff --git a/index.ts b/index.ts index f4877e0..a63df3a 100644 --- a/index.ts +++ b/index.ts @@ -8,7 +8,7 @@ import { getChangelogEntry, execWithOutput, getChangedPackages, - sortTheThings + sortTheThings, } from "./utils"; import * as semver from "semver"; import { readPreState } from "@changesets/pre"; @@ -36,7 +36,7 @@ const createRelease = async ( tag_name: tagName, body: changelogEntry.content, prerelease: pkg.packageJson.version.includes("-"), - ...github.context.repo + ...github.context.repo, }); } catch (err) { // if we can't find a changelog, the user has probably disabled changelogs @@ -66,13 +66,13 @@ const createRelease = async ( "config", "--global", "user.name", - `"github-actions[bot]"` + `"github-actions[bot]"`, ]); await exec("git", [ "config", "--global", "user.email", - `"github-actions[bot]@users.noreply.github.com"` + `"github-actions[bot]@users.noreply.github.com"`, ]); console.log("setting GitHub credentials"); @@ -85,7 +85,7 @@ const createRelease = async ( if (isInPreMode) { let changesetsToFilter = new Set(preState.changesets); - changesets = changesets.filter(x => !changesetsToFilter.has(x.id)); + changesets = changesets.filter((x) => !changesetsToFilter.has(x.id)); } let hasChangesets = changesets.length !== 0; @@ -94,7 +94,7 @@ const createRelease = async ( publishScript: core.getInput("publish"), versionScript: core.getInput("version"), commit: core.getInput("commit") || "Version Packages", - prTitle: core.getInput("title") || "Version Packages" + prTitle: core.getInput("title") || "Version Packages", }; core.setOutput("published", "false"); core.setOutput("publishedPackages", "[]"); @@ -134,7 +134,9 @@ const createRelease = async ( if (tool !== "root") { let newTagRegex = /New tag:\s+(@[^/]+\/[^@]+|[^/]+)@([^\s]+)/; - let packagesByName = new Map(packages.map(x => [x.packageJson.name, x])); + let packagesByName = new Map( + packages.map((x) => [x.packageJson.name, x]) + ); for (let line of changesetPublishOutput.stdout.split("\n")) { let match = line.match(newTagRegex); @@ -153,10 +155,10 @@ const createRelease = async ( } await Promise.all( - releasedPackages.map(pkg => + releasedPackages.map((pkg) => createRelease(octokit, { pkg, - tagName: `${pkg.packageJson.name}@${pkg.packageJson.version}` + tagName: `${pkg.packageJson.name}@${pkg.packageJson.version}`, }) ) ); @@ -171,7 +173,7 @@ const createRelease = async ( releasedPackages.push(pkg); await createRelease(octokit, { pkg, - tagName: `v${pkg.packageJson.version}` + tagName: `v${pkg.packageJson.version}`, }); } @@ -180,9 +182,9 @@ const createRelease = async ( core.setOutput( "publishedPackages", JSON.stringify( - releasedPackages.map(pkg => ({ + releasedPackages.map((pkg) => ({ name: pkg.packageJson.name, - version: pkg.packageJson.version + version: pkg.packageJson.version, })) ) ); @@ -194,7 +196,7 @@ const createRelease = async ( if (hasChangesets) { let versionBranch = `changeset-release/${branch}`; let { stderr } = await execWithOutput("git", ["checkout", versionBranch], { - ignoreReturnCode: true + ignoreReturnCode: true, }); let isCreatingChangesetReleaseBranch = !stderr .toString() @@ -220,7 +222,7 @@ const createRelease = async ( let searchQuery = `repo:${repo}+state:open+head:${versionBranch}+base:${branch}`; let searchResultPromise = octokit.search.issuesAndPullRequests({ - q: searchQuery + q: searchQuery, }); let changedPackages = await getChangedPackages(process.cwd()); @@ -246,7 +248,7 @@ ${ ` + ( await Promise.all( - changedPackages.map(async pkg => { + changedPackages.map(async (pkg) => { let changelogContents = await fs.readFile( path.join(pkg.dir, "CHANGELOG.md"), "utf8" @@ -261,14 +263,14 @@ ${ private: !!pkg.packageJson.private, content: `## ${pkg.packageJson.name}@${pkg.packageJson.version}\n\n` + - entry.content + entry.content, }; }) ) ) - .filter(x => x) + .filter((x) => x) .sort(sortTheThings) - .map(x => x.content) + .map((x) => x.content) .join("\n ") ); })(); @@ -292,19 +294,19 @@ ${ head: versionBranch, title: prTitle, body: await prBodyPromise, - ...github.context.repo + ...github.context.repo, }); } else { octokit.pulls.update({ pull_number: searchResult.data.items[0].number, title: prTitle, body: await prBodyPromise, - ...github.context.repo + ...github.context.repo, }); console.log("pull request found"); } } -})().catch(err => { +})().catch((err) => { console.error(err); core.setFailed(err.message); }); diff --git a/utils.test.ts b/utils.test.ts index 33a0a5e..a27d1aa 100644 --- a/utils.test.ts +++ b/utils.test.ts @@ -2,7 +2,7 @@ import { getChangelogEntry, BumpLevels, getChangedPackages, - sortTheThings + sortTheThings, } from "./utils"; import tempy from "tempy"; import { exec } from "@actions/exec"; @@ -93,7 +93,7 @@ test("getChangedPackages works", async () => { await exec("git", ["init"], { cwd: dir }); await fs.writeJson(path.join(dir, "package.json"), { name: "some-package", - version: "1.0.0" + version: "1.0.0", }); await fs.writeFile(path.join(dir, "CHANGELOG.md"), "some content"); await exec("git", ["add", "."], { cwd: dir }); @@ -102,13 +102,13 @@ test("getChangedPackages works", async () => { expect(emptyWorkspaces).toEqual([]); let workspace = { name: "some-package", - version: "2.0.0" + version: "2.0.0", }; await fs.writeFile(path.join(dir, "CHANGELOG.md"), "other content"); await fs.writeJson(path.join(dir, "package.json"), workspace); let workspaces = await getChangedPackages(dir); expect(workspaces).toEqual([ - { name: "some-package", dir, config: workspace } + { name: "some-package", dir, config: workspace }, ]); }); @@ -117,18 +117,18 @@ test("it sorts the things right", () => { { name: "a", highestLevel: BumpLevels.major, - private: true + private: true, }, { name: "b", highestLevel: BumpLevels.patch, - private: false + private: false, }, { name: "c", highestLevel: BumpLevels.major, - private: false - } + private: false, + }, ]; expect(things.sort(sortTheThings)).toMatchSnapshot(); }); diff --git a/utils.ts b/utils.ts index 6cfd4b4..b0a73a5 100644 --- a/utils.ts +++ b/utils.ts @@ -11,12 +11,12 @@ export const BumpLevels = { dep: 0, patch: 1, minor: 2, - major: 3 + major: 3, } as const; export async function getChangedPackages(cwd: string) { let { packages } = await getPackages(cwd); - let packagesByDirectory = new Map(packages.map(x => [x.dir, x])); + let packagesByDirectory = new Map(packages.map((x) => [x.dir, x])); let output = await execWithOutput("git", ["diff", "--name-only"], { cwd }); let names = output.stdout.split("\n"); @@ -34,9 +34,7 @@ export async function getChangedPackages(cwd: string) { } export function getChangelogEntry(changelog: string, version: string) { - let ast = unified() - .use(remarkParse) - .parse(changelog); + let ast = unified().use(remarkParse).parse(changelog); let highestLevel: number = BumpLevels.dep; @@ -61,7 +59,7 @@ export function getChangelogEntry(changelog: string, version: string) { if (headingStartInfo === undefined && stringified === version) { headingStartInfo = { index: i, - depth: node.depth + depth: node.depth, }; continue; } @@ -82,10 +80,8 @@ export function getChangelogEntry(changelog: string, version: string) { ); } return { - content: unified() - .use(remarkStringify) - .stringify(ast), - highestLevel: highestLevel + content: unified().use(remarkStringify).stringify(ast), + highestLevel: highestLevel, }; } @@ -105,13 +101,13 @@ export async function execWithOutput( }, stderr: (data: Buffer) => { myError += data.toString(); - } + }, }, - ...options + ...options, }), stdout: myOutput, - stderr: myError + stderr: myError, }; }