From 38a821729e9a7b8975e733b5c5b91e23f41d4431 Mon Sep 17 00:00:00 2001 From: daz Date: Sun, 7 Apr 2024 12:11:50 -0600 Subject: [PATCH] Use consistent action params between setup-gradle and dependency-submission To ensure expected caching (and other) behaviour, we should keep these config parameters as consistent as possible. --- .../integ-test-dependency-submission.yml | 24 ++- dependency-submission/action.yml | 145 ++++++++++++++---- setup-gradle/action.yml | 33 ++-- sources/src/dependency-submission/main.ts | 1 - 4 files changed, 158 insertions(+), 45 deletions(-) diff --git a/.github/workflows/integ-test-dependency-submission.yml b/.github/workflows/integ-test-dependency-submission.yml index 261c176..6d736e2 100644 --- a/.github/workflows/integ-test-dependency-submission.yml +++ b/.github/workflows/integ-test-dependency-submission.yml @@ -36,10 +36,32 @@ jobs: with: dependency-graph: generate-and-upload build-root-directory: .github/workflow-samples/groovy-dsl + cache-read-only: false + + groovy-restore-cache: + needs: [groovy-generate-and-upload] + strategy: + matrix: + os: ${{fromJSON(inputs.runner-os)}} + runs-on: ${{ matrix.os }} + steps: + - name: Checkout sources + uses: actions/checkout@v4 + - name: Initialize integ-test + uses: ./.github/actions/init-integ-test + + - name: Restore dependency graph + uses: ./dependency-submission + with: + build-root-directory: .github/workflow-samples/groovy-dsl + additional-arguments: --offline groovy-download-and-submit: needs: [groovy-generate-and-upload] - runs-on: "ubuntu-latest" + strategy: + matrix: + os: ${{fromJSON(inputs.runner-os)}} + runs-on: ${{ matrix.os }} steps: - name: Checkout sources uses: actions/checkout@v4 diff --git a/dependency-submission/action.yml b/dependency-submission/action.yml index 2164b0b..c85998b 100644 --- a/dependency-submission/action.yml +++ b/dependency-submission/action.yml @@ -7,15 +7,77 @@ inputs: Gradle version to use. If specified, this Gradle version will be downloaded, added to the PATH and used for invoking Gradle. If not provided, it is assumed that the project uses the Gradle Wrapper. required: false + build-root-directory: description: Path to the root directory of the build. Default is the root of the GitHub workspace. required: false + + additional-arguments: + description: | + Additional arguments to pass to Gradle when generating the dependency graph. + For example, `--no-configuration-cache --stacktrace`. + required: false + + # Cache configuration + cache-disabled: + description: When 'true', all caching is disabled. No entries will be written to or read from the cache. + required: false + default: false + + cache-read-only: + description: | + When 'true', existing entries will be read from the cache but no entries will be written. + By default this value is 'false' for workflows on the GitHub default branch and 'true' for workflows on other branches. + required: false + default: ${{ github.event.repository != null && github.ref_name != github.event.repository.default_branch }} + + cache-write-only: + description: | + When 'true', entries will not be restored from the cache but will be saved at the end of the Job. + Setting this to 'true' implies cache-read-only will be 'false'. + required: false + default: false + + cache-overwrite-existing: + description: When 'true', a pre-existing Gradle User Home will not prevent the cache from being restored. + required: false + default: false + cache-encryption-key: description: | A base64 encoded AES key used to encrypt the configuration-cache data. The key is exported as 'GRADLE_ENCRYPTION_KEY' for later steps. A suitable key can be generated with `openssl rand -base64 16`. Configuration-cache data will not be saved/restored without an encryption key being provided. required: false + + gradle-home-cache-includes: + description: Paths within Gradle User Home to cache. + required: false + default: | + caches + notifications + + gradle-home-cache-excludes: + description: Paths within Gradle User Home to exclude from cache. + required: false + + gradle-home-cache-cleanup: + description: When 'true', the action will attempt to remove any stale/unused entries from the Gradle User Home prior to saving to the GitHub Actions cache. + required: false + default: false + + # Job summary configuration + add-job-summary: + description: Specifies when a Job Summary should be inluded in the action results. Valid values are 'never', 'always' (default), and 'on-failure'. + required: false + default: 'always' + + add-job-summary-as-pr-comment: + description: Specifies when each Job Summary should be added as a PR comment. Valid values are 'never' (default), 'always', and 'on-failure'. No action will be taken if the workflow was not triggered from a pull request. + required: false + default: 'never' + + # Dependency Graph configuration dependency-graph: description: | Specifies how the dependency-graph should be handled by this action. By default a dependency-graph will be generated and submitted. @@ -23,53 +85,39 @@ inputs: 'generate-and-submit' (default): Generates a dependency graph for the project and submits it in the same Job. 'generate-and-upload': Generates a dependency graph for the project and saves it as a workflow artifact. 'download-and-submit': Retrieves a previously saved dependency-graph and submits it to the repository. - + The `generate-and-upload` and `download-and-submit` options are designed to be used in an untrusted workflow scenario, where the workflow generating the dependency-graph cannot (or should not) be given the `contents: write` permissions required to submit via the Dependency Submission API. required: false default: 'generate-and-submit' - additional-arguments: - description: | - Additional arguments to pass to Gradle. For example, `--no-configuration-cache --stacktrace`. - required: false + dependency-graph-continue-on-failure: + description: When 'false' a failure to generate or submit a dependency graph will fail the Step or Job. When 'true' a warning will be emitted but no failure will result. + required: false + default: false + + artifact-retention-days: + description: Specifies the number of days to retain any artifacts generated by the action. If not set, the default retention settings for the repository will apply. + required: false + default: 1 + + # Build Scan configuration build-scan-publish: description: | Set to 'true' to automatically publish build results as a Build Scan on scans.gradle.com. For publication to succeed without user input, you must also provide values for `build-scan-terms-of-use-url` and 'build-scan-terms-of-use-agree'. required: false default: false + build-scan-terms-of-use-url: - description: The URL to the Build Scan® terms of use. This input must be set to 'https://gradle.com/help/legal-terms-of-use'. + description: The URL to the Build Scan® terms of use. This input must be set to 'https://gradle.com/terms-of-service' or 'https://gradle.com/help/legal-terms-of-use'. required: false + build-scan-terms-of-use-agree: description: Indicate that you agree to the Build Scan® terms of use. This input value must be "yes". required: false - # HARD-CODED DEFAULTS - These should be removed from here and set directly in code - dependency-graph-continue-on-failure: - required: false - default: false - artifact-retention-days: - required: false - default: 1 - add-job-summary: - required: false - default: 'always' - add-job-summary-as-pr-comment: - required: false - default: 'never' - workflow-job-context: - required: false - default: ${{ toJSON(matrix) }} - github-token: - default: ${{ github.token }} - required: false - cache-disabled: - required: false - default: true - # DEPRECATED ACTION INPUTS build-scan-terms-of-service-url: description: The URL to the Build Scan® terms of use. This input must be set to 'https://gradle.com/terms-of-service'. @@ -81,7 +129,46 @@ inputs: required: false deprecation-message: The input has been renamed to align with the Develocity API. Use 'build-scan-terms-of-use-agree' instead. + generate-job-summary: + description: When 'false', no Job Summary will be generated for the Job. + required: false + default: true + deprecation-message: Superceded by the new 'add-job-summary' and 'add-job-summary-as-pr-comment' parameters. + + # EXPERIMENTAL ACTION INPUTS + # The following action properties allow fine-grained tweaking of the action caching behaviour. + # These properties are experimental and not (yet) designed for production use, and may change without notice in a subsequent release of `setup-gradle`. + # Use at your own risk! + gradle-home-cache-strict-match: + description: When 'true', the action will not attempt to restore the Gradle User Home entries from other Jobs. + required: false + default: false + + # INTERNAL ACTION INPUTS + # These inputs should not be configured directly, and are only used to pass environmental information to the action + workflow-job-context: + description: Used to uniquely identify the current job invocation. Defaults to the matrix values for this job; this should not be overridden by users (INTERNAL). + required: false + default: ${{ toJSON(matrix) }} + + 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® generated by a Gradle build. Note that this output applies to a Step executing Gradle, not to the `setup-gradle` Step itself. + dependency-graph-file: + description: Path to the GitHub Dependency Graph snapshot file generated by a Gradle build. Note that this output applies to a Step executing Gradle, not to the `setup-gradle` Step itself. + gradle-version: + description: Version of Gradle that was setup by the action + runs: using: 'node20' main: '../dist/dependency-submission/main/index.js' post: '../dist/dependency-submission/post/index.js' + +branding: + icon: 'box' + color: 'gray-dark' diff --git a/setup-gradle/action.yml b/setup-gradle/action.yml index bfce1fb..6a9ccc4 100644 --- a/setup-gradle/action.yml +++ b/setup-gradle/action.yml @@ -1,13 +1,14 @@ name: 'Setup Gradle' description: 'Configures Gradle for GitHub actions, caching state and generating a dependency graph via Dependency Submission.' -# https://help.github.com/en/articles/metadata-syntax-for-github-actions - inputs: gradle-version: - description: Gradle version to use. If specified, this Gradle version will be downloaded, added to the PATH and used for invoking Gradle. + description: | + Gradle version to use. If specified, this Gradle version will be downloaded, added to the PATH and used for invoking Gradle. + If not provided, it is assumed that the project uses the Gradle Wrapper. required: false + # Cache configuration cache-disabled: description: When 'true', all caching is disabled. No entries will be written to or read from the cache. required: false @@ -49,15 +50,13 @@ inputs: gradle-home-cache-excludes: description: Paths within Gradle User Home to exclude from cache. required: false - # e.g. Use the following setting to prevent the local build cache from being saved/restored - # gradle-home-cache-excludes: | - # caches/build-cache-1 gradle-home-cache-cleanup: description: When 'true', the action will attempt to remove any stale/unused entries from the Gradle User Home prior to saving to the GitHub Actions cache. required: false default: false + # Job summary configuration add-job-summary: description: Specifies when a Job Summary should be inluded in the action results. Valid values are 'never', 'always' (default), and 'on-failure'. required: false @@ -68,8 +67,11 @@ inputs: required: false default: 'never' + # Dependency Graph configuration 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', 'generate-and-upload', 'download-and-submit' and 'clear'. + 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', 'generate-and-upload', 'download-and-submit' and 'clear'. required: false default: 'disabled' @@ -82,6 +84,7 @@ inputs: description: Specifies the number of days to retain any artifacts generated by the action. If not set, the default retention settings for the repository will apply. required: false + # Build Scan configuration build-scan-publish: description: | Set to 'true' to automatically publish build results as a Build Scan on scans.gradle.com. @@ -108,6 +111,12 @@ inputs: required: false deprecation-message: The input has been renamed to align with the Develocity API. Use 'build-scan-terms-of-use-agree' instead. + generate-job-summary: + description: When 'false', no Job Summary will be generated for the Job. + required: false + default: true + deprecation-message: Superceded by the new 'add-job-summary' and 'add-job-summary-as-pr-comment' parameters. + arguments: description: Gradle command line arguments (supports multi-line input) required: false @@ -118,13 +127,7 @@ inputs: required: false deprecation-message: Using the action to execute Gradle directly is deprecated in favor of using the action to setup Gradle, and executing Gradle in a subsequent Step. - generate-job-summary: - description: When 'false', no Job Summary will be generated for the Job. - required: false - default: true - deprecation-message: Superceded by the new 'add-job-summary' and 'add-job-summary-as-pr-comment' parameters. - - # EXPERIMENTAL & INTERNAL ACTION INPUTS + # EXPERIMENTAL ACTION INPUTS # The following action properties allow fine-grained tweaking of the action caching behaviour. # These properties are experimental and not (yet) designed for production use, and may change without notice in a subsequent release of `setup-gradle`. # Use at your own risk! @@ -133,6 +136,8 @@ inputs: required: false default: false + # INTERNAL ACTION INPUTS + # These inputs should not be configured directly, and are only used to pass environmental information to the action workflow-job-context: description: Used to uniquely identify the current job invocation. Defaults to the matrix values for this job; this should not be overridden by users (INTERNAL). required: false diff --git a/sources/src/dependency-submission/main.ts b/sources/src/dependency-submission/main.ts index e9e5110..df68a4d 100644 --- a/sources/src/dependency-submission/main.ts +++ b/sources/src/dependency-submission/main.ts @@ -40,7 +40,6 @@ export async function run(): Promise { ` const args: string[] = parseArgsStringToArgv(executionArgs) - core.info(args.join('!!!')) const buildRootDirectory = layout.buildRootDirectory() await execution.executeGradleBuild(executable, buildRootDirectory, args) } catch (error) {