|
|
|
@ -4838,7 +4838,7 @@ class GitCommandManager {
|
|
|
|
|
}
|
|
|
|
|
config(configKey, configValue) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
yield this.execGit(['config', configKey, configValue]);
|
|
|
|
|
yield this.execGit(['config', '--local', configKey, configValue]);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
configExists(configKey) {
|
|
|
|
@ -4846,7 +4846,7 @@ class GitCommandManager {
|
|
|
|
|
const pattern = configKey.replace(/[^a-zA-Z0-9_]/g, x => {
|
|
|
|
|
return `\\${x}`;
|
|
|
|
|
});
|
|
|
|
|
const output = yield this.execGit(['config', '--name-only', '--get-regexp', pattern], true);
|
|
|
|
|
const output = yield this.execGit(['config', '--local', '--name-only', '--get-regexp', pattern], true);
|
|
|
|
|
return output.exitCode === 0;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -4932,19 +4932,19 @@ class GitCommandManager {
|
|
|
|
|
}
|
|
|
|
|
tryConfigUnset(configKey) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const output = yield this.execGit(['config', '--unset-all', configKey], true);
|
|
|
|
|
const output = yield this.execGit(['config', '--local', '--unset-all', configKey], true);
|
|
|
|
|
return output.exitCode === 0;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
tryDisableAutomaticGarbageCollection() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const output = yield this.execGit(['config', 'gc.auto', '0'], true);
|
|
|
|
|
const output = yield this.execGit(['config', '--local', 'gc.auto', '0'], true);
|
|
|
|
|
return output.exitCode === 0;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
tryGetFetchUrl() {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const output = yield this.execGit(['config', '--get', 'remote.origin.url'], true);
|
|
|
|
|
const output = yield this.execGit(['config', '--local', '--get', 'remote.origin.url'], true);
|
|
|
|
|
if (output.exitCode !== 0) {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
@ -5121,7 +5121,7 @@ function getSource(settings) {
|
|
|
|
|
// Downloading using REST API
|
|
|
|
|
core.info(`The repository will be downloaded using the GitHub REST API`);
|
|
|
|
|
core.info(`To create a local Git repository instead, add Git ${gitCommandManager.MinimumGitVersion} or higher to the PATH`);
|
|
|
|
|
yield githubApiHelper.downloadRepository(settings.accessToken, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.commit, settings.repositoryPath);
|
|
|
|
|
yield githubApiHelper.downloadRepository(settings.authToken, settings.repositoryOwner, settings.repositoryName, settings.ref, settings.commit, settings.repositoryPath);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
// Save state for POST action
|
|
|
|
@ -5137,30 +5137,34 @@ function getSource(settings) {
|
|
|
|
|
}
|
|
|
|
|
// Remove possible previous extraheader
|
|
|
|
|
yield removeGitConfig(git, authConfigKey);
|
|
|
|
|
// Add extraheader (auth)
|
|
|
|
|
const base64Credentials = Buffer.from(`x-access-token:${settings.accessToken}`, 'utf8').toString('base64');
|
|
|
|
|
core.setSecret(base64Credentials);
|
|
|
|
|
const authConfigValue = `AUTHORIZATION: basic ${base64Credentials}`;
|
|
|
|
|
yield git.config(authConfigKey, authConfigValue);
|
|
|
|
|
// LFS install
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
yield git.lfsInstall();
|
|
|
|
|
}
|
|
|
|
|
// Fetch
|
|
|
|
|
const refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(settings.fetchDepth, refSpec);
|
|
|
|
|
// Checkout info
|
|
|
|
|
const checkoutInfo = yield refHelper.getCheckoutInfo(git, settings.ref, settings.commit);
|
|
|
|
|
// LFS fetch
|
|
|
|
|
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).
|
|
|
|
|
// Explicit lfs fetch will fetch lfs objects in parallel.
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
yield git.lfsFetch(checkoutInfo.startPoint || checkoutInfo.ref);
|
|
|
|
|
try {
|
|
|
|
|
// Config auth token
|
|
|
|
|
yield configureAuthToken(git, settings.authToken);
|
|
|
|
|
// LFS install
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
yield git.lfsInstall();
|
|
|
|
|
}
|
|
|
|
|
// Fetch
|
|
|
|
|
const refSpec = refHelper.getRefSpec(settings.ref, settings.commit);
|
|
|
|
|
yield git.fetch(settings.fetchDepth, refSpec);
|
|
|
|
|
// Checkout info
|
|
|
|
|
const checkoutInfo = yield refHelper.getCheckoutInfo(git, settings.ref, settings.commit);
|
|
|
|
|
// LFS fetch
|
|
|
|
|
// Explicit lfs-fetch to avoid slow checkout (fetches one lfs object at a time).
|
|
|
|
|
// Explicit lfs fetch will fetch lfs objects in parallel.
|
|
|
|
|
if (settings.lfs) {
|
|
|
|
|
yield git.lfsFetch(checkoutInfo.startPoint || checkoutInfo.ref);
|
|
|
|
|
}
|
|
|
|
|
// Checkout
|
|
|
|
|
yield git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
|
|
|
|
|
// Dump some info about the checked out commit
|
|
|
|
|
yield git.log1();
|
|
|
|
|
}
|
|
|
|
|
finally {
|
|
|
|
|
if (!settings.persistCredentials) {
|
|
|
|
|
yield removeGitConfig(git, authConfigKey);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Checkout
|
|
|
|
|
yield git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
|
|
|
|
|
// Dump some info about the checked out commit
|
|
|
|
|
yield git.log1();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -5265,23 +5269,21 @@ function prepareExistingDirectory(git, repositoryPath, repositoryUrl, clean) {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
function configureAuthToken(git, authToken) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Add extraheader (auth)
|
|
|
|
|
const base64Credentials = Buffer.from(`x-access-token:${authToken}`, 'utf8').toString('base64');
|
|
|
|
|
core.setSecret(base64Credentials);
|
|
|
|
|
const authConfigValue = `AUTHORIZATION: basic ${base64Credentials}`;
|
|
|
|
|
yield git.config(authConfigKey, authConfigValue);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
function removeGitConfig(git, configKey) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
if ((yield git.configExists(configKey)) &&
|
|
|
|
|
!(yield git.tryConfigUnset(configKey))) {
|
|
|
|
|
// Load the config contents
|
|
|
|
|
core.warning(`Failed to remove '${configKey}' from the git config. Attempting to remove the config value by editing the file directly.`);
|
|
|
|
|
const configPath = path.join(git.getWorkingDirectory(), '.git', 'config');
|
|
|
|
|
fsHelper.fileExistsSync(configPath);
|
|
|
|
|
let contents = fs.readFileSync(configPath).toString() || '';
|
|
|
|
|
// Filter - only includes lines that do not contain the config key
|
|
|
|
|
const upperConfigKey = configKey.toUpperCase();
|
|
|
|
|
const split = contents
|
|
|
|
|
.split('\n')
|
|
|
|
|
.filter(x => !x.toUpperCase().includes(upperConfigKey));
|
|
|
|
|
contents = split.join('\n');
|
|
|
|
|
// Rewrite the config file
|
|
|
|
|
fs.writeFileSync(configPath, contents);
|
|
|
|
|
core.warning(`Failed to remove '${configKey}' from the git config`);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
@ -8403,12 +8405,12 @@ const retryHelper = __importStar(__webpack_require__(587));
|
|
|
|
|
const toolCache = __importStar(__webpack_require__(533));
|
|
|
|
|
const v4_1 = __importDefault(__webpack_require__(826));
|
|
|
|
|
const IS_WINDOWS = process.platform === 'win32';
|
|
|
|
|
function downloadRepository(accessToken, owner, repo, ref, commit, repositoryPath) {
|
|
|
|
|
function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
// Download the archive
|
|
|
|
|
let archiveData = yield retryHelper.execute(() => __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
core.info('Downloading the archive');
|
|
|
|
|
return yield downloadArchive(accessToken, owner, repo, ref, commit);
|
|
|
|
|
return yield downloadArchive(authToken, owner, repo, ref, commit);
|
|
|
|
|
}));
|
|
|
|
|
// Write archive to disk
|
|
|
|
|
core.info('Writing archive to disk');
|
|
|
|
@ -8449,9 +8451,9 @@ function downloadRepository(accessToken, owner, repo, ref, commit, repositoryPat
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
exports.downloadRepository = downloadRepository;
|
|
|
|
|
function downloadArchive(accessToken, owner, repo, ref, commit) {
|
|
|
|
|
function downloadArchive(authToken, owner, repo, ref, commit) {
|
|
|
|
|
return __awaiter(this, void 0, void 0, function* () {
|
|
|
|
|
const octokit = new github.GitHub(accessToken);
|
|
|
|
|
const octokit = new github.GitHub(authToken);
|
|
|
|
|
const params = {
|
|
|
|
|
owner: owner,
|
|
|
|
|
repo: repo,
|
|
|
|
@ -12764,8 +12766,11 @@ function getInputs() {
|
|
|
|
|
// LFS
|
|
|
|
|
result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE';
|
|
|
|
|
core.debug(`lfs = ${result.lfs}`);
|
|
|
|
|
// Access token
|
|
|
|
|
result.accessToken = core.getInput('token');
|
|
|
|
|
// Auth token
|
|
|
|
|
result.authToken = core.getInput('token');
|
|
|
|
|
// Persist credentials
|
|
|
|
|
result.persistCredentials =
|
|
|
|
|
(core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE';
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
exports.getInputs = getInputs;
|
|
|
|
|