mirror of
https://github.com/tj-actions/changed-files
synced 2024-12-17 03:47:20 +00:00
feat: add support for skipping initial fetch (#1353)
Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
parent
00b3d3d9e7
commit
2f49eb9ee1
6 changed files with 53 additions and 31 deletions
|
@ -124,6 +124,10 @@ inputs:
|
||||||
description: "Depth of additional branch history fetched. **NOTE**: This can be adjusted to resolve errors with insufficient history."
|
description: "Depth of additional branch history fetched. **NOTE**: This can be adjusted to resolve errors with insufficient history."
|
||||||
required: false
|
required: false
|
||||||
default: "50"
|
default: "50"
|
||||||
|
skip_initial_fetch:
|
||||||
|
description: "Skip the initial fetch to improve performance."
|
||||||
|
required: false
|
||||||
|
default: "false"
|
||||||
since_last_remote_commit:
|
since_last_remote_commit:
|
||||||
description: "Use the last commit on the remote branch as the `base_sha`. Defaults to the last non-merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events."
|
description: "Use the last commit on the remote branch as the `base_sha`. Defaults to the last non-merge commit on the target branch for pull request events and the previous remote commit of the current branch for push events."
|
||||||
required: false
|
required: false
|
||||||
|
|
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.
|
@ -92,7 +92,7 @@ export const getSHAForPushEvent = async (
|
||||||
const currentBranch = targetBranch
|
const currentBranch = targetBranch
|
||||||
let initialCommit = false
|
let initialCommit = false
|
||||||
|
|
||||||
if (isShallow) {
|
if (isShallow && !inputs.skipInitialFetch) {
|
||||||
core.info('Repository is shallow, fetching more history...')
|
core.info('Repository is shallow, fetching more history...')
|
||||||
|
|
||||||
if (isTag) {
|
if (isTag) {
|
||||||
|
@ -271,7 +271,7 @@ export const getSHAForPullRequestEvent = async (
|
||||||
targetBranch = currentBranch
|
targetBranch = currentBranch
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isShallow) {
|
if (isShallow && !inputs.skipInitialFetch) {
|
||||||
core.info('Repository is shallow, fetching more history...')
|
core.info('Repository is shallow, fetching more history...')
|
||||||
|
|
||||||
let prFetchExitCode = await gitFetch({
|
let prFetchExitCode = await gitFetch({
|
||||||
|
|
|
@ -40,6 +40,7 @@ export type Inputs = {
|
||||||
recoverDeletedFilesToDestination: string
|
recoverDeletedFilesToDestination: string
|
||||||
token: string
|
token: string
|
||||||
apiUrl: string
|
apiUrl: string
|
||||||
|
skipInitialFetch: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getInputs = (): Inputs => {
|
export const getInputs = (): Inputs => {
|
||||||
|
@ -154,6 +155,9 @@ export const getInputs = (): Inputs => {
|
||||||
)
|
)
|
||||||
const token = core.getInput('token', {required: false})
|
const token = core.getInput('token', {required: false})
|
||||||
const apiUrl = core.getInput('api_url', {required: false})
|
const apiUrl = core.getInput('api_url', {required: false})
|
||||||
|
const skipInitialFetch = core.getBooleanInput('skip_initial_fetch', {
|
||||||
|
required: false
|
||||||
|
})
|
||||||
|
|
||||||
const inputs: Inputs = {
|
const inputs: Inputs = {
|
||||||
files,
|
files,
|
||||||
|
@ -194,7 +198,8 @@ export const getInputs = (): Inputs => {
|
||||||
outputDir,
|
outputDir,
|
||||||
outputRenamedFilesAsDeletedAndAdded,
|
outputRenamedFilesAsDeletedAndAdded,
|
||||||
token,
|
token,
|
||||||
apiUrl
|
apiUrl,
|
||||||
|
skipInitialFetch
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fetchDepth) {
|
if (fetchDepth) {
|
||||||
|
|
69
src/main.ts
69
src/main.ts
|
@ -28,11 +28,15 @@ import {
|
||||||
const getChangedFilesFromLocalGit = async ({
|
const getChangedFilesFromLocalGit = async ({
|
||||||
inputs,
|
inputs,
|
||||||
env,
|
env,
|
||||||
workingDirectory
|
workingDirectory,
|
||||||
|
filePatterns,
|
||||||
|
yamlFilePatterns
|
||||||
}: {
|
}: {
|
||||||
inputs: Inputs
|
inputs: Inputs
|
||||||
env: Env
|
env: Env
|
||||||
workingDirectory: string
|
workingDirectory: string
|
||||||
|
filePatterns: string[]
|
||||||
|
yamlFilePatterns: Record<string, string[]>
|
||||||
}): Promise<void> => {
|
}): Promise<void> => {
|
||||||
await verifyMinimumGitVersion()
|
await verifyMinimumGitVersion()
|
||||||
|
|
||||||
|
@ -120,12 +124,6 @@ const getChangedFilesFromLocalGit = async ({
|
||||||
core.info('All Done!')
|
core.info('All Done!')
|
||||||
core.endGroup()
|
core.endGroup()
|
||||||
|
|
||||||
const filePatterns = await getFilePatterns({
|
|
||||||
inputs,
|
|
||||||
workingDirectory
|
|
||||||
})
|
|
||||||
core.debug(`File patterns: ${filePatterns}`)
|
|
||||||
|
|
||||||
if (filePatterns.length > 0) {
|
if (filePatterns.length > 0) {
|
||||||
core.startGroup('changed-files-patterns')
|
core.startGroup('changed-files-patterns')
|
||||||
await setChangedFilesOutput({
|
await setChangedFilesOutput({
|
||||||
|
@ -139,12 +137,6 @@ const getChangedFilesFromLocalGit = async ({
|
||||||
core.endGroup()
|
core.endGroup()
|
||||||
}
|
}
|
||||||
|
|
||||||
const yamlFilePatterns = await getYamlFilePatterns({
|
|
||||||
inputs,
|
|
||||||
workingDirectory
|
|
||||||
})
|
|
||||||
core.debug(`Yaml file patterns: ${JSON.stringify(yamlFilePatterns)}`)
|
|
||||||
|
|
||||||
if (Object.keys(yamlFilePatterns).length > 0) {
|
if (Object.keys(yamlFilePatterns).length > 0) {
|
||||||
for (const key of Object.keys(yamlFilePatterns)) {
|
for (const key of Object.keys(yamlFilePatterns)) {
|
||||||
core.startGroup(`changed-files-yaml-${key}`)
|
core.startGroup(`changed-files-yaml-${key}`)
|
||||||
|
@ -201,11 +193,15 @@ const getChangedFilesFromLocalGit = async ({
|
||||||
const getChangedFilesFromRESTAPI = async ({
|
const getChangedFilesFromRESTAPI = async ({
|
||||||
inputs,
|
inputs,
|
||||||
env,
|
env,
|
||||||
workingDirectory
|
workingDirectory,
|
||||||
|
filePatterns,
|
||||||
|
yamlFilePatterns
|
||||||
}: {
|
}: {
|
||||||
inputs: Inputs
|
inputs: Inputs
|
||||||
env: Env
|
env: Env
|
||||||
workingDirectory: string
|
workingDirectory: string
|
||||||
|
filePatterns: string[]
|
||||||
|
yamlFilePatterns: Record<string, string[]>
|
||||||
}): Promise<void> => {
|
}): Promise<void> => {
|
||||||
const allDiffFiles = await getChangedFilesFromGithubAPI({
|
const allDiffFiles = await getChangedFilesFromGithubAPI({
|
||||||
inputs,
|
inputs,
|
||||||
|
@ -214,12 +210,6 @@ const getChangedFilesFromRESTAPI = async ({
|
||||||
core.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`)
|
core.debug(`All diff files: ${JSON.stringify(allDiffFiles)}`)
|
||||||
core.info('All Done!')
|
core.info('All Done!')
|
||||||
|
|
||||||
const filePatterns = await getFilePatterns({
|
|
||||||
inputs,
|
|
||||||
workingDirectory
|
|
||||||
})
|
|
||||||
core.debug(`File patterns: ${filePatterns}`)
|
|
||||||
|
|
||||||
if (filePatterns.length > 0) {
|
if (filePatterns.length > 0) {
|
||||||
core.startGroup('changed-files-patterns')
|
core.startGroup('changed-files-patterns')
|
||||||
await setChangedFilesOutput({
|
await setChangedFilesOutput({
|
||||||
|
@ -232,12 +222,6 @@ const getChangedFilesFromRESTAPI = async ({
|
||||||
core.endGroup()
|
core.endGroup()
|
||||||
}
|
}
|
||||||
|
|
||||||
const yamlFilePatterns = await getYamlFilePatterns({
|
|
||||||
inputs,
|
|
||||||
workingDirectory
|
|
||||||
})
|
|
||||||
core.debug(`Yaml file patterns: ${JSON.stringify(yamlFilePatterns)}`)
|
|
||||||
|
|
||||||
if (Object.keys(yamlFilePatterns).length > 0) {
|
if (Object.keys(yamlFilePatterns).length > 0) {
|
||||||
for (const key of Object.keys(yamlFilePatterns)) {
|
for (const key of Object.keys(yamlFilePatterns)) {
|
||||||
core.startGroup(`changed-files-yaml-${key}`)
|
core.startGroup(`changed-files-yaml-${key}`)
|
||||||
|
@ -270,13 +254,30 @@ export async function run(): Promise<void> {
|
||||||
|
|
||||||
const env = await getEnv()
|
const env = await getEnv()
|
||||||
core.debug(`Env: ${JSON.stringify(env, null, 2)}`)
|
core.debug(`Env: ${JSON.stringify(env, null, 2)}`)
|
||||||
|
|
||||||
const inputs = getInputs()
|
const inputs = getInputs()
|
||||||
core.debug(`Inputs: ${JSON.stringify(inputs, null, 2)}`)
|
core.debug(`Inputs: ${JSON.stringify(inputs, null, 2)}`)
|
||||||
|
|
||||||
const workingDirectory = path.resolve(
|
const workingDirectory = path.resolve(
|
||||||
env.GITHUB_WORKSPACE || process.cwd(),
|
env.GITHUB_WORKSPACE || process.cwd(),
|
||||||
inputs.path
|
inputs.path
|
||||||
)
|
)
|
||||||
|
core.debug(`Working directory: ${workingDirectory}`)
|
||||||
|
|
||||||
const hasGitDirectory = await hasLocalGitDirectory({workingDirectory})
|
const hasGitDirectory = await hasLocalGitDirectory({workingDirectory})
|
||||||
|
core.debug(`Has git directory: ${hasGitDirectory}`)
|
||||||
|
|
||||||
|
const filePatterns = await getFilePatterns({
|
||||||
|
inputs,
|
||||||
|
workingDirectory
|
||||||
|
})
|
||||||
|
core.debug(`File patterns: ${filePatterns}`)
|
||||||
|
|
||||||
|
const yamlFilePatterns = await getYamlFilePatterns({
|
||||||
|
inputs,
|
||||||
|
workingDirectory
|
||||||
|
})
|
||||||
|
core.debug(`Yaml file patterns: ${JSON.stringify(yamlFilePatterns)}`)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
inputs.token &&
|
inputs.token &&
|
||||||
|
@ -302,7 +303,13 @@ export async function run(): Promise<void> {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
await getChangedFilesFromRESTAPI({inputs, env, workingDirectory})
|
await getChangedFilesFromRESTAPI({
|
||||||
|
inputs,
|
||||||
|
env,
|
||||||
|
workingDirectory,
|
||||||
|
filePatterns,
|
||||||
|
yamlFilePatterns
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
if (!hasGitDirectory) {
|
if (!hasGitDirectory) {
|
||||||
core.setFailed(
|
core.setFailed(
|
||||||
|
@ -312,7 +319,13 @@ export async function run(): Promise<void> {
|
||||||
}
|
}
|
||||||
|
|
||||||
core.info('Using local .git directory')
|
core.info('Using local .git directory')
|
||||||
await getChangedFilesFromLocalGit({inputs, env, workingDirectory})
|
await getChangedFilesFromLocalGit({
|
||||||
|
inputs,
|
||||||
|
env,
|
||||||
|
workingDirectory,
|
||||||
|
filePatterns,
|
||||||
|
yamlFilePatterns
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue