From 640c4a5d646991720131ef3b6e0e63220de5dddf Mon Sep 17 00:00:00 2001 From: Jacob Gillespie Date: Mon, 15 Feb 2021 23:36:35 +0000 Subject: [PATCH] Switch to using resolve-from rather than require.resolve (#71) --- dist/index.js | 8 +++++--- package.json | 1 + src/run.ts | 17 +++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/dist/index.js b/dist/index.js index 1d50121..d63a1ff 100644 --- a/dist/index.js +++ b/dist/index.js @@ -902,8 +902,10 @@ var e=require("./conversions"),n=require("./route"),r={},o=Object.keys(e);functi "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var e=c(require("fs-extra")),r=s(require("path")),t=s(require("@changesets/parse")),n=require("@changesets/git"),a=s(require("chalk")),i=s(require("p-filter")),o=require("@changesets/logger");function s(e){return e&&e.__esModule?e:{default:e}}function c(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}let l=a.default.red("===============================IMPORTANT!==============================="),u=a.default.red("----------------------------------------------------------------------");async function d(t,n){const a=(await(0,i.default)(n,async n=>(await(0,e.lstat)(r.default.join(t,n))).isDirectory())).map(async n=>{const a=r.default.join(t,n,"changes.json"),[i,o]=await Promise.all([(0,e.readFile)(r.default.join(t,n,"changes.md"),"utf-8"),(0,e.readJson)(a)]);return{releases:o.releases,summary:i,id:n}});return Promise.all(a)}async function f(e,r){let t=await d(e,r);return 0===t.length?[]:((0,o.warn)(l),(0,o.warn)("There were old changesets from version 1 found"),(0,o.warn)("Theses are being applied now but the dependents graph may have changed"),(0,o.warn)("Make sure you validate all your dependencies"),(0,o.warn)("In a future major version, we will no longer apply these old changesets, and will instead throw here"),(0,o.warn)(u),t)}function p(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(e){for(var r=1;re.split("/")[1]);return e.filter(e=>a.includes(e))}async function g(n,a){let i,o=r.default.join(n,".changeset");try{i=await e.default.readdir(o)}catch(l){if("ENOENT"===l.code)throw new Error("There is no .changeset directory in this project");throw l}void 0!==a&&(i=await y(i,o,a));let s=f(o,i);const c=i.filter(e=>e.endsWith(".md")&&"README.md"!==e).map(async n=>{const a=await e.default.readFile(r.default.join(o,n),"utf-8");return w({},(0,t.default)(a),{id:n.replace(".md","")})});return[...await s,...await Promise.all(c)]}var O=g;exports.default=O; },{"fs-extra":"1591","@changesets/parse":"pjrD","@changesets/git":"hWLG","chalk":"hGPX","p-filter":"o7Ua","@changesets/logger":"z9Gu"}],"yOXS":[function(require,module,exports) { "use strict";var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=require("@changesets/pre"),r=e(require("@changesets/read"));async function s(e=process.cwd()){let s=await t.readPreState(e),a=void 0!==s&&"pre"===s.mode,i=await r.default(e);if(a){let e=new Set(s.changesets);i=i.filter(t=>!e.has(t.id))}return{preState:a?s:void 0,changesets:i}}exports.default=s; -},{"@changesets/pre":"mAOc","@changesets/read":"X/D8"}],"gwbb":[function(require,module,exports) { -"use strict";function e(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function t(t){for(var r=1;r{try{let s=l.default.join(a.dir,"CHANGELOG.md"),c=await i.default.readFile(s,"utf8"),u=p.getChangelogEntry(c,a.packageJson.version);if(!u)throw new Error(`Could not find changelog entry for ${a.packageJson.name}@${a.packageJson.version}`);await e.repos.createRelease(t({tag_name:r,body:u.content,prerelease:a.packageJson.version.includes("-")},o.context.repo))}catch(n){if("ENOENT"!==n.code)throw n}};async function f({script:e,githubToken:t,cwd:a=process.cwd()}){let r=o.context.ref.replace("refs/heads/",""),n=o.getOctokit(t),[s,...i]=e.split(/\s+/),l=await p.execWithOutput(s,i,{cwd:a});await g.pullBranch(r),await g.push(r,{includeTags:!0});let{packages:u,tool:h}=await c.getPackages(a),f=[];if("root"!==h){let e=/New tag:\s+(@[^/]+\/[^@]+|[^/]+)@([^\s]+)/,t=new Map(u.map(e=>[e.packageJson.name,e]));for(let a of l.stdout.split("\n")){let r=a.match(e);if(null===r)continue;let n=r[1],s=t.get(n);if(void 0===s)throw new Error(`Package "${n}" not found.`+"This is probably a bug in the action, please open an issue");f.push(s)}await Promise.all(f.map(e=>d(n,{pkg:e,tagName:`${e.packageJson.name}@${e.packageJson.version}`})))}else{if(0===u.length)throw new Error("No package found.This is probably a bug in the action, please open an issue");let e=u[0],t=/New tag:/;for(let a of l.stdout.split("\n")){if(a.match(t)){f.push(e),await d(n,{pkg:e,tagName:`v${e.packageJson.version}`});break}}}return f.length?{published:!0,publishedPackages:f.map(e=>({name:e.packageJson.name,version:e.packageJson.version}))}:{published:!1}}async function w({script:e,githubToken:a,cwd:r=process.cwd(),prTitle:n="Version Packages",commitMessage:c="Version Packages",hasPublishScript:d=!1}){let f=`${o.context.repo.owner}/${o.context.repo.repo}`,w=o.context.ref.replace("refs/heads/",""),b=`changeset-release/${w}`,m=o.getOctokit(a),{preState:y}=await h.default(r);await g.switchToMaybeExistingBranch(b),await g.reset(o.context.sha);let k=await p.getVersionsByDirectory(r);if(e){let[t,...a]=e.split(/\s+/);await s.exec(t,a,{cwd:r})}else{let e=await require(require.resolve("@changesets/cli/package.json",{paths:[r]})),t=u.lt(e.version,"2.0.0")?"bump":"version";await s.exec("node",[require.resolve("@changesets/cli/bin.js",{paths:[r]}),t],{cwd:r})}let v=`repo:${f}+state:open+head:${b}+base:${w}`,O=m.search.issuesAndPullRequests({q:v}),$=await p.getChangedPackages(r,k),P=(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 ${d?"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 ${w}, this PR will be updated.\n${y?`\n⚠️⚠️⚠️⚠️⚠️⚠️\n\n\`${w}\` 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 \`${w}\`.\n\n⚠️⚠️⚠️⚠️⚠️⚠️\n`:""}\n# Releases\n`+(await Promise.all($.map(async e=>{let t=await i.default.readFile(l.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 x=`${n}${y?` (${y.tag})`:""}`;if(!(await g.checkIfClean())){const e=`${c}${y?` (${y.tag})`:""}`;await g.commitAll(e)}await g.push(b,{force:!0});let j=await O;console.log(JSON.stringify(j.data,null,2)),0===j.data.items.length?(console.log("creating pull request"),await m.pulls.create(t({base:w,head:b,title:x,body:await P},o.context.repo))):(m.pulls.update(t({pull_number:j.data.items[0].number,title:x,body:await P},o.context.repo)),console.log("pull request found"))}exports.runPublish=f,exports.runVersion=w; -},{"@actions/exec":"AjbX","@actions/github":"Jpqw","fs-extra":"qdgD","@manypkg/get-packages":"9z3N","semver":"y4rL","./utils":"UnXq","./gitUtils":"pH2w","./readChangesetState":"yOXS"}],"7QCb":[function(require,module,exports) { +},{"@changesets/pre":"mAOc","@changesets/read":"X/D8"}],"zg8f":[function(require,module,exports) { +"use strict";const e=require("path"),t=require("module"),r=require("fs"),o=(o,i,n)=>{if("string"!=typeof o)throw new TypeError(`Expected \`fromDir\` to be of type \`string\`, got \`${typeof o}\``);if("string"!=typeof i)throw new TypeError(`Expected \`moduleId\` to be of type \`string\`, got \`${typeof i}\``);try{o=r.realpathSync(o)}catch(f){if("ENOENT"!==f.code){if(n)return;throw f}o=e.resolve(o)}const s=e.join(o,"noop.js"),p=()=>t._resolveFilename(i,{id:s,filename:s,paths:t._nodeModulePaths(o)});if(n)try{return p()}catch(f){return}return p()};module.exports=((e,t)=>o(e,t)),module.exports.silent=((e,t)=>o(e,t,!0)); +},{}],"gwbb":[function(require,module,exports) { +"use strict";function e(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),a.push.apply(a,r)}return a}function t(t){for(var r=1;r{try{let s=l.default.join(a.dir,"CHANGELOG.md"),c=await i.default.readFile(s,"utf8"),u=p.getChangelogEntry(c,a.packageJson.version);if(!u)throw new Error(`Could not find changelog entry for ${a.packageJson.name}@${a.packageJson.version}`);await e.repos.createRelease(t({tag_name:r,body:u.content,prerelease:a.packageJson.version.includes("-")},o.context.repo))}catch(n){if("ENOENT"!==n.code)throw n}};async function w({script:e,githubToken:t,cwd:a=process.cwd()}){let r=o.context.ref.replace("refs/heads/",""),n=o.getOctokit(t),[s,...i]=e.split(/\s+/),l=await p.execWithOutput(s,i,{cwd:a});await g.pullBranch(r),await g.push(r,{includeTags:!0});let{packages:u,tool:h}=await c.getPackages(a),d=[];if("root"!==h){let e=/New tag:\s+(@[^/]+\/[^@]+|[^/]+)@([^\s]+)/,t=new Map(u.map(e=>[e.packageJson.name,e]));for(let a of l.stdout.split("\n")){let r=a.match(e);if(null===r)continue;let n=r[1],s=t.get(n);if(void 0===s)throw new Error(`Package "${n}" not found.`+"This is probably a bug in the action, please open an issue");d.push(s)}await Promise.all(d.map(e=>f(n,{pkg:e,tagName:`${e.packageJson.name}@${e.packageJson.version}`})))}else{if(0===u.length)throw new Error("No package found.This is probably a bug in the action, please open an issue");let e=u[0],t=/New tag:/;for(let a of l.stdout.split("\n")){if(a.match(t)){d.push(e),await f(n,{pkg:e,tagName:`v${e.packageJson.version}`});break}}}return d.length?{published:!0,publishedPackages:d.map(e=>({name:e.packageJson.name,version:e.packageJson.version}))}:{published:!1}}async function b({script:e,githubToken:a,cwd:r=process.cwd(),prTitle:n="Version Packages",commitMessage:c="Version Packages",hasPublishScript:f=!1}){let w=`${o.context.repo.owner}/${o.context.repo.repo}`,b=o.context.ref.replace("refs/heads/",""),m=`changeset-release/${b}`,y=o.getOctokit(a),{preState:k}=await h.default(r);await g.switchToMaybeExistingBranch(m),await g.reset(o.context.sha);let v=await p.getVersionsByDirectory(r);if(e){let[t,...a]=e.split(/\s+/);await s.exec(t,a,{cwd:r})}else{let e=await require(d.default(r,"@changesets/cli/package.json")),t=u.lt(e.version,"2.0.0")?"bump":"version";await s.exec("node",[d.default(r,"@changesets/cli/bin.js"),t],{cwd:r})}let O=`repo:${w}+state:open+head:${m}+base:${b}`,$=y.search.issuesAndPullRequests({q:O}),P=await p.getChangedPackages(r,v),x=(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 ${f?"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 ${b}, this PR will be updated.\n${k?`\n⚠️⚠️⚠️⚠️⚠️⚠️\n\n\`${b}\` 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 \`${b}\`.\n\n⚠️⚠️⚠️⚠️⚠️⚠️\n`:""}\n# Releases\n`+(await Promise.all(P.map(async e=>{let t=await i.default.readFile(l.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 j=`${n}${k?` (${k.tag})`:""}`;if(!(await g.checkIfClean())){const e=`${c}${k?` (${k.tag})`:""}`;await g.commitAll(e)}await g.push(m,{force:!0});let q=await $;console.log(JSON.stringify(q.data,null,2)),0===q.data.items.length?(console.log("creating pull request"),await y.pulls.create(t({base:b,head:m,title:j,body:await x},o.context.repo))):(y.pulls.update(t({pull_number:q.data.items[0].number,title:j,body:await x},o.context.repo)),console.log("pull request found"))}exports.runPublish=w,exports.runVersion=b; +},{"@actions/exec":"AjbX","@actions/github":"Jpqw","fs-extra":"qdgD","@manypkg/get-packages":"9z3N","semver":"y4rL","./utils":"UnXq","./gitUtils":"pH2w","./readChangesetState":"yOXS","resolve-from":"zg8f"}],"7QCb":[function(require,module,exports) { "use strict";var e=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)Object.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t.default=e,t},t=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const s=e(require("@actions/core")),i=t(require("fs-extra")),n=e(require("./gitUtils")),r=require("./run"),o=t(require("./readChangesetState")),u=e=>s.getInput(e)||void 0;(async()=>{let e=process.env.GITHUB_TOKEN;if(!e)return void s.setFailed("Please add the GITHUB_TOKEN to the changesets action");s.setOutput("published","false"),s.setOutput("publishedPackages","[]"),console.log("setting git user"),await n.setupUser(),console.log("setting GitHub credentials"),await i.default.writeFile(`${process.env.HOME}/.netrc`,`machine github.com\nlogin github-actions[bot]\npassword ${e}`);let{changesets:t}=await o.default(),a=s.getInput("publish"),l=0!==t.length,c=!!a;switch(!0){case!l&&!c:return void console.log("No changesets found");case!l&&c:{console.log("No changesets found, attempting to publish any unpublished packages to npm");let t=`${process.env.HOME}/.npmrc`;i.default.existsSync(t)?console.log("Found existing .npmrc file"):(console.log("No .npmrc file found, creating one"),i.default.writeFileSync(t,`//registry.npmjs.org/:_authToken=${process.env.NPM_TOKEN}`));const n=await r.runPublish({script:a,githubToken:e});return void(n.published&&(s.setOutput("published","true"),s.setOutput("publishedPackages",JSON.stringify(n.publishedPackages))))}case l:return void(await r.runVersion({script:u("version"),githubToken:e,prTitle:u("title"),commitMessage:u("commit"),hasPublishScript:c}))}})().catch(e=>{console.error(e),s.setFailed(e.message)}); },{"@actions/core":"RNev","fs-extra":"qdgD","./gitUtils":"pH2w","./run":"gwbb","./readChangesetState":"yOXS"}]},{},["7QCb"], null) \ No newline at end of file diff --git a/package.json b/package.json index 87a21ad..bd1d40d 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "mdast-util-to-string": "^1.0.6", "remark-parse": "^7.0.1", "remark-stringify": "^7.0.3", + "resolve-from": "^5.0.0", "semver": "^6.3.0", "unified": "^8.3.2" }, diff --git a/src/run.ts b/src/run.ts index 73f2450..18d765a 100644 --- a/src/run.ts +++ b/src/run.ts @@ -13,6 +13,7 @@ import { } from "./utils"; import * as gitUtils from "./gitUtils"; import readChangesetState from "./readChangesetState"; +import resolveFrom from "resolve-from"; const createRelease = async ( octokit: ReturnType, @@ -181,20 +182,16 @@ export async function runVersion({ let [versionCommand, ...versionArgs] = script.split(/\s+/); await exec(versionCommand, versionArgs, { cwd }); } else { - let changesetsCliPkgJson = await require(require.resolve( - "@changesets/cli/package.json", - { paths: [cwd] } + let changesetsCliPkgJson = await require(resolveFrom( + cwd, + "@changesets/cli/package.json" )); let cmd = semver.lt(changesetsCliPkgJson.version, "2.0.0") ? "bump" : "version"; - await exec( - "node", - [require.resolve("@changesets/cli/bin.js", { paths: [cwd] }), cmd], - { - cwd, - } - ); + await exec("node", [resolveFrom(cwd, "@changesets/cli/bin.js"), cmd], { + cwd, + }); } let searchQuery = `repo:${repo}+state:open+head:${versionBranch}+base:${branch}`;