From eac66813cab4de07bbfdfd5c59686185a9806846 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Mon, 6 Jan 2020 17:10:15 -0800 Subject: [PATCH] Toolkit: add git log info to the plugin build report (#21344) --- .../src/cli/tasks/plugin.ci.ts | 3 +- packages/grafana-toolkit/src/plugins/types.ts | 17 +++++++++ packages/grafana-toolkit/src/plugins/utils.ts | 38 ++++++++++++++++++- 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin.ci.ts b/packages/grafana-toolkit/src/cli/tasks/plugin.ci.ts index dd30fe86b98..b402f91524c 100644 --- a/packages/grafana-toolkit/src/cli/tasks/plugin.ci.ts +++ b/packages/grafana-toolkit/src/cli/tasks/plugin.ci.ts @@ -9,7 +9,7 @@ import { PluginMeta } from '@grafana/data'; import execa = require('execa'); import path = require('path'); import fs from 'fs'; -import { getPackageDetails, findImagesInFolder, getGrafanaVersions } from '../../plugins/utils'; +import { getPackageDetails, findImagesInFolder, getGrafanaVersions, readGitLog } from '../../plugins/utils'; import { job, getJobFolder, @@ -324,6 +324,7 @@ const pluginReportRunner: TaskRunner = async ({ upload }) => { tests: agregateTestInfo(), artifactsBaseURL: await getCircleDownloadBaseURL(), grafanaVersion: getGrafanaVersions(), + git: await readGitLog(), }; const pr = getPullRequestNumber(); if (pr) { diff --git a/packages/grafana-toolkit/src/plugins/types.ts b/packages/grafana-toolkit/src/plugins/types.ts index 1509ffd1731..28c810781a5 100644 --- a/packages/grafana-toolkit/src/plugins/types.ts +++ b/packages/grafana-toolkit/src/plugins/types.ts @@ -11,6 +11,7 @@ export interface PluginBuildReport { workflow: WorkflowInfo; coverage: CoverageInfo[]; tests: TestResultsInfo[]; + git?: GitLogInfo; pullRequest?: number; artifactsBaseURL?: string; grafanaVersion?: KeyValue; @@ -70,3 +71,19 @@ export interface ZipFileInfo { sha1?: string; md5?: string; } + +interface UserInfo { + name: string; + email: string; + time?: number; +} + +export interface GitLogInfo { + commit: string; + tree: string; + subject: string; + body?: string; + notes?: string; + author: UserInfo; + commiter: UserInfo; +} diff --git a/packages/grafana-toolkit/src/plugins/utils.ts b/packages/grafana-toolkit/src/plugins/utils.ts index 550a1c1d809..3e99283d10f 100644 --- a/packages/grafana-toolkit/src/plugins/utils.ts +++ b/packages/grafana-toolkit/src/plugins/utils.ts @@ -2,7 +2,7 @@ import execa from 'execa'; import path from 'path'; import fs from 'fs'; import { KeyValue } from '@grafana/data'; -import { ExtensionSize, ZipFileInfo } from './types'; +import { ExtensionSize, ZipFileInfo, GitLogInfo } from './types'; const md5File = require('md5-file'); @@ -92,3 +92,39 @@ export function findImagesInFolder(dir: string, prefix = '', append?: string[]): return imgs; } + +export async function readGitLog(): Promise { + try { + let exe = await execa('git', [ + 'log', + '-1', // last line + '--pretty=format:{%n "commit": "%H",%n "tree": "%T",%n "subject": "%s",%n "author": {%n "name": "%aN",%n "email": "%aE",%n "time":"%at" },%n "commiter": {%n "name": "%cN",%n "email": "%cE",%n "time":"%ct" }%n}', + ]); + const info = JSON.parse(exe.stdout) as GitLogInfo; + + // Read the body + exe = await execa('git', [ + 'log', + '-1', // last line + '--pretty=format:%b', // Just the body (with newlines!) + ]); + if (exe.stdout && exe.stdout.length) { + info.body = exe.stdout.trim(); + } + + // Read any commit notes + exe = await execa('git', [ + 'log', + '-1', // last line + '--pretty=format:%N', // commit notes (with newlines!) + ]); + if (exe.stdout && exe.stdout.length) { + info.notes = exe.stdout.trim(); + } + + return info; + } catch (err) { + console.warn('Error REading Git log info', err); + } + return undefined; +}