+
Skip to content

Remove images if 'no space left on device' #231

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Nov 28, 2022
8 changes: 4 additions & 4 deletions src/command/ExitAllJobs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@ import { inject, injectable } from 'inversify';
import type vscode from 'vscode';
import type { Command } from '.';
import Types from 'common/Types';
import CommittedImages from 'containerization/CommittedImages';
import Images from 'containerization/Images';
import EditorGateway from 'gateway/EditorGateway';
import JobProvider from 'job/JobProvider';
import ReporterGateway from 'gateway/ReporterGateway';
import { COMMITTED_IMAGE_NAMESPACE, JOB_TREE_VIEW_ID } from 'constant';

@injectable()
export default class ExitAllJobs implements Command {
@inject(CommittedImages)
committedImages!: CommittedImages;
@inject(Images)
images!: Images;

@inject(Types.IEditorGateway)
editorGateway!: EditorGateway;
Expand Down Expand Up @@ -47,7 +47,7 @@ export default class ExitAllJobs implements Command {
terminal.dispose();
});

this.committedImages.cleanUp(`${COMMITTED_IMAGE_NAMESPACE}/*`);
this.images.cleanUp(`${COMMITTED_IMAGE_NAMESPACE}/*`);
}
};
}
Expand Down
6 changes: 3 additions & 3 deletions src/command/SelectRepo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type vscode from 'vscode';
import type { Command } from '.';
import Types from 'common/Types';
import AllConfigFiles from 'config/AllConfigFiles';
import CommittedImages from 'containerization/CommittedImages';
import Images from 'containerization/Images';
import EditorGateway from 'gateway/EditorGateway';
import getRepoBasename from 'common/getRepoBasename';
import JobProvider from 'job/JobProvider';
Expand All @@ -19,8 +19,8 @@ export default class SelectRepo implements Command {
@inject(AllConfigFiles)
allConfigFiles!: AllConfigFiles;

@inject(CommittedImages)
committedImages!: CommittedImages;
@inject(Images)
images!: Images;

@inject(Types.IEditorGateway)
editorGateway!: EditorGateway;
Expand Down
4 changes: 2 additions & 2 deletions src/common/BaseIoc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import AllConfigFiles from 'config/AllConfigFiles';
import AllJobs from 'job/AllJobs';
import BuildAgentSettings from 'config/BuildAgentSettings';
import Children from 'job/Children';
import CommittedImages from 'containerization/CommittedImages';
import Images from 'containerization/Images';
import CommandFactory from 'job/ComandFactory';
import Config from 'config/Config';
import ConfigFile from 'config/ConfigFile';
Expand Down Expand Up @@ -70,7 +70,7 @@ export default class BaseIoc {
this.container.bind(BuildAgentSettings).toSelf();
this.container.bind(Children).toSelf();
this.container.bind(CommandFactory).toSelf();
this.container.bind(CommittedImages).toSelf();
this.container.bind(Images).toSelf();
this.container.bind(Config).toSelf();
this.container.bind(ConfigFile).toSelf();
this.container.bind(CreateConfigFile).toSelf();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import { inject, injectable } from 'inversify';
import ChildProcessGateway from 'gateway/ChildProcessGateway';
import Spawn from 'common/Spawn';
import Types from 'common/Types';
import { cleanUpCommittedImages } from 'script';
import { cleanUpImages } from 'script';

@injectable()
export default class CommittedImages {
export default class Images {
@inject(Types.IChildProcessGateway)
childProcessGateway!: ChildProcessGateway;

Expand All @@ -19,7 +19,7 @@ export default class CommittedImages {
'-c',
`lci_image_pattern=${imagePattern}
lci_image_to_exclude=${imageIdToExclude}
${cleanUpCommittedImages}`,
${cleanUpImages}`,
],
this.spawn.getOptions()
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import AppTestHarness from 'test-tool/helper/AppTestHarness';
import CommittedImages from 'containerization/CommittedImages';
import Images from 'containerization/Images';
import FakeChildProcessGateway from 'gateway/FakeChildProcessGateway';

let childProcessGateway: FakeChildProcessGateway;
let committedImages: CommittedImages;
let images: Images;
let testHarness: AppTestHarness;

describe('CommittedImages', () => {
describe('Images', () => {
beforeEach(() => {
testHarness = new AppTestHarness();
testHarness.init();
committedImages = testHarness.container.get(CommittedImages);
images = testHarness.container.get(Images);
childProcessGateway = testHarness.childProcessGateway;
});

test('no error', () => {
const spawnSpy = jest.fn();
childProcessGateway.cp.spawn = spawnSpy;

committedImages.cleanUp('local-ci-lint');
images.cleanUp('local-ci/lint');
expect(spawnSpy).toHaveBeenCalledTimes(1);
});
});
32 changes: 31 additions & 1 deletion src/job/JobListener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { inject, injectable } from 'inversify';
import type vscode from 'vscode';
import Types from 'common/Types';
import ChildProcessGateway from 'gateway/ChildProcessGateway';
import Images from 'containerization/Images';
import ConfigFile from 'config/ConfigFile';
import EditorGateway from 'gateway/EditorGateway';
import FsGateway from 'gateway/FsGateway';
Expand All @@ -11,14 +12,20 @@ import JobTreeItem from 'job/JobTreeItem';
import LogFile from 'log/LogFile';
import ParsedConfig from 'config/ParsedConfig';
import Spawn from 'common/Spawn';
import { SUPPRESS_JOB_COMPLETE_MESSAGE } from 'constant';
import {
COMMITTED_IMAGE_NAMESPACE,
SUPPRESS_JOB_COMPLETE_MESSAGE,
} from 'constant';
import { getPicardContainerFunction } from 'script';

@injectable()
export default class JobListener {
@inject(Types.IChildProcessGateway)
childProcessGateway!: ChildProcessGateway;

@inject(Images)
images!: Images;

@inject(ConfigFile)
configFile!: ConfigFile;

Expand Down Expand Up @@ -187,6 +194,29 @@ export default class JobListener {
});
}
});

if (output?.toLowerCase()?.includes('no space left on device')) {
this.images.cleanUp(`${COMMITTED_IMAGE_NAMESPACE}/*`);
this.images.cleanUp('circleci/*');
this.images.cleanUp('cimg/*');

const warningMessage = 'No space left on device';
const fixText = 'Fix by removing all stopped containers';
const clicked =
await this.editorGateway.editor.window.showWarningMessage(
warningMessage,
{ detail: 'Docker probably needs more space' },
fixText
);

if (clicked === fixText) {
this.childProcessGateway.cp.spawn(
'/bin/sh',
['-c', `docker container prune -f`],
this.spawn.getOptions()
);
}
}
});

return process;
Expand Down
8 changes: 4 additions & 4 deletions src/job/JobRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type vscode from 'vscode';
import { getBinaryPath } from '../../node/binary';
import areTerminalsClosed from 'terminal/areTerminalsClosed';
import BuildAgentSettings from 'config/BuildAgentSettings';
import CommittedImages from 'containerization/CommittedImages';
import Images from 'containerization/Images';
import ConfigFile from 'config/ConfigFile';
import EditorGateway from 'gateway/EditorGateway';
import FinalTerminal from 'terminal/FinalTerminal';
Expand Down Expand Up @@ -43,8 +43,8 @@ export default class JobRunner {
@inject(BuildAgentSettings)
buildAgentSettings!: BuildAgentSettings;

@inject(CommittedImages)
committedImages!: CommittedImages;
@inject(Images)
images!: Images;

@inject(ConfigFile)
configFile!: ConfigFile;
Expand Down Expand Up @@ -254,7 +254,7 @@ export default class JobRunner {
this.editorGateway.editor.window.onDidCloseTerminal(() => {
if (areTerminalsClosed(terminal, debuggingTerminal, finalTerminal)) {
listeningProcess.kill();
this.committedImages.cleanUp(committedImageRepo);
this.images.cleanUp(committedImageRepo);
}
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/license/LicensePresenter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default class LicensePresenter {

const shouldOfferInterview = isTrialExpired(
previewStartedTimeStamp,
trialLengthInMilliseconds + 5 * DAY_IN_MILLISECONDS
trialLengthInMilliseconds + 40 * DAY_IN_MILLISECONDS
);

if (isValid) {
Expand Down
3 changes: 1 addition & 2 deletions src/process/Persistence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,7 @@ export default class Persistence {
if (
typeof step !== 'string' &&
typeof step?.run !== 'string' &&
step?.run?.environment &&
step?.run?.environment['OUTPUT_PATH']
step?.run?.environment?.['OUTPUT_PATH']
) {
return step?.run?.environment['OUTPUT_PATH'];
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh

# shellcheck disable=SC2154
lci_images=$(docker images -q "$lci_image_pattern")
lci_images=$(docker images -q --filter=reference="$lci_image_pattern")
echo "$lci_images" | while read -r image
do
if [ ! "$image" ] || [ "$lci_image_to_exclude" = "$image" ]
Expand Down
6 changes: 2 additions & 4 deletions src/script/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import scriptAddEnvVars from './addEnvVars.sh';
import scriptCleanUpCommittedImages from './cleanUpCommittedImages.sh';
import scriptCleanUpImages from './cleanUpImages.sh';
import scriptCommitContainer from './commitContainer.sh';
import scriptDockerExecRunningContainer from './dockerExecRunningContainer.sh';
import scriptGetPicardContainerFunction from './getPicardContainerFunction.sh';
Expand All @@ -15,9 +15,7 @@ function stripDevSyntax(file: string) {
}

export const addEnvVars = stripDevSyntax(scriptAddEnvVars);
export const cleanUpCommittedImages = stripDevSyntax(
scriptCleanUpCommittedImages
);
export const cleanUpImages = stripDevSyntax(scriptCleanUpImages);
export const commitContainer = stripDevSyntax(scriptCommitContainer);
export const dockerExecRunningContainer = stripDevSyntax(
scriptDockerExecRunningContainer
Expand Down
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载