mirror of
https://github.com/actions/checkout.git
synced 2025-09-10 11:39:58 +08:00
Compare commits
3 Commits
68a03db899
...
v4.2.2
Author | SHA1 | Date | |
---|---|---|---|
|
11bd71901b | ||
|
e3d2460bbb | ||
|
163217dfcd |
@@ -1,5 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## v4.2.2
|
||||
* `url-helper.ts` now leverages well-known environment variables by @jww3 in https://github.com/actions/checkout/pull/1941
|
||||
* Expand unit test coverage for `isGhes` by @jww3 in https://github.com/actions/checkout/pull/1946
|
||||
|
||||
## v4.2.1
|
||||
* Check out other refs/* by commit if provided, fall back to ref by @orhantoy in https://github.com/actions/checkout/pull/1924
|
||||
|
||||
|
14
README.md
14
README.md
@@ -126,11 +126,6 @@ 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: ''
|
||||
|
||||
# Use the given object format when creating local repository. Specifically, use
|
||||
# 'sha256' to checkout a SHA-256 repository.
|
||||
# Defualt: null
|
||||
object-format: ''
|
||||
```
|
||||
<!-- end usage -->
|
||||
|
||||
@@ -148,7 +143,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
||||
- [Checkout pull request HEAD commit instead of merge commit](#Checkout-pull-request-HEAD-commit-instead-of-merge-commit)
|
||||
- [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event)
|
||||
- [Push a commit using the built-in token](#Push-a-commit-using-the-built-in-token)
|
||||
- [Checkout SHA-256 repository](#checkout-sha-256-repository)
|
||||
|
||||
## Fetch only the root files
|
||||
|
||||
@@ -294,14 +288,6 @@ jobs:
|
||||
```
|
||||
*NOTE:* The user email is `{user.id}+{user.login}@users.noreply.github.com`. See users API: https://api.github.com/users/github-actions%5Bbot%5D
|
||||
|
||||
## Checkout SHA-256 repository
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
object-format: sha256
|
||||
```
|
||||
|
||||
# License
|
||||
|
||||
The scripts and documentation in this project are released under the [MIT License](LICENSE)
|
||||
|
@@ -824,8 +824,7 @@ async function setup(testName: string): Promise<void> {
|
||||
sshUser: '',
|
||||
workflowOrganizationId: 123456,
|
||||
setSafeDirectory: true,
|
||||
githubServerUrl: githubServerUrl,
|
||||
objectFormat: undefined
|
||||
githubServerUrl: githubServerUrl
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -375,31 +375,4 @@ describe('Test fetchDepth and fetchTags options', () => {
|
||||
expect.any(Object)
|
||||
)
|
||||
})
|
||||
|
||||
it('should call execGit wiwth the correct arguments when sha256 is used', async () => {
|
||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
||||
|
||||
const workingDirectory = 'test'
|
||||
const lfs = false
|
||||
const doSparseCheckout = false
|
||||
git = await commandManager.createCommandManager(
|
||||
workingDirectory,
|
||||
lfs,
|
||||
doSparseCheckout
|
||||
)
|
||||
|
||||
await git.init({objectFormat: 'sha256'})
|
||||
// await git.init({objectFormat: undefined})
|
||||
|
||||
expect(mockExec).toHaveBeenCalledWith(
|
||||
expect.any(String),
|
||||
[
|
||||
'init',
|
||||
'--object-format=sha256',
|
||||
'test'
|
||||
],
|
||||
expect.any(Object)
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
|
92
__test__/url-helper.test.ts
Normal file
92
__test__/url-helper.test.ts
Normal file
@@ -0,0 +1,92 @@
|
||||
import * as urlHelper from '../src/url-helper'
|
||||
|
||||
describe('getServerUrl tests', () => {
|
||||
it('basics', async () => {
|
||||
// Note that URL::toString will append a trailing / when passed just a domain name ...
|
||||
expect(urlHelper.getServerUrl().toString()).toBe('https://github.com/')
|
||||
expect(urlHelper.getServerUrl(' ').toString()).toBe('https://github.com/')
|
||||
expect(urlHelper.getServerUrl(' ').toString()).toBe('https://github.com/')
|
||||
expect(urlHelper.getServerUrl('http://contoso.com').toString()).toBe(
|
||||
'http://contoso.com/'
|
||||
)
|
||||
expect(urlHelper.getServerUrl('https://contoso.com').toString()).toBe(
|
||||
'https://contoso.com/'
|
||||
)
|
||||
expect(urlHelper.getServerUrl('https://contoso.com/').toString()).toBe(
|
||||
'https://contoso.com/'
|
||||
)
|
||||
|
||||
// ... but can't make that same assumption when passed an URL that includes some deeper path.
|
||||
expect(urlHelper.getServerUrl('https://contoso.com/a/b').toString()).toBe(
|
||||
'https://contoso.com/a/b'
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe('isGhes tests', () => {
|
||||
const pristineEnv = process.env
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetModules()
|
||||
process.env = {...pristineEnv}
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
process.env = pristineEnv
|
||||
})
|
||||
|
||||
it('basics', async () => {
|
||||
delete process.env['GITHUB_SERVER_URL']
|
||||
expect(urlHelper.isGhes()).toBeFalsy()
|
||||
expect(urlHelper.isGhes('https://github.com')).toBeFalsy()
|
||||
expect(urlHelper.isGhes('https://contoso.ghe.com')).toBeFalsy()
|
||||
expect(urlHelper.isGhes('https://test.github.localhost')).toBeFalsy()
|
||||
expect(urlHelper.isGhes('https://src.onpremise.fabrikam.com')).toBeTruthy()
|
||||
})
|
||||
|
||||
it('returns false when the GITHUB_SERVER_URL environment variable is not defined', async () => {
|
||||
delete process.env['GITHUB_SERVER_URL']
|
||||
expect(urlHelper.isGhes()).toBeFalsy()
|
||||
})
|
||||
|
||||
it('returns false when the GITHUB_SERVER_URL environment variable is set to github.com', async () => {
|
||||
process.env['GITHUB_SERVER_URL'] = 'https://github.com'
|
||||
expect(urlHelper.isGhes()).toBeFalsy()
|
||||
})
|
||||
|
||||
it('returns false when the GITHUB_SERVER_URL environment variable is set to a GitHub Enterprise Cloud-style URL', async () => {
|
||||
process.env['GITHUB_SERVER_URL'] = 'https://contoso.ghe.com'
|
||||
expect(urlHelper.isGhes()).toBeFalsy()
|
||||
})
|
||||
|
||||
it('returns false when the GITHUB_SERVER_URL environment variable has a .localhost suffix', async () => {
|
||||
process.env['GITHUB_SERVER_URL'] = 'https://mock-github.localhost'
|
||||
expect(urlHelper.isGhes()).toBeFalsy()
|
||||
})
|
||||
|
||||
it('returns true when the GITHUB_SERVER_URL environment variable is set to some other URL', async () => {
|
||||
process.env['GITHUB_SERVER_URL'] = 'https://src.onpremise.fabrikam.com'
|
||||
expect(urlHelper.isGhes()).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('getServerApiUrl tests', () => {
|
||||
it('basics', async () => {
|
||||
expect(urlHelper.getServerApiUrl()).toBe('https://api.github.com')
|
||||
expect(urlHelper.getServerApiUrl('https://github.com')).toBe(
|
||||
'https://api.github.com'
|
||||
)
|
||||
expect(urlHelper.getServerApiUrl('https://GitHub.com')).toBe(
|
||||
'https://api.github.com'
|
||||
)
|
||||
expect(urlHelper.getServerApiUrl('https://contoso.ghe.com')).toBe(
|
||||
'https://api.contoso.ghe.com'
|
||||
)
|
||||
expect(urlHelper.getServerApiUrl('https://fabrikam.GHE.COM')).toBe(
|
||||
'https://api.fabrikam.ghe.com'
|
||||
)
|
||||
expect(
|
||||
urlHelper.getServerApiUrl('https://src.onpremise.fabrikam.com')
|
||||
).toBe('https://src.onpremise.fabrikam.com/api/v3')
|
||||
})
|
||||
})
|
143
dist/index.js
vendored
143
dist/index.js
vendored
@@ -30,7 +30,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.fileExistsSync = exports.existsSync = exports.directoryExistsSync = void 0;
|
||||
exports.directoryExistsSync = directoryExistsSync;
|
||||
exports.existsSync = existsSync;
|
||||
exports.fileExistsSync = fileExistsSync;
|
||||
const fs = __importStar(__nccwpck_require__(7147));
|
||||
function directoryExistsSync(path, required) {
|
||||
var _a;
|
||||
@@ -58,7 +60,6 @@ function directoryExistsSync(path, required) {
|
||||
}
|
||||
throw new Error(`Directory '${path}' does not exist`);
|
||||
}
|
||||
exports.directoryExistsSync = directoryExistsSync;
|
||||
function existsSync(path) {
|
||||
var _a;
|
||||
if (!path) {
|
||||
@@ -75,7 +76,6 @@ function existsSync(path) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exports.existsSync = existsSync;
|
||||
function fileExistsSync(path) {
|
||||
var _a;
|
||||
if (!path) {
|
||||
@@ -96,7 +96,6 @@ function fileExistsSync(path) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
exports.fileExistsSync = fileExistsSync;
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -139,7 +138,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.createAuthHelper = void 0;
|
||||
exports.createAuthHelper = createAuthHelper;
|
||||
const assert = __importStar(__nccwpck_require__(9491));
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const exec = __importStar(__nccwpck_require__(1514));
|
||||
@@ -156,7 +155,6 @@ const SSH_COMMAND_KEY = 'core.sshCommand';
|
||||
function createAuthHelper(git, settings) {
|
||||
return new GitAuthHelper(git, settings);
|
||||
}
|
||||
exports.createAuthHelper = createAuthHelper;
|
||||
class GitAuthHelper {
|
||||
constructor(gitCommandManager, gitSourceSettings) {
|
||||
this.insteadOfValues = [];
|
||||
@@ -475,7 +473,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.createCommandManager = exports.MinimumGitSparseCheckoutVersion = exports.MinimumGitVersion = void 0;
|
||||
exports.MinimumGitSparseCheckoutVersion = exports.MinimumGitVersion = void 0;
|
||||
exports.createCommandManager = createCommandManager;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const exec = __importStar(__nccwpck_require__(1514));
|
||||
const fs = __importStar(__nccwpck_require__(7147));
|
||||
@@ -496,7 +495,6 @@ function createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
||||
return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout);
|
||||
});
|
||||
}
|
||||
exports.createCommandManager = createCommandManager;
|
||||
class GitCommandManager {
|
||||
// Private constructor; use createCommandManager()
|
||||
constructor() {
|
||||
@@ -711,13 +709,9 @@ class GitCommandManager {
|
||||
getWorkingDirectory() {
|
||||
return this.workingDirectory;
|
||||
}
|
||||
init(options) {
|
||||
init() {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield this.execGit([
|
||||
'init',
|
||||
...((options === null || options === void 0 ? void 0 : options.objectFormat) ? [`--object-format=${options.objectFormat}`] : []),
|
||||
this.workingDirectory
|
||||
]);
|
||||
yield this.execGit(['init', this.workingDirectory]);
|
||||
});
|
||||
}
|
||||
isDetached() {
|
||||
@@ -1024,7 +1018,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.prepareExistingDirectory = void 0;
|
||||
exports.prepareExistingDirectory = prepareExistingDirectory;
|
||||
const assert = __importStar(__nccwpck_require__(9491));
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const fs = __importStar(__nccwpck_require__(7147));
|
||||
@@ -1128,7 +1122,6 @@ function prepareExistingDirectory(git, repositoryPath, repositoryUrl, clean, ref
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.prepareExistingDirectory = prepareExistingDirectory;
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -1171,7 +1164,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.cleanup = exports.getSource = void 0;
|
||||
exports.getSource = getSource;
|
||||
exports.cleanup = cleanup;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const fsHelper = __importStar(__nccwpck_require__(7219));
|
||||
const gitAuthHelper = __importStar(__nccwpck_require__(2565));
|
||||
@@ -1242,7 +1236,7 @@ function getSource(settings) {
|
||||
// Initialize the repository
|
||||
if (!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))) {
|
||||
core.startGroup('Initializing the repository');
|
||||
yield git.init({ objectFormat: settings.objectFormat });
|
||||
yield git.init();
|
||||
yield git.remoteAdd('origin', repositoryUrl);
|
||||
core.endGroup();
|
||||
}
|
||||
@@ -1377,7 +1371,6 @@ function getSource(settings) {
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.getSource = getSource;
|
||||
function cleanup(repositoryPath) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// Repo exists?
|
||||
@@ -1413,7 +1406,6 @@ function cleanup(repositoryPath) {
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.cleanup = cleanup;
|
||||
function getGitCommandManager(settings) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
core.info(`Working directory is '${settings.repositoryPath}'`);
|
||||
@@ -1552,7 +1544,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.getDefaultBranch = exports.downloadRepository = void 0;
|
||||
exports.downloadRepository = downloadRepository;
|
||||
exports.getDefaultBranch = getDefaultBranch;
|
||||
const assert = __importStar(__nccwpck_require__(9491));
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const fs = __importStar(__nccwpck_require__(7147));
|
||||
@@ -1616,7 +1609,6 @@ function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath,
|
||||
yield io.rmRF(extractPath);
|
||||
});
|
||||
}
|
||||
exports.downloadRepository = downloadRepository;
|
||||
/**
|
||||
* Looks up the default branch name
|
||||
*/
|
||||
@@ -1655,7 +1647,6 @@ function getDefaultBranch(authToken, owner, repo, baseUrl) {
|
||||
}));
|
||||
});
|
||||
}
|
||||
exports.getDefaultBranch = getDefaultBranch;
|
||||
function downloadArchive(authToken, owner, repo, ref, commit, baseUrl) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
const octokit = github.getOctokit(authToken, {
|
||||
@@ -1714,7 +1705,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.getInputs = void 0;
|
||||
exports.getInputs = getInputs;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const fsHelper = __importStar(__nccwpck_require__(7219));
|
||||
const github = __importStar(__nccwpck_require__(5438));
|
||||
@@ -1840,18 +1831,9 @@ function getInputs() {
|
||||
// Determine the GitHub URL that the repository is being hosted from
|
||||
result.githubServerUrl = core.getInput('github-server-url');
|
||||
core.debug(`GitHub Host URL = ${result.githubServerUrl}`);
|
||||
// Object format
|
||||
const objectFormat = core.getInput('object-format');
|
||||
if (objectFormat) {
|
||||
if (objectFormat != 'sha1' && objectFormat != 'sha256') {
|
||||
throw Error(`Invalid object format '${objectFormat}'`);
|
||||
}
|
||||
result.objectFormat = objectFormat;
|
||||
}
|
||||
return result;
|
||||
});
|
||||
}
|
||||
exports.getInputs = getInputs;
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -1983,7 +1965,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.checkCommitInfo = exports.testRef = exports.getRefSpec = exports.getRefSpecForAllHistory = exports.getCheckoutInfo = exports.tagsRefSpec = void 0;
|
||||
exports.tagsRefSpec = void 0;
|
||||
exports.getCheckoutInfo = getCheckoutInfo;
|
||||
exports.getRefSpecForAllHistory = getRefSpecForAllHistory;
|
||||
exports.getRefSpec = getRefSpec;
|
||||
exports.testRef = testRef;
|
||||
exports.checkCommitInfo = checkCommitInfo;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const github = __importStar(__nccwpck_require__(5438));
|
||||
const url_helper_1 = __nccwpck_require__(9437);
|
||||
@@ -2037,7 +2024,6 @@ function getCheckoutInfo(git, ref, commit) {
|
||||
return result;
|
||||
});
|
||||
}
|
||||
exports.getCheckoutInfo = getCheckoutInfo;
|
||||
function getRefSpecForAllHistory(ref, commit) {
|
||||
const result = ['+refs/heads/*:refs/remotes/origin/*', exports.tagsRefSpec];
|
||||
if (ref && ref.toUpperCase().startsWith('REFS/PULL/')) {
|
||||
@@ -2046,7 +2032,6 @@ function getRefSpecForAllHistory(ref, commit) {
|
||||
}
|
||||
return result;
|
||||
}
|
||||
exports.getRefSpecForAllHistory = getRefSpecForAllHistory;
|
||||
function getRefSpec(ref, commit) {
|
||||
if (!ref && !commit) {
|
||||
throw new Error('Args ref and commit cannot both be empty');
|
||||
@@ -2095,7 +2080,6 @@ function getRefSpec(ref, commit) {
|
||||
return [`+${ref}:${ref}`];
|
||||
}
|
||||
}
|
||||
exports.getRefSpec = getRefSpec;
|
||||
/**
|
||||
* Tests whether the initial fetch created the ref at the expected commit
|
||||
*/
|
||||
@@ -2139,7 +2123,6 @@ function testRef(git, ref, commit) {
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.testRef = testRef;
|
||||
function checkCommitInfo(token, commitInfo, repositoryOwner, repositoryName, ref, commit, baseUrl) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
var _a;
|
||||
@@ -2205,7 +2188,6 @@ function checkCommitInfo(token, commitInfo, repositoryOwner, repositoryName, ref
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.checkCommitInfo = checkCommitInfo;
|
||||
function fromPayload(path) {
|
||||
return select(github.context.payload, path);
|
||||
}
|
||||
@@ -2230,13 +2212,12 @@ function select(obj, path) {
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.escape = void 0;
|
||||
exports.escape = escape;
|
||||
function escape(value) {
|
||||
return value.replace(/[^a-zA-Z0-9_]/g, x => {
|
||||
return `\\${x}`;
|
||||
});
|
||||
}
|
||||
exports.escape = escape;
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -2279,7 +2260,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.execute = exports.RetryHelper = void 0;
|
||||
exports.RetryHelper = void 0;
|
||||
exports.execute = execute;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const defaultMaxAttempts = 3;
|
||||
const defaultMinSeconds = 10;
|
||||
@@ -2331,7 +2313,6 @@ function execute(action) {
|
||||
return yield retryHelper.execute(action);
|
||||
});
|
||||
}
|
||||
exports.execute = execute;
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -2365,7 +2346,11 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.setSafeDirectory = exports.setSshKnownHostsPath = exports.setSshKeyPath = exports.setRepositoryPath = exports.SshKnownHostsPath = exports.SshKeyPath = exports.PostSetSafeDirectory = exports.RepositoryPath = exports.IsPost = void 0;
|
||||
exports.SshKnownHostsPath = exports.SshKeyPath = exports.PostSetSafeDirectory = exports.RepositoryPath = exports.IsPost = void 0;
|
||||
exports.setRepositoryPath = setRepositoryPath;
|
||||
exports.setSshKeyPath = setSshKeyPath;
|
||||
exports.setSshKnownHostsPath = setSshKnownHostsPath;
|
||||
exports.setSafeDirectory = setSafeDirectory;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
/**
|
||||
* Indicates whether the POST action is running
|
||||
@@ -2393,28 +2378,24 @@ exports.SshKnownHostsPath = core.getState('sshKnownHostsPath');
|
||||
function setRepositoryPath(repositoryPath) {
|
||||
core.saveState('repositoryPath', repositoryPath);
|
||||
}
|
||||
exports.setRepositoryPath = setRepositoryPath;
|
||||
/**
|
||||
* Save the SSH key path so the POST action can retrieve the value.
|
||||
*/
|
||||
function setSshKeyPath(sshKeyPath) {
|
||||
core.saveState('sshKeyPath', sshKeyPath);
|
||||
}
|
||||
exports.setSshKeyPath = setSshKeyPath;
|
||||
/**
|
||||
* Save the SSH known hosts path so the POST action can retrieve the value.
|
||||
*/
|
||||
function setSshKnownHostsPath(sshKnownHostsPath) {
|
||||
core.saveState('sshKnownHostsPath', sshKnownHostsPath);
|
||||
}
|
||||
exports.setSshKnownHostsPath = setSshKnownHostsPath;
|
||||
/**
|
||||
* Save the set-safe-directory input so the POST action can retrieve the value.
|
||||
*/
|
||||
function setSafeDirectory() {
|
||||
core.saveState('setSafeDirectory', 'true');
|
||||
}
|
||||
exports.setSafeDirectory = setSafeDirectory;
|
||||
// Publish a variable so that when the POST action runs, it can determine it should run the cleanup logic.
|
||||
// This is necessary since we don't have a separate entry point.
|
||||
if (!exports.IsPost) {
|
||||
@@ -2453,7 +2434,10 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.isGhes = exports.getServerApiUrl = exports.getServerUrl = exports.getFetchUrl = void 0;
|
||||
exports.getFetchUrl = getFetchUrl;
|
||||
exports.getServerUrl = getServerUrl;
|
||||
exports.getServerApiUrl = getServerApiUrl;
|
||||
exports.isGhes = isGhes;
|
||||
const assert = __importStar(__nccwpck_require__(9491));
|
||||
const url_1 = __nccwpck_require__(7310);
|
||||
function getFetchUrl(settings) {
|
||||
@@ -2469,28 +2453,52 @@ function getFetchUrl(settings) {
|
||||
// "origin" is SCHEME://HOSTNAME[:PORT]
|
||||
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
|
||||
}
|
||||
exports.getFetchUrl = getFetchUrl;
|
||||
function getServerUrl(url) {
|
||||
let urlValue = url && url.trim().length > 0
|
||||
? url
|
||||
: process.env['GITHUB_SERVER_URL'] || 'https://github.com';
|
||||
return new url_1.URL(urlValue);
|
||||
}
|
||||
exports.getServerUrl = getServerUrl;
|
||||
function getServerApiUrl(url) {
|
||||
let apiUrl = 'https://api.github.com';
|
||||
if (isGhes(url)) {
|
||||
const serverUrl = getServerUrl(url);
|
||||
apiUrl = new url_1.URL(`${serverUrl.origin}/api/v3`).toString();
|
||||
let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com';
|
||||
if (hasContent(url, WhitespaceMode.Trim)) {
|
||||
resolvedUrl = url;
|
||||
}
|
||||
return apiUrl;
|
||||
return new url_1.URL(resolvedUrl);
|
||||
}
|
||||
function getServerApiUrl(url) {
|
||||
if (hasContent(url, WhitespaceMode.Trim)) {
|
||||
let serverUrl = getServerUrl(url);
|
||||
if (isGhes(url)) {
|
||||
serverUrl.pathname = 'api/v3';
|
||||
}
|
||||
else {
|
||||
serverUrl.hostname = 'api.' + serverUrl.hostname;
|
||||
}
|
||||
return pruneSuffix(serverUrl.toString(), '/');
|
||||
}
|
||||
return process.env['GITHUB_API_URL'] || 'https://api.github.com';
|
||||
}
|
||||
exports.getServerApiUrl = getServerApiUrl;
|
||||
function isGhes(url) {
|
||||
const ghUrl = getServerUrl(url);
|
||||
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
|
||||
const ghUrl = new url_1.URL(url || process.env['GITHUB_SERVER_URL'] || 'https://github.com');
|
||||
const hostname = ghUrl.hostname.trimEnd().toUpperCase();
|
||||
const isGitHubHost = hostname === 'GITHUB.COM';
|
||||
const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM');
|
||||
const isLocalHost = hostname.endsWith('.LOCALHOST');
|
||||
return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost;
|
||||
}
|
||||
function pruneSuffix(text, suffix) {
|
||||
if (hasContent(suffix, WhitespaceMode.Preserve) && (text === null || text === void 0 ? void 0 : text.endsWith(suffix))) {
|
||||
return text.substring(0, text.length - suffix.length);
|
||||
}
|
||||
return text;
|
||||
}
|
||||
var WhitespaceMode;
|
||||
(function (WhitespaceMode) {
|
||||
WhitespaceMode[WhitespaceMode["Trim"] = 0] = "Trim";
|
||||
WhitespaceMode[WhitespaceMode["Preserve"] = 1] = "Preserve";
|
||||
})(WhitespaceMode || (WhitespaceMode = {}));
|
||||
function hasContent(text, whitespaceMode) {
|
||||
let refinedText = text !== null && text !== void 0 ? text : '';
|
||||
if (whitespaceMode == WhitespaceMode.Trim) {
|
||||
refinedText = refinedText.trim();
|
||||
}
|
||||
return refinedText.length > 0;
|
||||
}
|
||||
exports.isGhes = isGhes;
|
||||
|
||||
|
||||
/***/ }),
|
||||
@@ -2533,7 +2541,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
||||
});
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||
exports.getOrganizationId = void 0;
|
||||
exports.getOrganizationId = getOrganizationId;
|
||||
const core = __importStar(__nccwpck_require__(2186));
|
||||
const fs = __importStar(__nccwpck_require__(7147));
|
||||
/**
|
||||
@@ -2562,7 +2570,6 @@ function getOrganizationId() {
|
||||
}
|
||||
});
|
||||
}
|
||||
exports.getOrganizationId = getOrganizationId;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "checkout",
|
||||
"version": "4.2.1",
|
||||
"version": "4.2.2",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "checkout",
|
||||
"version": "4.2.1",
|
||||
"version": "4.2.2",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.1",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "checkout",
|
||||
"version": "4.2.1",
|
||||
"version": "4.2.2",
|
||||
"description": "checkout action",
|
||||
"main": "lib/main.js",
|
||||
"scripts": {
|
||||
|
@@ -42,7 +42,7 @@ export interface IGitCommandManager {
|
||||
): Promise<void>
|
||||
getDefaultBranch(repositoryUrl: string): Promise<string>
|
||||
getWorkingDirectory(): string
|
||||
init(options?: { objectFormat?: string }): Promise<void>
|
||||
init(): Promise<void>
|
||||
isDetached(): Promise<boolean>
|
||||
lfsFetch(ref: string): Promise<void>
|
||||
lfsInstall(): Promise<void>
|
||||
@@ -327,12 +327,8 @@ class GitCommandManager {
|
||||
return this.workingDirectory
|
||||
}
|
||||
|
||||
async init(options?: { objectFormat?: string }): Promise<void> {
|
||||
await this.execGit([
|
||||
'init',
|
||||
...(options?.objectFormat ? [`--object-format=${options.objectFormat}`] : []),
|
||||
this.workingDirectory
|
||||
])
|
||||
async init(): Promise<void> {
|
||||
await this.execGit(['init', this.workingDirectory])
|
||||
}
|
||||
|
||||
async isDetached(): Promise<boolean> {
|
||||
|
@@ -110,7 +110,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
||||
!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))
|
||||
) {
|
||||
core.startGroup('Initializing the repository')
|
||||
await git.init({ objectFormat: settings.objectFormat })
|
||||
await git.init()
|
||||
await git.remoteAdd('origin', repositoryUrl)
|
||||
core.endGroup()
|
||||
}
|
||||
|
@@ -118,9 +118,4 @@ export interface IGitSourceSettings {
|
||||
* User override on the GitHub Server/Host URL that hosts the repository to be cloned
|
||||
*/
|
||||
githubServerUrl: string | undefined
|
||||
|
||||
/**
|
||||
* Object format used for the repo, if it is not default
|
||||
*/
|
||||
objectFormat: 'sha1' | 'sha256' | undefined
|
||||
}
|
||||
|
@@ -161,14 +161,5 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
||||
result.githubServerUrl = core.getInput('github-server-url')
|
||||
core.debug(`GitHub Host URL = ${result.githubServerUrl}`)
|
||||
|
||||
// Object format
|
||||
const objectFormat = core.getInput('object-format')
|
||||
if (objectFormat) {
|
||||
if (objectFormat != 'sha1' && objectFormat != 'sha256') {
|
||||
throw Error(`Invalid object format '${objectFormat}'`)
|
||||
}
|
||||
result.objectFormat = objectFormat
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
@@ -21,26 +21,61 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
|
||||
}
|
||||
|
||||
export function getServerUrl(url?: string): URL {
|
||||
let urlValue =
|
||||
url && url.trim().length > 0
|
||||
? url
|
||||
: process.env['GITHUB_SERVER_URL'] || 'https://github.com'
|
||||
return new URL(urlValue)
|
||||
let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'
|
||||
if (hasContent(url, WhitespaceMode.Trim)) {
|
||||
resolvedUrl = url!
|
||||
}
|
||||
|
||||
return new URL(resolvedUrl)
|
||||
}
|
||||
|
||||
export function getServerApiUrl(url?: string): string {
|
||||
let apiUrl = 'https://api.github.com'
|
||||
if (hasContent(url, WhitespaceMode.Trim)) {
|
||||
let serverUrl = getServerUrl(url)
|
||||
if (isGhes(url)) {
|
||||
serverUrl.pathname = 'api/v3'
|
||||
} else {
|
||||
serverUrl.hostname = 'api.' + serverUrl.hostname
|
||||
}
|
||||
|
||||
if (isGhes(url)) {
|
||||
const serverUrl = getServerUrl(url)
|
||||
apiUrl = new URL(`${serverUrl.origin}/api/v3`).toString()
|
||||
return pruneSuffix(serverUrl.toString(), '/')
|
||||
}
|
||||
|
||||
return apiUrl
|
||||
return process.env['GITHUB_API_URL'] || 'https://api.github.com'
|
||||
}
|
||||
|
||||
export function isGhes(url?: string): boolean {
|
||||
const ghUrl = getServerUrl(url)
|
||||
const ghUrl = new URL(
|
||||
url || process.env['GITHUB_SERVER_URL'] || 'https://github.com'
|
||||
)
|
||||
|
||||
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'
|
||||
const hostname = ghUrl.hostname.trimEnd().toUpperCase()
|
||||
const isGitHubHost = hostname === 'GITHUB.COM'
|
||||
const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM')
|
||||
const isLocalHost = hostname.endsWith('.LOCALHOST')
|
||||
|
||||
return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost
|
||||
}
|
||||
|
||||
function pruneSuffix(text: string, suffix: string) {
|
||||
if (hasContent(suffix, WhitespaceMode.Preserve) && text?.endsWith(suffix)) {
|
||||
return text.substring(0, text.length - suffix.length)
|
||||
}
|
||||
return text
|
||||
}
|
||||
|
||||
enum WhitespaceMode {
|
||||
Trim,
|
||||
Preserve
|
||||
}
|
||||
|
||||
function hasContent(
|
||||
text: string | undefined,
|
||||
whitespaceMode: WhitespaceMode
|
||||
): boolean {
|
||||
let refinedText = text ?? ''
|
||||
if (whitespaceMode == WhitespaceMode.Trim) {
|
||||
refinedText = refinedText.trim()
|
||||
}
|
||||
return refinedText.length > 0
|
||||
}
|
||||
|
Reference in New Issue
Block a user