mirror of
				https://github.com/gradle/gradle-build-action.git
				synced 2025-10-31 15:18:57 +08:00 
			
		
		
		
	Refactor input parameters
Moved reading of all input parameters into a common source: `input-params.ts`. This centralized all input parameter reads, and allowed an improved implementation of reading boolean parameters. In particular, the implementation now provides a default value for a boolean input parameter that isn't declared for an action.
This commit is contained in:
		| @@ -2,6 +2,7 @@ import * as core from '@actions/core' | ||||
| import * as exec from '@actions/exec' | ||||
| import path from 'path' | ||||
| import fs from 'fs' | ||||
| import * as params from './input-params' | ||||
| import {CacheListener} from './cache-reporting' | ||||
| import {saveCache, restoreCache, cacheDebug, isCacheDebuggingEnabled, tryDelete, generateCacheKey} from './cache-utils' | ||||
| import {GradleHomeEntryExtractor} from './cache-extract-entries' | ||||
| @@ -9,8 +10,6 @@ import {GradleHomeEntryExtractor} from './cache-extract-entries' | ||||
| const RESTORED_CACHE_KEY_KEY = 'restored-cache-key' | ||||
|  | ||||
| export const META_FILE_DIR = '.gradle-build-action' | ||||
| const INCLUDE_PATHS_PARAMETER = 'gradle-home-cache-includes' | ||||
| const EXCLUDE_PATHS_PARAMETER = 'gradle-home-cache-excludes' | ||||
|  | ||||
| export class GradleStateCache { | ||||
|     private cacheName: string | ||||
| @@ -142,7 +141,7 @@ export class GradleStateCache { | ||||
|      * Delete any file paths that are excluded by the `gradle-home-cache-excludes` parameter. | ||||
|      */ | ||||
|     private deleteExcludedPaths(): void { | ||||
|         const rawPaths: string[] = core.getMultilineInput(EXCLUDE_PATHS_PARAMETER) | ||||
|         const rawPaths: string[] = params.getCacheExcludes() | ||||
|         const resolvedPaths = rawPaths.map(x => path.resolve(this.gradleUserHome, x)) | ||||
|  | ||||
|         for (const p of resolvedPaths) { | ||||
| @@ -157,7 +156,7 @@ export class GradleStateCache { | ||||
|      * but this can be overridden by the `gradle-home-cache-includes` parameter. | ||||
|      */ | ||||
|     protected getCachePath(): string[] { | ||||
|         const rawPaths: string[] = core.getMultilineInput(INCLUDE_PATHS_PARAMETER) | ||||
|         const rawPaths: string[] = params.getCacheIncludes() | ||||
|         rawPaths.push(META_FILE_DIR) | ||||
|         const resolvedPaths = rawPaths.map(x => this.resolveCachePath(x)) | ||||
|         cacheDebug(`Using cache paths: ${resolvedPaths}`) | ||||
|   | ||||
| @@ -3,17 +3,11 @@ import fs from 'fs' | ||||
| import * as core from '@actions/core' | ||||
| import * as glob from '@actions/glob' | ||||
|  | ||||
| import * as params from './input-params' | ||||
|  | ||||
| import {META_FILE_DIR} from './cache-base' | ||||
| import {CacheEntryListener, CacheListener} from './cache-reporting' | ||||
| import { | ||||
|     cacheDebug, | ||||
|     getCacheKeyPrefix, | ||||
|     hashFileNames, | ||||
|     isCacheDebuggingEnabled, | ||||
|     restoreCache, | ||||
|     saveCache, | ||||
|     tryDelete | ||||
| } from './cache-utils' | ||||
| import {cacheDebug, getCacheKeyPrefix, hashFileNames, restoreCache, saveCache, tryDelete} from './cache-utils' | ||||
| import {loadBuildResults} from './build-results' | ||||
|  | ||||
| const SKIP_RESTORE_VAR = 'GRADLE_BUILD_ACTION_SKIP_RESTORE' | ||||
| @@ -246,7 +240,7 @@ abstract class AbstractEntryExtractor { | ||||
|  | ||||
|     // Run actions sequentially if debugging is enabled | ||||
|     private async awaitForDebugging(p: Promise<ExtractedCacheEntry>): Promise<ExtractedCacheEntry> { | ||||
|         if (isCacheDebuggingEnabled()) { | ||||
|         if (params.isCacheDebuggingEnabled()) { | ||||
|             await p | ||||
|         } | ||||
|         return p | ||||
|   | ||||
| @@ -7,18 +7,12 @@ import * as crypto from 'crypto' | ||||
| import * as path from 'path' | ||||
| import * as fs from 'fs' | ||||
|  | ||||
| import * as params from './input-params' | ||||
|  | ||||
| import {CacheEntryListener} from './cache-reporting' | ||||
|  | ||||
| const CACHE_PROTOCOL_VERSION = 'v8-' | ||||
|  | ||||
| const JOB_CONTEXT_PARAMETER = 'workflow-job-context' | ||||
| const CACHE_DISABLED_PARAMETER = 'cache-disabled' | ||||
| const CACHE_READONLY_PARAMETER = 'cache-read-only' | ||||
| const CACHE_WRITEONLY_PARAMETER = 'cache-write-only' | ||||
| const STRICT_CACHE_MATCH_PARAMETER = 'gradle-home-cache-strict-match' | ||||
| const CACHE_CLEANUP_ENABLED_PARAMETER = 'gradle-home-cache-cleanup' | ||||
| const CACHE_DEBUG_VAR = 'GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED' | ||||
|  | ||||
| const CACHE_KEY_PREFIX_VAR = 'GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX' | ||||
| const CACHE_KEY_OS_VAR = 'GRADLE_BUILD_ACTION_CACHE_KEY_ENVIRONMENT' | ||||
| const CACHE_KEY_JOB_VAR = 'GRADLE_BUILD_ACTION_CACHE_KEY_JOB' | ||||
| @@ -32,23 +26,23 @@ export function isCacheDisabled(): boolean { | ||||
|     if (!cache.isFeatureAvailable()) { | ||||
|         return true | ||||
|     } | ||||
|     return core.getBooleanInput(CACHE_DISABLED_PARAMETER) | ||||
|     return params.isCacheDisabled() | ||||
| } | ||||
|  | ||||
| export function isCacheReadOnly(): boolean { | ||||
|     return !isCacheWriteOnly() && core.getBooleanInput(CACHE_READONLY_PARAMETER) | ||||
|     return !isCacheWriteOnly() && params.isCacheReadOnly() | ||||
| } | ||||
|  | ||||
| export function isCacheWriteOnly(): boolean { | ||||
|     return core.getBooleanInput(CACHE_WRITEONLY_PARAMETER) | ||||
|     return params.isCacheWriteOnly() | ||||
| } | ||||
|  | ||||
| export function isCacheDebuggingEnabled(): boolean { | ||||
|     return process.env[CACHE_DEBUG_VAR] ? true : false | ||||
|     return params.isCacheDebuggingEnabled() | ||||
| } | ||||
|  | ||||
| export function isCacheCleanupEnabled(): boolean { | ||||
|     return core.getBooleanInput(CACHE_CLEANUP_ENABLED_PARAMETER) | ||||
|     return params.isCacheCleanupEnabled() | ||||
| } | ||||
|  | ||||
| /** | ||||
| @@ -97,7 +91,7 @@ export function generateCacheKey(cacheName: string): CacheKey { | ||||
|     // Exact match on Git SHA | ||||
|     const cacheKey = `${cacheKeyForJobContext}-${getCacheKeyJobExecution()}` | ||||
|  | ||||
|     if (core.getBooleanInput(STRICT_CACHE_MATCH_PARAMETER)) { | ||||
|     if (params.isCacheStrictMatch()) { | ||||
|         return new CacheKey(cacheKey, [cacheKeyForJobContext]) | ||||
|     } | ||||
|  | ||||
| @@ -126,7 +120,7 @@ function getCacheKeyJobInstance(): string { | ||||
|  | ||||
|     // By default, we hash the full `matrix` data for the run, to uniquely identify this job invocation | ||||
|     // The only way we can obtain the `matrix` data is via the `workflow-job-context` parameter in action.yml. | ||||
|     const workflowJobContext = core.getInput(JOB_CONTEXT_PARAMETER) | ||||
|     const workflowJobContext = params.getJobContext() | ||||
|     return hashStrings([workflowJobContext]) | ||||
| } | ||||
|  | ||||
|   | ||||
							
								
								
									
										77
									
								
								src/input-params.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								src/input-params.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| import * as core from '@actions/core' | ||||
| import {parseArgsStringToArgv} from 'string-argv' | ||||
|  | ||||
| export function isCacheDisabled(): boolean { | ||||
|     return getBooleanInput('cache-disabled') | ||||
| } | ||||
|  | ||||
| export function isCacheReadOnly(): boolean { | ||||
|     return getBooleanInput('cache-read-only') | ||||
| } | ||||
|  | ||||
| export function isCacheWriteOnly(): boolean { | ||||
|     return getBooleanInput('cache-write-only') | ||||
| } | ||||
|  | ||||
| export function isCacheStrictMatch(): boolean { | ||||
|     return getBooleanInput('gradle-home-cache-strict-match') | ||||
| } | ||||
|  | ||||
| export function isCacheDebuggingEnabled(): boolean { | ||||
|     return process.env['GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED'] ? true : false | ||||
| } | ||||
|  | ||||
| export function isCacheCleanupEnabled(): boolean { | ||||
|     return getBooleanInput('gradle-home-cache-cleanup') | ||||
| } | ||||
|  | ||||
| export function getCacheIncludes(): string[] { | ||||
|     return core.getMultilineInput('gradle-home-cache-includes') | ||||
| } | ||||
|  | ||||
| export function getCacheExcludes(): string[] { | ||||
|     return core.getMultilineInput('gradle-home-cache-excludes') | ||||
| } | ||||
|  | ||||
| export function getBuildRootDirectory(): string { | ||||
|     return core.getInput('build-root-directory') | ||||
| } | ||||
|  | ||||
| export function getGradleVersion(): string { | ||||
|     return core.getInput('gradle-version') | ||||
| } | ||||
|  | ||||
| export function getGradleExecutable(): string { | ||||
|     return core.getInput('gradle-executable') | ||||
| } | ||||
|  | ||||
| export function getArguments(): string[] { | ||||
|     const input = core.getInput('arguments') | ||||
|     return parseArgsStringToArgv(input) | ||||
| } | ||||
|  | ||||
| // Internal parameters | ||||
| export function getJobContext(): string { | ||||
|     return core.getInput('workflow-job-context') | ||||
| } | ||||
|  | ||||
| export function getGithubToken(): string { | ||||
|     return core.getInput('github-token', {required: true}) | ||||
| } | ||||
|  | ||||
| export function isJobSummaryEnabled(): boolean { | ||||
|     return getBooleanInput('generate-job-summary', true) | ||||
| } | ||||
|  | ||||
| function getBooleanInput(paramName: string, paramDefault = false): boolean { | ||||
|     const paramValue = core.getInput(paramName) | ||||
|     switch (paramValue.toLowerCase().trim()) { | ||||
|         case '': | ||||
|             return paramDefault | ||||
|         case 'false': | ||||
|             return false | ||||
|         case 'true': | ||||
|             return true | ||||
|     } | ||||
|     throw TypeError(`The value '${paramValue} is not valid for '${paramName}. Valid values are: [true, false]`) | ||||
| } | ||||
| @@ -1,10 +1,10 @@ | ||||
| import * as core from '@actions/core' | ||||
| import {parseArgsStringToArgv} from 'string-argv' | ||||
|  | ||||
| import * as setupGradle from './setup-gradle' | ||||
| import * as execution from './execution' | ||||
| import * as provisioner from './provision' | ||||
| import * as layout from './repository-layout' | ||||
| import * as params from './input-params' | ||||
|  | ||||
| /** | ||||
|  * The main entry point for the action, called by Github Actions for the step. | ||||
| @@ -18,7 +18,7 @@ export async function run(): Promise<void> { | ||||
|         const executable = await provisioner.provisionGradle() | ||||
|  | ||||
|         // Only execute if arguments have been provided | ||||
|         const args: string[] = parseCommandLineArguments() | ||||
|         const args: string[] = params.getArguments() | ||||
|         if (args.length > 0) { | ||||
|             const buildRootDirectory = layout.buildRootDirectory() | ||||
|             await execution.executeGradleBuild(executable, buildRootDirectory, args) | ||||
| @@ -32,8 +32,3 @@ export async function run(): Promise<void> { | ||||
| } | ||||
|  | ||||
| run() | ||||
|  | ||||
| function parseCommandLineArguments(): string[] { | ||||
|     const input = core.getInput('arguments') | ||||
|     return parseArgsStringToArgv(input) | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,7 @@ import * as cache from '@actions/cache' | ||||
| import * as toolCache from '@actions/tool-cache' | ||||
|  | ||||
| import * as gradlew from './gradlew' | ||||
| import * as params from './input-params' | ||||
| import * as layout from './repository-layout' | ||||
| import {handleCacheFailure, isCacheDisabled, isCacheReadOnly} from './cache-utils' | ||||
|  | ||||
| @@ -17,12 +18,12 @@ const gradleVersionsBaseUrl = 'https://services.gradle.org/versions' | ||||
|  * @return Installed Gradle executable or undefined if no version configured. | ||||
|  */ | ||||
| export async function provisionGradle(): Promise<string | undefined> { | ||||
|     const gradleVersion = core.getInput('gradle-version') | ||||
|     const gradleVersion = params.getGradleVersion() | ||||
|     if (gradleVersion !== '' && gradleVersion !== 'wrapper') { | ||||
|         return addToPath(path.resolve(await installGradle(gradleVersion))) | ||||
|     } | ||||
|  | ||||
|     const gradleExecutable = core.getInput('gradle-executable') | ||||
|     const gradleExecutable = params.getGradleExecutable() | ||||
|     if (gradleExecutable !== '') { | ||||
|         const workspaceDirectory = layout.workspaceDirectory() | ||||
|         return addToPath(path.resolve(workspaceDirectory, gradleExecutable)) | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| import * as core from '@actions/core' | ||||
| import * as params from './input-params' | ||||
| import * as path from 'path' | ||||
|  | ||||
| export function workspaceDirectory(): string { | ||||
| @@ -7,7 +7,7 @@ export function workspaceDirectory(): string { | ||||
|  | ||||
| export function buildRootDirectory(): string { | ||||
|     const baseDirectory = workspaceDirectory() | ||||
|     const buildRootDirectoryInput = core.getInput('build-root-directory') | ||||
|     const buildRootDirectoryInput = params.getBuildRootDirectory() | ||||
|     const resolvedBuildRootDirectory = | ||||
|         buildRootDirectoryInput === '' | ||||
|             ? path.resolve(baseDirectory) | ||||
|   | ||||
| @@ -5,6 +5,7 @@ import * as path from 'path' | ||||
| import * as os from 'os' | ||||
| import * as caches from './caches' | ||||
| import * as layout from './repository-layout' | ||||
| import * as params from './input-params' | ||||
|  | ||||
| import {logJobSummary, writeJobSummary} from './job-summary' | ||||
| import {loadBuildResults} from './build-results' | ||||
| @@ -14,7 +15,6 @@ import {DaemonController} from './daemon-controller' | ||||
| const GRADLE_SETUP_VAR = 'GRADLE_BUILD_ACTION_SETUP_COMPLETED' | ||||
| const GRADLE_USER_HOME = 'GRADLE_USER_HOME' | ||||
| const CACHE_LISTENER = 'CACHE_LISTENER' | ||||
| const JOB_SUMMARY_ENABLED_PARAMETER = 'generate-job-summary' | ||||
|  | ||||
| export async function setup(): Promise<void> { | ||||
|     const gradleUserHome = await determineGradleUserHome() | ||||
| @@ -93,5 +93,5 @@ function shouldGenerateJobSummary(): boolean { | ||||
|         return false | ||||
|     } | ||||
|  | ||||
|     return core.getBooleanInput(JOB_SUMMARY_ENABLED_PARAMETER) | ||||
|     return params.isJobSummaryEnabled() | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user