@@ -18,7 +18,9 @@ import * as ip from 'ip';
1818
1919const docker = new Docker ( ) ;
2020const clientPort : number = 3333 ;
21- const dockerImage : string = 'java-ls' ;
21+ const dockerRepo : string = 'ibmcom' ;
22+ const dockerImage : string = 'codewind-java-profiler-language-server' ;
23+ const dockerTag : string = 'latest' ;
2224let clientServer : net . Server ;
2325let client : LanguageClient ;
2426let serverConnected = false ;
@@ -60,45 +62,18 @@ export async function activate(context: ExtensionContext) {
6062}
6163
6264async function startServerDockerContainer ( dockerBinds : string [ ] ) {
63- if ( ! process . env . REMOTE_SERVER ) {
64- let originalContainer : Docker . Container ;
65- try {
66- originalContainer = await docker . getContainer ( dockerImage ) ;
67- try {
68- await originalContainer . stop ( ) ;
69- } catch ( error ) {
70- // don't care if already stopped
71- }
72- await originalContainer . remove ( ) ;
73- } catch ( error ) {
74- // if it doesn't exist then try to build it
75- // TODO: host image and try to pull instead
76- const pack = tarfs . pack ( path . join ( __dirname , '../..' , 'server' ) ) ;
77-
78- const stream = await docker . buildImage ( pack , { t : dockerImage } ) ;
79- // wait for the build to finish
80- await new Promise ( ( resolve , reject ) => {
81- docker . modem . followProgress ( stream , ( err : any , res : { } | PromiseLike < { } > ) => err ? reject ( err ) : resolve ( res ) , ( event ) => {
82- // console.log(event.stream);
83- } ) ;
84- } ) ;
85- }
86-
87- const container = await docker . createContainer ( {
88- Image : dockerImage ,
89- name : dockerImage ,
90- Env : [ `CLIENT_PORT=${ clientPort } ` , `CLIENT_HOST=${ ip . address ( ) } ` , `BINDS="${ dockerBinds } "` ] ,
91- HostConfig : {
92- Binds : dockerBinds
93- }
94- } ) ;
95-
96- container . start ( ) ;
65+ try {
66+ await pullDockerImage ( ) ;
67+ console . log ( 'Pull completed!' ) ;
68+ } catch ( error ) {
69+ console . log ( 'Pull failed, building from local Dockerfile' ) ;
70+ await buildLocalDockerImage ( ) ;
9771 }
72+ await startContainer ( dockerBinds ) ;
9873
9974 setupConnectionListeners ( ) ;
100-
10175 const serverSocket = await waitForServerConnection ( ) ;
76+
10277 // Connect to language server via socket
10378 let result : StreamInfo = {
10479 writer : serverSocket ,
@@ -128,6 +103,52 @@ function waitForServerConnection() {
128103 } ) ;
129104}
130105
106+ async function pullDockerImage ( ) {
107+ await removeExistingContainer ( ) ;
108+ await docker . pull ( `${ dockerRepo } /${ dockerImage } :${ dockerTag } ` , { } ) ;
109+ }
110+
111+ 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+ } ) ;
125+ } ) ;
126+ }
127+ }
128+
129+ async function removeExistingContainer ( ) {
130+ let originalContainer : Docker . Container ;
131+ originalContainer = await docker . getContainer ( dockerImage ) ;
132+ try {
133+ await originalContainer . stop ( ) ;
134+ } catch ( error ) {
135+ // don't care if already stopped
136+ }
137+ await originalContainer . remove ( ) ;
138+ }
139+
140+ async function startContainer ( dockerBinds : string [ ] ) {
141+ const container = await docker . createContainer ( {
142+ Image : dockerImage ,
143+ name : dockerImage ,
144+ Env : [ `CLIENT_PORT=${ clientPort } ` , `CLIENT_HOST=${ ip . address ( ) } ` , `BINDS="${ dockerBinds } "` ] ,
145+ HostConfig : {
146+ Binds : dockerBinds
147+ }
148+ } ) ;
149+
150+ container . start ( ) ;
151+ }
131152function setupConnectionListeners ( ) {
132153 // wait for the language server to connect
133154 clientServer . setMaxListeners ( 1 ) ;
0 commit comments