resiliency to existing git folder before clone - readded
parent
2c16c613b7
commit
fcc14a7550
|
|
@ -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`);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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`);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue