Skip to content
This repository was archived by the owner on Nov 28, 2022. It is now read-only.

Commit 696ead3

Browse files
authored
Merge pull request #4 from jonathan-spruce/docker-stability
Resolve stability issues with pulling from Docker
2 parents 7d6362e + 1c0f283 commit 696ead3

2 files changed

Lines changed: 27 additions & 18 deletions

File tree

client/src/extension.ts

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,21 @@ import {
1111
LanguageClientOptions,
1212
StreamInfo,
1313
} from 'vscode-languageclient';
14+
import { promisify } from 'util';
1415

1516
import * as tarfs from 'tar-fs';
1617
import * as Docker from 'dockerode';
1718
import * as ip from 'ip';
1819

1920
const docker = new Docker();
21+
22+
const followProgress = promisify(docker.modem.followProgress);
23+
2024
const clientPort: number = 3333;
2125
const dockerRepo: string = 'ibmcom';
2226
const dockerImage: string = 'codewind-java-profiler-language-server';
2327
const dockerTag: string = 'latest';
28+
const dockerFullImageName = `${dockerRepo}/${dockerImage}:${dockerTag}`;
2429
let clientServer: net.Server;
2530
let client: LanguageClient;
2631
let serverConnected = false;
@@ -63,11 +68,20 @@ export async function activate(context: ExtensionContext) {
6368

6469
async function startServerDockerContainer(dockerBinds: string[]) {
6570
try {
71+
await removeExistingContainer();
72+
} catch (err) {
73+
// don't care if already removed
74+
}
75+
76+
try {
77+
console.log(`Trying to pull image ${dockerFullImageName}`);
78+
6679
await pullDockerImage();
6780
console.log('Pull completed!');
6881
} catch (error) {
6982
console.log('Pull failed, building from local Dockerfile');
7083
await buildLocalDockerImage();
84+
console.log(error);
7185
}
7286
await startContainer(dockerBinds);
7387

@@ -104,26 +118,21 @@ function waitForServerConnection() {
104118
}
105119

106120
async function pullDockerImage() {
107-
await removeExistingContainer();
108-
await docker.pull(`${dockerRepo}/${dockerImage}:${dockerTag}`, {});
121+
const stream = await docker.pull(dockerFullImageName, {});
122+
// wait for the pull to complete
123+
await followProgress(stream);
109124
}
110125

111126
async function buildLocalDockerImage() {
112-
try {
113-
await removeExistingContainer();
114-
} catch (error) {
115-
// if it doesn't exist then try to build it
116-
// TODO: host image and try to pull instead
117-
const pack = tarfs.pack(path.join(__dirname, '../..', 'server'));
118-
119-
const stream = await docker.buildImage(pack, {t: dockerImage});
120-
// wait for the build to finish
121-
await new Promise((resolve, reject) => {
122-
docker.modem.followProgress(stream, (err: any, res: {} | PromiseLike<{}>) => err ? reject(err) : resolve(res), (event) => {
123-
// console.log(event.stream);
124-
});
127+
const pack = tarfs.pack(path.join(__dirname, '../..', 'server'));
128+
129+
const stream = await docker.buildImage(pack, {t: dockerFullImageName});
130+
// wait for the build to finish
131+
await new Promise((resolve, reject) => {
132+
docker.modem.followProgress(stream, (err: any, res: {} | PromiseLike<{}>) => err ? reject(err) : resolve(res), (event) => {
133+
console.log(event.stream);
125134
});
126-
}
135+
});
127136
}
128137

129138
async function removeExistingContainer() {
@@ -139,7 +148,7 @@ async function removeExistingContainer() {
139148

140149
async function startContainer(dockerBinds: string[]) {
141150
const container = await docker.createContainer({
142-
Image: dockerImage,
151+
Image: dockerFullImageName,
143152
name: dockerImage,
144153
Env: [`CLIENT_PORT=${clientPort}`, `CLIENT_HOST=${ip.address()}`, `BINDS="${dockerBinds}"`],
145154
HostConfig: {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "codewind-java-profiler",
33
"displayName": "Codewind Java Profiler",
44
"description": "Code Highlighting for Eclipse Codewind's Java Load Testing",
5-
"version": "19.6.0",
5+
"version": "19.7.0",
66
"author": "IBM",
77
"publisher": "IBM",
88
"license": "EPL-2.0",

0 commit comments

Comments
 (0)