resiliency to existing git folder before clone - readded

pull/524/head
Frostebite 2023-03-25 17:44:58 +00:00
parent 2c16c613b7
commit fcc14a7550
4 changed files with 95 additions and 75 deletions

66
dist/index.js vendored
View File

@ -3683,28 +3683,35 @@ class KubernetesTaskRunner {
let lastMessageSeenIncludedInChunk = false; let lastMessageSeenIncludedInChunk = false;
let lastMessageSeen = false; let lastMessageSeen = false;
// using this instead of Kube // using this instead of Kube
const logs = await cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl logs ${podName} -f -c ${containerName} --timestamps${sinceTime}`, false, true); try {
const splitLogs = logs.split(`\n`); const logs = await cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl logs ${podName} -f -c ${containerName} --timestamps${sinceTime}`, false, true);
for (const chunk of splitLogs) { const splitLogs = logs.split(`\n`);
if (chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) && for (const chunk of splitLogs) {
KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) !== ``) { if (chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) &&
cloud_runner_logger_1.default.log(`Previous log message found ${chunk}`); KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) !== ``) {
lastMessageSeenIncludedInChunk = true; cloud_runner_logger_1.default.log(`Previous log message found ${chunk}`);
lastMessageSeenIncludedInChunk = true;
}
}
for (const chunk of splitLogs) {
const newDate = Date.parse(`${chunk.toString().split(`Z `)[0]}Z`);
if (chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``)) {
lastMessageSeen = true;
}
if (lastMessageSeenIncludedInChunk && !lastMessageSeen) {
continue;
}
didStreamAnyLogs = true;
const message = cloud_runner_1.default.buildParameters.cloudRunnerDebug ? chunk : chunk.split(`Z `)[1];
KubernetesTaskRunner.lastReceivedMessage = chunk;
KubernetesTaskRunner.lastReceivedTimestamp = newDate;
({ shouldReadLogs, shouldCleanup, output } = follow_log_stream_service_1.FollowLogStreamService.handleIteration(message, shouldReadLogs, shouldCleanup, output));
} }
} }
for (const chunk of splitLogs) { catch (error) {
const newDate = Date.parse(`${chunk.toString().split(`Z `)[0]}Z`); if (error.includes(`s`)) {
if (chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``)) { break;
lastMessageSeen = true;
} }
if (lastMessageSeenIncludedInChunk && !lastMessageSeen) {
continue;
}
didStreamAnyLogs = true;
const message = cloud_runner_1.default.buildParameters.cloudRunnerDebug ? chunk : chunk.split(`Z `)[1];
KubernetesTaskRunner.lastReceivedMessage = chunk;
KubernetesTaskRunner.lastReceivedTimestamp = newDate;
({ shouldReadLogs, shouldCleanup, output } = follow_log_stream_service_1.FollowLogStreamService.handleIteration(message, shouldReadLogs, shouldCleanup, output));
} }
if (!didStreamAnyLogs) { if (!didStreamAnyLogs) {
core.error('Failed to stream any logs, listing namespace events, check for an error with the container'); core.error('Failed to stream any logs, listing namespace events, check for an error with the container');
@ -4160,16 +4167,17 @@ class RemoteClient {
} }
static async cloneRepoWithoutLFSFiles() { static async cloneRepoWithoutLFSFiles() {
process.chdir(`${cloud_runner_folders_1.CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute}`); process.chdir(`${cloud_runner_folders_1.CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute}`);
if (build_parameters_1.default.shouldUseRetainedWorkspaceMode(cloud_runner_1.default.buildParameters)) { if (node_fs_1.default.existsSync(cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute) &&
if (node_fs_1.default.existsSync(node_path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute, `.git`))) { !node_fs_1.default.existsSync(node_path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute, `.git`))) {
process.chdir(cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute); await cloud_runner_system_1.CloudRunnerSystem.Run(`rm -r ${cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute}`);
remote_client_logger_1.RemoteClientLogger.log(`${cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute} repo exists - skipping clone - retained workspace mode ${build_parameters_1.default.shouldUseRetainedWorkspaceMode(cloud_runner_1.default.buildParameters)}`); cloud_runner_logger_1.default.log(`${cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute} repo exists, but no git folder, cleaning up`);
await cloud_runner_system_1.CloudRunnerSystem.Run(`git fetch && git reset --hard ${cloud_runner_1.default.buildParameters.gitSha}`); }
return; if (build_parameters_1.default.shouldUseRetainedWorkspaceMode(cloud_runner_1.default.buildParameters) &&
} node_fs_1.default.existsSync(node_path_1.default.join(cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute, `.git`))) {
else { process.chdir(cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute);
cloud_runner_logger_1.default.log(`${cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute} repo exists, but no git folder, cleaning up`); remote_client_logger_1.RemoteClientLogger.log(`${cloud_runner_folders_1.CloudRunnerFolders.repoPathAbsolute} repo exists - skipping clone - retained workspace mode ${build_parameters_1.default.shouldUseRetainedWorkspaceMode(cloud_runner_1.default.buildParameters)}`);
} await cloud_runner_system_1.CloudRunnerSystem.Run(`git fetch && git reset --hard ${cloud_runner_1.default.buildParameters.gitSha}`);
return;
} }
remote_client_logger_1.RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`); remote_client_logger_1.RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);
await cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global advice.detachedHead false`); await cloud_runner_system_1.CloudRunnerSystem.Run(`git config --global advice.detachedHead false`);

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

View File

@ -41,39 +41,45 @@ class KubernetesTaskRunner {
let lastMessageSeen = false; let lastMessageSeen = false;
// using this instead of Kube // using this instead of Kube
const logs = await CloudRunnerSystem.Run( try {
`kubectl logs ${podName} -f -c ${containerName} --timestamps${sinceTime}`, const logs = await CloudRunnerSystem.Run(
false, `kubectl logs ${podName} -f -c ${containerName} --timestamps${sinceTime}`,
true, false,
); true,
const splitLogs = logs.split(`\n`); );
for (const chunk of splitLogs) { const splitLogs = logs.split(`\n`);
if ( for (const chunk of splitLogs) {
chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) && if (
KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) !== `` chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) &&
) { KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``) !== ``
CloudRunnerLogger.log(`Previous log message found ${chunk}`); ) {
lastMessageSeenIncludedInChunk = true; CloudRunnerLogger.log(`Previous log message found ${chunk}`);
lastMessageSeenIncludedInChunk = true;
}
} }
} for (const chunk of splitLogs) {
for (const chunk of splitLogs) { const newDate = Date.parse(`${chunk.toString().split(`Z `)[0]}Z`);
const newDate = Date.parse(`${chunk.toString().split(`Z `)[0]}Z`); if (chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``)) {
if (chunk.replace(/\s/g, ``) === KubernetesTaskRunner.lastReceivedMessage.replace(/\s/g, ``)) { lastMessageSeen = true;
lastMessageSeen = true; }
if (lastMessageSeenIncludedInChunk && !lastMessageSeen) {
continue;
}
didStreamAnyLogs = true;
const message = CloudRunner.buildParameters.cloudRunnerDebug ? chunk : chunk.split(`Z `)[1];
KubernetesTaskRunner.lastReceivedMessage = chunk;
KubernetesTaskRunner.lastReceivedTimestamp = newDate;
({ shouldReadLogs, shouldCleanup, output } = FollowLogStreamService.handleIteration(
message,
shouldReadLogs,
shouldCleanup,
output,
));
} }
if (lastMessageSeenIncludedInChunk && !lastMessageSeen) { } catch (error: any) {
continue; if (error.includes(`s`)) {
break;
} }
didStreamAnyLogs = true;
const message = CloudRunner.buildParameters.cloudRunnerDebug ? chunk : chunk.split(`Z `)[1];
KubernetesTaskRunner.lastReceivedMessage = chunk;
KubernetesTaskRunner.lastReceivedTimestamp = newDate;
({ shouldReadLogs, shouldCleanup, output } = FollowLogStreamService.handleIteration(
message,
shouldReadLogs,
shouldCleanup,
output,
));
} }
if (!didStreamAnyLogs) { if (!didStreamAnyLogs) {

View File

@ -86,23 +86,29 @@ export class RemoteClient {
private static async cloneRepoWithoutLFSFiles() { private static async cloneRepoWithoutLFSFiles() {
process.chdir(`${CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute}`); process.chdir(`${CloudRunnerFolders.uniqueCloudRunnerJobFolderAbsolute}`);
if (
fs.existsSync(CloudRunnerFolders.repoPathAbsolute) &&
!fs.existsSync(path.join(CloudRunnerFolders.repoPathAbsolute, `.git`))
) {
await CloudRunnerSystem.Run(`rm -r ${CloudRunnerFolders.repoPathAbsolute}`);
CloudRunnerLogger.log(`${CloudRunnerFolders.repoPathAbsolute} repo exists, but no git folder, cleaning up`);
}
if (BuildParameters.shouldUseRetainedWorkspaceMode(CloudRunner.buildParameters)) { if (
if (fs.existsSync(path.join(CloudRunnerFolders.repoPathAbsolute, `.git`))) { BuildParameters.shouldUseRetainedWorkspaceMode(CloudRunner.buildParameters) &&
process.chdir(CloudRunnerFolders.repoPathAbsolute); fs.existsSync(path.join(CloudRunnerFolders.repoPathAbsolute, `.git`))
RemoteClientLogger.log( ) {
`${ process.chdir(CloudRunnerFolders.repoPathAbsolute);
CloudRunnerFolders.repoPathAbsolute RemoteClientLogger.log(
} repo exists - skipping clone - retained workspace mode ${BuildParameters.shouldUseRetainedWorkspaceMode( `${
CloudRunner.buildParameters, CloudRunnerFolders.repoPathAbsolute
)}`, } repo exists - skipping clone - retained workspace mode ${BuildParameters.shouldUseRetainedWorkspaceMode(
); CloudRunner.buildParameters,
await CloudRunnerSystem.Run(`git fetch && git reset --hard ${CloudRunner.buildParameters.gitSha}`); )}`,
);
await CloudRunnerSystem.Run(`git fetch && git reset --hard ${CloudRunner.buildParameters.gitSha}`);
return; return;
} else {
CloudRunnerLogger.log(`${CloudRunnerFolders.repoPathAbsolute} repo exists, but no git folder, cleaning up`);
}
} }
RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`); RemoteClientLogger.log(`Initializing source repository for cloning with caching of LFS files`);