commit-from-action
Version:
Utility class for making changes to a repository from a GitHub Action.
8 lines • 4.29 kB
JavaScript
/*!
*** commit-from-action 2.0.6
*** Copyright © 2021, Jaid <jaid.jsx@gmail.com> (https://github.com/Jaid)
*** @license MIT
*** See https://github.com/Jaid/commit-from-action
!*/
var t,e;t=global,e=function(){return(()=>{var t={n:e=>{var i=e&&e.__esModule?()=>e.default:()=>e;return t.d(i,{a:i}),i},d:(e,i)=>{for(var o in i)t.o(i,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:i[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{default:()=>f});const i=require("@actions/core"),o=require("@actions/exec"),s=require("@actions/github"),r=require("chalk");var n=t.n(r);const a=require("get-boolean-action-input");var u=t.n(a);const c=require("is-git-repo-dirty");var h=t.n(c);const l=require("resolve-any");var p=t.n(l);const m=require("zahl");var b=t.n(m);const g=(0,require("nanoid").customAlphabet)("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",8);function d(t,e){return void 0===t?e:"string"==typeof t?u()(t):!!t}class f{constructor(t={}){this.commits=0,this.branch=null,this.pullNumber=null,this.isMerged=!1,this.isRemoved=!1,this.options={commitMessage:"Modified repository in GitHub Action",mergeMessage:t=>`Automatically merged commits from pull #${t.pullNumber}`,pullRequestTitle:"Automatic changes from GitHub Action",pullRequestBody:"Hewwo!",autoApprove:!0,autoRemoveBranch:!0,githubTokenInputName:"githubToken",branchPrefix:"action-",ignoreFiles:[],...t},this.autoApprove=d(this.options.autoApprove,!0),this.autoRemoveBranch=d(this.options.autoRemoveBranch,!0)}async prepare(){if(!this.branch){if(this.options.branch)this.branch=await p()(this.options.branch,this);else{const t=(t=>{const e=g();return t?t+e:e})(await p()(this.options.branchPrefix,this));this.branch=t}await(0,o.exec)("git",["config","user.email","action@github.com"]),await(0,o.exec)("git",["config","user.name","GitHub Action"]),await(0,o.exec)("git",["checkout","-b",this.branch])}}async commit(t){if(!await h()())return!1;await this.prepare();const e=["add","--all"];if(this.options.ignoreFiles.length){e.push("--");for(const t of this.options.ignoreFiles)e.push(`:!${t}`)}await(0,o.exec)("git",e);let i=t||await p()(this.options.commitMessage,this),s="";const r=t=>{s+=t.toString()};try{await(0,o.exec)("git",["commit","--message",i],{listeners:{stdout:r,stderr:r}})}catch(t){if(s.includes("no changes added to commit"))return!1;throw t}return this.commits++,!0}async findOrCreatePullRequest(t){return(await t.pulls.list({...s.context.repo,head:`${s.context.repo.owner}:${this.branch}`})).data[0]||(await t.pulls.create({...s.context.repo,title:await p()(this.options.pullRequestTitle,this),body:await p()(this.options.pullRequestBody,this),head:this.branch,base:"master"})).data}async push(){if(await h()()&&await this.commit(),!this.commits)return;this.githubToken=(0,i.getInput)(this.options.githubTokenInputName,{required:!0}),await(0,o.exec)("git",["push","--force",`https://${process.env.GITHUB_ACTOR}:${this.githubToken}@github.com/${process.env.GITHUB_REPOSITORY}.git`,`HEAD:${this.branch}`]);const t=(0,s.getOctokit)(this.githubToken).rest,e=await this.findOrCreatePullRequest(t);this.pullNumber=e.number;const r=`https://github.com/${process.env.GITHUB_REPOSITORY}/pull/${this.pullNumber}`;console.log(`Pull with ${b()(this.commits,"commit")} created: ${n().greenBright(r)}`),this.autoApprove&&(await t.pulls.merge({...s.context.repo,pull_number:this.pullNumber,commit_title:await p()(this.options.mergeMessage,this)}),this.isMerged=!0,this.autoRemoveBranch&&(await t.git.deleteRef({...s.context.repo,ref:`heads/${this.branch}`}),this.isRemoved=!0))}async finalize(){if(this.pullNumber&&this.autoApprove&&!this.isMerged){console.log(`Automerging failed, pull #${this.pullNumber} will be closed now`);const t=new GitHub(this.githubToken);await t.pulls.update({...s.context.repo,pull_number:this.pullNumber,state:"closed"})}}}return e})()},"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports["commit-from-action"]=e():t.CommitFromAction=e();
//# sourceMappingURL=index.js.map