feat: add dir_names_exclude_current_dir input and cleaned up logic to retrieve the current sha (#1229)

Co-authored-by: GitHub Action <action@github.com>
Co-authored-by: tj-actions[bot] <109116665+tj-actions-bot@users.noreply.github.com>
Co-authored-by: jackton1 <jackton1@users.noreply.github.com>
This commit is contained in:
Tonye Jack 2023-06-06 06:00:56 -06:00 committed by GitHub
parent cdf9afcec8
commit 353ea22e6f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 36 additions and 13 deletions

View file

@ -79,15 +79,20 @@ inputs:
default: "true"
dir_names:
default: "false"
description: "Output unique changed directories instead of filenames. **NOTE:** This returns `.` for changed files located in the root of the project."
description: "Output unique changed directories instead of filenames. **NOTE:** This returns `.` for changed files located in the current working directory which defaults to `$GITHUB_WORKSPACE`."
required: false
dir_names_max_depth:
description: "Limit the directory output to a maximum depth e.g `test/test1/test2` with max depth of `2` returns `test/test1`."
required: false
dir_names_exclude_current_dir:
description: "Exclude the current directory represented by `.` from the output when `dir_names` is set to `true`."
required: false
default: "false"
dir_names_exclude_root:
description: "Exclude the root directory represented by `.` from the output when `dir_names`is set to `true`."
required: false
default: "false"
deprecationMessage: "This input is deprecated. Use `dir_names_exclude_current_dir` instead."
json:
description: "Output list of changed files in a JSON formatted string which can be used for matrix jobs."
required: false

BIN
dist/index.js generated vendored

Binary file not shown.

BIN
dist/index.js.map generated vendored

Binary file not shown.

View file

@ -130,7 +130,8 @@ export const getDiffFiles = async ({
getDirnameMaxDepth({
pathStr: file,
dirNamesMaxDepth: inputs.dirNamesMaxDepth,
excludeRoot: inputs.dirNamesExcludeRoot
excludeCurrentDir:
inputs.dirNamesExcludeRoot || inputs.dirNamesExcludeCurrentDir
})
)
files = [...new Set(files)]

View file

@ -15,9 +15,11 @@ import {
} from './utils'
const getCurrentSHA = async ({
env,
inputs,
workingDirectory
}: {
env: Env
inputs: Inputs
workingDirectory: string
}): Promise<string> => {
@ -47,7 +49,18 @@ const getCurrentSHA = async ({
}
} else {
if (!currentSha) {
currentSha = await getHeadSha({cwd: workingDirectory})
if (
env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA &&
(await verifyCommitSha({
sha: env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA,
cwd: workingDirectory,
showAsErrorMessage: false
})) === 0
) {
currentSha = env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA
} else {
currentSha = await getHeadSha({cwd: workingDirectory})
}
}
}
@ -124,7 +137,7 @@ export const getSHAForPushEvent = async (
}
}
const currentSha = await getCurrentSHA({inputs, workingDirectory})
const currentSha = await getCurrentSHA({env, inputs, workingDirectory})
let previousSha = inputs.baseSha
const diff = '..'
@ -321,7 +334,7 @@ export const getSHAForPullRequestEvent = async (
core.info('Completed fetching more history.')
}
let currentSha = await getCurrentSHA({inputs, workingDirectory})
const currentSha = await getCurrentSHA({env, inputs, workingDirectory})
let previousSha = inputs.baseSha
let diff = '...'
@ -336,7 +349,7 @@ export const getSHAForPullRequestEvent = async (
throw new Error('Similar commit hashes detected.')
}
await verifyCommitSha({sha: currentSha, cwd: workingDirectory})
await verifyCommitSha({sha: previousSha, cwd: workingDirectory})
core.debug(`Previous SHA: ${previousSha}`)
return {
@ -425,10 +438,6 @@ export const getSHAForPullRequestEvent = async (
}
}
if (previousSha === currentSha && env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA) {
currentSha = env.GITHUB_EVENT_PULL_REQUEST_HEAD_SHA
}
if (
!(await canDiffCommits({
cwd: workingDirectory,

View file

@ -23,6 +23,7 @@ export type Inputs = {
dirNames: boolean
dirNamesMaxDepth?: number
dirNamesExcludeRoot: boolean
dirNamesExcludeCurrentDir: boolean
json: boolean
escapeJson: boolean
fetchDepth?: number
@ -93,6 +94,12 @@ export const getInputs = (): Inputs => {
const dirNamesExcludeRoot = core.getBooleanInput('dir_names_exclude_root', {
required: false
})
const dirNamesExcludeCurrentDir = core.getBooleanInput(
'dir_names_exclude_current_dir',
{
required: false
}
)
const json = core.getBooleanInput('json', {required: false})
const escapeJson = core.getBooleanInput('escape_json', {required: false})
const fetchDepth = core.getInput('fetch_depth', {required: false})
@ -127,6 +134,7 @@ export const getInputs = (): Inputs => {
diffRelative,
dirNames,
dirNamesExcludeRoot,
dirNamesExcludeCurrentDir,
json,
escapeJson,
sinceLastRemoteCommit,

View file

@ -642,11 +642,11 @@ export const canDiffCommits = async ({
export const getDirnameMaxDepth = ({
pathStr,
dirNamesMaxDepth,
excludeRoot
excludeCurrentDir
}: {
pathStr: string
dirNamesMaxDepth?: number
excludeRoot?: boolean
excludeCurrentDir?: boolean
}): string => {
const pathArr = dirname(pathStr).split(path.sep)
const maxDepth = Math.min(dirNamesMaxDepth || pathArr.length, pathArr.length)
@ -656,7 +656,7 @@ export const getDirnameMaxDepth = ({
output = path.join(output, pathArr[i])
}
if (excludeRoot && output === '.') {
if (excludeCurrentDir && output === '.') {
return ''
}