Compare commits

...

13 Commits

Author SHA1 Message Date
Marco Accorinti b5f8408483
Merge 8461fff5eb into 8459bc0c7e 2024-04-25 15:56:42 +00:00
Marco Accorinti 8461fff5eb change: remove path.sep, add unit tests, dist
Remove path.sep during comparison with repositoryPath
(did not take in account root folders)
Updated and added more unit tests
Updated dist/index.js
2024-04-25 17:56:17 +02:00
Marco Accorinti 21ffcee746 update: README.md with new options, descriptions 2024-04-25 17:55:21 +02:00
Marco Accorinti 178be7a9f3 remove(git-source-settings.ts): workingDirectory option
Not needed (working-directory option is used internally)
2024-04-25 17:55:21 +02:00
Marco Accorinti 5b1833c6cf fix(action.yml): path description
Add working-directory
2024-04-25 17:55:21 +02:00
Marco Accorinti b2811239ce fix input name (workingDirectory -> working-directory) 2024-04-25 17:55:21 +02:00
Marco Accorinti b0635286c5 update: action.yml
Add working-directory input parameter
2024-04-25 17:55:21 +02:00
Marco Accorinti 0fd0fa4fd4 Add workingDirectory option
Let user override $GITHUB_WORKSPACE as default working directory

Defaults to undefined, the original behaviour is maintained
2024-04-25 17:55:21 +02:00
dependabot[bot] 8459bc0c7e
Bump actions/upload-artifact from 2 to 4 (#1695)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 2 to 4.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v2...v4)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-24 12:39:59 -04:00
dependabot[bot] 3f603f6d5e
Bump actions/setup-node from 1 to 4 (#1696)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 1 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v1...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-24 12:34:46 -04:00
dependabot[bot] fd084cde18
Bump github/codeql-action from 2 to 3 (#1694)
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2 to 3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-24 12:33:41 -04:00
Cory Miller 9c1e94e0ad
Update NPM dependencies (#1703)
* Update dependencies manually
* Format files
* Update licenses
2024-04-24 12:04:10 -04:00
John Wesley Walker III 0ad4b8fada
Prep Release v4.1.4 (#1704)
* Update package.json and package-lock.json to reflect v4.1.4
* Update CHANGELOG
2024-04-24 15:29:05 +02:00
57 changed files with 33238 additions and 22094 deletions

View File

@ -25,7 +25,7 @@ jobs:
- uses: actions/checkout@v3
- name: Set Node.js 20.x
uses: actions/setup-node@v1
uses: actions/setup-node@v4
with:
node-version: 20.x
@ -44,7 +44,7 @@ jobs:
fi
# If dist/ was different than expected, upload the expected version as an artifact
- uses: actions/upload-artifact@v2
- uses: actions/upload-artifact@v4
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
with:
name: dist

View File

@ -42,7 +42,7 @@ jobs:
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@ -55,4 +55,4 @@ jobs:
- run: rm -rf dist # We want code scanning to analyze lib instead (individual .js files)
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3

View File

@ -16,7 +16,7 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v1
- uses: actions/setup-node@v4
with:
node-version: 20.x
- uses: actions/checkout@v3

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.licenses/npm/qs.dep.yml generated

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
.licenses/npm/uuid-9.0.1.dep.yml generated Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,16 @@
# Changelog
## v4.1.4
- Disable `extensions.worktreeConfig` when disabling `sparse-checkout` by @jww3 in https://github.com/actions/checkout/pull/1692
- Add dependabot config by @cory-miller in https://github.com/actions/checkout/pull/1688
- Bump the minor-actions-dependencies group with 2 updates by @dependabot in https://github.com/actions/checkout/pull/1693
- Bump word-wrap from 1.2.3 to 1.2.5 by @dependabot in https://github.com/actions/checkout/pull/1643
## v4.1.3
- Check git version before attempting to disable `sparse-checkout` by @jww3 in https://github.com/actions/checkout/pull/1656
- Add SSH user parameter by @cory-miller in https://github.com/actions/checkout/pull/1685
- Update `actions/checkout` version in `update-main-version.yml` by @jww3 in https://github.com/actions/checkout/pull/1650
## v4.1.2
- Fix: Disable sparse checkout whenever `sparse-checkout` option is not present @dscho in https://github.com/actions/checkout/pull/1598

View File

@ -71,7 +71,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# Default: true
persist-credentials: ''
# Relative path under $GITHUB_WORKSPACE to place the repository
# Relative path under $GITHUB_WORKSPACE/working-directory to place the repository
path: ''
# Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching
@ -126,6 +126,10 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# running from unless specified. Example URLs are https://github.com or
# https://my-ghes-server.example.com
github-server-url: ''
# Provide the working directory for the git commands to execute into, defaults to
# $GITHUB_WORKSPACE
working-directory: ''
```
<!-- end usage -->

View File

@ -169,8 +169,9 @@ describe('git-auth-helper tests', () => {
// Mock fs.promises.readFile
const realReadFile = fs.promises.readFile
jest.spyOn(fs.promises, 'readFile').mockImplementation(
async (file: any, options: any): Promise<Buffer> => {
jest
.spyOn(fs.promises, 'readFile')
.mockImplementation(async (file: any, options: any): Promise<Buffer> => {
const userKnownHostsPath = path.join(
os.homedir(),
'.ssh',
@ -181,8 +182,7 @@ describe('git-auth-helper tests', () => {
}
return await realReadFile(file, options)
}
)
})
// Act
const authHelper = gitAuthHelper.createAuthHelper(git, settings)
@ -824,7 +824,7 @@ async function setup(testName: string): Promise<void> {
sshUser: '',
workflowOrganizationId: 123456,
setSafeDirectory: true,
githubServerUrl: githubServerUrl
githubServerUrl: githubServerUrl,
}
}

View File

@ -144,4 +144,25 @@ describe('input-helper tests', () => {
const settings: IGitSourceSettings = await inputHelper.getInputs()
expect(settings.workflowOrganizationId).toBe(123456)
})
it('sets a different working directory', async() => {
inputs['working-directory'] = '/home/user/test'
inputs['path'] = 'path/to/repo'
const settings: IGitSourceSettings = await inputHelper.getInputs()
expect(settings.repositoryPath).toBe(path.resolve('/home/user/test/path/to/repo'))
})
it('sets a working directory on root', async() => {
inputs['working-directory'] = '/'
inputs['path'] = 'path/to/repo'
const settings: IGitSourceSettings = await inputHelper.getInputs()
expect(settings.repositoryPath).toBe(path.resolve('/path/to/repo'))
})
it('sets a working directory on root and repository path is set to empty', async() => {
inputs['working-directory'] = '/'
inputs['path'] = ''
const settings: IGitSourceSettings = await inputHelper.getInputs()
expect(settings.repositoryPath).toBe(path.resolve('/'))
})
})

View File

@ -7,11 +7,11 @@ let git: IGitCommandManager
describe('ref-helper tests', () => {
beforeEach(() => {
git = ({} as unknown) as IGitCommandManager
git = {} as unknown as IGitCommandManager
})
it('getCheckoutInfo requires git', async () => {
const git = (null as unknown) as IGitCommandManager
const git = null as unknown as IGitCommandManager
try {
await refHelper.getCheckoutInfo(git, 'refs/heads/my/branch', commit)
throw new Error('Should not reach here')

View File

@ -68,7 +68,7 @@ describe('retry-helper tests', () => {
it('all attempts fail succeeds', async () => {
let attempts = 0
let error: Error = (null as unknown) as Error
let error: Error = null as unknown as Error
try {
await retryHelper.execute(() => {
throw new Error(`some error ${++attempts}`)

View File

@ -53,7 +53,7 @@ inputs:
description: 'Whether to configure the token or SSH key with the local git config'
default: true
path:
description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
description: 'Relative path under $GITHUB_WORKSPACE/working-directory to place the repository'
clean:
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
default: true
@ -98,6 +98,9 @@ inputs:
github-server-url:
description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
required: false
working-directory:
description: Provide the working directory for the git commands to execute into, defaults to $GITHUB_WORKSPACE
required: false
runs:
using: node20
main: dist/index.js

39203
dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,6 @@
module.exports = {
clearMocks: true,
fakeTimers: {},
moduleFileExtensions: ['js', 'ts'],
testEnvironment: 'node',
testMatch: ['**/*.test.ts'],

15962
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "checkout",
"version": "4.1.3",
"version": "4.1.4",
"description": "checkout action",
"main": "lib/main.js",
"scripts": {
@ -28,28 +28,28 @@
},
"homepage": "https://github.com/actions/checkout#readme",
"dependencies": {
"@actions/core": "^1.10.0",
"@actions/exec": "^1.0.1",
"@actions/github": "^5.0.0",
"@actions/core": "^1.10.1",
"@actions/exec": "^1.1.1",
"@actions/github": "^6.0.0",
"@actions/io": "^1.1.3",
"@actions/tool-cache": "^1.1.2",
"uuid": "^3.3.3"
"@actions/tool-cache": "^2.0.1",
"uuid": "^9.0.1"
},
"devDependencies": {
"@types/jest": "^27.0.2",
"@types/node": "^20.5.3",
"@types/uuid": "^3.4.6",
"@typescript-eslint/eslint-plugin": "^5.45.0",
"@typescript-eslint/parser": "^5.45.0",
"@vercel/ncc": "^0.36.1",
"eslint": "^7.32.0",
"eslint-plugin-github": "^4.3.2",
"eslint-plugin-jest": "^25.7.0",
"jest": "^27.3.0",
"jest-circus": "^27.3.0",
"js-yaml": "^3.13.1",
"prettier": "^1.19.1",
"ts-jest": "^27.0.7",
"typescript": "^4.4.4"
"@types/jest": "^29.5.12",
"@types/node": "^20.12.7",
"@types/uuid": "^9.0.8",
"@typescript-eslint/eslint-plugin": "^7.7.1",
"@typescript-eslint/parser": "^7.7.1",
"@vercel/ncc": "^0.38.1",
"eslint": "^8.57.0",
"eslint-plugin-github": "^4.10.2",
"eslint-plugin-jest": "^28.2.0",
"jest": "^29.7.0",
"jest-circus": "^29.7.0",
"js-yaml": "^4.1.0",
"prettier": "^3.2.5",
"ts-jest": "^29.1.2",
"typescript": "^5.4.5"
}
}

View File

@ -18,8 +18,9 @@ export function directoryExistsSync(path: string, required?: boolean): boolean {
}
throw new Error(
`Encountered an error when checking whether path '${path}' exists: ${(error as any)
?.message ?? error}`
`Encountered an error when checking whether path '${path}' exists: ${
(error as any)?.message ?? error
}`
)
}
@ -45,8 +46,9 @@ export function existsSync(path: string): boolean {
}
throw new Error(
`Encountered an error when checking whether path '${path}' exists: ${(error as any)
?.message ?? error}`
`Encountered an error when checking whether path '${path}' exists: ${
(error as any)?.message ?? error
}`
)
}
@ -67,8 +69,9 @@ export function fileExistsSync(path: string): boolean {
}
throw new Error(
`Encountered an error when checking whether path '${path}' exists: ${(error as any)
?.message ?? error}`
`Encountered an error when checking whether path '${path}' exists: ${
(error as any)?.message ?? error
}`
)
}

View File

@ -8,7 +8,7 @@ import * as path from 'path'
import * as regexpHelper from './regexp-helper'
import * as stateHelper from './state-helper'
import * as urlHelper from './url-helper'
import {default as uuid} from 'uuid/v4'
import {v4 as uuid} from 'uuid'
import {IGitCommandManager} from './git-command-manager'
import {IGitSourceSettings} from './git-source-settings'
@ -49,7 +49,7 @@ class GitAuthHelper {
gitSourceSettings: IGitSourceSettings | undefined
) {
this.git = gitCommandManager
this.settings = gitSourceSettings || (({} as unknown) as IGitSourceSettings)
this.settings = gitSourceSettings || ({} as unknown as IGitSourceSettings)
// Token auth header
const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl)

View File

@ -6,7 +6,7 @@ import * as io from '@actions/io'
import * as path from 'path'
import * as retryHelper from './retry-helper'
import * as toolCache from '@actions/tool-cache'
import {default as uuid} from 'uuid/v4'
import {v4 as uuid} from 'uuid'
import {getServerApiUrl} from './url-helper'
const IS_WINDOWS = process.platform === 'win32'

View File

@ -6,16 +6,16 @@ import * as workflowContextHelper from './workflow-context-helper'
import {IGitSourceSettings} from './git-source-settings'
export async function getInputs(): Promise<IGitSourceSettings> {
const result = ({} as unknown) as IGitSourceSettings
const result = {} as unknown as IGitSourceSettings
// GitHub workspace
let githubWorkspacePath = process.env['GITHUB_WORKSPACE']
if (!githubWorkspacePath) {
throw new Error('GITHUB_WORKSPACE not defined')
// Working directory
let workingDirectory = core.getInput('working-directory') || process.env['GITHUB_WORKSPACE']
if (!workingDirectory) {
throw new Error('working dir not defined')
}
githubWorkspacePath = path.resolve(githubWorkspacePath)
core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`)
fsHelper.directoryExistsSync(githubWorkspacePath, true)
workingDirectory = path.resolve(workingDirectory)
core.debug(`working directory = '${workingDirectory}'`)
fsHelper.directoryExistsSync(workingDirectory, true)
// Qualified repository
const qualifiedRepository =
@ -38,16 +38,16 @@ export async function getInputs(): Promise<IGitSourceSettings> {
// Repository path
result.repositoryPath = core.getInput('path') || '.'
result.repositoryPath = path.resolve(
githubWorkspacePath,
workingDirectory,
result.repositoryPath
)
if (
!(result.repositoryPath + path.sep).startsWith(
githubWorkspacePath + path.sep
workingDirectory
)
) {
throw new Error(
`Repository path '${result.repositoryPath}' is not under '${githubWorkspacePath}'`
`Repository path '${result.repositoryPath + path.sep}' is not under '${workingDirectory}'`
)
}
@ -150,7 +150,8 @@ export async function getInputs(): Promise<IGitSourceSettings> {
(core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE'
// Workflow organization ID
result.workflowOrganizationId = await workflowContextHelper.getOrganizationId()
result.workflowOrganizationId =
await workflowContextHelper.getOrganizationId()
// Set safe.directory in git global config.
result.setSafeDirectory =

View File

@ -20,7 +20,7 @@ function updateUsage(
}
// Load the action.yml
const actionYaml = yaml.safeLoad(fs.readFileSync(actionYamlPath).toString())
const actionYaml = yaml.load(fs.readFileSync(actionYamlPath).toString())
// Load the README
const originalReadme = fs.readFileSync(readmePath).toString()

View File

@ -23,7 +23,7 @@ export async function getCheckoutInfo(
throw new Error('Args ref and commit cannot both be empty')
}
const result = ({} as unknown) as ICheckoutInfo
const result = {} as unknown as ICheckoutInfo
const upperRef = (ref || '').toUpperCase()
// SHA only

View File

@ -23,8 +23,9 @@ export async function getOrganizationId(): Promise<number | undefined> {
return id as number
} catch (err) {
core.debug(
`Unable to load organization ID from GITHUB_EVENT_PATH: ${(err as any)
.message || err}`
`Unable to load organization ID from GITHUB_EVENT_PATH: ${
(err as any).message || err
}`
)
}
}