From 714a309928606363573326d26483d3b3d649efc6 Mon Sep 17 00:00:00 2001 From: jpaul Date: Fri, 17 Nov 2023 08:51:57 +0100 Subject: [PATCH] refactor report and utils.ts --- .github/workflows/check-dist.yml | 2 +- action.yml | 3 -- package.json | 2 +- src/constants.ts | 10 +++++- src/features/reports.ts | 14 ++------ src/main.ts | 1 - src/utils.ts | 61 +++++++++++++++++--------------- 7 files changed, 47 insertions(+), 46 deletions(-) diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index f6cfdfb..09b3f29 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -49,7 +49,7 @@ jobs: # If index.js was different than expected, upload the expected version as an artifact - uses: actions/upload-artifact@v3 - # if: ${{ failure() && steps.diff.conclusion == 'failure' }} + if: ${{ failure() && steps.diff.conclusion == 'failure' }} with: name: dist path: dist/ diff --git a/action.yml b/action.yml index 1fa07da..1eac87a 100644 --- a/action.yml +++ b/action.yml @@ -50,9 +50,6 @@ inputs: gds-token: required: false description: 'Download token for the GraalVM Download Service. If provided, the action will set up GraalVM Enterprise Edition.' - report-token: - required: false - description: 'Github-Token for add build report tp repository.' outputs: cache-hit: description: 'A boolean value to indicate an exact match was found for the primary key' diff --git a/package.json b/package.json index 06c4450..80269d8 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "tsc", "format": "prettier --write '**/*.ts'", - "format-check": "prettier --check '**/*.ts'", + "format-check": "prettier --check **/*.ts", "lint": "eslint src/**/*.ts", "package": "ncc build -o dist/main src/main.ts && ncc build -o dist/cleanup src/cleanup.ts", "test": "jest", diff --git a/src/constants.ts b/src/constants.ts index 9027ffe..22fd881 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,4 +1,5 @@ import * as otypes from '@octokit/types' +import {context} from "@actions/github"; export const INPUT_VERSION = 'version' export const INPUT_GDS_TOKEN = 'gds-token' @@ -10,7 +11,6 @@ export const INPUT_SET_JAVA_HOME = 'set-java-home' export const INPUT_CACHE = 'cache' export const INPUT_CHECK_FOR_UPDATES = 'check-for-updates' export const INPUT_NI_MUSL = 'native-image-musl' -export const INPUT_REPORT_TOKEN = 'report-token' export const IS_LINUX = process.platform === 'linux' export const IS_MACOS = process.platform === 'darwin' @@ -44,12 +44,20 @@ export const EVENT_NAME_PULL_REQUEST = 'pull_request' export const ERROR_HINT = 'If you think this is a mistake, please file an issue at: https://github.com/graalvm/setup-graalvm/issues.' +export const METRIC_REF_PATH = 'refs/graalvm-metrics' + +export const OCTOKIT_ROUTE_REF_METRICS = `GET /repos/${context.repo.owner}/${context.repo.repo}/git/ref/metrics/${baseCommitSha}` + export type LatestReleaseResponse = otypes.Endpoints['GET /repos/{owner}/{repo}/releases/latest']['response'] export type MatchingRefsResponse = otypes.Endpoints['GET /repos/{owner}/{repo}/git/matching-refs/{ref}']['response'] +export type LatestReleaseResponse = + otypes.Endpoints['GET /repos/{owner}/{repo}/releases/latest']['response'] + + function determineJDKArchitecture(): string { switch (process.arch) { case 'x64': { diff --git a/src/features/reports.ts b/src/features/reports.ts index efae9bf..90c2e69 100644 --- a/src/features/reports.ts +++ b/src/features/reports.ts @@ -6,9 +6,6 @@ import {join} from 'path' import {tmpdir} from 'os' import {createPRComment, createRef, createTree, getPrBaseBranchMetrics, isPREvent, toSemVer} from '../utils' import {gte} from 'semver' -import {Base64} from 'js-base64'; -import { Octokit } from '@octokit/rest'; -import fetch from "node-fetch"; const BUILD_OUTPUT_JSON_PATH = join(tmpdir(), 'native-image-build-output.json') const BYTES_TO_KiB = 1024 @@ -23,9 +20,6 @@ const NATIVE_IMAGE_CONFIG_FILE = join( 'native-image-options.properties' ) const NATIVE_IMAGE_CONFIG_FILE_ENV = 'NATIVE_IMAGE_CONFIG_FILE' -//const { Octokit } = require("@octokit/rest"); - -let REPORT_TOKEN = ''; interface AnalysisResult { total: number @@ -119,7 +113,6 @@ export async function setUpNativeImageBuildReports( setNativeImageOption( `-H:BuildOutputJSONFile=${BUILD_OUTPUT_JSON_PATH.replace(/\\/g, '\\\\')}` )// Escape backslashes for Windows - REPORT_TOKEN = reportToken } export async function generateReports(): Promise { @@ -139,7 +132,6 @@ export async function generateReports(): Promise { const prMetrics: BuildOutput = JSON.parse( await getPrBaseBranchMetrics() ) - const prBaseReport = createReport(prMetrics) const report = createReport(buildOutput) if (areJobReportsEnabled()) { @@ -148,9 +140,9 @@ export async function generateReports(): Promise { } if (arePRReportsEnabled()) { createPRComment(report) - const prBaseReport = createPRComparison(buildOutput, prMetrics) - createPRComment(prBaseReport) } + const prBaseReport = createPRComparison(buildOutput, prMetrics) + createPRComment(prBaseReport) } } @@ -314,7 +306,7 @@ function createReport(data: BuildOutput): string { )} of total time)` } - return `## GraalVM Native Image Build Report example + return `## GraalVM Native Image Build Report \`${info.name}\` generated${totalTime} as part of the '${ context.job diff --git a/src/main.ts b/src/main.ts index 527f74a..d6344cb 100644 --- a/src/main.ts +++ b/src/main.ts @@ -19,7 +19,6 @@ async function run(): Promise { const distribution = core.getInput(c.INPUT_DISTRIBUTION) const graalVMVersion = core.getInput(c.INPUT_VERSION) const gdsToken = core.getInput(c.INPUT_GDS_TOKEN) - const reportToken = core.getInput(c.INPUT_REPORT_TOKEN) const componentsString: string = core.getInput(c.INPUT_COMPONENTS) const components: string[] = componentsString.length > 0 diff --git a/src/utils.ts b/src/utils.ts index 8d713ba..2b8a930 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -161,13 +161,10 @@ function getGitHubToken(): string { } function getCommitSha(): string { - return process.env.GITHUB_SHA || "default_tag" + return process.env.GITHUB_SHA || "default_sha" } function getPrBaseBranchSha(): string { - if (!isPREvent()) { - return "" - } return process.env.GITHUB_BASE_REF || "default_branch" } @@ -190,30 +187,35 @@ export async function createPRComment(content: string): Promise { } export async function createRef(sha: string) { - const commitSha = getCommitSha() - const ref = `refs/metrics/${commitSha}` - console.log(`creating ref ${ref} for metrics tree ${sha}`); - const octokit = new Octokit({ - auth: getGitHubToken(), - request: { - fetch: fetch, - }, - }); - const context = github.context - - const response = await octokit.request( - `POST /repos/${context.repo.owner}/${context.repo.repo}/git/refs`, - { - ...context.repo, - ref, - sha, - } - ); - - core.info(response.data); + try { + const commitSha = getCommitSha() + const ref = c.METRIC_REF_PATH + commitSha + core.info(`creating ref ${ref} for metrics tree ${sha}`); + const octokit = new Octokit({ + auth: getGitHubToken(), + request: { + fetch: fetch, + }, + }); + const context = github.context + await octokit.request( + `POST /repos/${context.repo.owner}/${context.repo.repo}/git/refs`, + { + ...context.repo, + ref, + sha, + } + ); + } catch(err) { + core.error( + `Failed to create ref. Please make sure that the referred sha '${sha}' exist.` + ) + } } export async function createTree(metadataJson: string): Promise { + try { + const octokit = new Octokit({ auth: getGitHubToken(), request: { @@ -221,9 +223,7 @@ export async function createTree(metadataJson: string): Promise { }, }); const context = github.context - core.info(`creating tree at ${context.repo.owner}/${context.repo.repo}`); - const response = await octokit.request( `POST /repos/${context.repo.owner}/${context.repo.repo}/git/trees`, { @@ -241,6 +241,11 @@ export async function createTree(metadataJson: string): Promise { core.info("Tree-sha" + response.data.sha); return response.data.sha; + } catch (err) { + core.error( + `Creating metrics tree failed.` + ) + } } export async function getPrBaseBranchMetrics(): Promise { @@ -280,7 +285,7 @@ async function getBaseBranchCommitSha(octokit: Octokit, context: Context): Promi } async function getBlobTreeSha(octokit: Octokit, context: Context, baseCommitSha: string): Promise { - const { data } = await octokit.request(`GET /repos/${context.repo.owner}/${context.repo.repo}/git/ref/metrics/${baseCommitSha}`, { + const { data } = await octokit.request(, { ...context.repo, headers: { 'X-GitHub-Api-Version': '2022-11-28'