actions-package-update
Version:
GitHub Action for package.json update.
15 lines • 17.5 kB
JavaScript
parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"C9JJ":[function(require,module,exports) {
;var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=e(require("convict")),a=e(require("convict-format-with-validator")),o=e(require("pino"));t.default.addFormats(a.default);const i="package-update/",s="update dependencies",d=t.default({workingdir:{default:"./",env:"WORKING_DIR"},token:{default:"",doc:"GitHub Access Token.",format:e=>{if(!e)throw new Error("must be set a GitHub Access Token.")},env:"GITHUB_TOKEN",sensitive:!0},git:{username:{default:"",doc:"specify the commit auther name.",env:"AUTHOR_NAME",format:e=>{if(!e)throw new Error("must be set the commit auther name.")},arg:"username"},useremail:{default:"",doc:"specify the commit auther email.",env:"AUTHOR_EMAIL",format:"email"},prefix:{default:i,doc:"specify working branch prefix. default prefix is package-update/",env:"BRANCH_PREFIX"},message:{default:s,doc:`specify the commit message. default message is ${s}`,env:"COMMIT_MESSAGE"},files:{default:"",doc:"a space separated list of file that will be added to the commit. Leave empty to add all changes.",env:"COMMIT_FILES"}},title:{default:s,doc:`specify the commit message. default message is ${s}`,env:"PULL_REQUEST_TITLE"},update:{default:"ncu",doc:"specify the command for update. default command is ncu.",env:"UPDATE_COMMAND"},shadows:{default:!1,doc:"if you specify this option, shows shadow dependencies changes.",env:"WITH_SHADOWS"},execute:{default:!1,doc:"if you don't specify this option, allows you to test this application.",env:"EXECUTE",format:Boolean},keep:{default:!1,doc:"if you specify this option, keep working branch after all.",env:"KEEP",format:Boolean},log:{level:{default:"info",env:"LOG_LEVEL"}}}),n={...d,logger:o.default({level:d.get("log").level,prettyPrint:!0})};exports.default=n;
},{}],"EHrm":[function(require,module,exports) {
module.exports={name:"actions-package-update",version:"0.11.0",description:"GitHub Action for package.json update.",keywords:["github-actions","npm","pr","pull-request","update","yarn","yarnpkg"],homepage:"https://github.com/taichi/actions-package-update",repository:{type:"git",url:"https://github.com/taichi/actions-package-update.git"},license:"MIT",author:"taichi",bin:"bin/main.js",scripts:{build:"run-s clean lint test bundle",bundle:"parcel build src/index.ts --target=node --global main --no-source-maps",clean:"rm -r -f dist","clean:all":"rm -r -f dist .cache",compile:"tsc --project .",lint:"tslint --project .",prepublish:"run-s clean:all lint test bundle",test:"ava",watch:"ava -w"},dependencies:{"@octokit/rest":"^18.0.12","@pnpm/read-modules-dir":"^2.0.3","cli-table3":"^0.6.0",convict:"^6.0.0","convict-format-with-validator":"^6.0.0",dotenv:"^8.2.0",execa:"^5.0.0","git-url-parse":"^11.4.0",glob:"^7.1.6",moment:"^2.29.1",pino:"^6.7.0","pino-pretty":"^4.3.0","read-package-json":"^3.0.0","sha.js":"^2.4.11"},devDependencies:{"@types/convict":"^5.2.1","@types/dotenv":"^8.2.0","@types/git-url-parse":"^9.0.0","@types/node":"^14.14.11","@types/pino":"^6.3.4","@types/prettier":"^2.1.5","@types/sha.js":"^2.4.0","@types/source-map-support":"^0.5.3",ava:"^3.14.0","cash-cp":"^0.2.0","cash-rm":"^0.2.0","cross-env":"^7.0.3","npm-check-updates":"^10.2.3","npm-run-all":"^4.1.5",parcel:"^1.12.4",prettier:"^2.2.1","sort-package-json":"^1.48.0","source-map-support":"^0.5.19","strip-ansi":"^6.0.0","ts-node":"^9.1.1","tsconfig-paths":"^3.9.0",tslint:"^6.1.3","tslint-config-prettier":"^1.18.0","tslint-microsoft-contrib":"^6.2.0","tslint-plugin-prettier":"^2.3.0",typescript:"^4.1.2","typescript-tslint-plugin":"^1.0.0",typesync:"^0.8.0"},resolutions:{minimist:"^1.2.5",acorn:"7.1.1","kind-of":"6.0.3","serialize-to-js":"3.0.1"},engines:{node:">=10"},preferGlobal:!0,ava:{extensions:["ts"],require:["ts-node/register","tsconfig-paths/register"],files:["test/**/*.test.ts"],verbose:!0}};
},{}],"GEfQ":[function(require,module,exports) {
;var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.toMarkdown=exports.toTextTable=exports.CompareModel=void 0;const t=e(require("cli-table3")),n=e(require("git-url-parse"));class r{constructor(e,t,n){this.name=t.name,this.current=t.version,this.wanted=n.version,this.packageType=this.toPackageType(this.name,e),this.repo=this.toURL(t.repository),this.homepage=t.homepage,this.tags=new Set}rangeWanted(){return this.versionRange(this.current,this.wanted)}diffWantedURL(){return this.diffURL(this.wanted)}toTag(e){const t=`v${e}`;return this.tags.has(t)?t:this.tags.has(e)&&e}diffURL(e){if(this.repo){if(this.current===e){const e=this.toTag(this.current);return e&&`${this.repo}/tree/${e}`}const t=this.toTag(this.current),n=this.toTag(e);return t&&n&&`${this.repo}/compare/${t}...${n}`}return""}versionRange(e,t){return e===t?e:`${e}...${t}`}toPackageType(e,t){const n=(e,t)=>t&&t[e];if(n(e,t.dependencies))return"dependencies";if(n(e,t.devDependencies))return"devDependencies";if(n(e,t.optionalDependencies))return"optionalDependencies";const r=t.bundledDependencies;if(r&&r.find(t=>e===t))return"bundledDependencies";const i=t.bundleDependencies;return i&&i.find(t=>e===t)?"bundleDependencies":"shadow"}toURL(e){if("string"==typeof e){if(2===e.split("/").length)return`https://github.com/${e}`}else if(e&&e.url){const t=n.default(e.url);return t&&t.toString("https").replace(/\.git$/,"")}}}exports.CompareModel=r;class i{constructor(e,t,n,r,i){this.name=e,this.layout=t,this.render=n,this.cliLayout=r,this.cliRender=i}}function o(e){const t=[];t.push(new i("Name",":---- ",e=>e.homepage?`[${e.name}](${e.homepage})`:`\`${e.name}\``,"left",e=>e.name)),t.push(new i("Updating",":--------:",e=>{const t=e.diffWantedURL();return t?`[${e.rangeWanted()}](${t})`:e.rangeWanted()},"center",e=>e.rangeWanted()));return["dependencies","devDependencies","peerDependencies","optionalDependencies","bundledDependencies","bundleDependencies","shadow"].forEach(n=>{if(e.find(e=>e.packageType===n)){const e=e=>e.packageType===n?"*":" ";t.push(new i(n,":-:",e,"center",e))}}),t}function s(e){return`| ${e.map(e=>e.name).join(" | ")} |`}function a(e){return`| ${e.map(e=>e.layout).join(" | ")} |`}function d(e,t){return t.map(t=>{return`| ${e.map(e=>e.render(t)).join(" | ")} |`}).join("\n")}function p(e,n,r){const i=u(e,n,r),s=o(i),a=new t.default({head:s.map(e=>e.name),chars:{top:"=","top-mid":"=","top-left":"","top-right":"=",bottom:"=","bottom-mid":"=","bottom-left":"","bottom-right":"=",left:"|","left-mid":"",mid:"-","mid-mid":"-",right:"|","right-mid":"",middle:"|"},colAligns:s.map(e=>e.cliLayout),style:{head:[],"padding-left":1,"padding-right":1}});return i.forEach(e=>{a.push(s.map(t=>t.cliRender(e)))}),a.toString()}function c(e,t,n){const r=u(e,t,n),i=o(r);return`${s(i)}\n${a(i)}\n${d(i,r)}`}function u(e,t,n){return Array.from(t.entries()).filter(([e,t])=>{const r=n.get(e);return r&&r.version&&r.version!==t.version}).map(([t,i])=>{const o=n.get(t);return new r(e,i,o)})}exports.toTextTable=p,exports.toMarkdown=c;
},{}],"ioA1":[function(require,module,exports) {
;var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const r=t(require("execa"));class n{constructor(t){this.conf=t}async run(t=[]){const n=`git ${t.join(" ")}`;return this.conf.logger.debug(`BEGIN ${n}`),r.default("git",t,{cwd:this.conf.get("workingdir")}).then(t=>{if(this.conf.logger.debug(`END ${n}`),t.failed)throw new Error(`${n} failed`);return t})}async setup(t,r){return this.config("user.name",t).then(()=>this.config("user.email",r))}async config(t,r){return this.run(["config",t,r])}async fetch(t){return this.run(["fetch","--prune",t])}async listBranches(){return(await this.run(["branch","-a"])).stdout.split(/[\r]?\n/)}async currentBranch(){return(await this.run(["rev-parse","--abbrev-ref","HEAD"])).stdout.trim()}async checkout(t){return this.run(["checkout",t])}async checkoutWith(t){return this.run(["checkout","-b",t])}async status(){return(await this.run(["status","--porcelain=v1"])).stdout.split(/[\r]?\n/).filter(t=>t).map(t=>{return{x:t[0],y:t[1],path:t.substring(3)}})}async addAll(){return this.run(["add","--all"])}async add(t){return this.run(["add",...t])}async commit(t){return this.run(["commit","-m",t])}async push(t,r){return this.run(["push",t,r])}async remoteurl(t){return(await this.run(["remote","get-url","--push",t])).stdout.trim()}async deleteBranch(t){return this.run(["branch","-D",t])}}exports.default=n;
},{}],"tmMO":[function(require,module,exports) {
;var e=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r),Object.defineProperty(e,i,{enumerable:!0,get:function(){return t[r]}})}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),t=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),r=this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var i={};if(null!=r)for(var o in r)"default"!==o&&Object.prototype.hasOwnProperty.call(r,o)&&e(i,r,o);return t(i,r),i},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.readFile=exports.readJson=void 0;const o=r(require("fs")),n=i(require("read-package-json")),u=r(require("util"));exports.readJson=u.promisify(n.default),exports.readFile=u.promisify(o.readFile);
},{}],"ZCfc":[function(require,module,exports) {
;var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=require("@octokit/rest"),i=e(require("@pnpm/read-modules-dir")),n=e(require("execa")),a=e(require("git-url-parse")),o=e(require("glob")),r=e(require("moment")),s=e(require("path")),g=e(require("sha.js")),c=require("util"),l=e(require("../package.json")),u=require("./body"),d=e(require("./git")),h=require("./promisify"),f=(e,t)=>Object.fromEntries(Object.entries(e).map(([e,i])=>[e,t(e,i)]));class p{constructor(e){this.config=e,this.git=new d.default(e)}async run(){const e=r.default().format("YYYYMMDDhhmm");this.config.logger.info("Start process.");const{found:t,newBranch:i}=await this.makeBranch(e);if(t)return`Found existing branch ${t}`;const n=await this.upgrade(),a=await this.commit();await this.git.checkout("-");const o=await h.readJson(s.default.join(this.config.get("workingdir"),"package.json"));return 0<a.length?this.config.get("execute")?await this.pullRequest(i,o,n,e):(this.config.logger.info("git push is skipped. Because EXECUTE environment variable is not true"),this.config.logger.info(["",...await Promise.all(Object.entries(n).map(async([e,t],i)=>`${0===i?"":e}\n${u.toTextTable(await h.readJson(s.default.join(e,"package.json")),t.oldone,t.newone)} `))].join("\n"))):this.config.logger.info("Did not find outdated dependencies."),this.config.get("keep")||(this.config.logger.info("Delete working branch because KEEP environment variable is not true"),await this.git.deleteBranch(i)),"All done!!"}async makeBranch(e){this.config.logger.debug("START makeBranch");const t=await this.getFile("package.json");if(!t)throw new Error("package.json not found");const i=(new g.default.sha1).update(t.toString(),"utf8").digest("hex"),n=`${this.config.get("git").prefix}${e}/${i}`;await this.git.fetch("origin"),this.config.logger.debug("listBranches");const a=await this.git.listBranches();this.config.logger.trace("%o",a);const o=a.find(e=>e.endsWith(i));return this.config.logger.debug("found branch is %s",o),o||await this.git.checkoutWith(n),this.config.logger.debug("END makeBranch"),{found:o,newBranch:n}}async upgrade(){this.config.logger.debug("START upgrade"),await this.install();const e=await this.collectPackage(),t=process.argv.slice(2),i=this.config.get("update"),n=await this.runInWorkingDir(i,t);if(n.failed)throw this.config.logger.debug("FAILED upgrade"),new Error(n.stderr);await this.install();const a=await this.collectPackage();if(this.config.logger.debug("END upgrade"),e.length!==a.length)throw new Error("received more package.jsons than previous");return f(e,(e,t)=>({directoryName:e,oldone:t,newone:a[e]}))}async commit(){this.config.logger.debug("START commit");const e=await this.git.status();if(0<e.length){this.config.logger.debug("files are changed"),this.config.logger.trace("changed files are %o",e);const t=this.config.get("git").files.split(" "),i=e.filter(e=>t.includes(e.path)).map(e=>e.path);i.length>0?(this.config.logger.debug("files to add are %o",i),await this.git.add(i)):await this.git.addAll(),await this.git.setup(this.config.get("git").username,this.config.get("git").useremail),await this.git.commit(this.config.get("git").message)}return this.config.logger.debug("END commit"),e}async newGitHub(e,i){return new t.Octokit({auth:`token ${e.get("token")}`,userAgent:`${l.default.name}/${l.default.version}`,baseUrl:"github.com"!==i.resource?`https://${i.resource}/api/v3`:void 0})}async pullRequest(e,t,i,n){this.config.logger.debug("START pullRequest"),await this.git.push("origin",e),this.config.logger.trace(i);const o=(await Promise.all(Object.entries(i).map(async([e,t],n)=>`${Object.entries(i).length>1?0===n?"## root":`## ${e}`:"## Updating Dependencies"}\n${u.toMarkdown(await h.readJson(s.default.join(e,"package.json")),t.oldone,t.newone)}`))).join("\n"),r=await this.git.remoteurl("origin"),g=a.default(r),c=await this.newGitHub(this.config,g),d=await c.repos.get({owner:g.owner,repo:g.name}),f={owner:g.owner,repo:g.name,base:d.data.default_branch,head:e,title:this.config.get("title"),body:`${o}\n\nPowered by [${l.default.name}](${l.default.homepage})`};this.config.logger.debug("Pull Request create"),this.config.logger.trace(f),await c.pulls.create(f),this.config.logger.debug("END pullRequest")}async install(){if(this.config.logger.debug("START install"),await this.getFile("yarn.lock"))return this.config.logger.debug("use yarn"),void(await this.runInWorkingDir("yarn","install"));this.config.logger.debug("use npm"),await this.runInWorkingDir("npm","install"),this.config.logger.debug("END install")}async getFile(e){const t=s.default.join(this.config.get("workingdir"),e);return this.config.logger.debug("getFile %s",t),h.readFile(t,{encoding:"utf8"}).catch(()=>void 0)}async runInWorkingDir(e,t,i){const a="string"==typeof t?[t]:t;this.config.logger.debug("runInWorkingDir %s %o",e,a);const o=n.default(e,a,{cwd:this.config.get("workingdir"),...i});return this.config.logger.levelVal<30&&(o.stdout&&o.stdout.pipe(process.stdout),o.stderr&&o.stderr.pipe(process.stderr)),o}async collectPackage(){const e=this.config.get("workingdir"),t=await h.readJson(s.default.join(e,"./package.json")),n=t.workspaces?[e,...await Promise.all(t.workspaces.map(t=>c.promisify(o.default)(s.default.join(e,t))))].flat():[e];return Object.fromEntries(await Promise.all(n.map(async t=>{this.config.logger.debug("START collectPackage");const n=this.config.get("shadows"),a=await h.readJson(s.default.join(t,"./package.json"));this.config.logger.trace(a);const o=(e,t)=>t&&t[e],r=n?()=>!0:([e,t])=>o(e,a.dependencies)||o(e,a.devDependencies)||o(e,a.optionalDependencies),g=s.default.join(e,"node_modules"),c=e!==t?s.default.join(t,"node_modules"):void 0,l=await i.default(g),u=c?await i.default(c):void 0;if(this.config.logger.trace("module directories are %o",l),l){const e=await Promise.all(l.map(e=>h.readJson(`${g}/${e}/package.json`))),i=u?await Promise.all(u.map(e=>h.readJson(`${c}/${e}/package.json`))):[];this.config.logger.trace("packages %o",e);const n=[...i,...e].map(e=>[e.name,e]).filter(r);return this.config.logger.debug("END collectPackage"),[t,new Map(n)]}return this.config.logger.debug("END collectPackage"),[t,new Map]})))}}exports.default=p;
},{"../package.json":"EHrm","./body":"GEfQ","./git":"ioA1","./promisify":"tmMO"}],"QCba":[function(require,module,exports) {
;var e=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const t=e(require("./config")),r=e(require("./main"));async function o(){t.default.validate({allowed:"strict"});const e=new r.default(t.default),o=await e.run();t.default.logger.info(o),process.exit(0)}o().catch(e=>{console.error(e),process.exit(1)});
},{"./config":"C9JJ","./main":"ZCfc"}]},{},["QCba"], "main")