mirror of
https://github.com/tj-actions/changed-files
synced 2024-12-16 09:27:57 +00:00
fix: update input warning (#1870)
Co-authored-by: tj-actions[bot] <109116665+tj-actions-bot@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
parent
79b060d445
commit
6c9dcea443
6 changed files with 32 additions and 149 deletions
BIN
dist/index.js
generated
vendored
BIN
dist/index.js
generated
vendored
Binary file not shown.
BIN
dist/index.js.map
generated
vendored
BIN
dist/index.js.map
generated
vendored
Binary file not shown.
|
@ -1,6 +1,4 @@
|
|||
import * as core from '@actions/core'
|
||||
import {promises as fs} from 'fs'
|
||||
import path from 'path'
|
||||
import {ChangeTypeEnum} from '../changedFiles'
|
||||
import {Inputs} from '../inputs'
|
||||
import {
|
||||
|
@ -12,7 +10,6 @@ import {
|
|||
} from '../utils'
|
||||
|
||||
const originalPlatform = process.platform
|
||||
const ACTION_PATH = path.resolve(__dirname, '..', '..', 'action.yml')
|
||||
|
||||
function mockedPlatform(platform: string): void {
|
||||
Object.defineProperty(process, 'platform', {
|
||||
|
@ -644,97 +641,14 @@ describe('utils test', () => {
|
|||
const coreWarningSpy = jest.spyOn(core, 'warning')
|
||||
|
||||
await warnUnsupportedRESTAPIInputs({
|
||||
actionPath: ACTION_PATH,
|
||||
inputs
|
||||
})
|
||||
|
||||
expect(coreWarningSpy).toHaveBeenCalledWith(
|
||||
'Input "sha" is not supported when using GitHub\'s REST API to get changed files'
|
||||
)
|
||||
})
|
||||
|
||||
// Throws an error if there are YAML errors in the action file.
|
||||
it('should throw an error if there are YAML errors in the action file', async () => {
|
||||
const actionPath = './path/to/action.yml'
|
||||
const inputs: Inputs = {
|
||||
files: '',
|
||||
filesSeparator: '\n',
|
||||
filesFromSourceFile: '',
|
||||
filesFromSourceFileSeparator: '\n',
|
||||
filesYaml: '',
|
||||
filesYamlFromSourceFile: '',
|
||||
filesYamlFromSourceFileSeparator: '\n',
|
||||
filesIgnore: '',
|
||||
filesIgnoreSeparator: '\n',
|
||||
filesIgnoreFromSourceFile: '',
|
||||
filesIgnoreFromSourceFileSeparator: '\n',
|
||||
filesIgnoreYaml: '',
|
||||
filesIgnoreYamlFromSourceFile: '',
|
||||
filesIgnoreYamlFromSourceFileSeparator: '\n',
|
||||
separator: ' ',
|
||||
includeAllOldNewRenamedFiles: false,
|
||||
oldNewSeparator: ',',
|
||||
oldNewFilesSeparator: ' ',
|
||||
sha: '1313123',
|
||||
baseSha: '',
|
||||
since: '',
|
||||
until: '',
|
||||
path: '.',
|
||||
quotepath: true,
|
||||
diffRelative: true,
|
||||
dirNames: false,
|
||||
dirNamesMaxDepth: undefined,
|
||||
dirNamesExcludeCurrentDir: false,
|
||||
dirNamesIncludeFiles: '',
|
||||
dirNamesIncludeFilesSeparator: '\n',
|
||||
dirNamesDeletedFilesIncludeOnlyDeletedDirs: false,
|
||||
json: false,
|
||||
escapeJson: true,
|
||||
safeOutput: true,
|
||||
fetchDepth: 50,
|
||||
fetchAdditionalSubmoduleHistory: false,
|
||||
sinceLastRemoteCommit: false,
|
||||
writeOutputFiles: false,
|
||||
outputDir: '.github/outputs',
|
||||
outputRenamedFilesAsDeletedAndAdded: false,
|
||||
recoverDeletedFiles: false,
|
||||
recoverDeletedFilesToDestination: '',
|
||||
recoverFiles: '',
|
||||
recoverFilesSeparator: '\n',
|
||||
recoverFilesIgnore: '',
|
||||
recoverFilesIgnoreSeparator: '\n',
|
||||
token: '${{ github.token }}',
|
||||
apiUrl: '${{ github.api_url }}',
|
||||
skipInitialFetch: false,
|
||||
failOnInitialDiffError: false,
|
||||
failOnSubmoduleDiffError: false,
|
||||
negationPatternsFirst: false,
|
||||
useRestApi: false
|
||||
}
|
||||
|
||||
// Mocking readFile to return action file contents with errors
|
||||
jest.spyOn(fs, 'readFile').mockResolvedValue(`
|
||||
inputs:
|
||||
files:
|
||||
description: Files
|
||||
required: true
|
||||
default: ""
|
||||
sha:
|
||||
description: SHA
|
||||
required: true
|
||||
default: abc123
|
||||
token:
|
||||
description: Token
|
||||
required: true
|
||||
default: my-token
|
||||
warnings:
|
||||
| Invalid input value`)
|
||||
|
||||
await expect(
|
||||
warnUnsupportedRESTAPIInputs({actionPath, inputs})
|
||||
).rejects.toThrow(
|
||||
/YAML errors in .\/path\/to\/action.yml: YAMLParseError: Not a YAML token: Invalid input value at line 16, column 13:/
|
||||
)
|
||||
expect(coreWarningSpy).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
import {Inputs} from './inputs'
|
||||
|
||||
export const UNSUPPORTED_REST_API_INPUTS: (keyof Inputs)[] = [
|
||||
'sha',
|
||||
'baseSha',
|
||||
'since',
|
||||
'until',
|
||||
'path',
|
||||
'quotepath',
|
||||
'diffRelative',
|
||||
'sinceLastRemoteCommit',
|
||||
'recoverDeletedFiles',
|
||||
'recoverDeletedFilesToDestination',
|
||||
'recoverFiles',
|
||||
'recoverFilesSeparator',
|
||||
'recoverFilesIgnore',
|
||||
'recoverFilesIgnoreSeparator',
|
||||
'includeAllOldNewRenamedFiles',
|
||||
'oldNewSeparator',
|
||||
'oldNewFilesSeparator',
|
||||
'skipInitialFetch',
|
||||
'fetchAdditionalSubmoduleHistory',
|
||||
'dirNamesDeletedFilesIncludeOnlyDeletedDirs'
|
||||
]
|
||||
export const UNSUPPORTED_REST_API_INPUTS: Partial<Inputs> = {
|
||||
sha: '',
|
||||
baseSha: '',
|
||||
since: '',
|
||||
until: '',
|
||||
path: '.',
|
||||
quotepath: true,
|
||||
diffRelative: true,
|
||||
sinceLastRemoteCommit: false,
|
||||
recoverDeletedFiles: false,
|
||||
recoverDeletedFilesToDestination: '',
|
||||
recoverFiles: '',
|
||||
recoverFilesSeparator: '\n',
|
||||
recoverFilesIgnore: '',
|
||||
recoverFilesIgnoreSeparator: '\n',
|
||||
includeAllOldNewRenamedFiles: false,
|
||||
oldNewSeparator: ',',
|
||||
oldNewFilesSeparator: ' ',
|
||||
skipInitialFetch: false,
|
||||
fetchAdditionalSubmoduleHistory: false,
|
||||
dirNamesDeletedFilesIncludeOnlyDeletedDirs: false
|
||||
}
|
||||
|
|
|
@ -256,12 +256,7 @@ export async function run(): Promise<void> {
|
|||
(!hasGitDirectory || inputs.useRestApi)
|
||||
) {
|
||||
core.info("Using GitHub's REST API to get changed files")
|
||||
if (process.env.GITHUB_ACTION_PATH) {
|
||||
await warnUnsupportedRESTAPIInputs({
|
||||
actionPath: path.join(process.env.GITHUB_ACTION_PATH, 'action.yml'),
|
||||
inputs
|
||||
})
|
||||
}
|
||||
await warnUnsupportedRESTAPIInputs({inputs})
|
||||
await getChangedFilesFromRESTAPI({
|
||||
inputs,
|
||||
filePatterns,
|
||||
|
|
42
src/utils.ts
42
src/utils.ts
|
@ -1513,52 +1513,26 @@ export const hasLocalGitDirectory = async ({
|
|||
/**
|
||||
* Warns about unsupported inputs when using the REST API.
|
||||
*
|
||||
* @param actionPath - The path to the action file.
|
||||
* @param inputs - The inputs object.
|
||||
*/
|
||||
export const warnUnsupportedRESTAPIInputs = async ({
|
||||
actionPath,
|
||||
inputs
|
||||
}: {
|
||||
actionPath: string
|
||||
inputs: Inputs
|
||||
}): Promise<void> => {
|
||||
const actionContents = await fs.readFile(actionPath, 'utf8')
|
||||
const actionYaml = parseDocument(actionContents, {schema: 'failsafe'})
|
||||
|
||||
if (actionYaml.errors.length > 0) {
|
||||
throw new Error(
|
||||
`YAML errors in ${actionPath}: ${actionYaml.errors.join(', ')}`
|
||||
)
|
||||
}
|
||||
|
||||
if (actionYaml.warnings.length > 0) {
|
||||
throw new Error(
|
||||
`YAML warnings in ${actionPath}: ${actionYaml.warnings.join(', ')}`
|
||||
)
|
||||
}
|
||||
|
||||
const action = actionYaml.toJS() as {
|
||||
inputs: {
|
||||
[key: string]: {description: string; required: boolean; default: string}
|
||||
}
|
||||
}
|
||||
|
||||
const actionInputs = action.inputs
|
||||
|
||||
for (const key of UNSUPPORTED_REST_API_INPUTS) {
|
||||
const inputKey = snakeCase(key) as keyof Inputs
|
||||
|
||||
for (const key of Object.keys(UNSUPPORTED_REST_API_INPUTS)) {
|
||||
const defaultValue = Object.hasOwnProperty.call(
|
||||
actionInputs[inputKey],
|
||||
'default'
|
||||
UNSUPPORTED_REST_API_INPUTS,
|
||||
key
|
||||
)
|
||||
? actionInputs[inputKey].default.toString()
|
||||
? UNSUPPORTED_REST_API_INPUTS[key as keyof Inputs]?.toString()
|
||||
: ''
|
||||
|
||||
if (defaultValue !== inputs[key]?.toString()) {
|
||||
if (defaultValue !== inputs[key as keyof Inputs]?.toString()) {
|
||||
core.warning(
|
||||
`Input "${inputKey}" is not supported when using GitHub's REST API to get changed files`
|
||||
`Input "${snakeCase(
|
||||
key
|
||||
)}" is not supported when using GitHub's REST API to get changed files`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue