3
0
Fork 0
mirror of https://github.com/actions/checkout.git synced 2024-11-23 03:39:30 +01:00

Add workingDirectory option

Let user override $GITHUB_WORKSPACE as default working directory

Defaults to undefined, the original behaviour is maintained
This commit is contained in:
Marco Accorinti 2023-09-17 20:45:12 +02:00
parent 8459bc0c7e
commit 0fd0fa4fd4
4 changed files with 27 additions and 21 deletions

View file

@ -824,7 +824,8 @@ async function setup(testName: string): Promise<void> {
sshUser: '', sshUser: '',
workflowOrganizationId: 123456, workflowOrganizationId: 123456,
setSafeDirectory: true, setSafeDirectory: true,
githubServerUrl: githubServerUrl githubServerUrl: githubServerUrl,
workingDirectory: undefined
} }
} }

20
dist/index.js vendored
View file

@ -1716,14 +1716,14 @@ const workflowContextHelper = __importStar(__nccwpck_require__(9568));
function getInputs() { function getInputs() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const result = {}; const result = {};
// GitHub workspace // Working directory
let githubWorkspacePath = process.env['GITHUB_WORKSPACE']; let workingDirectory = core.getInput('workingDirectory') || process.env['GITHUB_WORKSPACE'];
if (!githubWorkspacePath) { if (!workingDirectory) {
throw new Error('GITHUB_WORKSPACE not defined'); throw new Error('working dir not defined');
} }
githubWorkspacePath = path.resolve(githubWorkspacePath); workingDirectory = path.resolve(workingDirectory);
core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`); core.debug(`working directory = '${workingDirectory}'`);
fsHelper.directoryExistsSync(githubWorkspacePath, true); fsHelper.directoryExistsSync(workingDirectory, true);
// Qualified repository // Qualified repository
const qualifiedRepository = core.getInput('repository') || const qualifiedRepository = core.getInput('repository') ||
`${github.context.repo.owner}/${github.context.repo.repo}`; `${github.context.repo.owner}/${github.context.repo.repo}`;
@ -1738,9 +1738,9 @@ function getInputs() {
result.repositoryName = splitRepository[1]; result.repositoryName = splitRepository[1];
// Repository path // Repository path
result.repositoryPath = core.getInput('path') || '.'; result.repositoryPath = core.getInput('path') || '.';
result.repositoryPath = path.resolve(githubWorkspacePath, result.repositoryPath); result.repositoryPath = path.resolve(workingDirectory, result.repositoryPath);
if (!(result.repositoryPath + path.sep).startsWith(githubWorkspacePath + path.sep)) { if (!(result.repositoryPath + path.sep).startsWith(workingDirectory + path.sep)) {
throw new Error(`Repository path '${result.repositoryPath}' is not under '${githubWorkspacePath}'`); throw new Error(`Repository path '${result.repositoryPath}' is not under '${workingDirectory}'`);
} }
// Workflow repository? // Workflow repository?
const isWorkflowRepository = qualifiedRepository.toUpperCase() === const isWorkflowRepository = qualifiedRepository.toUpperCase() ===

View file

@ -118,4 +118,9 @@ export interface IGitSourceSettings {
* User override on the GitHub Server/Host URL that hosts the repository to be cloned * User override on the GitHub Server/Host URL that hosts the repository to be cloned
*/ */
githubServerUrl: string | undefined githubServerUrl: string | undefined
/**
* User override of the working directory (default is $GITHUB_WORKSPACE)
*/
workingDirectory: string | undefined
} }

View file

@ -8,14 +8,14 @@ import {IGitSourceSettings} from './git-source-settings'
export async function getInputs(): Promise<IGitSourceSettings> { export async function getInputs(): Promise<IGitSourceSettings> {
const result = {} as unknown as IGitSourceSettings const result = {} as unknown as IGitSourceSettings
// GitHub workspace // Working directory
let githubWorkspacePath = process.env['GITHUB_WORKSPACE'] let workingDirectory = core.getInput('workingDirectory') || process.env['GITHUB_WORKSPACE']
if (!githubWorkspacePath) { if (!workingDirectory) {
throw new Error('GITHUB_WORKSPACE not defined') throw new Error('working dir not defined')
} }
githubWorkspacePath = path.resolve(githubWorkspacePath) workingDirectory = path.resolve(workingDirectory)
core.debug(`GITHUB_WORKSPACE = '${githubWorkspacePath}'`) core.debug(`working directory = '${workingDirectory}'`)
fsHelper.directoryExistsSync(githubWorkspacePath, true) fsHelper.directoryExistsSync(workingDirectory, true)
// Qualified repository // Qualified repository
const qualifiedRepository = const qualifiedRepository =
@ -38,16 +38,16 @@ export async function getInputs(): Promise<IGitSourceSettings> {
// Repository path // Repository path
result.repositoryPath = core.getInput('path') || '.' result.repositoryPath = core.getInput('path') || '.'
result.repositoryPath = path.resolve( result.repositoryPath = path.resolve(
githubWorkspacePath, workingDirectory,
result.repositoryPath result.repositoryPath
) )
if ( if (
!(result.repositoryPath + path.sep).startsWith( !(result.repositoryPath + path.sep).startsWith(
githubWorkspacePath + path.sep workingDirectory + path.sep
) )
) { ) {
throw new Error( throw new Error(
`Repository path '${result.repositoryPath}' is not under '${githubWorkspacePath}'` `Repository path '${result.repositoryPath}' is not under '${workingDirectory}'`
) )
} }