Allow a task name to be specified for dependency-submission (#135)

Fixes #125
This commit is contained in:
Daz DeBoer 2024-04-09 09:30:27 -06:00 committed by GitHub
commit 2e02e6624e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 226 additions and 135 deletions

View File

@ -112,7 +112,7 @@ jobs:
uses: ./dependency-submission uses: ./dependency-submission
with: with:
build-root-directory: .github/workflow-samples/groovy-dsl build-root-directory: .github/workflow-samples/groovy-dsl
additional-arguments: --no-build-cache dependency-resolution-task: assemble
- name: Check generated dependency graphs - name: Check generated dependency graphs
shell: bash shell: bash
run: | run: |

View File

@ -2,6 +2,7 @@ name: Gradle Dependency Submission
description: Generates a dependency graph for a Gradle project and submits it via the Dependency Submission API description: Generates a dependency graph for a Gradle project and submits it via the Dependency Submission API
inputs: inputs:
# Gradle execution configuration
gradle-version: gradle-version:
description: | description: |
Gradle version to use. If specified, this Gradle version will be downloaded, added to the PATH and used for invoking Gradle. Gradle version to use. If specified, this Gradle version will be downloaded, added to the PATH and used for invoking Gradle.
@ -12,6 +13,12 @@ inputs:
description: Path to the root directory of the build. Default is the root of the GitHub workspace. description: Path to the root directory of the build. Default is the root of the GitHub workspace.
required: false required: false
dependency-resolution-task:
description: |
Task(s) that should be executed in order to resolve all project dependencies.
By default, the built-in `:ForceDependencyResolutionPlugin_resolveAllDependencies` task is executed.
required: false
additional-arguments: additional-arguments:
description: | description: |
Additional arguments to pass to Gradle when generating the dependency graph. Additional arguments to pass to Gradle when generating the dependency graph.

View File

@ -141501,16 +141501,18 @@ function run() {
if (config.getDependencyGraphOption() === input_params_1.DependencyGraphOption.DownloadAndSubmit) { if (config.getDependencyGraphOption() === input_params_1.DependencyGraphOption.DownloadAndSubmit) {
return; return;
} }
const additionalArgs = core.getInput('additional-arguments'); const executionConfig = new input_params_1.GradleExecutionConfig();
const taskList = executionConfig.getDependencyResolutionTask();
const additionalArgs = executionConfig.getAdditionalArguments();
const executionArgs = ` const executionArgs = `
-Dorg.gradle.configureondemand=false -Dorg.gradle.configureondemand=false
-Dorg.gradle.dependency.verification=off -Dorg.gradle.dependency.verification=off
-Dorg.gradle.unsafe.isolated-projects=false -Dorg.gradle.unsafe.isolated-projects=false
:ForceDependencyResolutionPlugin_resolveAllDependencies ${taskList}
${additionalArgs} ${additionalArgs}
`; `;
const args = (0, string_argv_1.parseArgsStringToArgv)(executionArgs); const args = (0, string_argv_1.parseArgsStringToArgv)(executionArgs);
yield gradle.provisionAndMaybeExecute(args); yield gradle.provisionAndMaybeExecute(executionConfig.getGradleVersion(), executionConfig.getBuildRootDirectory(), args);
yield dependencyGraph.complete(config); yield dependencyGraph.complete(config);
} }
catch (error) { catch (error) {
@ -141593,16 +141595,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.provisionAndMaybeExecute = void 0; exports.provisionAndMaybeExecute = void 0;
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const exec = __importStar(__nccwpck_require__(71514)); const exec = __importStar(__nccwpck_require__(71514));
const path = __importStar(__nccwpck_require__(71017));
const params = __importStar(__nccwpck_require__(23885));
const provisioner = __importStar(__nccwpck_require__(14042)); const provisioner = __importStar(__nccwpck_require__(14042));
const gradlew = __importStar(__nccwpck_require__(46807)); const gradlew = __importStar(__nccwpck_require__(46807));
const input_params_1 = __nccwpck_require__(23885); function provisionAndMaybeExecute(gradleVersion, buildRootDirectory, args) {
function provisionAndMaybeExecute(args) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const executable = yield provisioner.provisionGradle(); const executable = yield provisioner.provisionGradle(gradleVersion);
if (args.length > 0) { if (args.length > 0) {
yield executeGradleBuild(executable, buildRootDirectory(), args); yield executeGradleBuild(executable, buildRootDirectory, args);
} }
}); });
} }
@ -141619,14 +141618,6 @@ function executeGradleBuild(executable, root, args) {
} }
}); });
} }
function buildRootDirectory() {
const baseDirectory = (0, input_params_1.getWorkspaceDirectory)();
const buildRootDirectoryInput = params.getBuildRootDirectory();
const resolvedBuildRootDirectory = buildRootDirectoryInput === ''
? path.resolve(baseDirectory)
: path.resolve(baseDirectory, buildRootDirectoryInput);
return resolvedBuildRootDirectory;
}
/***/ }), /***/ }),
@ -141753,13 +141744,11 @@ const core = __importStar(__nccwpck_require__(42186));
const cache = __importStar(__nccwpck_require__(27799)); const cache = __importStar(__nccwpck_require__(27799));
const toolCache = __importStar(__nccwpck_require__(27784)); const toolCache = __importStar(__nccwpck_require__(27784));
const gradlew = __importStar(__nccwpck_require__(46807)); const gradlew = __importStar(__nccwpck_require__(46807));
const params = __importStar(__nccwpck_require__(23885));
const cache_utils_1 = __nccwpck_require__(11044); const cache_utils_1 = __nccwpck_require__(11044);
const input_params_1 = __nccwpck_require__(23885); const input_params_1 = __nccwpck_require__(23885);
const gradleVersionsBaseUrl = 'https://services.gradle.org/versions'; const gradleVersionsBaseUrl = 'https://services.gradle.org/versions';
function provisionGradle() { function provisionGradle(gradleVersion) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const gradleVersion = params.getGradleVersion();
if (gradleVersion !== '' && gradleVersion !== 'wrapper') { if (gradleVersion !== '' && gradleVersion !== 'wrapper') {
return addToPath(yield installGradle(gradleVersion)); return addToPath(yield installGradle(gradleVersion));
} }
@ -141960,13 +141949,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod); __setModuleDefault(result, mod);
return result; return result;
}; };
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getBuildRootDirectory = exports.getGradleVersion = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0; exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.GradleExecutionConfig = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0;
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const github = __importStar(__nccwpck_require__(95438)); const github = __importStar(__nccwpck_require__(95438));
const cache = __importStar(__nccwpck_require__(27799)); const cache = __importStar(__nccwpck_require__(27799));
const summary_1 = __nccwpck_require__(81327); const summary_1 = __nccwpck_require__(81327);
const string_argv_1 = __nccwpck_require__(19663); const string_argv_1 = __nccwpck_require__(19663);
const path_1 = __importDefault(__nccwpck_require__(71017));
class DependencyGraphConfig { class DependencyGraphConfig {
getDependencyGraphOption() { getDependencyGraphOption() {
const val = core.getInput('dependency-graph'); const val = core.getInput('dependency-graph');
@ -142139,19 +142132,30 @@ class BuildScanConfig {
} }
} }
exports.BuildScanConfig = BuildScanConfig; exports.BuildScanConfig = BuildScanConfig;
function getGradleVersion() { class GradleExecutionConfig {
return core.getInput('gradle-version'); getGradleVersion() {
return core.getInput('gradle-version');
}
getBuildRootDirectory() {
const baseDirectory = getWorkspaceDirectory();
const buildRootDirectoryInput = core.getInput('build-root-directory');
const resolvedBuildRootDirectory = buildRootDirectoryInput === ''
? path_1.default.resolve(baseDirectory)
: path_1.default.resolve(baseDirectory, buildRootDirectoryInput);
return resolvedBuildRootDirectory;
}
getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
getDependencyResolutionTask() {
return core.getInput('dependency-resolution-task') || ':ForceDependencyResolutionPlugin_resolveAllDependencies';
}
getAdditionalArguments() {
return core.getInput('additional-arguments');
}
} }
exports.getGradleVersion = getGradleVersion; exports.GradleExecutionConfig = GradleExecutionConfig;
function getBuildRootDirectory() {
return core.getInput('build-root-directory');
}
exports.getBuildRootDirectory = getBuildRootDirectory;
function getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
exports.getArguments = getArguments;
function getJobMatrix() { function getJobMatrix() {
return core.getInput('workflow-job-context'); return core.getInput('workflow-job-context');
} }

File diff suppressed because one or more lines are too long

View File

@ -92728,13 +92728,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod); __setModuleDefault(result, mod);
return result; return result;
}; };
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getBuildRootDirectory = exports.getGradleVersion = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0; exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.GradleExecutionConfig = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0;
const core = __importStar(__nccwpck_require__(2186)); const core = __importStar(__nccwpck_require__(2186));
const github = __importStar(__nccwpck_require__(5438)); const github = __importStar(__nccwpck_require__(5438));
const cache = __importStar(__nccwpck_require__(7799)); const cache = __importStar(__nccwpck_require__(7799));
const summary_1 = __nccwpck_require__(1327); const summary_1 = __nccwpck_require__(1327);
const string_argv_1 = __nccwpck_require__(9663); const string_argv_1 = __nccwpck_require__(9663);
const path_1 = __importDefault(__nccwpck_require__(1017));
class DependencyGraphConfig { class DependencyGraphConfig {
getDependencyGraphOption() { getDependencyGraphOption() {
const val = core.getInput('dependency-graph'); const val = core.getInput('dependency-graph');
@ -92907,19 +92911,30 @@ class BuildScanConfig {
} }
} }
exports.BuildScanConfig = BuildScanConfig; exports.BuildScanConfig = BuildScanConfig;
function getGradleVersion() { class GradleExecutionConfig {
return core.getInput('gradle-version'); getGradleVersion() {
return core.getInput('gradle-version');
}
getBuildRootDirectory() {
const baseDirectory = getWorkspaceDirectory();
const buildRootDirectoryInput = core.getInput('build-root-directory');
const resolvedBuildRootDirectory = buildRootDirectoryInput === ''
? path_1.default.resolve(baseDirectory)
: path_1.default.resolve(baseDirectory, buildRootDirectoryInput);
return resolvedBuildRootDirectory;
}
getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
getDependencyResolutionTask() {
return core.getInput('dependency-resolution-task') || ':ForceDependencyResolutionPlugin_resolveAllDependencies';
}
getAdditionalArguments() {
return core.getInput('additional-arguments');
}
} }
exports.getGradleVersion = getGradleVersion; exports.GradleExecutionConfig = GradleExecutionConfig;
function getBuildRootDirectory() {
return core.getInput('build-root-directory');
}
exports.getBuildRootDirectory = getBuildRootDirectory;
function getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
exports.getArguments = getArguments;
function getJobMatrix() { function getJobMatrix() {
return core.getInput('workflow-job-context'); return core.getInput('workflow-job-context');
} }

File diff suppressed because one or more lines are too long

View File

@ -141512,16 +141512,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.provisionAndMaybeExecute = void 0; exports.provisionAndMaybeExecute = void 0;
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const exec = __importStar(__nccwpck_require__(71514)); const exec = __importStar(__nccwpck_require__(71514));
const path = __importStar(__nccwpck_require__(71017));
const params = __importStar(__nccwpck_require__(23885));
const provisioner = __importStar(__nccwpck_require__(14042)); const provisioner = __importStar(__nccwpck_require__(14042));
const gradlew = __importStar(__nccwpck_require__(46807)); const gradlew = __importStar(__nccwpck_require__(46807));
const input_params_1 = __nccwpck_require__(23885); function provisionAndMaybeExecute(gradleVersion, buildRootDirectory, args) {
function provisionAndMaybeExecute(args) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const executable = yield provisioner.provisionGradle(); const executable = yield provisioner.provisionGradle(gradleVersion);
if (args.length > 0) { if (args.length > 0) {
yield executeGradleBuild(executable, buildRootDirectory(), args); yield executeGradleBuild(executable, buildRootDirectory, args);
} }
}); });
} }
@ -141538,14 +141535,6 @@ function executeGradleBuild(executable, root, args) {
} }
}); });
} }
function buildRootDirectory() {
const baseDirectory = (0, input_params_1.getWorkspaceDirectory)();
const buildRootDirectoryInput = params.getBuildRootDirectory();
const resolvedBuildRootDirectory = buildRootDirectoryInput === ''
? path.resolve(baseDirectory)
: path.resolve(baseDirectory, buildRootDirectoryInput);
return resolvedBuildRootDirectory;
}
/***/ }), /***/ }),
@ -141672,13 +141661,11 @@ const core = __importStar(__nccwpck_require__(42186));
const cache = __importStar(__nccwpck_require__(27799)); const cache = __importStar(__nccwpck_require__(27799));
const toolCache = __importStar(__nccwpck_require__(27784)); const toolCache = __importStar(__nccwpck_require__(27784));
const gradlew = __importStar(__nccwpck_require__(46807)); const gradlew = __importStar(__nccwpck_require__(46807));
const params = __importStar(__nccwpck_require__(23885));
const cache_utils_1 = __nccwpck_require__(11044); const cache_utils_1 = __nccwpck_require__(11044);
const input_params_1 = __nccwpck_require__(23885); const input_params_1 = __nccwpck_require__(23885);
const gradleVersionsBaseUrl = 'https://services.gradle.org/versions'; const gradleVersionsBaseUrl = 'https://services.gradle.org/versions';
function provisionGradle() { function provisionGradle(gradleVersion) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const gradleVersion = params.getGradleVersion();
if (gradleVersion !== '' && gradleVersion !== 'wrapper') { if (gradleVersion !== '' && gradleVersion !== 'wrapper') {
return addToPath(yield installGradle(gradleVersion)); return addToPath(yield installGradle(gradleVersion));
} }
@ -141879,13 +141866,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod); __setModuleDefault(result, mod);
return result; return result;
}; };
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getBuildRootDirectory = exports.getGradleVersion = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0; exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.GradleExecutionConfig = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0;
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const github = __importStar(__nccwpck_require__(95438)); const github = __importStar(__nccwpck_require__(95438));
const cache = __importStar(__nccwpck_require__(27799)); const cache = __importStar(__nccwpck_require__(27799));
const summary_1 = __nccwpck_require__(81327); const summary_1 = __nccwpck_require__(81327);
const string_argv_1 = __nccwpck_require__(19663); const string_argv_1 = __nccwpck_require__(19663);
const path_1 = __importDefault(__nccwpck_require__(71017));
class DependencyGraphConfig { class DependencyGraphConfig {
getDependencyGraphOption() { getDependencyGraphOption() {
const val = core.getInput('dependency-graph'); const val = core.getInput('dependency-graph');
@ -142058,19 +142049,30 @@ class BuildScanConfig {
} }
} }
exports.BuildScanConfig = BuildScanConfig; exports.BuildScanConfig = BuildScanConfig;
function getGradleVersion() { class GradleExecutionConfig {
return core.getInput('gradle-version'); getGradleVersion() {
return core.getInput('gradle-version');
}
getBuildRootDirectory() {
const baseDirectory = getWorkspaceDirectory();
const buildRootDirectoryInput = core.getInput('build-root-directory');
const resolvedBuildRootDirectory = buildRootDirectoryInput === ''
? path_1.default.resolve(baseDirectory)
: path_1.default.resolve(baseDirectory, buildRootDirectoryInput);
return resolvedBuildRootDirectory;
}
getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
getDependencyResolutionTask() {
return core.getInput('dependency-resolution-task') || ':ForceDependencyResolutionPlugin_resolveAllDependencies';
}
getAdditionalArguments() {
return core.getInput('additional-arguments');
}
} }
exports.getGradleVersion = getGradleVersion; exports.GradleExecutionConfig = GradleExecutionConfig;
function getBuildRootDirectory() {
return core.getInput('build-root-directory');
}
exports.getBuildRootDirectory = getBuildRootDirectory;
function getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
exports.getArguments = getArguments;
function getJobMatrix() { function getJobMatrix() {
return core.getInput('workflow-job-context'); return core.getInput('workflow-job-context');
} }
@ -142443,8 +142445,8 @@ function run() {
try { try {
yield setupGradle.setup(new input_params_1.CacheConfig(), new input_params_1.BuildScanConfig()); yield setupGradle.setup(new input_params_1.CacheConfig(), new input_params_1.BuildScanConfig());
yield dependencyGraph.setup(new input_params_1.DependencyGraphConfig()); yield dependencyGraph.setup(new input_params_1.DependencyGraphConfig());
const args = (0, input_params_1.getArguments)(); const config = new input_params_1.GradleExecutionConfig();
yield gradle.provisionAndMaybeExecute(args); yield gradle.provisionAndMaybeExecute(config.getGradleVersion(), config.getBuildRootDirectory(), config.getArguments());
} }
catch (error) { catch (error) {
core.setFailed(String(error)); core.setFailed(String(error));

File diff suppressed because one or more lines are too long

View File

@ -138952,13 +138952,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod); __setModuleDefault(result, mod);
return result; return result;
}; };
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.getArguments = exports.getBuildRootDirectory = exports.getGradleVersion = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0; exports.parseNumericInput = exports.getWorkspaceDirectory = exports.getGithubToken = exports.getJobMatrix = exports.GradleExecutionConfig = exports.BuildScanConfig = exports.JobSummaryOption = exports.SummaryConfig = exports.CacheConfig = exports.DependencyGraphOption = exports.DependencyGraphConfig = void 0;
const core = __importStar(__nccwpck_require__(42186)); const core = __importStar(__nccwpck_require__(42186));
const github = __importStar(__nccwpck_require__(95438)); const github = __importStar(__nccwpck_require__(95438));
const cache = __importStar(__nccwpck_require__(27799)); const cache = __importStar(__nccwpck_require__(27799));
const summary_1 = __nccwpck_require__(81327); const summary_1 = __nccwpck_require__(81327);
const string_argv_1 = __nccwpck_require__(19663); const string_argv_1 = __nccwpck_require__(19663);
const path_1 = __importDefault(__nccwpck_require__(71017));
class DependencyGraphConfig { class DependencyGraphConfig {
getDependencyGraphOption() { getDependencyGraphOption() {
const val = core.getInput('dependency-graph'); const val = core.getInput('dependency-graph');
@ -139131,19 +139135,30 @@ class BuildScanConfig {
} }
} }
exports.BuildScanConfig = BuildScanConfig; exports.BuildScanConfig = BuildScanConfig;
function getGradleVersion() { class GradleExecutionConfig {
return core.getInput('gradle-version'); getGradleVersion() {
return core.getInput('gradle-version');
}
getBuildRootDirectory() {
const baseDirectory = getWorkspaceDirectory();
const buildRootDirectoryInput = core.getInput('build-root-directory');
const resolvedBuildRootDirectory = buildRootDirectoryInput === ''
? path_1.default.resolve(baseDirectory)
: path_1.default.resolve(baseDirectory, buildRootDirectoryInput);
return resolvedBuildRootDirectory;
}
getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
getDependencyResolutionTask() {
return core.getInput('dependency-resolution-task') || ':ForceDependencyResolutionPlugin_resolveAllDependencies';
}
getAdditionalArguments() {
return core.getInput('additional-arguments');
}
} }
exports.getGradleVersion = getGradleVersion; exports.GradleExecutionConfig = GradleExecutionConfig;
function getBuildRootDirectory() {
return core.getInput('build-root-directory');
}
exports.getBuildRootDirectory = getBuildRootDirectory;
function getArguments() {
const input = core.getInput('arguments');
return (0, string_argv_1.parseArgsStringToArgv)(input);
}
exports.getArguments = getArguments;
function getJobMatrix() { function getJobMatrix() {
return core.getInput('workflow-job-context'); return core.getInput('workflow-job-context');
} }

File diff suppressed because one or more lines are too long

View File

@ -43,6 +43,21 @@ jobs:
- name: Generate and submit dependency graph - name: Generate and submit dependency graph
uses: gradle/actions/dependency-submission@v3 uses: gradle/actions/dependency-submission@v3
``` ```
### Gradle execution
To generate a dependency graph, the `dependency-submission` action must perform a Gradle execution that resolves
the dependencies of the project. All dependencies that are resolved in this execution will be included in the
generated dependency graph. By default action executes a built-in task that is designed to resolve all build dependencies
(`:ForceDependencyResolutionPlugin_resolveAllDependencies`).
The action looks for a Gradle project in the root of the workspace, and executes this project with
the Gradle wrapper, if configured for the project. If the wrapper is not configured, whatever `gradle` available
on the command-line will be used.
The action provides the ability to override the Gradle version and task to execute, as well as provide
additional arguments that will be passed to Gradle on the command-line. See [Configuration Parameters](#configuration-parameters) below.
### Publishing a Develocity Build Scan® from your dependency submission workflow ### Publishing a Develocity Build Scan® from your dependency submission workflow
You can automatically publish a free Develocity Build Scan on every run of `gradle/actions/dependency-submission`. You can automatically publish a free Develocity Build Scan on every run of `gradle/actions/dependency-submission`.
@ -64,8 +79,6 @@ A Build Scan makes it easy to determine the source of any dependency vulnerabili
In some cases, the default action configuration will not be sufficient, and additional action parameters will need to be specified. In some cases, the default action configuration will not be sufficient, and additional action parameters will need to be specified.
See the example below for a summary, and the [Action Metadata file](action.yml) for a more detailed description of each input parameter.
```yaml ```yaml
- name: Generate and save dependency graph - name: Generate and save dependency graph
uses: gradle/actions/dependency-submission@v3 uses: gradle/actions/dependency-submission@v3
@ -76,6 +89,12 @@ See the example below for a summary, and the [Action Metadata file](action.yml)
# The gradle project is not in the root of the repository. # The gradle project is not in the root of the repository.
build-root-directory: my-gradle-project build-root-directory: my-gradle-project
# Choose a task that will trigger dependency resolution
dependency-resolution-task: myDependencyResolutionTask
# Additional arguments that should be passed to execute Gradle
additonal-arguments: --no-configuration-cache
# Enable configuration-cache reuse for this build. # Enable configuration-cache reuse for this build.
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }} cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
@ -83,6 +102,8 @@ See the example below for a summary, and the [Action Metadata file](action.yml)
dependency-graph: generate-and-upload dependency-graph: generate-and-upload
``` ```
See the [Action Metadata file](../dependency-submission/action.yml) for a more detailed description of each input parameter.
# Resolving a dependency vulnerability # Resolving a dependency vulnerability
## Finding the source of a dependency vulnerability ## Finding the source of a dependency vulnerability

View File

@ -196,6 +196,11 @@ jobs:
- run: gradle build --configuration-cache - run: gradle build --configuration-cache
``` ```
> [!IMPORTANT]
> The configuration cache cannot be saved or restored in workflows triggered by a pull requests from a repsitory fork.
> This is because [GitHub secrets are not passed to workflows triggered by PRs from forks](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#using-secrets-in-a-workflow).
> This prevents a malicious PR from reading the configuration-cache data, which may encode secrets read by Gradle.
### Incompatibility with other caching mechanisms ### Incompatibility with other caching mechanisms
When using `setup-gradle` we recommend that you avoid using other mechanisms to save and restore the Gradle User Home. When using `setup-gradle` we recommend that you avoid using other mechanisms to save and restore the Gradle User Home.
@ -532,7 +537,7 @@ You enable GitHub Dependency Graph support by setting the `dependency-graph` act
| `generate` | Generate a dependency graph snapshot for each build invocation. | | `generate` | Generate a dependency graph snapshot for each build invocation. |
| `generate-and-submit` | Generate a dependency graph snapshot for each build invocation, and submit these via the Dependency Submission API on completion of the job. | | `generate-and-submit` | Generate a dependency graph snapshot for each build invocation, and submit these via the Dependency Submission API on completion of the job. |
| `generate-and-upload` | Generate a dependency graph snapshot for each build invocation, saving it as a workflow artifact. | | `generate-and-upload` | Generate a dependency graph snapshot for each build invocation, saving it as a workflow artifact. |
| `download-and-submit` | Download any previously saved dependency graph snapshots, and submit them via the Dependency Submission API. This can be useful to submit [dependency graphs for pull requests submitted from repository forks](#dependency-graphs-for-pull-request-workflows). | | `download-and-submit` | Download any previously saved dependency graph snapshots, and submit them via the Dependency Submission API. This can be useful to submit [dependency graphs for pull requests submitted from repository forks](dependency-submission.md#usage-with-pull-requests-from-public-forked-repositories). |
Example of a CI workflow that generates and submits a dependency graph: Example of a CI workflow that generates and submits a dependency graph:
```yaml ```yaml
@ -569,7 +574,7 @@ Depending on [repository settings](https://docs.github.com/en/actions/security-g
> but not when a workflow is triggered by a PR from a repository fork. > but not when a workflow is triggered by a PR from a repository fork.
> This is because the `contents: write` permission is not available when executing a workflow > This is because the `contents: write` permission is not available when executing a workflow
> for a PR submitted from a forked repository. > for a PR submitted from a forked repository.
> For a configuration that supports this setup, see [Dependency Graphs for pull request workflows](#dependency-graphs-for-pull-request-workflows). > For a configuration that supports this setup, see [Dependency Graphs for pull request workflows](dependency-submission.md#usage-with-pull-requests-from-public-forked-repositories).
### Making dependency graph failures cause Job failures ### Making dependency graph failures cause Job failures

View File

@ -5,7 +5,13 @@ import * as gradle from '../execution/gradle'
import * as dependencyGraph from '../dependency-graph' import * as dependencyGraph from '../dependency-graph'
import {parseArgsStringToArgv} from 'string-argv' import {parseArgsStringToArgv} from 'string-argv'
import {BuildScanConfig, CacheConfig, DependencyGraphConfig, DependencyGraphOption} from '../input-params' import {
BuildScanConfig,
CacheConfig,
DependencyGraphConfig,
DependencyGraphOption,
GradleExecutionConfig
} from '../input-params'
/** /**
* The main entry point for the action, called by Github Actions for the step. * The main entry point for the action, called by Github Actions for the step.
@ -25,16 +31,22 @@ export async function run(): Promise<void> {
} }
// Only execute if arguments have been provided // Only execute if arguments have been provided
const additionalArgs = core.getInput('additional-arguments') const executionConfig = new GradleExecutionConfig()
const taskList = executionConfig.getDependencyResolutionTask()
const additionalArgs = executionConfig.getAdditionalArguments()
const executionArgs = ` const executionArgs = `
-Dorg.gradle.configureondemand=false -Dorg.gradle.configureondemand=false
-Dorg.gradle.dependency.verification=off -Dorg.gradle.dependency.verification=off
-Dorg.gradle.unsafe.isolated-projects=false -Dorg.gradle.unsafe.isolated-projects=false
:ForceDependencyResolutionPlugin_resolveAllDependencies ${taskList}
${additionalArgs} ${additionalArgs}
` `
const args: string[] = parseArgsStringToArgv(executionArgs) const args: string[] = parseArgsStringToArgv(executionArgs)
await gradle.provisionAndMaybeExecute(args) await gradle.provisionAndMaybeExecute(
executionConfig.getGradleVersion(),
executionConfig.getBuildRootDirectory(),
args
)
await dependencyGraph.complete(config) await dependencyGraph.complete(config)
} catch (error) { } catch (error) {

View File

@ -1,19 +1,20 @@
import * as core from '@actions/core' import * as core from '@actions/core'
import * as exec from '@actions/exec' import * as exec from '@actions/exec'
import * as path from 'path'
import * as params from '../input-params'
import * as provisioner from './provision' import * as provisioner from './provision'
import * as gradlew from './gradlew' import * as gradlew from './gradlew'
import {getWorkspaceDirectory} from '../input-params'
export async function provisionAndMaybeExecute(args: string[]): Promise<void> { export async function provisionAndMaybeExecute(
gradleVersion: string,
buildRootDirectory: string,
args: string[]
): Promise<void> {
// Download and install Gradle if required // Download and install Gradle if required
const executable = await provisioner.provisionGradle() const executable = await provisioner.provisionGradle(gradleVersion)
// Only execute if arguments have been provided // Only execute if arguments have been provided
if (args.length > 0) { if (args.length > 0) {
await executeGradleBuild(executable, buildRootDirectory(), args) await executeGradleBuild(executable, buildRootDirectory, args)
} }
} }
@ -30,13 +31,3 @@ async function executeGradleBuild(executable: string | undefined, root: string,
core.setFailed(`Gradle build failed: see console output for details`) core.setFailed(`Gradle build failed: see console output for details`)
} }
} }
function buildRootDirectory(): string {
const baseDirectory = getWorkspaceDirectory()
const buildRootDirectoryInput = params.getBuildRootDirectory()
const resolvedBuildRootDirectory =
buildRootDirectoryInput === ''
? path.resolve(baseDirectory)
: path.resolve(baseDirectory, buildRootDirectoryInput)
return resolvedBuildRootDirectory
}

View File

@ -7,7 +7,6 @@ import * as cache from '@actions/cache'
import * as toolCache from '@actions/tool-cache' import * as toolCache from '@actions/tool-cache'
import * as gradlew from './gradlew' import * as gradlew from './gradlew'
import * as params from '../input-params'
import {handleCacheFailure} from '../caching/cache-utils' import {handleCacheFailure} from '../caching/cache-utils'
import {CacheConfig} from '../input-params' import {CacheConfig} from '../input-params'
@ -17,8 +16,7 @@ const gradleVersionsBaseUrl = 'https://services.gradle.org/versions'
* Install any configured version of Gradle, adding the executable to the PATH. * Install any configured version of Gradle, adding the executable to the PATH.
* @return Installed Gradle executable or undefined if no version configured. * @return Installed Gradle executable or undefined if no version configured.
*/ */
export async function provisionGradle(): Promise<string | undefined> { export async function provisionGradle(gradleVersion: string): Promise<string | undefined> {
const gradleVersion = params.getGradleVersion()
if (gradleVersion !== '' && gradleVersion !== 'wrapper') { if (gradleVersion !== '' && gradleVersion !== 'wrapper') {
return addToPath(await installGradle(gradleVersion)) return addToPath(await installGradle(gradleVersion))
} }

View File

@ -4,6 +4,7 @@ import * as cache from '@actions/cache'
import {SUMMARY_ENV_VAR} from '@actions/core/lib/summary' import {SUMMARY_ENV_VAR} from '@actions/core/lib/summary'
import {parseArgsStringToArgv} from 'string-argv' import {parseArgsStringToArgv} from 'string-argv'
import path from 'path'
export class DependencyGraphConfig { export class DependencyGraphConfig {
getDependencyGraphOption(): DependencyGraphOption { getDependencyGraphOption(): DependencyGraphOption {
@ -218,17 +219,33 @@ export class BuildScanConfig {
} }
} }
export function getGradleVersion(): string { export class GradleExecutionConfig {
return core.getInput('gradle-version') getGradleVersion(): string {
} return core.getInput('gradle-version')
}
export function getBuildRootDirectory(): string { getBuildRootDirectory(): string {
return core.getInput('build-root-directory') const baseDirectory = getWorkspaceDirectory()
} const buildRootDirectoryInput = core.getInput('build-root-directory')
const resolvedBuildRootDirectory =
buildRootDirectoryInput === ''
? path.resolve(baseDirectory)
: path.resolve(baseDirectory, buildRootDirectoryInput)
return resolvedBuildRootDirectory
}
export function getArguments(): string[] { getArguments(): string[] {
const input = core.getInput('arguments') const input = core.getInput('arguments')
return parseArgsStringToArgv(input) return parseArgsStringToArgv(input)
}
getDependencyResolutionTask(): string {
return core.getInput('dependency-resolution-task') || ':ForceDependencyResolutionPlugin_resolveAllDependencies'
}
getAdditionalArguments(): string {
return core.getInput('additional-arguments')
}
} }
// Internal parameters // Internal parameters

View File

@ -3,7 +3,7 @@ import * as core from '@actions/core'
import * as setupGradle from '../setup-gradle' import * as setupGradle from '../setup-gradle'
import * as gradle from '../execution/gradle' import * as gradle from '../execution/gradle'
import * as dependencyGraph from '../dependency-graph' import * as dependencyGraph from '../dependency-graph'
import {BuildScanConfig, CacheConfig, DependencyGraphConfig, getArguments} from '../input-params' import {BuildScanConfig, CacheConfig, DependencyGraphConfig, GradleExecutionConfig} from '../input-params'
/** /**
* The main entry point for the action, called by Github Actions for the step. * The main entry point for the action, called by Github Actions for the step.
@ -16,8 +16,12 @@ export async function run(): Promise<void> {
// Configure the dependency graph submission // Configure the dependency graph submission
await dependencyGraph.setup(new DependencyGraphConfig()) await dependencyGraph.setup(new DependencyGraphConfig())
const args: string[] = getArguments() const config = new GradleExecutionConfig()
await gradle.provisionAndMaybeExecute(args) await gradle.provisionAndMaybeExecute(
config.getGradleVersion(),
config.getBuildRootDirectory(),
config.getArguments()
)
} catch (error) { } catch (error) {
core.setFailed(String(error)) core.setFailed(String(error))
if (error instanceof Error && error.stack) { if (error instanceof Error && error.stack) {