mirror of
https://github.com/gradle/gradle-build-action
synced 2024-11-27 12:02:15 +00:00
Allow flexible use of dependency-graph support
Adds a 'dependency-graph' parameter that has 4 options: 1. 'disabled': no dependency graph files generated (the default) 2. 'generate': dependency graph files will be generated and saved as artifacts. 3. 'generate-and-submit': dependency graph files will be generated, saved as artifacts, and submitted to the Dependency Submission API on job completion. 4. 'download-and-submit': any previously uploaded dependency graph artifacts will be downloaded and submitted to the Dependency Submission API.
This commit is contained in:
parent
820b228f28
commit
063cc1c708
5 changed files with 62 additions and 14 deletions
|
@ -12,6 +12,7 @@
|
|||
"import/no-namespace": "off",
|
||||
"i18n-text/no-en": "off",
|
||||
"no-unused-vars": "off",
|
||||
"no-shadow": "off",
|
||||
"sort-imports": "off",
|
||||
"@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
|
||||
"@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}],
|
||||
|
@ -30,6 +31,7 @@
|
|||
"@typescript-eslint/no-misused-new": "error",
|
||||
"@typescript-eslint/no-namespace": "error",
|
||||
"@typescript-eslint/no-non-null-assertion": "off",
|
||||
"@typescript-eslint/no-shadow": "error",
|
||||
"@typescript-eslint/no-unnecessary-qualifier": "error",
|
||||
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
||||
"@typescript-eslint/no-useless-constructor": "error",
|
||||
|
|
11
action.yml
11
action.yml
|
@ -58,10 +58,10 @@ inputs:
|
|||
required: false
|
||||
default: true
|
||||
|
||||
generate-dependency-graph:
|
||||
description: When 'true', a dependency graph snapshot will be generated for Gradle builds.
|
||||
dependency-graph:
|
||||
description: Specifies if a GitHub dependency snapshot should be generated for each Gradle build, and if so, how. Valid values are 'disabled' (default), 'generate', 'generate-and-submit' and 'download-and-submit'.
|
||||
required: false
|
||||
default: false
|
||||
default: 'disabled'
|
||||
|
||||
# EXPERIMENTAL & INTERNAL ACTION INPUTS
|
||||
# The following action properties allow fine-grained tweaking of the action caching behaviour.
|
||||
|
@ -80,6 +80,11 @@ inputs:
|
|||
required: false
|
||||
default: false
|
||||
|
||||
github-token:
|
||||
description: The GitHub token used to authenticate when submitting via the Dependency Submission API.
|
||||
default: ${{ github.token }}
|
||||
required: false
|
||||
|
||||
outputs:
|
||||
build-scan-url:
|
||||
description: Link to the build scan if any
|
||||
|
|
|
@ -10,12 +10,16 @@ import fs from 'fs'
|
|||
|
||||
import * as execution from './execution'
|
||||
import * as layout from './repository-layout'
|
||||
import * as params from './input-params'
|
||||
import {DependencyGraphOption, getJobMatrix} from './input-params'
|
||||
|
||||
const DEPENDENCY_GRAPH_ARTIFACT = 'dependency-graph'
|
||||
|
||||
export function prepare(): void {
|
||||
core.info('Enabling dependency graph')
|
||||
export function setup(option: DependencyGraphOption): void {
|
||||
if (option === DependencyGraphOption.Disabled || option === DependencyGraphOption.DownloadAndSubmit) {
|
||||
return
|
||||
}
|
||||
|
||||
core.info('Enabling dependency graph generation')
|
||||
const jobCorrelator = getJobCorrelator()
|
||||
core.exportVariable('GITHUB_DEPENDENCY_GRAPH_ENABLED', 'true')
|
||||
core.exportVariable('GITHUB_DEPENDENCY_GRAPH_JOB_CORRELATOR', jobCorrelator)
|
||||
|
@ -26,6 +30,21 @@ export function prepare(): void {
|
|||
)
|
||||
}
|
||||
|
||||
export async function complete(option: DependencyGraphOption): Promise<void> {
|
||||
switch (option) {
|
||||
case DependencyGraphOption.Disabled:
|
||||
return
|
||||
case DependencyGraphOption.Generate:
|
||||
await uploadDependencyGraphs()
|
||||
return
|
||||
case DependencyGraphOption.GenerateAndSubmit:
|
||||
await submitDependencyGraphs(await uploadDependencyGraphs())
|
||||
return
|
||||
case DependencyGraphOption.DownloadAndSubmit:
|
||||
await downloadAndSubmitDependencyGraphs()
|
||||
}
|
||||
}
|
||||
|
||||
export async function generateDependencyGraph(executable: string | undefined): Promise<void> {
|
||||
const buildRootDirectory = layout.buildRootDirectory()
|
||||
|
||||
|
@ -34,7 +53,7 @@ export async function generateDependencyGraph(executable: string | undefined): P
|
|||
await execution.executeGradleBuild(executable, buildRootDirectory, args)
|
||||
}
|
||||
|
||||
export async function uploadDependencyGraphs(): Promise<void> {
|
||||
export async function uploadDependencyGraphs(): Promise<string[]> {
|
||||
const workspaceDirectory = layout.workspaceDirectory()
|
||||
const graphFiles = await findDependencyGraphFiles(workspaceDirectory)
|
||||
|
||||
|
@ -43,6 +62,8 @@ export async function uploadDependencyGraphs(): Promise<void> {
|
|||
|
||||
const artifactClient = artifact.create()
|
||||
artifactClient.uploadArtifact(DEPENDENCY_GRAPH_ARTIFACT, graphFiles, workspaceDirectory)
|
||||
|
||||
return graphFiles
|
||||
}
|
||||
|
||||
export async function downloadAndSubmitDependencyGraphs(): Promise<void> {
|
||||
|
@ -140,7 +161,7 @@ function getRelativePathFromWorkspace(file: string): string {
|
|||
}
|
||||
|
||||
export function getJobCorrelator(): string {
|
||||
return constructJobCorrelator(github.context.workflow, github.context.job, params.getJobMatrix())
|
||||
return constructJobCorrelator(github.context.workflow, github.context.job, getJobMatrix())
|
||||
}
|
||||
|
||||
export function constructJobCorrelator(workflow: string, jobId: string, matrixJson: string): string {
|
||||
|
|
|
@ -67,6 +67,23 @@ export function isDependencyGraphEnabled(): boolean {
|
|||
return getBooleanInput('generate-dependency-graph', true)
|
||||
}
|
||||
|
||||
export function getDependencyGraphOption(): DependencyGraphOption {
|
||||
const val = core.getInput('dependency-graph')
|
||||
switch (val.toLowerCase().trim()) {
|
||||
case 'disabled':
|
||||
return DependencyGraphOption.Disabled
|
||||
case 'generate':
|
||||
return DependencyGraphOption.Generate
|
||||
case 'generate-and-submit':
|
||||
return DependencyGraphOption.GenerateAndSubmit
|
||||
case 'download-and-submit':
|
||||
return DependencyGraphOption.DownloadAndSubmit
|
||||
}
|
||||
throw TypeError(
|
||||
`The value '${val} is not valid for 'dependency-graph. Valid values are: [disabled, generate-and-upload, generate-and-submit, download-and-submit]. The default value is 'disabled'.`
|
||||
)
|
||||
}
|
||||
|
||||
function getBooleanInput(paramName: string, paramDefault = false): boolean {
|
||||
const paramValue = core.getInput(paramName)
|
||||
switch (paramValue.toLowerCase().trim()) {
|
||||
|
@ -79,3 +96,10 @@ function getBooleanInput(paramName: string, paramDefault = false): boolean {
|
|||
}
|
||||
throw TypeError(`The value '${paramValue} is not valid for '${paramName}. Valid values are: [true, false]`)
|
||||
}
|
||||
|
||||
export enum DependencyGraphOption {
|
||||
Disabled,
|
||||
Generate,
|
||||
GenerateAndSubmit,
|
||||
DownloadAndSubmit
|
||||
}
|
||||
|
|
|
@ -38,9 +38,7 @@ export async function setup(): Promise<void> {
|
|||
|
||||
core.saveState(CACHE_LISTENER, cacheListener.stringify())
|
||||
|
||||
if (params.isDependencyGraphEnabled()) {
|
||||
dependencyGraph.prepare()
|
||||
}
|
||||
dependencyGraph.setup(params.getDependencyGraphOption())
|
||||
}
|
||||
|
||||
export async function complete(): Promise<void> {
|
||||
|
@ -64,9 +62,7 @@ export async function complete(): Promise<void> {
|
|||
logJobSummary(buildResults, cacheListener)
|
||||
}
|
||||
|
||||
if (params.isDependencyGraphEnabled()) {
|
||||
dependencyGraph.uploadDependencyGraphs()
|
||||
}
|
||||
dependencyGraph.complete(params.getDependencyGraphOption())
|
||||
}
|
||||
|
||||
async function determineGradleUserHome(): Promise<string> {
|
||||
|
|
Loading…
Reference in a new issue