name: "Gradle Build Action"
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.
    required: false

  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
  # 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

  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:
    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' and 'download-and-submit'.
    required: false
    default: 'disabled'

  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

  # DEPRECATED ACTION INPUTS
  arguments:
    description: Gradle command line arguments (supports multi-line input)
    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. See https://github.com/gradle/gradle-build-action?tab=readme-ov-file#use-the-action-to-setup-gradle. 

  build-root-directory:
    description: Path to the root directory of the build. Default is the root of the GitHub workspace.
    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. See https://github.com/gradle/gradle-build-action?tab=readme-ov-file#use-the-action-to-setup-gradle. 

  gradle-executable:
    description: Path to the Gradle executable. If specified, this executable will be added to the PATH and used for invoking Gradle.
    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. See https://github.com/gradle/gradle-build-action?tab=readme-ov-file#use-the-action-to-setup-gradle. 

  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
  # 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 `gradle-build-action`.
  # 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
    
  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 `gradle-build-action` 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 `gradle-build-action` Step itself.
  gradle-version:
    description: Version of Gradle that was setup by the action

runs:
  using: 'node20'
  main: 'dist/main/index.js'
  post: 'dist/post/index.js'

branding:
  icon: 'box'
  color: 'gray-dark'
