Version 1.8 (#5)

This commit is contained in:
Simon Lecoq authored and GitHub committed 2020-10-18 01:10:43 +02:00
1 parent f3a8c37d62
commit 2807cb719a
14 files changed
+344 -285

No files matched your search

+5 -5
View File
@@ -1,4 +1,4 @@
module.exports=(()=>{var __webpack_modules__={76677:(e,t,r)=>{"use strict";r.r(t);var n=r(85622);var i=r.n(n);var a=r(60270);var o=r(3584);var s=r(32882);var l=r.n(s);var c=r(29483);var u=r.n(c);(async function(){const[e,t,r,n]=[s,c,o,a].map(e=>e&&e.default?e.default:e);try{console.log(`GitHub metrics as SVG image`);console.log(`========================================================`);console.log(`Version | 1.7.0`);process.on("unhandledRejection",e=>{throw e});const a=`<svg xmlns="http://www.w3.org/2000/svg" width="480" height="\${485 + ((computed.plugins.lines||computed.plugins.traffic) ? 20 : 0) + (computed.plugins.pagespeed ? 130 : 0) + (computed.plugins.habits ? 70 : 0)}">
module.exports=(()=>{var __webpack_modules__={76677:(e,t,r)=>{"use strict";r.r(t);var n=r(85622);var i=r.n(n);var a=r(60270);var o=r(3584);var s=r(32882);var l=r.n(s);var c=r(29483);var u=r.n(c);var d=r(2390);var p=r.n(d);(async function(){const[e,t,r,n,l]=[s,c,o,d,a].map(e=>e&&e.default?e.default:e);const u=(e,t=false)=>typeof e==="string"?/^(?:[Tt]rue|[Oo]n|[Yy]es)$/.test(e):t;try{console.log(`GitHub metrics as SVG image`);console.log(`========================================================`);console.log(`Version | 1.8.0`);process.on("unhandledRejection",e=>{throw e});if(t.eventName==="push"&&t.context.payload&&t.context.payload.head_commit){if(/\[Skip GitHub Action\]/.test(t.context.payload.head_commit.message)){console.log(`Skipped because [Skip GitHub Action] is in commit message`);process.exit(0)}}const n=`<svg xmlns="http://www.w3.org/2000/svg" width="480" height="\${485 + ((computed.plugins.lines||computed.plugins.traffic) ? 20 : 0) + (computed.plugins.pagespeed ? 130 : 0) + (computed.plugins.habits ? 70 : 0)}">
<style>
\${style}
</style>
@@ -54,7 +54,7 @@ module.exports=(()=>{var __webpack_modules__={76677:(e,t,r)=>{"use strict";r.r(t
</h2>
<div class="field">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M10.5 7.75a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm1.43.75a4.002 4.002 0 01-7.86 0H.75a.75.75 0 110-1.5h3.32a4.001 4.001 0 017.86 0h3.32a.75.75 0 110 1.5h-3.32z"></path></svg>
\${data.computed.commits} Commit\${data.computed.commits > 1 ? "s" : ""}
\${data.computed.commits - (computed.plugins.selfskip ? computed.plugins.selfskip.commits||0 : 0)} Commit\${data.computed.commits - (computed.plugins.selfskip ? computed.plugins.selfskip.commits||0 : 0) > 1 ? "s" : ""}
</div>
<div class="field">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><path fill-rule="evenodd" d="M2.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v7.736a.75.75 0 101.5 0V1.75A1.75 1.75 0 0011.25 0h-8.5A1.75 1.75 0 001 1.75v11.5c0 .966.784 1.75 1.75 1.75h3.17a.75.75 0 000-1.5H2.75a.25.25 0 01-.25-.25V1.75zM4.75 4a.75.75 0 000 1.5h4.5a.75.75 0 000-1.5h-4.5zM4 7.75A.75.75 0 014.75 7h2a.75.75 0 010 1.5h-2A.75.75 0 014 7.75zm11.774 3.537a.75.75 0 00-1.048-1.074L10.7 14.145 9.281 12.72a.75.75 0 00-1.062 1.058l1.943 1.95a.75.75 0 001.055.008l4.557-4.45z"></path></svg>
@@ -304,7 +304,7 @@ module.exports=(()=>{var __webpack_modules__={76677:(e,t,r)=>{"use strict";r.r(t
</div>
</foreignObject>
</svg>`,o=`/* SVG global context */
</svg>`,a=`/* SVG global context */
svg {
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji;
font-size: 14px;
@@ -499,7 +499,7 @@ module.exports=(()=>{var __webpack_modules__={76677:(e,t,r)=>{"use strict";r.r(t
to {
opacity: 1;
}
}`,s=`query Metrics {
}`,o=`query Metrics {
user(login: \$login) {
name
login
@@ -595,4 +595,4 @@ module.exports=(()=>{var __webpack_modules__={76677:(e,t,r)=>{"use strict";r.r(t
}
}
}
`;console.log(`Templates | loaded`);const[l,c,u,d]=[e.getInput("token"),e.getInput("user"),e.getInput("filename",{default:"github-metrics.svg"}),e.getInput("debug",{default:false})];const p=e.getInput("committer_token",{default:null})||l;const m=i().join(u);console.log(`GitHub user | ${c}`);console.log(`Output file | ${m}`);console.log(`Github token | ${l?"provided":"missing"}`);if(!l)throw new Error("You must provide a valid GitHub token");const f=r.graphql.defaults({headers:{authorization:`token ${l}`}});const h=t.getOctokit(l);if(!d)console.debug=(()=>null);console.log(`Debug mode | ${d?"enabled":"disabled"}`);const g={lines:{enabled:e.getInput("plugin_lines",{default:false})},traffic:{enabled:e.getInput("plugin_traffic",{default:false})},pagespeed:{enabled:e.getInput("plugin_pagespeed",{default:false})},habits:{enabled:e.getInput("plugin_habits",{default:false})}};if(e.getInput("pagespeed_token")){console.log(`Pagespeed token | provided`);g.pagespeed.token=e.getInput("pagespeed_token")}const y=Object.fromEntries(Object.entries(g).filter(([e,t])=>t.enabled).map(([e])=>[e,true]));console.log(`Plugins enabled | ${Object.entries(g).filter(([e,t])=>t.enabled).map(([e])=>e).join(", ")}`);const v=await n({login:c,q:y},{template:a,style:o,query:s,graphql:f,rest:h,plugins:g});console.log(`Render | complete`);{const e=t.getOctokit(p);console.log(`Committer | ${(await e.users.getAuthenticated()).data.login}`);let r=undefined;try{const{data:t}=await e.repos.getContent({owner:c,repo:c,path:u});r=t.sha}catch(e){}console.log(`Previous render sha | ${r||"none"}`);await e.repos.createOrUpdateFileContents({owner:c,repo:c,path:u,sha:r,message:`Update ${u} - [Skip GitHub Action]`,content:Buffer.from(v).toString("base64")});console.log(`Commit to repo | ok`)}console.log(`Success !`)}catch(t){console.error(t);e.setFailed(t.message);process.exit(1)}})().catch(e=>process.exit(1))},12541:function(e,t,r){"use strict";var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const i=n(r(12087));const a=r(74332);function issueCommand(e,t,r){const n=new Command(e,t,r);process.stdout.write(n.toString()+i.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const o="::";class Command{constructor(e,t,r){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=r}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const r in this.properties){if(this.properties.hasOwnProperty(r)){const n=this.properties[r];if(n){if(t){t=false}else{e+=","}e+=`${r}=${escapeProperty(n)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},32882:function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,i){function fulfilled(e){try{step(n.next(e))}catch(e){i(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){i(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const a=r(12541);const o=r(29582);const s=r(74332);const l=i(r(12087));const c=i(r(85622));var u;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(u=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const r=s.toCommandValue(t);process.env[e]=r;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${l.EOL}${r}${l.EOL}${t}`;o.issueCommand("ENV",n)}else{a.issueCommand("set-env",{name:e},r)}}t.exportVariable=exportVariable;function setSecret(e){a.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){o.issueCommand("PATH",e)}else{a.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${c.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const r=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!r){throw new Error(`Input required and not supplied: ${e}`)}return r.trim()}t.getInput=getInput;function setOutput(e,t){a.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){a.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFaile Line truncated
`;console.log(`Templates | loaded`);const s=e.getInput("token")||t.token;console.log(`Github token | ${s?"provided":"missing"}`);if(!s)throw new Error("You must provide a valid GitHub token");const c=r.graphql.defaults({headers:{authorization:`token ${s}`}});console.log(`Github GraphQL API | ok`);const d=t.getOctokit(s);console.log(`Github REST API | ok`);const p=e.getInput("filename")||"github-metrics.svg";const m=i().join(p);console.log(`SVG output file | ${m}`);const f=u(e.getInput("optimize"),true);console.log(`SVG optimization | ${f}`);const h=e.getInput("user")||(await d.users.getAuthenticated()).data.login;console.log(`GitHub user | ${h}`);const g=u(e.getInput("debug"));if(!g)console.debug=(()=>null);console.log(`Debug mode | ${g}`);const y={lines:{enabled:u(e.getInput("plugin_lines"))},traffic:{enabled:u(e.getInput("plugin_traffic"))},pagespeed:{enabled:u(e.getInput("plugin_pagespeed"))},habits:{enabled:u(e.getInput("plugin_habits"))},selfskip:{enabled:u(e.getInput("plugin_selfskip"))}};const v=Object.fromEntries(Object.entries(y).filter(([e,t])=>t.enabled).map(([e])=>[e,true]));console.log(`Plugins enabled | ${Object.entries(y).filter(([e,t])=>t.enabled).map(([e])=>e).join(", ")}`);if(y.pagespeed.enabled){y.pagespeed.token=e.getInput("pagespeed_token");console.log(`Pagespeed token | ${y.pagespeed.token?"provided":"missing"}`)}const b=await l({login:h,q:v},{template:n,style:a,query:o,graphql:c,rest:d,plugins:y,optimize:f});console.log(`Render | complete`);{const r=e.getInput("committer_token")||e.getInput("token");console.log(`Committer token | ${r?"provided":"missing"}`);if(!r)throw new Error("You must provide a valid GitHub token");const n=t.getOctokit(r);console.log(`Committer REST API | ok`);console.log(`Committer | ${(await n.users.getAuthenticated()).data.login}`);let i=undefined;try{const{data:e}=await n.repos.getContent({owner:h,repo:h,path:p});i=e.sha}catch(e){}console.log(`Previous render sha | ${i||"none"}`);await n.repos.createOrUpdateFileContents({owner:h,repo:h,path:p,sha:i,message:`Update ${p} - [Skip GitHub Action]`,content:Buffer.from(b).toString("base64")});console.log(`Commit to repo | ok`)}console.log(`Success !`);process.exit(0)}catch(t){console.error(t);e.setFailed(t.message);process.exit(1)}})().catch(e=>process.exit(1))},12541:function(e,t,r){"use strict";var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const i=n(r(12087));const a=r(74332);function issueCommand(e,t,r){const n=new Command(e,t,r);process.stdout.write(n.toString()+i.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const o="::";class Command{constructor(e,t,r){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=r}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const r in this.properties){if(this.properties.hasOwnProperty(r)){const n=this.properties[r];if(n){if(t){t=false}else{e+=","}e+=`${r}=${escapeProperty(n)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return a.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},32882:function(e,t,r){"use strict";var n=this&&this.__awaiter||function(e,t,r,n){function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}return new(r||(r=Promise))(function(r,i){function fulfilled(e){try{step(n.next(e))}catch(e){i(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){i(e)}}function step(e){e.done?r(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r in e)if(Object.hasOwnProperty.call(e,r))t[r]=e[r];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const a=r(12541);const o=r(29582);const s=r(74332);const l=i(r(12087));const c=i(r(85622));var u;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(u=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const r=s.toCommandValue(t);process.env[e]=r;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${l.EOL}${r}${l.EOL}${t}`;o.issueCommand("ENV",n)}else{a.issueCommand("set-env",{name:e},r)}}t.exportVariable=exportVariable;function setSecret(e){a.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){o.issueCommand("PATH",e)}else{a.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${c.delimiter}${process.env["PATH"]}`}t.addPath Line truncated
+67 -33
View File
@@ -4,10 +4,13 @@
import * as _octokit from "@octokit/graphql"
import * as _core from "@actions/core"
import * as _github from "@actions/github"
import * as _axios from "axios"
;((async function () {
//Hack because ES modules are not correctly transpiled with ncc
const [core, github, octokit, metrics] = [_core, _github, _octokit, _metrics].map(m => (m && m.default) ? m.default : m)
const [core, github, octokit, axios, metrics] = [_core, _github, _octokit, _axios, _metrics].map(m => (m && m.default) ? m.default : m)
//Yaml boolean converter
const bool = (value, defaulted = false) => typeof value === "string" ? /^(?:[Tt]rue|[Oo]n|[Yy]es)$/.test(value) : defaulted
//Runner
try {
//Initialization
@@ -16,68 +19,99 @@
console.log(`Version | <#version>`)
process.on("unhandledRejection", error => { throw error })
//Skip process if needed
if ((github.eventName === "push")&&(github.context.payload)&&(github.context.payload.head_commit)) {
if (/\[Skip GitHub Action\]/.test(github.context.payload.head_commit.message)) {
console.log(`Skipped because [Skip GitHub Action] is in commit message`)
process.exit(0)
}
}
//Load svg template, style and query
const template = `<#include template.svg>`, style = `<#include style.css>`, query = `<#include query.graphql>`
console.log(`Templates | loaded`)
//Initialization
const [token, user, filename, debug] = [core.getInput("token"), core.getInput("user"), core.getInput("filename", {default:"github-metrics.svg"}), core.getInput("debug", {default:false})]
const committer = core.getInput("committer_token", {default:null}) || token
const output = path.join(filename)
console.log(`GitHub user | ${user}`)
console.log(`Output file | ${output}`)
//Token for data gathering
const token = core.getInput("token") || github.token
console.log(`Github token | ${token ? "provided" : "missing"}`)
if (!token)
throw new Error("You must provide a valid GitHub token")
const graphql = octokit.graphql.defaults({headers:{authorization: `token ${token}`}})
console.log(`Github GraphQL API | ok`)
const rest = github.getOctokit(token)
console.log(`Github REST API | ok`)
//SVG output
const filename = core.getInput("filename") || "github-metrics.svg"
const output = path.join(filename)
console.log(`SVG output file | ${output}`)
//SVG optimization
const optimize = bool(core.getInput("optimize"), true)
console.log(`SVG optimization | ${optimize}`)
//GitHub user
const user = core.getInput("user") || (await rest.users.getAuthenticated()).data.login
console.log(`GitHub user | ${user}`)
//Debug mode
const debug = bool(core.getInput("debug"))
if (!debug)
console.debug = () => null
console.log(`Debug mode | ${debug ? "enabled" : "disabled"}`)
console.log(`Debug mode | ${debug}`)
//Additional plugins
const plugins = {
lines:{enabled:core.getInput("plugin_lines", {default:false})},
traffic:{enabled:core.getInput("plugin_traffic", {default:false})},
pagespeed:{enabled:core.getInput("plugin_pagespeed", {default:false})},
habits:{enabled:core.getInput("plugin_habits", {default:false})},
}
if (core.getInput("pagespeed_token")) {
console.log(`Pagespeed token | provided`)
plugins.pagespeed.token = core.getInput("pagespeed_token")
lines:{enabled:bool(core.getInput("plugin_lines"))},
traffic:{enabled:bool(core.getInput("plugin_traffic"))},
pagespeed:{enabled:bool(core.getInput("plugin_pagespeed"))},
habits:{enabled:bool(core.getInput("plugin_habits"))},
selfskip:{enabled:bool(core.getInput("plugin_selfskip"))},
}
const q = Object.fromEntries(Object.entries(plugins).filter(([key, plugin]) => plugin.enabled).map(([key]) => [key, true]))
console.log(`Plugins enabled | ${Object.entries(plugins).filter(([key, plugin]) => plugin.enabled).map(([key]) => key).join(", ")}`)
if (plugins.pagespeed.enabled) {
plugins.pagespeed.token = core.getInput("pagespeed_token")
console.log(`Pagespeed token | ${plugins.pagespeed.token ? "provided" : "missing"}`)
}
//Render metrics
const rendered = await metrics({login:user, q}, {template, style, query, graphql, rest, plugins})
const rendered = await metrics({login:user, q}, {template, style, query, graphql, rest, plugins, optimize})
console.log(`Render | complete`)
//Commit to repository
{
const rest = github.getOctokit(committer)
console.log(`Committer | ${(await rest.users.getAuthenticated()).data.login}`)
let sha = undefined
try {
const {data} = await rest.repos.getContent({
owner:user,
repo:user,
path:filename,
//Committer token
const token = core.getInput("committer_token") || core.getInput("token")
console.log(`Committer token | ${token ? "provided" : "missing"}`)
if (!token)
throw new Error("You must provide a valid GitHub token")
const rest = github.getOctokit(token)
console.log(`Committer REST API | ok`)
console.log(`Committer | ${(await rest.users.getAuthenticated()).data.login}`)
//Retrieve previous render SHA to be able to update file content through API
let sha = undefined
try {
const {data} = await rest.repos.getContent({
owner:user,
repo:user,
path:filename,
})
sha = data.sha
} catch (error) { }
console.log(`Previous render sha | ${sha || "none"}`)
//Update file content through API
await rest.repos.createOrUpdateFileContents({
owner:user, repo:user, path:filename, sha, message:`Update ${filename} - [Skip GitHub Action]`,
content:Buffer.from(rendered).toString("base64"),
})
sha = data.sha
} catch (error) { }
console.log(`Previous render sha | ${sha || "none"}`)
await rest.repos.createOrUpdateFileContents({
owner:user, repo:user, path:filename, sha, message:`Update ${filename} - [Skip GitHub Action]`,
content:Buffer.from(rendered).toString("base64"),
})
console.log(`Commit to repo | ok`)
console.log(`Commit to repo | ok`)
}
//Success
console.log(`Success !`)
process.exit(0)
//Errors
} catch (error) {
console.error(error)