@techmynder/gitlab-ci-file-lint
Version:
Validate a GitLab pipeline YAML file using the official API.
3 lines (2 loc) • 2.26 kB
JavaScript
var e=require("fs"),r=require("node-fetch"),t=require("chalk");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var r=Object.create(null);return e&&Object.keys(e).forEach(function(t){if("default"!==t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})}}),r.default=e,r}var i=/*#__PURE__*/o(e),a=/*#__PURE__*/n(r),s=/*#__PURE__*/n(t);function u(){return u=Object.assign||function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e},u.apply(this,arguments)}var c=function(e,r,t,n){try{return Promise.resolve(a.default(n+"/api/v4/projects/"+r+"/ci/lint",{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json","Private-Token":e},body:JSON.stringify({content:i.readFileSync(t).toString()})})).then(function(e){if(200!==e.status)throw new Error('Unexpected response status code "'+e.status+'" given');return Promise.resolve(e.json()).then(function(e){return u({file:t},e)})})}catch(e){return Promise.reject(e)}},l=function(e){return e.map(function(e,r){return s.default.bold("#"+(r+1)+".")+e}).join("\n")};exports.formatResult=function(e){var r=s.default.bold("Validated "+e.file+": ")+function(e){return"valid"===e.status&&e.warnings.length?s.default.bold.hex("#ffa500")("OK (with warnings)"):"invalid"===e.status||e.errors.length?s.default.bold.red("FAIL"):s.default.bold.green("OK")}(e);return e.errors.length&&(r+=s.default.red("\n\nErrors:\n")+l(e.errors)),e.warnings.length&&(r+=s.default.hex("#ffa500")("\n\nWarnings:\n")+l(e.warnings)),r},exports.lintFile=c,exports.run=function(){try{var e=process.env.GITLAB_LINT_TOKEN||"",r=parseInt(process.env.GITLAB_LINT_PROJECT_ID||"",10),t=process.env.GITLAB_LINT_FILE||".gitlab-ci.yml",n=process.env.GITLAB_LINT_BASE_URL||"https://gitlab.com";if(!e||isNaN(r))throw new Error("Configuration missing. Define at least the `GITLAB_LINT_TOKEN` and `GITLAB_LINT_PROJECT_ID` environment variables.");if(!i.existsSync(t))throw new Error('File "'+t+'" does not exist');return c(e,r,t,n)}catch(e){return Promise.reject(e)}};
//# sourceMappingURL=gitlab-ci-file-lint.js.map