dcdx 1.2.0-next.2 → 1.2.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/versions.json +1 -0
- package/lib/commands/database-mssql.js +1 -1
- package/lib/commands/database-mysql.js +1 -1
- package/lib/commands/database-postgres.js +1 -1
- package/lib/commands/reset-bamboo.js +1 -1
- package/lib/commands/reset-bitbucket.js +1 -1
- package/lib/commands/reset-confluence.js +1 -1
- package/lib/commands/reset-jira.js +1 -1
- package/lib/commands/run-bamboo.js +1 -1
- package/lib/commands/run-bitbucket.js +1 -1
- package/lib/commands/run-confluence.js +1 -1
- package/lib/commands/run-jira.js +1 -1
- package/lib/index.js +1 -1
- package/package.json +4 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{program as t,Option as e}from"commander";import{gracefulExit as s,asyncExitHook as o}from"exit-hook";import{dirname as i,join as a}from"path";import n from"axios";import{spawn as r}from"child_process";import{stop as c,downAll as d,ps as p,execCompose as l,upAll as h}from"docker-compose/dist/v2.js";import u from"events";import{existsSync as m,mkdirSync as g}from"fs";import{dump as b}from"js-yaml";import{homedir as w}from"os";import{cwd as S}from"process";import v from"simple-git";import{upAll as f}from"docker-compose";import{Sequelize as k,ConnectionError as A,TimeoutError as R,ConnectionTimedOutError as y,ConnectionRefusedError as D,ConnectionAcquireTimeoutError as C}from"sequelize";const E="AAABmg0ODAoPeNp9Ul1v0zAUfc+vsMRbJadJtjGpUiS2JJRONOlaB4SAB9e9W0xTu7JvCv33eImDOoR4vefe4/PhN59hR5bckPiWRNezKJ5FCZkvGUmiJA4yrZALLPkBUrHXotEnu5eBRW6b8KMUoCyw8xH6BVZs2KKce3TJpUJQXAkofh2lOeccIV1dfRhJC7fRXrJuwJzALPL0/qF+pI9XGaPz+uGGspvbkdRx8Awcr0nRdOCnlXnmSlqOUqv0DltureTKg6vOiIZb6J9PoviaRm9pHHs0M9Cf/Rv1Dv/SP5lMyorR99WartZVXmdsUZW03hQOSHtCF+n2TLAB4hlIoYTegSFHo3+AQPK1QTx+m02nzzrko+JQ6MO0HS4oDBffQ5JrojSSnbRo5LZDcMzSEtREdBb1AYwNRzsXff0JgjCwLjG/4mB5giE+JzhbF3esyOn9lxf1F2145a6OWu2V/qmC/2dVdoctmOqptk5PGid+XJx42w3NPPHWQuD9fXJbL8PktfLhU2Av+N2rYMY6uUEFpncY/AYCgfFAMCwCFHzkBlkGH/vRdTeeBSfUMzUDb4W2AhQyM893WPg2Q8oQAYRdBSyKeVUdog==X02jr",toAbsolutePath=t=>{const[,e]=process.argv,s=i(e),o=s.substring(0,s.indexOf("dcdx")+4);return a(o,t.replaceAll("../",""))};var O;!function(t){t.JIRA="jira",t.CONFLUENCE="confluence",t.BITBUCKET="bitbucket",t.BAMBOO="bamboo"}(O||(O={}));const T={name:"shared",driver:"bridge"};let $=class Base extends u{options;sequelize=null;constructor(t){super(),this.options=t}async run(t,e){try{if(!this.sequelize)throw new Error("Database connection does not exist");await this.sequelize.query(t,{logging:e})}catch(e){console.error("An error occurred while trying to run the following SQL query:",t,e),s()}return null}async start(t=this.options.clean){console.log(`Starting instance of ${this.name} ⏳`),t&&await this.down(),await this.up(),this.emit(`${this.name}:up`);if(await this.waitUntilReady()){if(console.log(`Database is ready and accepting connections on localhost:${this.options.port} 🗄️`),await this.onDatabaseReady(),this.emit("db:ready"),this.options.logging){const t=await this.getServiceState();t&&await this.showDockerLogs(t.name)}}else console.log(`Failed to start database ${this.name} ⛔`),s(0)}async stop(t=this.options.prune){if(t)await this.down();else{const t=b(this.getDockerComposeConfig());await c({cwd:S(),configAsString:t,log:!0})}this.emit("db:stopped")}async onDatabaseReady(){}getDockerComposeConfig(){return{version:"3.8",services:{db:this.getService()},networks:{shared:T}}}async up(){const t=b(this.getDockerComposeConfig());return f({cwd:S(),configAsString:t,log:!0})}async down(){const t=b(this.getDockerComposeConfig());return d({cwd:S(),configAsString:t,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async waitUntilReady(){try{const t="mssql"===this.name?"master":this.options.database;return this.sequelize=new k(t,this.options.username,this.options.password,{host:"localhost",port:this.options.port,dialect:this.name.replace("postgresql","postgres"),retry:{max:30,match:[A,R,y,D,C],backoffBase:1e3,backoffExponent:1},logging:!1}),this.sequelize.authenticate().then((()=>!0)).catch((t=>(console.log(t),!1)))}catch(t){return!1}}async getServiceState(){const t=b(this.getDockerComposeConfig());return(await p({configAsString:t,log:!1,commandOptions:["--all"]})).data.services.find((t=>t.name.includes(this.name)))}async showDockerLogs(t){return new Promise(((e,s)=>{r("docker",["logs","-f","-n","5000",t],{cwd:S(),stdio:"inherit"}).on("exit",(t=>0===t?e():s(new Error(`Docker exited with code ${t}`))))}))}};const q={port:1433,database:"dcdx",username:"sa",password:"DataCenterDX!",edition:"Developer",version:"2022"};class MSSQL extends ${name="mssql";driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";options=q;version="2022";get url(){return`jdbc:sqlserver://db:${this.options.port};databaseName=${this.options.database};trustServerCertificate=true`}constructor(t=q){super({...q,...t})}async onDatabaseReady(){await this.run(`CREATE DATABASE ${this.options.database}`),await this.run(`ALTER DATABASE ${this.options.database} COLLATE SQL_Latin1_General_CP1_CS_AS`),await this.run(`ALTER DATABASE ${this.options.database} SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;`)}getService=()=>({image:`mcr.microsoft.com/mssql/server:${this.version}-latest`,ports:[`${this.options.port||1433}:1433`],environment:{ACCEPT_EULA:"y",MSSQL_SA_PASSWORD:this.options.password||"dcdx",MSSQL_PID:this.options.edition},networks:{shared:{aliases:["db","database"]}}})}const x={port:3306,database:"dcdx",username:"dcdx",password:"dcdx",version:"8.0"};class MySQL extends ${name="mysql";driver="com.mysql.jdbc.Driver";options=x;version="8.0";get url(){return`jdbc:mysql://db:${this.options.port}/${this.options.database}?sessionVariables=transaction_isolation='READ-COMMITTED'`}constructor(t=x){super({...x,...t})}async onDatabaseReady(){await this.run(`ALTER DATABASE ${this.options.database} CHARACTER SET 'utf8mb4' COLLATE utf8mb4_bin`)}getService=()=>({image:`mysql:${this.version}`,ports:[`${this.options.port||3306}:3306`],environment:{MYSQL_ROOT_PASSWORD:this.options.password||"dcdx",MYSQL_USER:this.options.username||"dcdx",MYSQL_PASSWORD:this.options.password||"dcdx",MYSQL_DATABASE:this.options.database||"dcdx"},command:["--log_bin_trust_function_creators=1"],networks:{shared:{aliases:["db","database"]}}})}const L={version:"15",database:"dcdx",port:5432,username:"dcdx",password:"dcdx"};class Postgres extends ${name="postgresql";driver="org.postgresql.Driver";options=L;version="15";get url(){return`jdbc:postgresql://db:${this.options.port}/${this.options.database}`}constructor(t=L){super({...L,...t})}getService=()=>({image:`postgres:${this.version}`,ports:[`${this.options.port||5432}:5432`],environment:{POSTGRES_USER:this.options.username||"dcdx",POSTGRES_PASSWORD:this.options.password||"dcdx",POSTGRES_DB:this.options.database||"dcdx",POSTGRES_HOST_AUTH_METHOD:"md5",POSTGRES_INITDB_ARGS:"--encoding=UTF-8 --lc-collate=C --lc-ctype=C"},networks:{shared:{aliases:["db","database"]}}})}const P=a(w(),".dcdx");class Base extends u{options;constructor(t){super(),this.options=t}get baseUrl(){let t="http://localhost";return this.options.port&&(t+=`:${this.options.port}`),this.options.contextPath?`${t}/${this.options.contextPath}`:t}getDatabaseEngine(t){switch(t){case"postgresql":return new Postgres;case"mssql":return new MSSQL;case"mysql":return new MySQL}}async start(){this.options.clean&&await this.down(),await this.build(this.options.version),await this.database.start(this.options.clean),await this.up()}async stop(){if(await this.database.stop(this.options.prune),this.options.prune)await this.down();else{const t=b(this.getDockerComposeConfig());await c({cwd:S(),configAsString:t,log:!0})}this.emit(`${this.name}:stopped`)}async reset(){await this.database.stop(!0),await this.down()}async cp(t){const e=await this.getServiceState();if(e&&e.state.toLowerCase().startsWith("up")){const e=this.getDockerComposeConfig(),s=b(e);await l("cp",[t,`${this.name}:/opt/quickreload/`],{cwd:S(),configAsString:s,log:!1})}}async isApplicationReady(){try{const t=await n.get(`${this.baseUrl}/status`,{validateStatus:()=>!0}).catch((()=>null));if(t&&200===t.status){const{data:e}=t;if("FIRST_RUN"===e.state)return console.log(`The application ${this.name} is ready on ${this.baseUrl} 🎉`),!0}return!1}catch(t){return!1}}getDockerComposeConfig(){return{version:"3.8",services:{[this.name]:this.getService()},networks:{shared:T}}}async up(){const t=this.getDockerComposeConfig(),e=b(t);await h({cwd:S(),configAsString:e,log:!0}),this.emit(`${this.name}:up`);await this.waitUntilReady()?(this.emit(`${this.name}:ready`),await this.tailApplicationLogs()):console.log(`Failed to start ${this.name} ⛔`),s(0)}async down(){const t=b(this.getDockerComposeConfig());await d({cwd:S(),configAsString:t,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async getServiceState(){const t=b(this.getDockerComposeConfig());return(await p({configAsString:t,log:!1,commandOptions:["--all"]})).data.services.find((t=>t.name.includes(this.name)))}async waitUntilReady(t=0){console.log(`Waiting for ${this.name} to become available... ${t}s`);const e=await this.getServiceState();return!!(e&&e.state.toLowerCase().startsWith("up")&&await this.isApplicationReady())||(t>=300?(console.error(`A timeout occurred while waiting for ${this.name} to become available ⛔`),e&&await this.showDockerLogs(e.name),!1):(await new Promise((t=>setTimeout(t,1e3))),this.waitUntilReady(t+1)))}getDockerRepositoryUrl(){return`https://bitbucket.org/atlassian-docker/docker-${"jira"===this.name?"atlassian-jira":"bamboo"===this.name?`${this.name}-server`:`atlassian-${this.name}-server`}.git`}async build(t){const e=this.getDockerRepositoryUrl(),s=a(P,this.name,"source");m(s)?await v({baseDir:s}).pull({"--recurse-submodule":null}):(g(a(P,this.name),{recursive:!0}),await v().clone(e,s,{"--recurse-submodule":null})),await new Promise(((e,o)=>{r("docker",["build","-t",`dcdx/${this.name}:${t}`,"--build-arg",`${this.name.toUpperCase()}_VERSION=${t}`,"."],{cwd:s,stdio:"inherit"}).on("exit",(t=>0===t?e():o(new Error(`Docker exited with code ${t}`))))}))}async tailApplicationLogs(){const t=await this.getServiceState();t&&t.state.toLowerCase().startsWith("up")&&await this.showApplicationLogs(t.name).catch((()=>null))}async showDockerLogs(t){return new Promise(((e,s)=>{r("docker",["logs","-f","-n","5000",t],{cwd:S(),stdio:"inherit"}).on("exit",(t=>0===t?e():s(new Error(`Docker exited with code ${t}`))))}))}async showApplicationLogs(t){return new Promise(((e,s)=>{r("docker",["exec","-i",t,"tail","-F","-n","5000",this.logFilePath],{cwd:S(),stdio:"inherit"}).on("exit",(t=>0===t?e():s(new Error(`Docker exited with code ${t}`))))}))}}class Bitbucket extends Base{name=O.BITBUCKET;database;logFilePath="/var/atlassian/application-data/bitbucket/log/atlassian-bitbucket.log";constructor(t){super(t),this.database=this.getDatabaseEngine(t.database)}getService(){const t=this.getVolumes(),e=this.getEnvironmentVariables();return{build:{context:toAbsolutePath("../../assets"),dockerfile_inline:`\nFROM dcdx/${this.name}:${this.options.version}\nCOPY ./quickreload-5.0.2.jar /var/atlassian/application-data/bitbucket/plugins/installed-plugins/quickreload-5.0.2.jar\nCOPY ./mysql-connector-j-8.3.0.jar /var/atlassian/application-data/bitbucket/lib/mysql-connector-j-8.3.0.jar\nRUN echo "/opt/quickreload" > /var/atlassian/application-data/bitbucket/quickreload.properties; mkdir -p /opt/quickreload; chown -R bitbucket:bitbucket /opt/quickreload;\n\nRUN mkdir -p /var/atlassian/application-data/bitbucket/shared; touch /var/atlassian/application-data/bitbucket/shared/bitbucket.properties; echo "setup.license=${this.options.license||E}" >> /var/atlassian/application-data/bitbucket/shared/bitbucket.properties;\n\nRUN chown -R bitbucket:bitbucket /var/atlassian/application-data/bitbucket`},ports:[`${this.options.port||80}:7990`,...this.options.debug?["5005:5005"]:[]],environment:Object.keys(e).length>0?e:void 0,volumes:t.length>0?t:void 0,networks:["shared"]}}getEnvironmentVariables(){return{...this.options.debug?{JVM_SUPPORT_RECOMMENDED_ARGS:this.getJVMArgs()}:"",JDBC_URL:this.database.url,JDBC_USER:this.database.options.username,JDBC_PASSWORD:this.database.options.password,JDBC_DRIVER:`${this.database.driver}`}}getJVMArgs(){const t=[];return this.options.debug&&(t.push("-Dupm.plugin.upload.enabled=true"),t.push("-Xdebug"),t.push("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005")),this.options.quickReload&&t.push("-Dquickreload.dirs=/opt/quickreload"),t.join(" ")}getVolumes(){return[...this.options.quickReload?[`${this.options.quickReload}:/opt/quickreload`]:""]}}(async()=>{const s=t.showHelpAfterError(!0).addOption(new e("-v, --version <version>","The version of the host application").choices(["8.19.1"]).default("8.19.1")).addOption(new e("-d, --database <name>","The database engine on which the host application will run").choices(["postgresql","mysql","mssql"]).default("postgresql")).addOption(new e("-p, --port <port>","The HTTP port on which the host application will be accessible").default("80")).addOption(new e("-qr, --quickReload <path_to_watch>","Add support for QuickReload and add the provided path to the watch list")).addOption(new e("--clean","Remove data files before starting the database").default(!1)).addOption(new e("--prune","Remove data files when stopping the database").default(!1)).addOption(new e("--debug","Add support for JVM debugger on port 5005")).parse(process.argv).opts(),i=new Bitbucket({version:s.version,database:s.database,port:Number(s.port),quickReload:s.qr,clean:s.clean,prune:s.prune,debug:s.debug});o((async()=>{console.log(`Stopping ${i.name}... ⏳`),await i.stop(),console.log(`Stopped ${i.name} 💪`)}),{wait:3e4}),await i.start()})(),process.on("SIGINT",(()=>{console.log("Received term signal, trying to stop gracefully 💪"),s()}));
|
|
2
|
+
import{program as u,Option as t}from"commander";import{gracefulExit as d,asyncExitHook as n}from"exit-hook";import{dirname as k,join as j}from"path";import b from"axios";import{spawn as e}from"child_process";import{stop as a,downAll as i,ps as s,execCompose as o,upAll as r}from"docker-compose/dist/v2.js";import p from"events";import{existsSync as l,mkdirSync as c}from"fs";import{dump as h}from"js-yaml";import{homedir as m}from"os";import{cwd as g}from"process";import w from"simple-git";import{upAll as S}from"docker-compose";import{Sequelize as v,ConnectionError as f,TimeoutError as A,ConnectionTimedOutError as R,ConnectionRefusedError as y,ConnectionAcquireTimeoutError as D}from"sequelize";var C=["8.2.1-ubuntu-jdk11","8.2.1-jdk11","8.2.1","8.16.2-ubuntu-jdk17","8.16.2-jdk17","8.16.2","8.1.1-ubuntu-jdk11","8.1.1-jdk11","8.1.1","8.8-ubuntu-jdk17","8.8-jdk17","8.8.7-ubuntu-jdk17","8.8.7-jdk17","8.8.7","8.8","8.3.2-ubuntu-jdk11","7.21.5-ubuntu-jdk11","8.3.2-jdk11","7.21.5-jdk11","8.3.2","8.2.2-ubuntu-jdk11","7.21.5","8.2.2-jdk11","8.2.2","8.1.2-ubuntu-jdk11","8.1.2-jdk11","8.1.2","7.21.2-ubuntu-jdk11","7.21.2-jdk11","7.21.2","8.3.3-ubuntu-jdk11","8.3.3-jdk11","8.3.3","8.16-ubuntu-jdk17","8.16-jdk17","8.16.3-ubuntu-jdk17","8.16.3-jdk17","8.16.3","8.16","8.14.2-ubuntu-jdk17","8.15.1-ubuntu-jdk17","8.15.1-jdk17","8.14.2-jdk17","8.14.3-ubuntu-jdk17","8.15.1","8.14.2","8.14.3-jdk17","8.9.4-ubuntu-jdk17","8.9.4-jdk17","8.14.4-ubuntu-jdk17","8.14.3","8.9.4","8.14.4-jdk17","8.14.5-ubuntu-jdk17","8.14.4","8.8.1-ubuntu-jdk17","8.8.1-jdk17","8.14-ubuntu-jdk17","8.8.1","8.14-jdk17","8.14.5-jdk17","8.11.3-ubuntu-jdk17","8.11.3-jdk17","8.15.0-ubuntu-jdk17","8.14.5","8.15.0-jdk17","8.11.3","8.14","8.0.1-ubuntu-jdk11","8.15.0","8.0.1-jdk11","8.0.1","8.7.0-ubuntu-jdk11","8.7.0-jdk11","8.7.0","8.10.5-ubuntu-jdk17","8.10.5-jdk17","8.10.5","7.21.14-ubuntu-jdk11","7.21.14-jdk11","8.9.0-ubuntu-jdk17","7.21.14","8.9.0-jdk17","8.9.0","8.5-ubuntu-jdk11","8.5-jdk11","8.5.4-ubuntu-jdk11","8.5.4-jdk11","8.5.4","8.5","8.4.3-ubuntu-jdk11","8.4.3-jdk11","8.4.3","7.21.6-ubuntu-jdk11","7.21.6-jdk11","7.21.6","7.21.20-ubuntu-jdk11","7.21.20-jdk11","7.21.20","7.21.1-ubuntu-jdk11","7.21.1-jdk11","7.21.1","8.3-ubuntu-jdk11","8.3-jdk11","8.3.4-ubuntu-jdk11","8.3.4-jdk11","8.3.4","8.3","8.2.3-ubuntu-jdk11","8.2.3-jdk11","8.2.3","8.15.2-ubuntu-jdk17","8.15.2-jdk17","8.15.2","8.1.3-ubuntu-jdk11","8.1.3-jdk11","8.1.3","8.9.5-ubuntu-jdk17","8.9.5-jdk17","8.10.0-ubuntu-jdk17","8.10.0-jdk17","8.10.0","8.0.2-ubuntu-jdk11","8.0.2-jdk11","8.0.2","7.20.0-ubuntu-jdk11","7.20.0-jdk11","7.20.0","8.9.5","8.8.2-ubuntu-jdk17","8.8.2-jdk17","8.8.2","8.17.0-ubuntu-jdk17","8.17.0-jdk17","8.17.0","8.11.4-ubuntu-jdk17","8.11.4-jdk17","8.11.4","8.10-ubuntu-jdk17","8.10-jdk17","8.10.6-ubuntu-jdk17","8.10.6-jdk17","8.10.6","8.10","8.9.1-ubuntu-jdk17","8.9.1-jdk17","8.7.1-ubuntu-jdk11","8.9.1","8.7.1-jdk11","8.7.1","8.4-ubuntu-jdk11","8.4-jdk11","8.4.4-ubuntu-jdk11","8.4.4-jdk11","8.4.4","8.4","8.12.1-ubuntu-jdk17","8.12.1-jdk17","8.12.1","7.21.7-ubuntu-jdk11","7.21.7-jdk11","7.21.7","7.21.21-ubuntu-jdk11","7.21.21-jdk11","7.21.21","7.21.15-ubuntu-jdk11","7.21.15-jdk11","7.21.15","7.21.10-jdk11","7.21.10-ubuntu-jdk11","7.21.10","8.2-ubuntu-jdk11","8.2-jdk11","8.2.4-ubuntu-jdk11","8.2.4-jdk11","8.2.4","8.2","8.15.3-ubuntu-jdk17","8.15.3-jdk17","8.15.3","8.12-ubuntu-jdk17","8.12-jdk17","8.12.6-ubuntu-jdk17","8.12.6-jdk17","8.12.6","8.12","8.6.0-ubuntu-jdk11","8.6.0","8.6.0-jdk11","8.1.4-ubuntu-jdk11","8.1.4-jdk11","8.1.4","8.13.4-ubuntu-jdk17","8.13.4-jdk17","8.13.4","8.0.3-ubuntu-jdk11","8.0.3-jdk11","8.0.3","7.20.1-ubuntu-jdk11","8.9.6-ubuntu-jdk17","7.20.1-jdk11","8.9.6-jdk17","7.20.1","8.9.6","8.17-ubuntu-jdk17","8.17-jdk17","8.17.1-ubuntu-jdk17","8.17.1-jdk17","8.17.1","8.17","8.11.5-ubuntu-jdk17","8.11.5-jdk17","8.11.5","8.10.1-ubuntu-jdk17","8.10.1-jdk17","8.10.1","8.8.3-ubuntu-jdk17","8.8.3-jdk17","8.8.3","8.7.2-ubuntu-jdk11","8.7.2-jdk11","8.7.2","7-ubuntu-jdk11","7-jdk11","7.21-ubuntu-jdk11","7.21-jdk11","7.21.8-ubuntu-jdk11","7.21.8-jdk11","7.21.8","7.21.22-ubuntu-jdk11","7.21.22-jdk11","7.21.22","7.21","7","8.9-ubuntu-jdk17","8.9-jdk17","8.9.10-ubuntu-jdk17","8.9.10-jdk17","8.9.10","8.9","8.12.2-ubuntu-jdk17","8.12.2-jdk17","8.12.2","7.21.16-ubuntu-jdk11","7.21.16-jdk11","7.21.16","8.6.1-ubuntu-jdk11","8.6.1-jdk11","8.6.1","8.4.0-ubuntu-jdk11","8.4.0-jdk11","8.4.0","8.15-ubuntu-jdk17","8.15-jdk17","8.15.4-ubuntu-jdk17","8.15.4-jdk17","8.15.4","8.15","8.13.5-ubuntu-jdk17","8.13.5-jdk17","8.13.5","8.0.4-ubuntu-jdk11","8.0.4-jdk11","8.0.4","7.21.11-ubuntu-jdk11","7.21.11-jdk11","7.21.11","7.20.2-ubuntu-jdk11","7.20.2-jdk11","7.20.2","8.9.7-ubuntu-jdk17","8.9.7-jdk17","8.9.7","8.5.0-ubuntu-jdk11","8.5.0-jdk11","8.5.0","8.1-ubuntu-jdk11","8.1-jdk11","8.1.5-ubuntu-jdk11","8.1.5-jdk11","8.1.5","8.11.0-ubuntu-jdk17","8.11.0-jdk17","8.11.0","8.1","8.8.4-ubuntu-jdk17","8.8.4-jdk17","8.8.4","8.7.3-ubuntu-jdk11","8.13.0-ubuntu-jdk17","8.13.0-jdk17","8.13.0","8.11-ubuntu-jdk17","8.11-jdk17","8.11.6-ubuntu-jdk17","8.11.6-jdk17","8.11.6","8.11","8.10.2-ubuntu-jdk17","8.10.2-jdk17","latest","8.10.2","jdk17","8-ubuntu-jdk17","8-jdk17","8.7.3-jdk11","8.7.3","8.18.0-ubuntu-jdk17","8.12.3-ubuntu-jdk17","8.12.3-jdk17","8.12.3","8","7.21.9-ubuntu-jdk11","7.21.9-jdk11","7.21.9","ubuntu-jdk17","7.21.17-ubuntu-jdk11","8.6.2-ubuntu-jdk11","8.6.2-jdk11","8.6.2","8.4.1-ubuntu-jdk11","8.4.1-jdk11","8.4.1","8.3.0-ubuntu-jdk11","8.3.0-jdk11","8.3.0","8.18-ubuntu-jdk17","8.18-jdk17","8.18.0-jdk17","8.18.0","8.18","8.13-ubuntu-jdk17","8.13-jdk17","8.13.6-ubuntu-jdk17","8.13.6-jdk17","8.13.6","8.13","8.0-ubuntu-jdk11","8.0-jdk11","8.0.5-ubuntu-jdk11","8.0.5-jdk11","8.0.5","8.0","7.21.17-jdk11","7.21.17","7.20-ubuntu-jdk11","7.20-jdk11","7.20.3-ubuntu-jdk11","7.20.3-jdk11","7.20.3","7.20","8.9.8-ubuntu-jdk17","8.9.8-jdk17","8.9.8","8.5.1-ubuntu-jdk11","8.5.1-jdk11","8.5.1","8.11.1-ubuntu-jdk17","8.11.1-jdk17","8.11.1","7.21.3-ubuntu-jdk11","7.21.3-jdk11","7.21.3","7.21.12-ubuntu-jdk11","7.21.12-jdk11","7.21.12","8.9.2-ubuntu-jdk17","8.9.2-jdk17","8.9.2","8.8.5-ubuntu-jdk17","8.8.5-jdk17","8.8.5","8.7.4-ubuntu-jdk11","8.7.4-jdk11","8.7.4","8.13.1-ubuntu-jdk17","8.13.1-jdk17","8.13.1","8.10.3-ubuntu-jdk17","8.6.3-ubuntu-jdk11","8.10.3-jdk17","8.6.3-jdk11","8.10.3","8.6.3","8.16.0-ubuntu-jdk17","8.16.0-jdk17","8.16.0","8.12.4-ubuntu-jdk17","8.12.4-jdk17","8.12.4","8.0.0","7.21.18-ubuntu-jdk11","7.21.18","8.2.0-ubuntu-jdk11","8.2.0-jdk11","8.2.0","8.12.0-ubuntu-jdk17","8.12.0-jdk17","8.12.0","8.0.0-ubuntu-jdk11","8.0.0-jdk11","7.21.4-ubuntu-jdk11","7.21.4-jdk11","7.21.4","7.21.18-jdk11","8.9.9","8.5.2-ubuntu-jdk11","8.5.2-jdk11","8.5.2","8.4.2-ubuntu-jdk11","8.4.2-jdk11","8.4.2","8.3.1-ubuntu-jdk11","8.3.1-jdk11","8.3.1","8.11.2-ubuntu-jdk17","8.11.2-jdk17","8.11.2","8.9.9-ubuntu-jdk17","8.9.9-jdk17","8.14.0-ubuntu-jdk17","8.14.0-jdk17","8.14.0","8.13.2-ubuntu-jdk17","8.13.2-jdk17","8.13.2","7.21.13-ubuntu-jdk11","7.21.13-jdk11","7.21.13","8.7-ubuntu-jdk11","8.7-jdk11","8.7.5-ubuntu-jdk11","8.7.5-jdk11","8.7.5","8.7","8.6-ubuntu-jdk11","8.6-jdk11","8.6.4-ubuntu-jdk11","8.6.4-jdk11","8.6.4","8.6","7.21.0-ubuntu-jdk11","7.21.0-jdk11","7.21.0","8.9.3-ubuntu-jdk17","8.9.3-jdk17","8.9.3","8.8.6-ubuntu-jdk17","8.8.6-jdk17","8.8.6","8.8.0-ubuntu-jdk17","8.8.0-jdk17","8.8.0","8.16.1-ubuntu-jdk17","8.16.1-jdk17","8.16.1","8.12.5-ubuntu-jdk17","8.12.5-jdk17","8.12.5","8.1.0-ubuntu-jdk11","8.1.0-jdk11","8.10.4-ubuntu-jdk17","8.10.4-jdk17","8.10.4","8.1.0","7.21.19-ubuntu-jdk11","7.21.19-jdk11","7.21.19","8.5.3-ubuntu-jdk11","8.5.3-jdk11","8.5.3","8.14.1-ubuntu-jdk17","8.14.1-jdk17","8.14.1","8.13.3-ubuntu-jdk17","8.13.3-jdk17","8.13.3","8.15-ubuntu-jdk11","8.15-jdk11","8.15.3-ubuntu-jdk11","8.15.3-jdk11","8.8.0-ubuntu-jdk11","8.8.0-jdk11","8.16.0-ubuntu-jdk11","8.16.0-jdk11","8.8.1-jdk11","8.12.3-ubuntu-jdk11","8.12.3-jdk11","8.8.1-ubuntu-jdk11","8.16.1-ubuntu-jdk11","8.10.0-ubuntu-jdk11","8.10.0-jdk11","8.16.1-jdk11","7.6.9-ubuntu-jdk11","7.6.9-jdk11","8.12.4-ubuntu-jdk11","8.12.4-jdk11","7.6.9","8.8.2-ubuntu-jdk11","8.8.2-jdk11","7.19-ubuntu-jdk11","7.19-jdk11","7.19.5-ubuntu-jdk11","7.19.5-jdk11","7.19.5","7.19","7.7.0-ubuntu-jdk11","8.16-ubuntu-jdk11","8.16-jdk11","8.16.2-ubuntu-jdk11","7.7.0","8.16.2-jdk11","8.10.1-ubuntu-jdk11","8.10.1-jdk11","7.7.0-jdk11","8.12.5-ubuntu-jdk11","8.8.3-ubuntu-jdk11","8.12.5-jdk11","8.8.3-jdk11","7.7-ubuntu-jdk11","7.7-jdk11","7.7.1-ubuntu-jdk11","7.7.1-jdk11","7.7.1","7.7","7.10.0-ubuntu-jdk11","7.10.0-jdk11","7.10.0","8.10.2-ubuntu-jdk11","8.10.2-jdk11","ubuntu-jdk11","jdk11","8-jdk11","8-ubuntu-jdk11","8.17-ubuntu-jdk11","8.17-jdk11","8.17.0-ubuntu-jdk11","8.17.0-jdk11","8.12-ubuntu-jdk11","8.12-jdk11","8.12.6-ubuntu-jdk11","8.12.6-jdk11","7.16.2-ubuntu-jdk11","7.16.2-jdk11","7.16.2","8.8.4-ubuntu-jdk11","8.8.4-jdk11","7.10-ubuntu-jdk11","7.10-jdk11","7.10.1-ubuntu-jdk11","7.10.1-jdk11","7.10.1","7.10","7.17.3-ubuntu-jdk11","7.17.3-jdk11","8.10.3-ubuntu-jdk11","7.17.3","8.10.3-jdk11","7.8.0-ubuntu-jdk11","7.8.0-jdk11","7.8.0","7.16-jdk11","7.16-ubuntu-jdk11","7.16.3-jdk11","7.16.3-ubuntu-jdk11","7.16.3","7.16","8.13.0-ubuntu-jdk11","8.13.0-jdk11","8.8.5-ubuntu-jdk11","8.8.5-jdk11","7.11.1","7.6.13-ubuntu-jdk11","7.6.13-jdk11","7.17.4-ubuntu-jdk11","7.6.13","7.17.4-jdk11","7.17.4","7.11.1-ubuntu-jdk11","7.11.1-jdk11","7.8-ubuntu-jdk11","8.10.4-ubuntu-jdk11","7.8-jdk11","7.8.1-jdk11","7.8.1-ubuntu-jdk11","7.8.1","7.8","8.10.4-jdk11","7.17.0-ubuntu-jdk11","7.17.0-jdk11","7.17.0","8.13.1-ubuntu-jdk11","8.13.1-jdk11","7.6.14-ubuntu-jdk11","7.6.14-jdk11","7.6.14","7.11-ubuntu-jdk11","7.11-jdk11","7.11.2-ubuntu-jdk11","7.11.2-jdk11","8.8.6-ubuntu-jdk11","8.8.6-jdk11","7.11.2","7.11","7.17.5-ubuntu-jdk11","7.17.5-jdk11","7.17.5","7.9.0-ubuntu-jdk11","7.9.0-jdk11","7.9.0","8.10.5-ubuntu-jdk11","8.10.5-jdk11","7.6.15-ubuntu-jdk11","7.6.15-jdk11","7.6.15","7.17.1-ubuntu-jdk11","7.17.1-jdk11","7.17.1","8.13.2-ubuntu-jdk11","8.13.2-jdk11","7.17.6-ubuntu-jdk11","7.17.6-jdk11","7.17.6","7.12.0-jdk11","7.12.0","8.8-ubuntu-jdk11","8.8-jdk11","7.12.0-ubuntu-jdk11","8.8.7-ubuntu-jdk11","8.8.7-jdk11","7.9-ubuntu-jdk11","7.9-jdk11","7.9.1-ubuntu-jdk11","7.9.1-jdk11","7.9.1","7.9","8.10-ubuntu-jdk11","8.10-jdk11","8.10.6-ubuntu-jdk11","8.10.6-jdk11","7.6.16-ubuntu-jdk11","7.6.16-jdk11","7.6.16","7.17.10-ubuntu-jdk11","7.17.10-jdk11","7.17.10","7.17.7-ubuntu-jdk11","7.17.7-jdk11","7.17.7","7.12-ubuntu-jdk11","7.12-jdk11","7.12.1-ubuntu-jdk11","7.12.1-jdk11","7.12","8.13.3-ubuntu-jdk11","8.13.3-jdk11","7.12.1","7.6.17-ubuntu-jdk11","7.6.17-jdk11","7.6.17","7.17.11-ubuntu-jdk11","7.17.11-jdk11","7.17.11","7.17.8-ubuntu-jdk11","7.17.8-jdk11","7.17.8","8.9.0-ubuntu-jdk11","8.9.0-jdk11","8.13.4-ubuntu-jdk11","8.13.4-jdk11","8.11.0-ubuntu-jdk11","8.11.0-jdk11","7.6.18-ubuntu-jdk11","7.6.18-jdk11","7.6.18","7.13.0-ubuntu-jdk11","7.13.0-jdk11","7.13.0","7.17.12-ubuntu-jdk11","7.17.12-jdk11","7.17.12","7.17.9-ubuntu-jdk11","7.17.9-jdk11","7.17.9","8.13-ubuntu-jdk11","8.13-jdk11","8.13.5-ubuntu-jdk11","8.13.5-jdk11","7.6.19-ubuntu-jdk11","7.6.19-jdk11","7.6.19","7.13-ubuntu-jdk11","7.13-jdk11","7.13.1-ubuntu-jdk11","7.13.1-jdk11","7.13.1","7.13","8.9.1-ubuntu-jdk11","8.9.1-jdk11","8.11.1-ubuntu-jdk11","8.11.1-jdk11","7.17.13-ubuntu-jdk11","7.17.13-jdk11","7.17.13","7.18.0-ubuntu-jdk11","7.18.0-jdk11","7.18.0","7.6.2-ubuntu-jdk11","7.6.2-jdk11","8.9.2-ubuntu-jdk11","7.6.2","8.9.2-jdk11","8.14.0-ubuntu-jdk11","8.14.0-jdk11","8.11.2-ubuntu-jdk11","8.11.2-jdk11","7.17.14-ubuntu-jdk11","7.17.14-jdk11","7.17.14","7.14.0-ubuntu-jdk11","7.14.0-jdk11","7.14.0","7.6.20-ubuntu-jdk11","7.6.20-jdk11","7.6.20","7.18.1-ubuntu-jdk11","7.18.1-jdk11","7.18.1","7.14.1-ubuntu-jdk11","7.14.1","7.18.2-ubuntu-jdk11","7.17.15-ubuntu-jdk11","7.17.15-jdk11","7.17.15","7.14.1-jdk11","8.9.3-ubuntu-jdk11","8.9.3-jdk11","8.14.1-ubuntu-jdk11","8.14.1-jdk11","8.11.3-ubuntu-jdk11","8.11.3-jdk11","7.6.21-ubuntu-jdk11","7.6.21-jdk11","7.6.21","7.18.2-jdk11","7.18.2","7.14-ubuntu-jdk11","7.14.2-ubuntu-jdk11","7.14.2-jdk11","7.6.22-ubuntu-jdk11","7.6.22-jdk11","7.6.22","7.5.0-ubuntu-jdk11","7.5.0-jdk11","7.5.0","7.18.3","7.17.16-ubuntu-jdk11","7.17.16-jdk11","7.17.16","7.14-jdk11","7.14.2","7.14","8.14.2-ubuntu-jdk11","8.14.2-jdk11","7.18.3-ubuntu-jdk11","7.18.3-jdk11","8.9.4-ubuntu-jdk11","8.9.4-jdk11","8.11.4-ubuntu-jdk11","8.11.4-jdk11","7.6-ubuntu-jdk11","7.6-jdk11","7.6.23-ubuntu-jdk11","7.6.23-jdk11","7.6.23","7.6","7.5.1-ubuntu-jdk11","7.5.1-jdk11","7.5.1","7.17.17-ubuntu-jdk11","7.17.17-jdk11","7.17.17","7.18-ubuntu-jdk11","7.18-jdk11","7.18.4-ubuntu-jdk11","7.18.4-jdk11","7.18.4","7.18","8.14.3-ubuntu-jdk11","7.15.0-jdk11","8.14.3-jdk11","8.11.5-ubuntu-jdk11","8.11.5-jdk11","7.15.0-ubuntu-jdk11","7.15.0","8.9.5-ubuntu-jdk11","8.9.5-jdk11","7.5-ubuntu-jdk11","7.5-jdk11","7.5.2-ubuntu-jdk11","7.5.2-jdk11","7.5.2","7.5","7.17.18-ubuntu-jdk11","7.17.18-jdk11","7.17.18","7.15.1-ubuntu-jdk11","7.15.1-jdk11","7.15.1","8.14-jdk11","8.14.4-jdk11","8.9.6-ubuntu-jdk11","7.6.3-ubuntu-jdk11","7.6.3-jdk11","8.9.6-jdk11","7.6.3","8.14-ubuntu-jdk11","8.14.4-ubuntu-jdk11","8.11-ubuntu-jdk11","8.11-jdk11","8.11.6-ubuntu-jdk11","8.11.6-jdk11","7.19.0-ubuntu-jdk11","7.19.0-jdk11","7.19.0","7.17.19-ubuntu-jdk11","7.17.19-jdk11","7.17.19","7.15.2-ubuntu-jdk11","7.15.2-jdk11","7.15.2","7.6.4-ubuntu-jdk11","7.6.4-jdk11","7.6.4","7.6.0-ubuntu-jdk11","7.6.0-jdk11","7.6.0","8.9.7-ubuntu-jdk11","8.9.7-jdk11","7.19.1-ubuntu-jdk11","7.19.1-jdk11","7.19.1","7.17.2-ubuntu-jdk11","7.17.2","7.17.2-jdk11","7.15-ubuntu-jdk11","7.15-jdk11","7.15.3-ubuntu-jdk11","7.15.3-jdk11","7.15.3","7.15","8.15.0-ubuntu-jdk11","8.15.0-jdk11","8.12.0-ubuntu-jdk11","8.12.0-jdk11","7.6.5-ubuntu-jdk11","7.6.5-jdk11","7.6.5","7.6.1-ubuntu-jdk11","7.6.1-jdk11","7.6.1","8.9.8-ubuntu-jdk11","8.9.8-jdk11","7.19.2-ubuntu-jdk11","7.19.2-jdk11","7.19.2","7.17.20-ubuntu-jdk11","7.17.20-jdk11","7.17.20","7.6.6-ubuntu-jdk11","7.6.6-jdk11","7.6.6","7.6.10-ubuntu-jdk11","7.6.10-jdk11","7.6.10","8.15.1-ubuntu-jdk11","8.15.1-jdk11","8.12.1-ubuntu-jdk11","8.12.1-jdk11","7.19.3-ubuntu-jdk11","7.19.3-jdk11","7.19.3","7.16.0-ubuntu-jdk11","7.16.0-jdk11","8.9-ubuntu-jdk11","7.16.0","8.9-jdk11","8.9.9-ubuntu-jdk11","8.9.9-jdk11","7.6.7-ubuntu-jdk11","7.6.7-jdk11","7.6.7","7.6.11-ubuntu-jdk11","7.6.11-jdk11","7.6.11","7.17-ubuntu-jdk11","7.17-jdk11","7.17.21-ubuntu-jdk11","7.17.21-jdk11","7.17.21","7.17","8.15.2-ubuntu-jdk11","8.15.2-jdk11","8.12.2-ubuntu-jdk11","8.12.2-jdk11","7.19.4-ubuntu-jdk11","7.19.4-jdk11","7.19.4","7.16.1-ubuntu-jdk11","7.16.1-jdk11","7.16.1","7.6.8-ubuntu-jdk11","7.6.8-jdk11","7.6.8","7.6.12-ubuntu-jdk11","7.6.12-jdk11","7.6.12","8.14.0-eap01","8.14.0-eap01-ubuntu-jdk11","8.14.0-eap01-jdk11","7.4-ubuntu-jdk11","7.4-jdk11","7.4.1-ubuntu-jdk11","7.4.1-jdk11","7.4.1","7.4.0-ubuntu-jdk11","7.4.0-jdk11","7.4.0","7.3-ubuntu-jdk11","7.3-jdk11","7.3.2-ubuntu-jdk11","7.3.2-jdk11","7.3.2","7.3","7.4.2-ubuntu-jdk11","7.4.2-jdk11","7.4.2","7.4","7.3.1-ubuntu-jdk11","7.3.1-jdk11","7.3.1","7.3.0-ubuntu-jdk11","7.3.0-jdk11","7.3.0","7.2.5-ubuntu-jdk11","7.2.5-jdk11","7.2.5","7.2.4-ubuntu-jdk11","7.2.4-jdk11","7.2.4","7.2.3-ubuntu-jdk11","7.2.3-jdk11","7.2.3","7.2.2-ubuntu-jdk11","7.2.2-jdk11","7.2.2","7.2.1-ubuntu-jdk11","7.2.1-jdk11","7.2.1","7.2.0-ubuntu-jdk11","7.2.0-jdk11","7.2.0","7.1-ubuntu-jdk11","7.1-jdk11","7.1.4-ubuntu-jdk11","7.1.4-jdk11","7.1.4","7.1.3-ubuntu-jdk11","7.1.3-jdk11","7.1.3","7.1.2-ubuntu-jdk11","7.1.2-jdk11","7.1.2","7.1.1-ubuntu-jdk11","7.1.1-jdk11","7.1.1","7.1.0-ubuntu-jdk11","7.1.0-jdk11","7.1.0","7.1","7.2-ubuntu-jdk11","7.2-jdk11","7.2.6-ubuntu-jdk11","7.2.6-jdk11","7.2.6","7.2","eap-ubuntu-jdk11","eap-jdk11","eap","8.0.0-eap05-ubuntu-jdk11","8.0.0-eap05-jdk11","8.0.0-eap05","7.0-jdk11","7.0-ubuntu-jdk11","7.0.5-ubuntu-jdk11","7.0.5-jdk11","7.0.5","7.0","6.10.17-ubuntu-jdk11","6.10.17","6.10.17-jdk11","6.10","6","6-ubuntu-jdk11","6-jdk11","6.10-ubuntu-jdk11","6.10-jdk11","6.8.2-jdk11","6.10.11-jdk11","6.8.2","6.10.11","6.8.2-ubuntu-jdk11","6.10.11-ubuntu-jdk11","7.0.0-jdk11","7.0.0-ubuntu-jdk11","7.0.0","6.8.3","6.7.1","6.7.1-ubuntu-jdk11","6.10.12-jdk11","6.8.3-ubuntu-jdk11","6.7.1-jdk11","6.10.12","6.8.3-jdk11","6.10.12-ubuntu-jdk11","7.0.1-ubuntu-jdk11","7.0.1-jdk11","7.0.1","6.7.2-jdk11","6.10.3","6.8.4-jdk11","6.7.2","6.10.3-jdk11","6.8","6.10.13-jdk11","6.7.2-ubuntu-jdk11","6.10.3-ubuntu-jdk11","6.8-ubuntu-jdk11","6.10.13-ubuntu-jdk11","6.8-jdk11","6.10.13","6.8.4-ubuntu-jdk11","7.0.2-ubuntu-jdk11","6.8.4","7.0.2","6.7.3-ubuntu-jdk11","7.0.2-jdk11","6.10.4-jdk11","6.7.3","6.10.4-ubuntu-jdk11","6.7.3-jdk11","6.10.14-ubuntu-jdk11","6.10.4","6.10.14","6.10.14-jdk11","7.0.3-jdk11","6.9.0-ubuntu-jdk11","7.0.3","6.7.4-ubuntu-jdk11","6.10.5-jdk11","6.9.0","7.0.3-ubuntu-jdk11","6.7.4","6.10.5-ubuntu-jdk11","6.9.0-jdk11","6.7.4-jdk11","6.10.15-jdk11","6.10.5","6.10.15","6.10.15-ubuntu-jdk11","7.0.4-jdk11","6.9.1-jdk11","6.7-jdk11","7.0.4-ubuntu-jdk11","6.10.7-jdk11","6.9.1","6.7","7.0.4","6.10.7","6.9.1-ubuntu-jdk11","6.7-ubuntu-jdk11","6.10.7-ubuntu-jdk11","6.7.5","6.10.16-jdk11","6.7.5-jdk11","6.7.5-ubuntu-jdk11","6.10.16","6.9.2-ubuntu-jdk11","6.10.16-ubuntu-jdk11","6.10.8","6.9.2-jdk11","6.10.8-ubuntu-jdk11","6.9.2","6.10.8-jdk11","6.9.3-ubuntu-jdk11","6.10.9","6.8.0-jdk11","6.9-jdk11","6.10.9-jdk11","6.8.0-ubuntu-jdk11","6.9.3","6.10.9-ubuntu-jdk11","6.8.0","6.9.3-jdk11","6.9","6.9-ubuntu-jdk11","6.10.2","6.7.0-jdk11","6.8.1-jdk11","6.10.2-jdk11","6.7.0-ubuntu-jdk11","6.8.1","6.10.2-ubuntu-jdk11","6.7.0","6.8.1-ubuntu-jdk11","6.10.0-jdk11","6.10.0-ubuntu-jdk11","6.10.0","6.10.1-jdk11","6.10.1-ubuntu-jdk11","6.10.1","6.10.10-jdk11","6.10.10","6.10.10-ubuntu-jdk11","7.14-ubuntu","7.14-jdk8","7.14.1-ubuntu","7.14-ubuntu-jdk8","7.14.1-jdk8","7.14.1-ubuntu-jdk8","7.11.2-jdk8","7.11-ubuntu","7.11.2-ubuntu","7.11-ubuntu-jdk8","7.11-jdk8","7.11.2-ubuntu-jdk8","7.15.0-jdk8","7.1.2-ubuntu","7.15.0-ubuntu","7.1.2-jdk8","7.15.0-ubuntu-jdk8","7.1.2-ubuntu-jdk8","7.6.4-ubuntu","6.7-jdk8","7.2.2-jdk8","7.6.4-jdk8","7.12.0-jdk8","6.7.5-ubuntu","7.5.1-ubuntu","7.6.4-ubuntu-jdk8","6.7.5-ubuntu-jdk8","7.2.2-ubuntu-jdk8","6.9.0-ubuntu","7.15-ubuntu-jdk8","7.12.0-ubuntu","7.5.1-jdk8","7.1.3-jdk8","7.2.2-ubuntu","6.9.0-jdk8","6.7-ubuntu","7.15.1-ubuntu","7.12.0-ubuntu-jdk8","7.5.1-ubuntu-jdk8","6.9.0-ubuntu-jdk8","6.7.5-jdk8","7.15-ubuntu","7.0.2-ubuntu-jdk8","7.1.3-ubuntu-jdk8","6.7-ubuntu-jdk8","7.15-jdk8","7.0.2-jdk8","7.1.3-ubuntu","7.0.2-ubuntu","7.15.1-jdk8","7.15.1-ubuntu-jdk8","7.2.3-jdk8","7.12.1-ubuntu","7.5.2-ubuntu-jdk8","7.6.5-jdk8","7.2.3-ubuntu","6.9.1-ubuntu","7.5-ubuntu-jdk8","7.6.5-ubuntu-jdk8","7.12.1-jdk8","6.9.1-ubuntu-jdk8","7.1.4-jdk8","7.5-jdk8","7.2.3-ubuntu-jdk8","7.12-jdk8","7.1.4-ubuntu","7.5.2-ubuntu","7.6.5-ubuntu","6.9.1-jdk8","7.0.3-ubuntu-jdk8","7.12-ubuntu-jdk8","6.10.2-jdk8","6.8.0-jdk8","7.12-ubuntu","7.1-ubuntu","7.5.2-jdk8","6.8.0-ubuntu-jdk8","6.10.9-ubuntu-jdk8","7.0.3-jdk8","6.10.2-ubuntu","7.12.1-ubuntu-jdk8","7.1-ubuntu-jdk8","7.5-ubuntu","6.10.9-jdk8","7.0.3-ubuntu","6.10.2-ubuntu-jdk8","7.1.4-ubuntu-jdk8","6.8.0-ubuntu","7.2.4-ubuntu","7.16.0-ubuntu","6.10.9-ubuntu","7.6.6-ubuntu","7.16-jdk8","6.9.2-jdk8","7.1-jdk8","7.16.0-jdk8","7.2.4-ubuntu-jdk8","7.6.6-ubuntu-jdk8","6.9.2-ubuntu-jdk8","7.2.4-jdk8","7.0.4-jdk8","7.6.6-jdk8","6.10.3-ubuntu","6.9.2-ubuntu","7.16.0-ubuntu-jdk8","6.8.1-ubuntu","6.10.3-ubuntu-jdk8","6.7.0-jdk8","7.0.4-ubuntu","6.8.1-ubuntu-jdk8","6.7.0-ubuntu-jdk8","7-ubuntu-jdk8","7.0.4-ubuntu-jdk8","6.10.3-jdk8","6.8.1-jdk8","7-jdk8","7.13.0-jdk8","6.7.0-ubuntu","ubuntu","7.2.5-jdk8","7.6.0-jdk8","7.13.0-ubuntu-jdk8","7.6.7-jdk8","6.9-ubuntu","7.6.0-ubuntu","7.2.5-ubuntu-jdk8","6.10.11-jdk8","7.13.0-ubuntu","7.10.0-ubuntu-jdk8","6.9-jdk8","jdk8","7.10.0-jdk8","6.9.3-ubuntu-jdk8","7.6.7-ubuntu","7.0.5-ubuntu","6.10.4-ubuntu-jdk8","6.8.2-ubuntu-jdk8","ubuntu-jdk8","7.2.5-ubuntu","7.6.0-ubuntu-jdk8","7.10.0-ubuntu","6.9.3-ubuntu","7.6.7-ubuntu-jdk8","6.10.4-ubuntu","6.8.2-ubuntu","7.0-ubuntu","7.16-ubuntu","6.10.4-jdk8","7.0-ubuntu-jdk8","6.7.1-ubuntu-jdk8","6.8.2-jdk8","7.0-jdk8","6.7.1-jdk8","7-ubuntu","6.9-ubuntu-jdk8","6.7.1-ubuntu","6.10.12-jdk8","7.16-ubuntu-jdk8","6.9.3-jdk8","7.13.1-ubuntu-jdk8","6.10.12-ubuntu","7.2.6-jdk8","7.6.1-jdk8","7.10-ubuntu-jdk8","7.6.8-jdk8","7.0.5-jdk8","6.10.12-ubuntu-jdk8","7.2-ubuntu-jdk8","7.10-ubuntu","7.6.8-ubuntu","7.13.1-ubuntu","7.0.5-ubuntu-jdk8","7.2-ubuntu","7.6.1-ubuntu","7.10.1-ubuntu-jdk8","6.8.3-jdk8","7.13-jdk8","6.10.5-ubuntu","7.2.6-ubuntu","7.6.1-ubuntu-jdk8","7.10.1-ubuntu","6.8.3-ubuntu-jdk8","6.7.2-ubuntu-jdk8","7.6.8-ubuntu-jdk8","7.13-ubuntu","7.2-jdk8","6.8.3-ubuntu","6.7.2-ubuntu","7.4.2-jdk8","6.10.5-jdk8","7.13-ubuntu-jdk8","7.2.6-ubuntu-jdk8","7.10-jdk8","7.4-ubuntu-jdk8","6.10.5-ubuntu-jdk8","7.13.1-jdk8","6-ubuntu","6.7.2-jdk8","7.10.1-jdk8","7.4-jdk8","7.4.2-ubuntu","7.6.2-jdk8","7.6-jdk8","7.0.0-ubuntu-jdk8","7.2.0-ubuntu","7.6.2-ubuntu-jdk8","7.0.0-ubuntu","6.10-ubuntu-jdk8","7.6.2-ubuntu","7.1.0-ubuntu","7.2.0-jdk8","6.10.7-jdk8","7.6.9-jdk8","7.0.0-jdk8","6.7.3-jdk8","6.10-ubuntu","7.1.0-ubuntu-jdk8","7.6-ubuntu-jdk8","7.2.0-ubuntu-jdk8","6.7.3-ubuntu-jdk8","6.10-jdk8","6.8-ubuntu-jdk8","7.1.0-jdk8","6.10.7-ubuntu","7.6-ubuntu","6.7.3-ubuntu","6-jdk8","6.8.4-jdk8","6.10.7-ubuntu-jdk8","6.10.13-jdk8","6.8-ubuntu","7.9.1-ubuntu-jdk8","7.6.9-ubuntu","6.10.13-ubuntu-jdk8","6.8.4-ubuntu","7.6.9-ubuntu-jdk8","6.10.13-ubuntu","6.8-jdk8","7.3.0-ubuntu-jdk8","7.6.3-jdk8","7.2.1-ubuntu","7.0.1-ubuntu-jdk8","7.5.0-ubuntu","6-ubuntu-jdk8","6.8.4-ubuntu-jdk8","7.14.0-ubuntu","7.11.1-ubuntu-jdk8","7.6.3-ubuntu-jdk8","7.3.0-ubuntu","7.0.1-jdk8","7.2.1-ubuntu-jdk8","7.5.0-jdk8","6.7.4-ubuntu","7.14.0-jdk8","7.11.1-jdk8","7.6.3-ubuntu","7.0.1-ubuntu","7.5.0-ubuntu-jdk8","7.1.1-ubuntu-jdk8","6.10.8-jdk8","7.14.0-ubuntu-jdk8","7.11.1-ubuntu","7.3.0-jdk8","7.2.1-jdk8","7.1.1-ubuntu","6.7.4-jdk8","6.10.8-ubuntu-jdk8","7.1.1-jdk8","6.7.4-ubuntu-jdk8","6.10.8-ubuntu","7.7.0-ubuntu-jdk8","7.7.0-ubuntu","7.7.0-jdk8","7.7.1-jdk8","7.7.1-ubuntu","7.7-jdk8","7.7-ubuntu","7.7-ubuntu-jdk8","6.10.0-ubuntu","7.7.1-ubuntu-jdk8","6.10.0-jdk8","6.10.0-ubuntu-jdk8","6.10.1-jdk8","6.10.1-ubuntu","7.8.0-ubuntu","6.10.1-ubuntu-jdk8","7.8.0-ubuntu-jdk8","7.8.0-jdk8","6.10.10-ubuntu","6.10.10-ubuntu-jdk8","7.8-ubuntu","6.10.10-jdk8","7.8.1-ubuntu","7.8.1-ubuntu-jdk8","7.8-ubuntu-jdk8","7.8-jdk8","6.10.11-ubuntu-jdk8","7.8.1-jdk8","6.10.11-ubuntu","7.9.0-jdk8","7.9.0-ubuntu","7.9.0-ubuntu-jdk8","7.9.1-jdk8","7.9-ubuntu-jdk8","7.9.1-ubuntu","7.9-ubuntu","7.9-jdk8","7.3.1-ubuntu-jdk8","7.3.1-ubuntu","7.3.1-jdk8","7.3.2-jdk8","7.3.2-ubuntu-jdk8","7.3-ubuntu","7.3-ubuntu-jdk8","7.3-jdk8","7.3.2-ubuntu","7.4.0-ubuntu-jdk8","7.4.0-ubuntu","7.4.0-jdk8","7.4.1-ubuntu-jdk8","7.4.1-ubuntu","7.4.1-jdk8","7.4.2-ubuntu-jdk8","7.4-ubuntu","6.5.0-ubuntu","6.5.0","6.5.0-jdk8","6.5.0-ubuntu-jdk8","6.5.1","6.6.3","6.5.1-ubuntu","6.6.3-ubuntu","6.5.1-ubuntu-jdk8","6.6.3-ubuntu-jdk8","6.5.1-jdk8","6.6.3-jdk8","6.5.2-jdk8","6.6.4-ubuntu","6.5.2-ubuntu-jdk8","6.6-ubuntu-jdk8","6.5.2-ubuntu","6.6","6.5.2","6.6.4-jdk8","6.6.4","6.6.4-ubuntu-jdk8","6.6-jdk8","6.5.1-ubuntu-jdk11","6.6.3-jdk11","6.6-ubuntu","6.5.1-jdk11","6.5-ubuntu","6.6.3-ubuntu-jdk11","6.5.3-jdk8","6.5.3-ubuntu-jdk8","6.5-ubuntu-jdk8","6.5","6.6-ubuntu-jdk11","6.5.2-jdk11","6.5.3-ubuntu","6.5.2-ubuntu-jdk11","6.6.4-jdk11","6.5.3","6.6.4-ubuntu-jdk11","6.5-jdk8","6.6-jdk11","6.5-jdk11","6.5.3-ubuntu-jdk11","6.5-ubuntu-jdk11","6.5.3-jdk11","6.6.0-ubuntu","6.6.0-jdk8","6.6.0-ubuntu-jdk8","6.6.0","6.6.0-jdk11","6.6.0-ubuntu-jdk11","6.6.1-jdk8","6.6.1","6.6.1-ubuntu","6.6.1-ubuntu-jdk8","6.6.1-jdk11","6.6.1-ubuntu-jdk11","6.6.2","6.6.2-ubuntu-jdk8","6.5.0-jdk11","6.6.2-ubuntu-jdk11","6.6.2-jdk8","6.5.0-ubuntu-jdk11","6.6.2-jdk11","6.6.2-ubuntu","6.4.0-ubuntu","6.4.0","6.4.0-ubuntu-jdk8","6.4.0-jdk8","6.0-ubuntu-jdk8","6.4.1-jdk8","6.0.11","6.4.1-ubuntu-jdk8","6.0-jdk8","6.4.1","6.0-ubuntu","6.4.1-ubuntu","6.0.11-ubuntu-jdk8","6.0","6.0.11-jdk8","6.0.11-ubuntu","6.4.2-jdk8","6.4.2-ubuntu-jdk8","6.4.2-ubuntu","6.4.2","6.0.2","6.4.3-jdk8","6.0.2-ubuntu","6.4.3-ubuntu","6.0.2-jdk8","6.4.3","6.0.2-ubuntu-jdk8","6.4.3-ubuntu-jdk8","6.0.3-ubuntu-jdk8","6.4.4-ubuntu","6.0.3","6.4.4-jdk8","6.0.3-jdk8","6.4-jdk8","6.0.3-ubuntu","6.4-ubuntu","6.4","6.4.4-ubuntu-jdk8","6.4-ubuntu-jdk8","6.4.4","6.0.4-jdk8","6.0.4","6.0.4-ubuntu","6.0.4-ubuntu-jdk8","6.0.5-jdk8","6.0.5-ubuntu-jdk8","6.0.5-ubuntu","6.0.5","6.0.6-jdk8","6.0.6-ubuntu-jdk8","6.0.6","6.0.6-ubuntu","6.0.7-ubuntu-jdk8","6.0.7","6.0.7-ubuntu","6.0.7-jdk8","6.0.9-ubuntu","6.0.9","6.0.9-jdk8","6.0.9-ubuntu-jdk8","6.1.0-ubuntu-jdk8","6.1.0-ubuntu","6.1.0","6.1.0-jdk8","6.2.6","6.2.6-ubuntu-jdk8","6.2.6-jdk8","6.2.6-ubuntu","6.2","6.2.7-ubuntu-jdk8","6.2-ubuntu","6.2.7-jdk8","6.2-ubuntu-jdk8","6.2-jdk8","6.2.7-ubuntu","6.2.7","6.3.0-jdk8","6.3.0-ubuntu-jdk8","6.3.0","6.3.0-ubuntu","6.3.1","6.3.1-jdk8","6.3.1-ubuntu-jdk8","6.3.1-ubuntu","6.3.2-ubuntu","6.3.2-jdk8","6.3.2-ubuntu-jdk8","6.3.2","6.3.3","6.3.3-jdk8","6.3.3-ubuntu-jdk8","6.3.3-ubuntu","6.3.4-ubuntu-jdk8","6.3.4-ubuntu","6.3.4","6.3.4-jdk8","6.3.5","6.3.5-ubuntu-jdk8","6.3.5-jdk8","6.3.5-ubuntu","6.3-ubuntu","6.3.6-ubuntu","6.3.6-ubuntu-jdk8","6.3.6","6.3","6.3.6-jdk8","6.3-ubuntu-jdk8","6.3-jdk8","6.1.1-ubuntu","6.1.1","6.1.1-jdk8","6.1.1-ubuntu-jdk8","6.1.2-jdk8","6.1.2","6.1.2-ubuntu","6.1.2-ubuntu-jdk8","6.1.3-ubuntu-jdk8","6.1.3","6.4.0-ubuntu-jdk11","6.2.6-jdk11","6.1.3-jdk8","6.4.0-jdk11","6.2.6-ubuntu-jdk11","6.1.3-ubuntu","6.0-jdk11","6.1.1-ubuntu-jdk11","6.4.1-jdk11","6.0.11-jdk11","6.1.4","6.2.7-ubuntu-jdk11","6.4.1-ubuntu-jdk11","6.0-ubuntu-jdk11","6.1.4-ubuntu-jdk8","6.1.1-jdk11","6.2-ubuntu-jdk11","6.0.11-ubuntu-jdk11","6.1.4-jdk8","6.2-jdk11","6.1.4-ubuntu","6.2.7-jdk11","6.4.2-ubuntu-jdk11","6.1.2-jdk11","6.4.2-jdk11","6.1.2-ubuntu-jdk11","6.2.0-ubuntu-jdk8","6.1.5-jdk8","6.2.0-jdk8","6.1.5-ubuntu","6.2.0-ubuntu","6.1.5","6.2.0","6.0.2-jdk11","6.3.0-ubuntu-jdk11","6.1.5-ubuntu-jdk8","6.4.3-jdk11","6.1.3-ubuntu-jdk11","6.0.2-ubuntu-jdk11","6.3.0-jdk11","6.1.3-jdk11","6.4.3-ubuntu-jdk11","6.2.1","6.1.6-ubuntu-jdk8","6.2.1-ubuntu-jdk8","6.0.3-ubuntu-jdk11","6.1.6-ubuntu","6.3.1-jdk11","6.2.1-ubuntu","6.1.4-ubuntu-jdk11","6.0.3-jdk11","6.1.6","6.3.1-ubuntu-jdk11","6.4.4-ubuntu-jdk11","6.2.1-jdk8","6.1.4-jdk11","6.1.6-jdk8","6.4.4-jdk11","6.4-ubuntu-jdk11","6.4-jdk11","6.0.4-ubuntu-jdk11","6.3.2-ubuntu-jdk11","6.2.0-jdk11","6.1.5-jdk11","6.2.2-ubuntu","6.0.4-jdk11","6.1.7","6.3.2-jdk11","6.2.0-ubuntu-jdk11","6.1.5-ubuntu-jdk11","6.2.2-ubuntu-jdk8","6.1.7-ubuntu-jdk8","6.2.2","6.1.7-ubuntu","6.2.2-jdk8","6.1.7-jdk8","6.0.5-jdk11","6.3.3-ubuntu-jdk11","6.2.1-jdk11","6.1.6-ubuntu-jdk11","6.0.5-ubuntu-jdk11","6.3.3-jdk11","6.2.1-ubuntu-jdk11","6.1.6-jdk11","6.2.3-ubuntu","6.1.8-jdk8","6.0.0-ubuntu","6.2.3-ubuntu-jdk8","6.1.8-ubuntu-jdk8","6.0.0-ubuntu-jdk8","6.2.3","6.1.8-ubuntu","6.0.0-jdk8","6.0.6-ubuntu-jdk11","6.3.4-ubuntu-jdk11","6.2.2-ubuntu-jdk11","6.1.8","6.2.3-jdk8","6.0.0","6.1.7-jdk11","6.0.6-jdk11","6.3.4-jdk11","6.2.2-jdk11","6.1.7-ubuntu-jdk11","6.2.3-ubuntu-jdk11","6.3.5-ubuntu-jdk11","6.0.7-ubuntu-jdk11","6.0.0-ubuntu-jdk11","6.1.8-jdk11","6.2.3-jdk11","6.0.7-jdk11","6.3.5-jdk11","6.0.0-jdk11","6.1.8-ubuntu-jdk11","6.1.9-ubuntu","6.2.4-jdk8","6.0.1-ubuntu-jdk8","6.1-ubuntu-jdk8","6.2.4-ubuntu-jdk8","6.0.1-jdk8","6.1.9-jdk8","6.2.4","6.0.1-ubuntu","6.1-ubuntu","6.2.4-ubuntu","6.0.1","6.0.9-jdk11","6.2.4-ubuntu-jdk11","6.1-jdk8","6.3-jdk11","6.0.1-ubuntu-jdk11","6.1.9-ubuntu-jdk11","6.0.9-ubuntu-jdk11","6.1.9-ubuntu-jdk8","6.2.4-jdk11","6.3.6-jdk11","6.0.1-jdk11","6.1-jdk11","6.1","6.3-ubuntu-jdk11","6.1-ubuntu-jdk11","6.1.9","6.3.6-ubuntu-jdk11","6.1.9-jdk11","6.2.5","6.0.10-ubuntu-jdk8","6.2.5-ubuntu","6.0.10-jdk8","6.1.0-ubuntu-jdk11","6.2.5-jdk11","6.2.5-jdk8","6.0.10-jdk11","6.0.10-ubuntu","6.2.5-ubuntu-jdk8","6.2.5-ubuntu-jdk11","6.1.0-jdk11","6.0.10-ubuntu-jdk11","6.0.10","7-eap","5.16.11-alpine","5-alpine","5.16.11","5.16","5","5.16-alpine","5.16.10","5.16.10-alpine","5.16.9","5.16.9-alpine","5.16.8","5.16.8-alpine","5.16.7-alpine","5.16.7","5.16.6-alpine","5.16.6","5.16.5-alpine","5.16.5","5.9.2-alpine","5.9.2","5.9-alpine","5.9","5.9.1-alpine","5.9.1","5.9.0-alpine","5.9.0","5.8.3-alpine","5.8.3","5.8.2-alpine","5.8.2","5.8.1-alpine","5.8.1","5.8.0-alpine","5.8.0","5.7.4-alpine","5.7.4","5.7-alpine","5.7","5.7.3-alpine","5.7.3","5.7.2-alpine","5.7.2","5.7.1-alpine","5.7.1","5.7.0-alpine","5.7.0","5.6.6-alpine","5.6.6","5.6-alpine","5.6","5.6.5-alpine","5.6.5","5.6.4-alpine","5.6.4","5.6.3-alpine","5.6.3","5.6.2-alpine","5.6.2","5.6.1-alpine","5.6.1","5.6.0-alpine","5.6.0","5.5.9-alpine","5.5.9","5.5-alpine","5.5","5.5.8-alpine","5.5.8","5.5.7-alpine","5.5.7","5.5.6-alpine","5.5.6","5.5.5-alpine","5.5.5","5.5.4-alpine","5.5.4","5.5.3-alpine","5.5.3","5.5.2-alpine","5.5.2","5.5.1-alpine","5.5.1","5.5.0-alpine","5.5.0","5.4.9-alpine","5.4.9","5.4-alpine","5.4","5.4.8-alpine","5.4.8","5.4.7-alpine","5.4.7","5.4.6-alpine","5.4.6","5.4.4-alpine","5.4.4","5.4.3-alpine","5.4.3","5.4.2-alpine","5.4.2","5.4.1-alpine","5.4.1","5.4.0-alpine","5.4.0","5.3.7-alpine","5.3.7","5.3-alpine","5.3","5.3.6-alpine","5.3.6","5.3.5-alpine","5.3.5","5.3.4-alpine","5.3.4","5.3.3-alpine","5.3.3","5.3.2-alpine","5.3.2","5.3.1-alpine","5.3.1","5.3.0-alpine","5.3.0","5.2.8-alpine","5.2.8","5.2-alpine","5.2","5.2.7-alpine","5.2.7","5.2.6-alpine","5.2.6","5.2.5-alpine","5.2.5","5.2.4-alpine","5.2.4","5.2.3-alpine","5.2.3","5.2.2-alpine","5.2.2","5.2.1-alpine","5.2.1","5.2.0-alpine","5.2.0","5.16.4-alpine","5.16.4","5.16.3-alpine","5.16.3","5.16.2-alpine","5.16.2","5.16.1-alpine","5.16.1","5.16.0-alpine","5.16.0","5.15.3-alpine","5.15.3","5.15-alpine","5.15","5.15.2-alpine","5.15.2","5.15.1-alpine","5.15.1","5.15.0-alpine","5.15.0","5.14.4-alpine","5.14.4","5.14-alpine","5.14","5.14.3-alpine","5.14.3","5.14.2-alpine","5.14.2","5.14.1-alpine","5.14.1","5.14.0-alpine","5.14.0","5.13.6-alpine","5.13.6","5.13-alpine","5.13","5.13.5-alpine","5.13.5","5.13.4-alpine","5.13.4","5.13.3-alpine","5.13.3","5.13.1-alpine","5.13.1","5.13.0-alpine","5.13.0","5.12.4-alpine","5.12.4","5.12-alpine","5.12","5.12.3-alpine","5.12.3","5.12.2-alpine","5.12.2","5.12.1-alpine","5.12.1","5.12.0-alpine","5.12.0","5.11.4-alpine","5.11.4","5.11-alpine","5.11","5.11.3-alpine","5.11.3","5.11.2-alpine","5.11.2","5.11.1-alpine","5.11.1","5.10.4-alpine","5.10.4","5.10-alpine","5.10","5.10.3-alpine","5.10.3","5.10.2-alpine","5.10.2","5.10.1-alpine","5.10.1","5.10.0-alpine","5.10.0","5.1.9-alpine","5.1.9","5.1-alpine","5.1","5.1.8-alpine","5.1.8","5.1.7-alpine","5.1.7","5.1.6-alpine","5.1.6","5.1.5-alpine","5.1.5","5.1.4-alpine","5.1.4","5.1.3-alpine","5.1.3","5.1.2-alpine","5.1.2","5.1.1-alpine","5.1.1","5.1.0-alpine","5.1.0","5.0.9-alpine","5.0.9","5.0.8-alpine","5.0.8","5.0.7-alpine","5.0.7","5.0.6-alpine","5.0.6","5.0.5-alpine","5.0.5","5.0.4-alpine","5.0.4","5.0.2-alpine","5.0.2","5.0.10-alpine","5.0.10","5.0-alpine","5.0","5.0.1-alpine","5.0.1","5.0.0-alpine","5.0.0","4.14.5-alpine","4.14.5","4.1.6-alpine","4.1.6","4.1-alpine","4.1","4.11.2-alpine","4.11.2","4.11-alpine","4.11","5.8.4","5.8","4.14","4.13","4.12","4.10","4.9","4.8","4.6","4.7","4.4","4.5","4.3","4.2","4.0"];const E="AAABmg0ODAoPeNp9Ul1v0zAUfc+vsMRbJadJtjGpUiS2JJRONOlaB4SAB9e9W0xTu7JvCv33eImDOoR4vefe4/PhN59hR5bckPiWRNezKJ5FCZkvGUmiJA4yrZALLPkBUrHXotEnu5eBRW6b8KMUoCyw8xH6BVZs2KKce3TJpUJQXAkofh2lOeccIV1dfRhJC7fRXrJuwJzALPL0/qF+pI9XGaPz+uGGspvbkdRx8Awcr0nRdOCnlXnmSlqOUqv0DltureTKg6vOiIZb6J9PoviaRm9pHHs0M9Cf/Rv1Dv/SP5lMyorR99WartZVXmdsUZW03hQOSHtCF+n2TLAB4hlIoYTegSFHo3+AQPK1QTx+m02nzzrko+JQ6MO0HS4oDBffQ5JrojSSnbRo5LZDcMzSEtREdBb1AYwNRzsXff0JgjCwLjG/4mB5giE+JzhbF3esyOn9lxf1F2145a6OWu2V/qmC/2dVdoctmOqptk5PGid+XJx42w3NPPHWQuD9fXJbL8PktfLhU2Av+N2rYMY6uUEFpncY/AYCgfFAMCwCFHzkBlkGH/vRdTeeBSfUMzUDb4W2AhQyM893WPg2Q8oQAYRdBSyKeVUdog==X02jr",toAbsolutePath=u=>{const[,t]=process.argv,d=k(t),n=d.substring(0,d.indexOf("dcdx")+4);return j(n,u.replaceAll("../",""))};var O;!function(u){u.JIRA="jira",u.CONFLUENCE="confluence",u.BITBUCKET="bitbucket",u.BAMBOO="bamboo"}(O||(O={}));const T={name:"shared",driver:"bridge"};let $=class Base extends p{options;sequelize=null;constructor(u){super(),this.options=u}async run(u,t){try{if(!this.sequelize)throw new Error("Database connection does not exist");await this.sequelize.query(u,{logging:t})}catch(t){console.error("An error occurred while trying to run the following SQL query:",u,t),d()}return null}async start(u=this.options.clean){console.log(`Starting instance of ${this.name} ⏳`),u&&await this.down(),await this.up(),this.emit(`${this.name}:up`);if(await this.waitUntilReady()){if(console.log(`Database is ready and accepting connections on localhost:${this.options.port} 🗄️`),await this.onDatabaseReady(),this.emit("db:ready"),this.options.logging){const u=await this.getServiceState();u&&await this.showDockerLogs(u.name)}}else console.log(`Failed to start database ${this.name} ⛔`),d(0)}async stop(u=this.options.prune){if(u)await this.down();else{const u=h(this.getDockerComposeConfig());await a({cwd:g(),configAsString:u,log:!0})}this.emit("db:stopped")}async onDatabaseReady(){}getDockerComposeConfig(){return{version:"3.8",services:{db:this.getService()},networks:{shared:T}}}async up(){const u=h(this.getDockerComposeConfig());return S({cwd:g(),configAsString:u,log:!0})}async down(){const u=h(this.getDockerComposeConfig());return i({cwd:g(),configAsString:u,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async waitUntilReady(){try{const u="mssql"===this.name?"master":this.options.database;return this.sequelize=new v(u,this.options.username,this.options.password,{host:"localhost",port:this.options.port,dialect:this.name.replace("postgresql","postgres"),retry:{max:30,match:[f,A,R,y,D],backoffBase:1e3,backoffExponent:1},logging:!1}),this.sequelize.authenticate().then((()=>!0)).catch((u=>(console.log(u),!1)))}catch(u){return!1}}async getServiceState(){const u=h(this.getDockerComposeConfig());return(await s({configAsString:u,log:!1,commandOptions:["--all"]})).data.services.find((u=>u.name.includes(this.name)))}async showDockerLogs(u){return new Promise(((t,d)=>{e("docker",["logs","-f","-n","5000",u],{cwd:g(),stdio:"inherit"}).on("exit",(u=>0===u?t():d(new Error(`Docker exited with code ${u}`))))}))}};const q={port:1433,database:"dcdx",username:"sa",password:"DataCenterDX!",edition:"Developer",version:"2022"};class MSSQL extends ${name="mssql";driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";options=q;version="2022";get url(){return`jdbc:sqlserver://db:${this.options.port};databaseName=${this.options.database};trustServerCertificate=true`}constructor(u=q){super({...q,...u})}async onDatabaseReady(){await this.run(`CREATE DATABASE ${this.options.database}`),await this.run(`ALTER DATABASE ${this.options.database} COLLATE SQL_Latin1_General_CP1_CS_AS`),await this.run(`ALTER DATABASE ${this.options.database} SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;`)}getService=()=>({image:`mcr.microsoft.com/mssql/server:${this.version}-latest`,ports:[`${this.options.port||1433}:1433`],environment:{ACCEPT_EULA:"y",MSSQL_SA_PASSWORD:this.options.password||"dcdx",MSSQL_PID:this.options.edition},networks:{shared:{aliases:["db","database"]}}})}const x={port:3306,database:"dcdx",username:"dcdx",password:"dcdx",version:"8.0"};class MySQL extends ${name="mysql";driver="com.mysql.jdbc.Driver";options=x;version="8.0";get url(){return`jdbc:mysql://db:${this.options.port}/${this.options.database}?sessionVariables=transaction_isolation='READ-COMMITTED'`}constructor(u=x){super({...x,...u})}async onDatabaseReady(){await this.run(`ALTER DATABASE ${this.options.database} CHARACTER SET 'utf8mb4' COLLATE utf8mb4_bin`)}getService=()=>({image:`mysql:${this.version}`,ports:[`${this.options.port||3306}:3306`],environment:{MYSQL_ROOT_PASSWORD:this.options.password||"dcdx",MYSQL_USER:this.options.username||"dcdx",MYSQL_PASSWORD:this.options.password||"dcdx",MYSQL_DATABASE:this.options.database||"dcdx"},command:["--log_bin_trust_function_creators=1"],networks:{shared:{aliases:["db","database"]}}})}const L={version:"15",database:"dcdx",port:5432,username:"dcdx",password:"dcdx"};class Postgres extends ${name="postgresql";driver="org.postgresql.Driver";options=L;version="15";get url(){return`jdbc:postgresql://db:${this.options.port}/${this.options.database}`}constructor(u=L){super({...L,...u})}getService=()=>({image:`postgres:${this.version}`,ports:[`${this.options.port||5432}:5432`],environment:{POSTGRES_USER:this.options.username||"dcdx",POSTGRES_PASSWORD:this.options.password||"dcdx",POSTGRES_DB:this.options.database||"dcdx",POSTGRES_HOST_AUTH_METHOD:"md5",POSTGRES_INITDB_ARGS:"--encoding=UTF-8 --lc-collate=C --lc-ctype=C"},networks:{shared:{aliases:["db","database"]}}})}const P=j(m(),".dcdx");class Base extends p{options;constructor(u){super(),this.options=u}get baseUrl(){let u="http://localhost";return this.options.port&&(u+=`:${this.options.port}`),this.options.contextPath?`${u}/${this.options.contextPath}`:u}getDatabaseEngine(u){switch(u){case"postgresql":return new Postgres;case"mssql":return new MSSQL;case"mysql":return new MySQL}}async start(){this.options.clean&&await this.down(),await this.build(this.options.version),await this.database.start(this.options.clean),await this.up()}async stop(){if(await this.database.stop(this.options.prune),this.options.prune)await this.down();else{const u=h(this.getDockerComposeConfig());await a({cwd:g(),configAsString:u,log:!0})}this.emit(`${this.name}:stopped`)}async reset(){await this.database.stop(!0),await this.down()}async cp(u){const t=await this.getServiceState();if(t&&t.state.toLowerCase().startsWith("up")){const t=this.getDockerComposeConfig(),d=h(t);await o("cp",[u,`${this.name}:/opt/quickreload/`],{cwd:g(),configAsString:d,log:!1})}}async isApplicationReady(){try{const u=await b.get(`${this.baseUrl}/status`,{validateStatus:()=>!0}).catch((()=>null));if(u&&200===u.status){const{data:t}=u;if("FIRST_RUN"===t.state)return console.log(`The application ${this.name} is ready on ${this.baseUrl} 🎉`),!0}return!1}catch(u){return!1}}getDockerComposeConfig(){return{version:"3.8",services:{[this.name]:this.getService()},networks:{shared:T}}}async up(){const u=this.getDockerComposeConfig(),t=h(u);await r({cwd:g(),configAsString:t,log:!0}),this.emit(`${this.name}:up`);await this.waitUntilReady()?(this.emit(`${this.name}:ready`),await this.tailApplicationLogs()):console.log(`Failed to start ${this.name} ⛔`),d(0)}async down(){const u=h(this.getDockerComposeConfig());await i({cwd:g(),configAsString:u,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async getServiceState(){const u=h(this.getDockerComposeConfig());return(await s({configAsString:u,log:!1,commandOptions:["--all"]})).data.services.find((u=>u.name.includes(this.name)))}async waitUntilReady(u=0){console.log(`Waiting for ${this.name} to become available... ${u}s`);const t=await this.getServiceState();return!!(t&&t.state.toLowerCase().startsWith("up")&&await this.isApplicationReady())||(u>=300?(console.error(`A timeout occurred while waiting for ${this.name} to become available ⛔`),t&&await this.showDockerLogs(t.name),!1):(await new Promise((u=>setTimeout(u,1e3))),this.waitUntilReady(u+1)))}getDockerRepositoryUrl(){return`https://bitbucket.org/atlassian-docker/docker-${"jira"===this.name?"atlassian-jira":"bamboo"===this.name?`${this.name}-server`:`atlassian-${this.name}-server`}.git`}async build(u){const t=this.getDockerRepositoryUrl(),d=j(P,this.name,"source");l(d)?await w({baseDir:d}).pull({"--recurse-submodule":null}):(c(j(P,this.name),{recursive:!0}),await w().clone(t,d,{"--recurse-submodule":null})),await new Promise(((t,n)=>{e("docker",["build","-t",`dcdx/${this.name}:${u}`,"--build-arg",`${this.name.toUpperCase()}_VERSION=${u}`,"."],{cwd:d,stdio:"inherit"}).on("exit",(u=>0===u?t():n(new Error(`Docker exited with code ${u}`))))}))}async tailApplicationLogs(){const u=await this.getServiceState();u&&u.state.toLowerCase().startsWith("up")&&await this.showApplicationLogs(u.name).catch((()=>null))}async showDockerLogs(u){return new Promise(((t,d)=>{e("docker",["logs","-f","-n","5000",u],{cwd:g(),stdio:"inherit"}).on("exit",(u=>0===u?t():d(new Error(`Docker exited with code ${u}`))))}))}async showApplicationLogs(u){return new Promise(((t,d)=>{e("docker",["exec","-i",u,"tail","-F","-n","5000",this.logFilePath],{cwd:g(),stdio:"inherit"}).on("exit",(u=>0===u?t():d(new Error(`Docker exited with code ${u}`))))}))}}class Bitbucket extends Base{name=O.BITBUCKET;database;logFilePath="/var/atlassian/application-data/bitbucket/log/atlassian-bitbucket.log";constructor(u){super(u),this.database=this.getDatabaseEngine(u.database)}getService(){const u=this.getVolumes(),t=this.getEnvironmentVariables();return{build:{context:toAbsolutePath("../../assets"),dockerfile_inline:`\nFROM dcdx/${this.name}:${this.options.version}\nCOPY ./quickreload-5.0.2.jar /var/atlassian/application-data/bitbucket/plugins/installed-plugins/quickreload-5.0.2.jar\nCOPY ./mysql-connector-j-8.3.0.jar /var/atlassian/application-data/bitbucket/lib/mysql-connector-j-8.3.0.jar\nRUN echo "/opt/quickreload" > /var/atlassian/application-data/bitbucket/quickreload.properties; mkdir -p /opt/quickreload; chown -R bitbucket:bitbucket /opt/quickreload;\n\nRUN mkdir -p /var/atlassian/application-data/bitbucket/shared; touch /var/atlassian/application-data/bitbucket/shared/bitbucket.properties; echo "setup.license=${this.options.license||E}" >> /var/atlassian/application-data/bitbucket/shared/bitbucket.properties;\n\nRUN chown -R bitbucket:bitbucket /var/atlassian/application-data/bitbucket`},ports:[`${this.options.port||80}:7990`,...this.options.debug?["5005:5005"]:[]],environment:Object.keys(t).length>0?t:void 0,volumes:u.length>0?u:void 0,networks:["shared"]}}getEnvironmentVariables(){return{...this.options.debug?{JVM_SUPPORT_RECOMMENDED_ARGS:this.getJVMArgs()}:"",JDBC_URL:this.database.url,JDBC_USER:this.database.options.username,JDBC_PASSWORD:this.database.options.password,JDBC_DRIVER:`${this.database.driver}`}}getJVMArgs(){const u=[];return this.options.debug&&(u.push("-Dupm.plugin.upload.enabled=true"),u.push("-Xdebug"),u.push("-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005")),this.options.quickReload&&u.push("-Dquickreload.dirs=/opt/quickreload"),u.join(" ")}getVolumes(){return[...this.options.quickReload?[`${this.options.quickReload}:/opt/quickreload`]:""]}}(async()=>{const d=u.showHelpAfterError(!0).addOption(new t("-v, --version <version>","The version of the host application").choices(C).default("latest")).addOption(new t("-d, --database <name>","The database engine on which the host application will run").choices(["postgresql","mysql","mssql"]).default("postgresql")).addOption(new t("-p, --port <port>","The HTTP port on which the host application will be accessible").default("80")).addOption(new t("-qr, --quickReload <path_to_watch>","Add support for QuickReload and add the provided path to the watch list")).addOption(new t("--clean","Remove data files before starting the database").default(!1)).addOption(new t("--prune","Remove data files when stopping the database").default(!1)).addOption(new t("--debug","Add support for JVM debugger on port 5005")).parse(process.argv).opts(),k=new Bitbucket({version:d.version,database:d.database,port:Number(d.port),quickReload:d.qr,clean:d.clean,prune:d.prune,debug:d.debug});n((async()=>{console.log(`Stopping ${k.name}... ⏳`),await k.stop(),console.log(`Stopped ${k.name} 💪`)}),{wait:3e4}),await k.start()})(),process.on("SIGINT",(()=>{console.log("Received term signal, trying to stop gracefully 💪"),d()}));
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{program as t,Option as e}from"commander";import{gracefulExit as s,asyncExitHook as o}from"exit-hook";import{dirname as a,join as i}from"path";import n from"axios";import{spawn as r}from"child_process";import{stop as c,downAll as d,ps as p,execCompose as l,upAll as h}from"docker-compose/dist/v2.js";import u from"events";import{existsSync as m,mkdirSync as g}from"fs";import{dump as w}from"js-yaml";import{homedir as b}from"os";import{cwd as f}from"process";import S from"simple-git";import{upAll as A}from"docker-compose";import{Sequelize as v,ConnectionError as D,TimeoutError as C,ConnectionTimedOutError as y,ConnectionRefusedError as E,ConnectionAcquireTimeoutError as k}from"sequelize";const T="AAACzg0ODAoPeNp9VO9v2jAQ/Z6/wtK+IYWGsEKHFGmQmJau/GgIm9iYJhMOYprYke1A4a+fSchGKtqPPvvevXv3zp/6gqLHLEb2HbKsTvNzp9lC98MA2ZbdNKYgdiAGntPDQ2z688HcdH/aM7P5o2kZTzQEJiE4pDAiCTgBngaD0b0RCr5f1S9uHfcUWXSQBzuIeQrCCDlb10mo6A4cJTLQSVlIlzFUggpI8ickMbAVEbI+ypIliPG6R5Il5z4kXEF3A0xJp1Gywa8pFQePKHAmDdt6+A9cJVQEK5yWmhMV8HGZLRWkwrF8PZMgpGPfGh7IUNBUUc6cAKRCcVEYrblAaZxtKEOrsqj8V/US85zxXd+fUGwD70ickRwyf7ARACziqUYo+8Irmt/jUYD9iT+YYmNIKFPACAuvyHIaQEUSHYgz0G8rorgC8rp5qvaEZVp3pt0u8sve3TiTCsSIr0A6llGr1VwfdwPsmb25PjjbVwq2EcZcm6nS6DKX+I3iT1yP/Cy42TBe4FAK0WhZVtu6azYbZeZlB0U2wrpnkQoqq40Uyst67RqB9zU8k64olYeqKnGmNCzWiseOUoKwhLLoK1ExkZISVg95cr3ZN/YqdueSYW649/mdrfJAZOQM3b3b96DRuhVk3261kkFvexwe41UQtJN12u5Gz6GcPT7Pn71H70t69CPcbx/a9rcj3rDuwlk4xprKCA5VN+oJjsaB2R/75sQfezM3GIxH5myKT6PN/QErtDwgFQE6E9VDCLUZtN8F30Ko0K9IqXTRubnZ8HpFlZtzAyYUGb/ryOOIcYVWVCpBl5kCjUwlUhyF2mY80WaoXxdzEhOWe2YsNoRRWWxMt6xX/hH6P5uxF8b3rLJIlz1LpQW95pQPvqfLq0kmwohIeLs2l9PMzfQ48LvvWTbfMY1AXDg9KJDLCV2C9HUMH+CaJfOfudi/v0kIGVswLAIUEMQ9X77gqGBdfH0HIzBaV8NadPUCFBn+RiUA4D+IqVQpTTouLVY66aCGX02121",toAbsolutePath=t=>{const[,e]=process.argv,s=a(e),o=s.substring(0,s.indexOf("dcdx")+4);return i(o,t.replaceAll("../",""))};var R;!function(t){t.JIRA="jira",t.CONFLUENCE="confluence",t.BITBUCKET="bitbucket",t.BAMBOO="bamboo"}(R||(R={}));const x={name:"shared",driver:"bridge"};let q=class Base extends u{options;sequelize=null;constructor(t){super(),this.options=t}async run(t,e){try{if(!this.sequelize)throw new Error("Database connection does not exist");await this.sequelize.query(t,{logging:e})}catch(e){console.error("An error occurred while trying to run the following SQL query:",t,e),s()}return null}async start(t=this.options.clean){console.log(`Starting instance of ${this.name} ⏳`),t&&await this.down(),await this.up(),this.emit(`${this.name}:up`);if(await this.waitUntilReady()){if(console.log(`Database is ready and accepting connections on localhost:${this.options.port} 🗄️`),await this.onDatabaseReady(),this.emit("db:ready"),this.options.logging){const t=await this.getServiceState();t&&await this.showDockerLogs(t.name)}}else console.log(`Failed to start database ${this.name} ⛔`),s(0)}async stop(t=this.options.prune){if(t)await this.down();else{const t=w(this.getDockerComposeConfig());await c({cwd:f(),configAsString:t,log:!0})}this.emit("db:stopped")}async onDatabaseReady(){}getDockerComposeConfig(){return{version:"3.8",services:{db:this.getService()},networks:{shared:x}}}async up(){const t=w(this.getDockerComposeConfig());return A({cwd:f(),configAsString:t,log:!0})}async down(){const t=w(this.getDockerComposeConfig());return d({cwd:f(),configAsString:t,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async waitUntilReady(){try{const t="mssql"===this.name?"master":this.options.database;return this.sequelize=new v(t,this.options.username,this.options.password,{host:"localhost",port:this.options.port,dialect:this.name.replace("postgresql","postgres"),retry:{max:30,match:[D,C,y,E,k],backoffBase:1e3,backoffExponent:1},logging:!1}),this.sequelize.authenticate().then((()=>!0)).catch((t=>(console.log(t),!1)))}catch(t){return!1}}async getServiceState(){const t=w(this.getDockerComposeConfig());return(await p({configAsString:t,log:!1,commandOptions:["--all"]})).data.services.find((t=>t.name.includes(this.name)))}async showDockerLogs(t){return new Promise(((e,s)=>{r("docker",["logs","-f","-n","5000",t],{cwd:f(),stdio:"inherit"}).on("exit",(t=>0===t?e():s(new Error(`Docker exited with code ${t}`))))}))}};const L={port:1433,database:"dcdx",username:"sa",password:"DataCenterDX!",edition:"Developer",version:"2022"};class MSSQL extends q{name="mssql";driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";options=L;version="2022";get url(){return`jdbc:sqlserver://db:${this.options.port};databaseName=${this.options.database};trustServerCertificate=true`}constructor(t=L){super({...L,...t})}async onDatabaseReady(){await this.run(`CREATE DATABASE ${this.options.database}`),await this.run(`ALTER DATABASE ${this.options.database} COLLATE SQL_Latin1_General_CP1_CS_AS`),await this.run(`ALTER DATABASE ${this.options.database} SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;`)}getService=()=>({image:`mcr.microsoft.com/mssql/server:${this.version}-latest`,ports:[`${this.options.port||1433}:1433`],environment:{ACCEPT_EULA:"y",MSSQL_SA_PASSWORD:this.options.password||"dcdx",MSSQL_PID:this.options.edition},networks:{shared:{aliases:["db","database"]}}})}const P={port:3306,database:"dcdx",username:"dcdx",password:"dcdx",version:"8.0"};class MySQL extends q{name="mysql";driver="com.mysql.jdbc.Driver";options=P;version="8.0";get url(){return`jdbc:mysql://db:${this.options.port}/${this.options.database}?sessionVariables=transaction_isolation='READ-COMMITTED'`}constructor(t=P){super({...P,...t})}async onDatabaseReady(){await this.run(`ALTER DATABASE ${this.options.database} CHARACTER SET 'utf8mb4' COLLATE utf8mb4_bin`)}getService=()=>({image:`mysql:${this.version}`,ports:[`${this.options.port||3306}:3306`],environment:{MYSQL_ROOT_PASSWORD:this.options.password||"dcdx",MYSQL_USER:this.options.username||"dcdx",MYSQL_PASSWORD:this.options.password||"dcdx",MYSQL_DATABASE:this.options.database||"dcdx"},command:["--log_bin_trust_function_creators=1"],networks:{shared:{aliases:["db","database"]}}})}const O={version:"15",database:"dcdx",port:5432,username:"dcdx",password:"dcdx"};class Postgres extends q{name="postgresql";driver="org.postgresql.Driver";options=O;version="15";get url(){return`jdbc:postgresql://db:${this.options.port}/${this.options.database}`}constructor(t=O){super({...O,...t})}getService=()=>({image:`postgres:${this.version}`,ports:[`${this.options.port||5432}:5432`],environment:{POSTGRES_USER:this.options.username||"dcdx",POSTGRES_PASSWORD:this.options.password||"dcdx",POSTGRES_DB:this.options.database||"dcdx",POSTGRES_HOST_AUTH_METHOD:"md5",POSTGRES_INITDB_ARGS:"--encoding=UTF-8 --lc-collate=C --lc-ctype=C"},networks:{shared:{aliases:["db","database"]}}})}const $=i(b(),".dcdx");class Base extends u{options;constructor(t){super(),this.options=t}get baseUrl(){let t="http://localhost";return this.options.port&&(t+=`:${this.options.port}`),this.options.contextPath?`${t}/${this.options.contextPath}`:t}getDatabaseEngine(t){switch(t){case"postgresql":return new Postgres;case"mssql":return new MSSQL;case"mysql":return new MySQL}}async start(){this.options.clean&&await this.down(),await this.build(this.options.version),await this.database.start(this.options.clean),await this.up()}async stop(){if(await this.database.stop(this.options.prune),this.options.prune)await this.down();else{const t=w(this.getDockerComposeConfig());await c({cwd:f(),configAsString:t,log:!0})}this.emit(`${this.name}:stopped`)}async reset(){await this.database.stop(!0),await this.down()}async cp(t){const e=await this.getServiceState();if(e&&e.state.toLowerCase().startsWith("up")){const e=this.getDockerComposeConfig(),s=w(e);await l("cp",[t,`${this.name}:/opt/quickreload/`],{cwd:f(),configAsString:s,log:!1})}}async isApplicationReady(){try{const t=await n.get(`${this.baseUrl}/status`,{validateStatus:()=>!0}).catch((()=>null));if(t&&200===t.status){const{data:e}=t;if("FIRST_RUN"===e.state)return console.log(`The application ${this.name} is ready on ${this.baseUrl} 🎉`),!0}return!1}catch(t){return!1}}getDockerComposeConfig(){return{version:"3.8",services:{[this.name]:this.getService()},networks:{shared:x}}}async up(){const t=this.getDockerComposeConfig(),e=w(t);await h({cwd:f(),configAsString:e,log:!0}),this.emit(`${this.name}:up`);await this.waitUntilReady()?(this.emit(`${this.name}:ready`),await this.tailApplicationLogs()):console.log(`Failed to start ${this.name} ⛔`),s(0)}async down(){const t=w(this.getDockerComposeConfig());await d({cwd:f(),configAsString:t,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async getServiceState(){const t=w(this.getDockerComposeConfig());return(await p({configAsString:t,log:!1,commandOptions:["--all"]})).data.services.find((t=>t.name.includes(this.name)))}async waitUntilReady(t=0){console.log(`Waiting for ${this.name} to become available... ${t}s`);const e=await this.getServiceState();return!!(e&&e.state.toLowerCase().startsWith("up")&&await this.isApplicationReady())||(t>=300?(console.error(`A timeout occurred while waiting for ${this.name} to become available ⛔`),e&&await this.showDockerLogs(e.name),!1):(await new Promise((t=>setTimeout(t,1e3))),this.waitUntilReady(t+1)))}getDockerRepositoryUrl(){return`https://bitbucket.org/atlassian-docker/docker-${"jira"===this.name?"atlassian-jira":"bamboo"===this.name?`${this.name}-server`:`atlassian-${this.name}-server`}.git`}async build(t){const e=this.getDockerRepositoryUrl(),s=i($,this.name,"source");m(s)?await S({baseDir:s}).pull({"--recurse-submodule":null}):(g(i($,this.name),{recursive:!0}),await S().clone(e,s,{"--recurse-submodule":null})),await new Promise(((e,o)=>{r("docker",["build","-t",`dcdx/${this.name}:${t}`,"--build-arg",`${this.name.toUpperCase()}_VERSION=${t}`,"."],{cwd:s,stdio:"inherit"}).on("exit",(t=>0===t?e():o(new Error(`Docker exited with code ${t}`))))}))}async tailApplicationLogs(){const t=await this.getServiceState();t&&t.state.toLowerCase().startsWith("up")&&await this.showApplicationLogs(t.name).catch((()=>null))}async showDockerLogs(t){return new Promise(((e,s)=>{r("docker",["logs","-f","-n","5000",t],{cwd:f(),stdio:"inherit"}).on("exit",(t=>0===t?e():s(new Error(`Docker exited with code ${t}`))))}))}async showApplicationLogs(t){return new Promise(((e,s)=>{r("docker",["exec","-i",t,"tail","-F","-n","5000",this.logFilePath],{cwd:f(),stdio:"inherit"}).on("exit",(t=>0===t?e():s(new Error(`Docker exited with code ${t}`))))}))}}class Confluence extends Base{name=R.CONFLUENCE;database;logFilePath="/var/atlassian/application-data/confluence/logs/atlassian-confluence.log";constructor(t){super(t),this.database=this.getDatabaseEngine(t.database)}getService(){const t=this.getVolumes(),e=this.getEnvironmentVariables();return{build:{context:toAbsolutePath("../../assets"),dockerfile_inline:`\nFROM dcdx/${this.name}:${this.options.version}\nCOPY ./mysql-connector-j-8.3.0.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-j-8.3.0.jar\nCOPY ./quickreload-5.0.2.jar /opt/atlassian/confluence/confluence/WEB-INF/atlassian-bundled-plugins/quickreload-5.0.2.jar\nRUN echo "/opt/quickreload" > /var/atlassian/application-data/confluence/quickreload.properties; mkdir -p /opt/quickreload; chown -R confluence:confluence /opt/quickreload;\n\nRUN chown -R confluence:confluence /opt/atlassian/confluence`},ports:[`${this.options.port||80}:8090`,...this.options.debug?["5005:5005"]:[]],environment:Object.keys(e).length>0?e:void 0,volumes:t.length>0?t:void 0,networks:["shared"]}}getEnvironmentVariables(){return{...this.options.contextPath?{ATL_TOMCAT_CONTEXTPATH:this.options.contextPath}:"",...this.options.debug?{JVM_SUPPORT_RECOMMENDED_ARGS:this.getJVMArgs()}:"",ATL_LICENSE_KEY:this.options.license||T,ATL_JDBC_URL:this.database.url,ATL_JDBC_USER:this.database.options.username,ATL_JDBC_PASSWORD:this.database.options.password,ATL_DB_TYPE:`${this.database.name}`}}getJVMArgs(){const t=[];return this.options.debug&&(t.push("-Dupm.plugin.upload.enabled=true"),t.push("-Xdebug"),t.push("-Xrunjdwp:transport=dt_socket,address=*:5005,server=y,suspend=n"),t.push("-Dcom.sun.management.jmxremote.port=9999"),t.push("-Dcom.sun.management.jmxremote.rmi.port=9998"),t.push("-Dcom.sun.management.jmxremote.authenticate=false"),t.push("-Dcom.sun.management.jmxremote.ssl=false")),this.options.quickReload&&t.push("-Dquickreload.dirs=/opt/quickreload"),t.join(" ")}getVolumes(){return[...this.options.quickReload?[`${this.options.quickReload}:/opt/quickreload`]:""]}}(async()=>{const s=t.showHelpAfterError(!0).addOption(new e("-v, --version <version>","The version of the host application").choices(["8.9.0"]).default("8.9.0")).addOption(new e("-d, --database <name>","The database engine on which the host application will run").choices(["postgresql","mysql","mssql"]).default("postgresql")).addOption(new e("-p, --port <port>","The HTTP port on which the host application will be accessible").default("80")).addOption(new e("-c, --contextPath <contextPath>","The context path on which the host application will be accessible")).addOption(new e("-qr, --quickReload <path_to_watch>","Add support for QuickReload and add the provided path to the watch list")).addOption(new e("--clean","Remove data files before starting the database").default(!1)).addOption(new e("--prune","Remove data files when stopping the database").default(!1)).addOption(new e("--debug","Add support for JVM debugger on port 5005")).parse(process.argv).opts(),a=new Confluence({version:s.version,database:s.database,port:Number(s.port),contextPath:s.contextPath,quickReload:s.qr,clean:s.clean,prune:s.prune,debug:s.debug});o((async()=>{console.log(`Stopping ${a.name}... ⏳`),await a.stop(),console.log(`Stopped ${a.name} 💪`)}),{wait:3e4}),await a.start()})(),process.on("SIGINT",(()=>{console.log("Received term signal, trying to stop gracefully 💪"),s()}));
|
|
2
|
+
import{program as u,Option as d}from"commander";import{gracefulExit as t,asyncExitHook as n}from"exit-hook";import{dirname as o,join as p}from"path";import e from"axios";import{spawn as k}from"child_process";import{stop as j,downAll as a,ps as b,execCompose as i,upAll as s}from"docker-compose/dist/v2.js";import m from"events";import{existsSync as r,mkdirSync as l}from"fs";import{dump as c}from"js-yaml";import{homedir as h}from"os";import{cwd as g}from"process";import w from"simple-git";import{upAll as f}from"docker-compose";import{Sequelize as S,ConnectionError as A,TimeoutError as v,ConnectionTimedOutError as y,ConnectionRefusedError as D,ConnectionAcquireTimeoutError as C}from"sequelize";var E=["8.7-ubuntu-jdk17","8.7-jdk17","8.7.2-ubuntu-jdk17","8.6.0-jdk17","8.7.2","8.6.0-ubuntu-jdk17","8.7.2-jdk17","8.6.0","8.7","8.5.5-ubuntu-jdk17","8.5.5-jdk17","8.8.0-ubuntu-jdk17","8.8.0-jdk17","8.5.5","8.7-jdk11","8.7-ubuntu-jdk11","8.8.0","8.7.2-ubuntu-jdk11","8.7.2-jdk11","8.1-jdk11","8.1-ubuntu-jdk11","8.1.4-ubuntu-jdk11","8.1.4-jdk11","8.1","8.1.4","7.19-ubuntu-jdk11","7.19-jdk11","7.19.21-ubuntu-jdk11","7.19.21","7.19.21-jdk11","8.8-ubuntu-jdk17","8.8.1-ubi9","8.8.1-ubi9-jdk17","8.8.0-ubuntu-jdk11","8.8.1-jdk17","8.8.0-jdk11","8.6.1","8.6.1-jdk17","8.6.1-ubuntu-jdk17","8.5.6-ubuntu-jdk17","8.5.6-jdk17","8.5.6","8.5.5-ubuntu-jdk11","8.5.1-ubuntu-jdk17","8.5.5-jdk11","8.5.1-jdk17","8.5.1","8.4.4-jdk17","8.4.4-ubuntu-jdk17","8.4.4","8.0.3-jdk11","8.0.3","8.0.3-ubuntu-jdk11","7.20.2-jdk11","7.20.2-ubuntu-jdk11","7.20.2","8.8-jdk17","8.8.1-ubuntu-jdk17","8.8.1","8.8","8.6.0-ubuntu-jdk11","8.0-jdk11","8.0.4-ubuntu-jdk11","8.3.3-ubuntu-jdk17","8.6.0-jdk11","8.0.4-jdk11","8.3.3","8.0","8.3.3-jdk17","7.19.7-ubuntu-jdk11","7.19.7-jdk11","8.8-ubuntu-jdk11","8.8-jdk11","8.8.1-ubuntu-jdk11","7.19.7","7.19.17-ubuntu-jdk11","8.8.1-jdk11","7.19.17-jdk11","7.19.17","8.7.2-ubi9-jdk17","8.6-ubuntu-jdk17","8.7.2-ubi9","8.6-jdk17","8.6.2-ubuntu-jdk17","8.6.2-ubi9-jdk17","8.6.2-ubi9","8.6","8.6.2-jdk17","8.6.2","8.5.7-ubuntu-jdk17","8.5.7","8.5.7-jdk17","8.5.6-ubuntu-jdk11","8.5.6-jdk11","8.5.2-ubuntu-jdk17","8.5.2-jdk17","8.4.5-ubuntu-jdk17","8.4-jdk17","8.5.2","8.4-ubuntu-jdk17","latest","8.4.5-jdk17","8.4.5","8.4.1-ubuntu-jdk17","8.4","8.4.1-jdk17","8.4.1","8.2.0-jdk11","8.2.0-ubuntu-jdk11","8.3.0","8.3.0-ubuntu-jdk17","8.3.0-jdk17","8.0.4","8.0-ubuntu-jdk11","7-jdk11","7-ubuntu-jdk11","7.20-ubuntu-jdk11","7.20-jdk11","7.20.3-jdk11","7.20.3-ubuntu-jdk11","7.20.3","7.20","8.6.1-ubuntu-jdk11","7","8.6.1-jdk11","8.5.1-jdk11","8.5.1-ubuntu-jdk11","8.4.4-ubuntu-jdk11","8.3-ubuntu-jdk17","8.4.4-jdk11","8.3-jdk17","8.3.4-ubuntu-jdk17","8.3.4","8.3.4-jdk17","8.3.3-ubuntu-jdk11","8.3.3-jdk11","8.3","7.19.3-ubuntu-jdk11","7.19.18-jdk11","7.19.3-jdk11","7.19.18-ubuntu-jdk11","7.19.3","7.19.18","7.19.12-ubuntu-jdk11","7.19.12-jdk11","7.19.12","ubuntu-jdk17","ubi9-jdk17","jdk17","ubi9","8-ubuntu-jdk17","8-jdk17","8.9-ubuntu-jdk17","8.9-jdk17","8.9.0-ubuntu-jdk17","8.9.0-ubi9","8.9.0-ubi9-jdk17","8.9.0","8.9.0-jdk17","8.9","8.5-ubuntu-jdk17","8.5-jdk17","8.5.8-ubuntu-jdk17","8","8.5","8.5.8","8.5.8-jdk17","7.19.8-jdk11","7.19.8-ubuntu-jdk11","7.19.8","7.19.0-ubuntu-jdk11","7.19.0-jdk11","7.19.0","8.5.8-ubi9-jdk17","8.5.7-ubuntu-jdk11","8.5.7-jdk11","8.5.8-ubi9","8.5.3-jdk17","8.5.3-ubuntu-jdk17","8.5.3","8.4.2-ubuntu-jdk17","8.4.2-jdk17","8.3.1-ubuntu-jdk17","8.4.2","8.3.1-jdk17","8.6-ubuntu-jdk11","8.3.1","8.6-jdk11","8.6.2-ubuntu-jdk11","8.2.1-jdk11","8.2.1-ubuntu-jdk11","8.6.2-jdk11","8.2.1","8.2.0-ubuntu-jdk17","8.5.2-ubuntu-jdk11","8.5.2-jdk11","8.2.0-jdk17","8.4-ubuntu-jdk11","8.4.5-ubuntu-jdk11","8.4-jdk11","8.4.5-jdk11","8.4.1-ubuntu-jdk11","8.3-ubuntu-jdk11","8.4.1-jdk11","8.3-jdk11","8.3.4-ubuntu-jdk11","8.3.4-jdk11","8.3.0-ubuntu-jdk11","8.3.0-jdk11","8.1.3-jdk17","8.1.3-ubuntu-jdk17","7.19.4-ubuntu-jdk11","7.19.4-jdk11","7.19.4","7.19.1-ubuntu-jdk11","7.19.19-ubuntu-jdk11","7.19.1-jdk11","7.19.19-jdk11","7.19.19","8.8.0-ubi9-jdk17","7.19.14-ubuntu-jdk11","7.19.14-jdk11","8.8.0-ubi9","8.7.1-ubuntu-jdk17","7.19.14","7.19","8.7.1-ubi9-jdk17","7.19.1","8.7.1-jdk17","8.7.1-ubi9","8.7.1","8.6.1-ubi9-jdk17","8.6.1-ubi9","8.6.0-ubi9-jdk17","8.6.0-ubi9","8.5.7-ubi9-jdk17","8.5.7-ubi9","8.5.6-ubi9-jdk17","8.5.6-ubi9","8.5.0-ubuntu-jdk17","8.5.0-jdk17","8.5.0","8.4.0-ubuntu-jdk17","8.4.0","8.4.0-jdk17","8.3.2-jdk17","8.3.2","8.3.2-ubuntu-jdk17","8.2.2-ubuntu-jdk17","8.2.2-ubuntu-jdk11","8.2.2-jdk17","8.2.2-jdk11","8.2.2","8.2.1-ubuntu-jdk17","8.2.1-jdk17","8.1.0-jdk11","8.1.0-ubuntu-jdk11","8.1.0","8.0.3-ubuntu-jdk17","8.0.3-jdk17","8.0.0-ubuntu-jdk11","8.0.0-jdk11","8.2.0","8.0.0","7.19.9-ubuntu-jdk11","7.19.9-jdk11","7.19.9","jdk11","ubuntu-jdk11","8-jdk11","8-ubuntu-jdk11","8.9-ubuntu-jdk11","8.9-jdk11","8.9.0-ubuntu-jdk11","8.9.0-jdk11","8.5-ubuntu-jdk11","8.5-jdk11","8.5.4-ubuntu-jdk17","8.5.8-jdk11","8.5.8-ubuntu-jdk11","8.5.4-jdk17","8.5.4","8.4.3-ubuntu-jdk17","8.4.3-jdk17","8.4.3","8.0.0-ubuntu-jdk17","8.0.0-jdk17","8.5.3-ubuntu-jdk11","8.5.3-jdk11","8.4.2-ubuntu-jdk11","8.4.2-jdk11","8.3.1-ubuntu-jdk11","8.3.1-jdk11","8.2-ubuntu-jdk17","8.2-jdk17","8.2.3-jdk17","8.2.3-ubuntu-jdk17","8.1-ubuntu-jdk17","8.1.4-ubuntu-jdk17","8.1.4-jdk17","8.1-jdk17","8.1.0-ubuntu-jdk17","8.1.0-jdk17","8.0-ubuntu-jdk17","8.0.4-ubuntu-jdk17","8.0-jdk17","8.0.4-jdk17","7.19.5-ubuntu-jdk11","7.19.5","7.19.2-ubuntu-jdk11","7.19.5-jdk11","7.19.2-jdk11","7.19.2","7.19.15-ubuntu-jdk11","7.19.15-jdk11","7.19.10-jdk11","7.19.15","7.19.10-ubuntu-jdk11","7.19.10","8.2-ubuntu-jdk11","8.2-jdk11","8.2.3-jdk11","8.2.3","8.2","8.1.1-ubuntu-jdk11","8.1.1-jdk11","8.1.1","8.0.1-ubuntu-jdk11","8.0.1-jdk11","7.20.0-ubuntu-jdk11","8.0.1","7.20.0-jdk11","7.20.0","8.5.4-jdk11","8.5.4-ubuntu-jdk11","8.5.0-ubuntu-jdk11","8.5.0-jdk11","8.7.1-jdk11","8.7.1-ubuntu-jdk11","8.4.3-jdk11","8.4.3-ubuntu-jdk11","8.4.0-ubuntu-jdk11","8.4.0-jdk11","8.1.1-ubuntu-jdk17","8.1.3-ubuntu-jdk11","8.3.2-ubuntu-jdk11","8.3.2-jdk11","8.0.2-ubuntu-jdk17","8.1.3","8.1.3-jdk11","8.0.2-ubuntu-jdk11","8.2.3-ubuntu-jdk11","8.0.2-jdk11","8.0.1-ubuntu-jdk17","8.0.2","7.20.1","7.20.1-jdk11","7.19.6-ubuntu-jdk11","8.1.1-jdk17","7.19.20","7.19.16-ubuntu-jdk11","7.19.6","8.0.2-jdk17","7.19.20-jdk11","7.19.16","8.0.1-jdk17","7.20.1-ubuntu-jdk11","7.19.6-jdk11","7.19.20-ubuntu-jdk11","7.19.16-jdk11","7.19.11","7.19.11-jdk11","7.19.11-ubuntu-jdk11","eap-ubuntu-jdk11","eap-jdk17","eap-jdk11","9.0.0-m41-jdk17","9.0.0-m41","9.0.0-m41-jdk11","9.0.0-m41-ubuntu-jdk17","9.0.0-m41-ubi9","9.0.0-m41-ubi9-jdk17","eap-ubuntu-jdk17","eap","9.0.0-m41-ubuntu-jdk11","9.0.0-m30-jdk17","9.0.0-m30-ubuntu-jdk17","9.0.0-m30-jdk11","9.0.0-m30","9.0.0-m30-ubuntu-jdk11","9.0.0-m26-ubuntu-jdk17","9.0.0-m26-jdk17","9.0.0-m26-ubuntu-jdk11","9.0.0-m26-ubi9","9.0.0-m26-jdk11","9.0.0-m26","9.0.0-m26-ubi9-jdk17","8.9.0-rc1-ubuntu-jdk11","8.9.0-rc1-jdk11","8.9.0-rc1-ubi9","8.9.0-rc1-jdk17","8.9.0-rc1-ubi9-jdk17","8.9.0-rc1-ubuntu-jdk17","8.9.0-rc1","9.0.0-m23-jdk11","9.0.0-m23-ubi9-jdk17","9.0.0-m23-ubi9","9.0.0-m23-ubuntu-jdk11","9.0.0-m23","9.0.0-m23-jdk17","9.0.0-m23-ubuntu-jdk17","8.9.0-beta2-ubi9-jdk17","8.9.0-beta2-ubi9","8.9.0-beta2-ubuntu-jdk17","8.9.0-beta2-jdk17","8.9.0-beta2-jdk11","8.9.0-beta2-ubuntu-jdk11","8.9.0-beta2","9.0.0-m16-ubuntu-jdk17","9.0.0-m16-jdk17","9.0.0-m16-ubi9-jdk17","9.0.0-m16-ubi9","9.0.0-m16-jdk11","9.0.0-m16-ubuntu-jdk11","9.0.0-m16","8.9.0-m58-ubuntu-jdk11","8.9.0-m58-jdk11","8.9.0-m58-jdk17","8.9.0-m58-ubuntu-jdk17","8.9.0-m58","9.0.0-m15-jdk17","9.0.0-m15-ubuntu-jdk17","9.0.0-m15","9.0.0-m15-jdk11","9.0.0-m15-ubuntu-jdk11","8.9.0-m50-jdk17","8.9.0-m50-ubuntu-jdk11","8.9.0-m50-ubuntu-jdk17","8.9.0-m50","8.9.0-m50-jdk11","9.0.0-m14-ubuntu-jdk11","9.0.0-m14-jdk17","9.0.0-m14-jdk11","9.0.0-m14","9.0.0-m14-ubuntu-jdk17","9.0.0-m13-jdk11","9.0.0-m13-jdk17","9.0.0-m13","9.0.0-m13-ubuntu-jdk17","9.0.0-m13-ubuntu-jdk11","8.9.0-m43-jdk17","8.9.0-m43","8.9.0-m43-jdk11","8.9.0-m43-ubuntu-jdk11","8.9.0-m43-ubuntu-jdk17","9.0.0-m11-jdk17","9.0.0-m11","9.0.0-m11-ubuntu-jdk17","9.0.0-m10-ubuntu-jdk11","9.0.0-m10-jdk11","9.0.0-m10-ubuntu-jdk17","9.0.0-m10-jdk17","9.0.0-m10","9.0.0-m09-ubuntu-jdk17","9.0.0-m09-jdk17","9.0.0-m09-ubuntu-jdk11","9.0.0-m09-jdk11","9.0.0-m09","8.8.0-rc1-jdk17","8.8.0-rc1-jdk11","8.8.0-rc1-ubuntu-jdk11","8.8.0-rc1","8.8.0-rc1-ubuntu-jdk17","9.0.0-m08-jdk17","9.0.0-m08-ubuntu-jdk17","9.0.0-m08","9.0.0-m08-ubuntu-jdk11","9.0.0-m08-jdk11","8.8.0-beta1-jdk17","8.8.0-beta1-ubuntu-jdk17","8.8.0-beta1-jdk11","8.8.0-beta1","8.8.0-beta1-ubuntu-jdk11","9.0.0-m07-ubuntu-jdk17","9.0.0-m07-jdk17","9.0.0-m07-jdk11","9.0.0-m07","9.0.0-m07-ubuntu-jdk11","7.16.2-ubuntu-jdk11","7.16.2","7.16.2-jdk11","7.13.7-ubuntu-jdk11","7.13.7-jdk11","7.13.7","7.11.0-ubuntu-jdk11","7.11.0-jdk11","7.11.0","7.13.12-ubuntu-jdk11","7.13.12-jdk11","7.13.12","7.16.3-ubuntu-jdk11","7.16.3-jdk11","7.16.3","7.13.8-ubuntu-jdk11","7.13.8-jdk11","7.13.8","7.11.1-ubuntu-jdk11","7.11.1-jdk11","7.11.1","7.13.13-ubuntu-jdk11","7.13.13-jdk11","7.13.13","7.16.4-ubuntu-jdk11","7.16.4-jdk11","7.16.4","7.11.2-ubuntu-jdk11","7.11.2-jdk11","7.11.2","7.13.9-ubuntu-jdk11","7.13.9-jdk11","7.13.9","7.16-ubuntu-jdk11","7.16-jdk11","7.16.5-ubuntu-jdk11","7.16.5-jdk11","7.16.5","7.16","7.13.14-ubuntu-jdk11","7.13.14-jdk11","7.13.14","7.14.0-ubuntu-jdk11","7.14.0-jdk11","7.14.0","7.11.3-ubuntu-jdk11","7.11.3-jdk11","7.11.3","7.13.15-ubuntu-jdk11","7.13.15-jdk11","7.11-ubuntu-jdk11","7.13.15","7.11.6-ubuntu-jdk11","7.11.6","7.11","7.17.0-ubuntu-jdk11","7.17.0-jdk11","7.17.0","7.14.1-ubuntu-jdk11","7.14.1-jdk11","7.14.1","7.11-jdk11","7.11.6-jdk11","7.13.16-ubuntu-jdk11","7.13.16-jdk11","7.13.16","7.17.1-ubuntu-jdk11","7.17.1-jdk11","7.17.1","7.14.2-ubuntu-jdk11","7.14.2-jdk11","7.14.2","7.13.17-ubuntu-jdk11","7.13.17-jdk11","7.13.17","7.12.0-ubuntu-jdk11","7.12.0-jdk11","7.12.0","7.17.2-ubuntu-jdk11","7.17.2-jdk11","7.17.2","7.14.3-ubuntu-jdk11","7.14.3-jdk11","7.14.3","7.13.18-ubuntu-jdk11","7.13.18-jdk11","7.13.18","7.17.3-ubuntu-jdk11","7.17.3-jdk11","7.17.3","7.14-ubuntu-jdk11","7.14-jdk11","7.14.4-ubuntu-jdk11","7.14.4-jdk11","7.14.4","7.14","7.12.1-ubuntu-jdk11","7.12.1-jdk11","7.12.1","7.17.4-ubuntu-jdk11","7.17.4-jdk11","7.17.4","7.13.19-ubuntu-jdk11","7.13.19-jdk11","7.13.19","7.12.2-ubuntu-jdk11","7.12.2-jdk11","7.12.2","7.15.0-ubuntu-jdk11","7.15.0-jdk11","7.15.0","7.13.2-ubuntu-jdk11","7.13.2-jdk11","7.13.2","7.12.3-ubuntu-jdk11","7.12.3-jdk11","7.12.3","7.17-ubuntu-jdk11","7.17-jdk11","7.17.5-ubuntu-jdk11","7.17.5-jdk11","7.17.5","7.17","7.15.1-ubuntu-jdk11","7.15.1-jdk11","7.15.1","7.13-ubuntu-jdk11","7.13-jdk11","7.13.20-ubuntu-jdk11","7.13.20-jdk11","7.13.20","7.13","7.12.4-ubuntu-jdk11","7.12.4-jdk11","7.12.4","7.18.0-ubuntu-jdk11","7.18.0-jdk11","7.18.0","7.15.2-ubuntu-jdk11","7.15.2-jdk11","7.15.2","7.12-ubuntu-jdk11","7.12.5","7.12-jdk11","7.12.5-ubuntu-jdk11","7.12.5-jdk11","7.12","7.15-ubuntu-jdk11","7.15-jdk11","7.15.3-ubuntu-jdk11","7.15.3-jdk11","7.15.3","7.15","7.13.3-ubuntu-jdk11","7.13.3-jdk11","7.13.3","7.18.1-ubuntu-jdk11","7.18.1-jdk11","7.18.1","7.18.2-ubuntu-jdk11","7.18.2-jdk11","7.18.2","7.13.4-ubuntu-jdk11","7.13.4-jdk11","7.13.4","7.13.0-ubuntu-jdk11","7.13.0-jdk11","7.13.0","7.16.0-ubuntu-jdk11","7.16.0-jdk11","7.16.0","7.18-ubuntu-jdk11","7.18-jdk11","7.18.3-ubuntu-jdk11","7.18.3-jdk11","7.18.3","7.18","7.13.5-ubuntu-jdk11","7.13.5-jdk11","7.13.5","7.13.1-ubuntu-jdk11","7.13.1-jdk11","7.13.1","7.16.1-ubuntu-jdk11","7.16.1-jdk11","7.16.1","7.13.6-ubuntu-jdk11","7.13.6-jdk11","7.13.6","7.13.11-ubuntu-jdk11","7.13.11-jdk11","7.13.11","8.8.0-m61-ubuntu-jdk11","8.8.0-m61-jdk11","8.8.0-m61","8.8.0-m61-ubuntu-jdk17","8.8.0-m61-jdk17","8.8.0-m46-ubuntu-jdk11","8.8.0-m46-ubuntu-jdk17","8.8.0-m46-jdk17","8.8.0-m46","8.8.0-m46-jdk11","8.7.0-rc1-ubuntu-jdk17","8.7.0-rc1-jdk17","8.7.0-rc1-jdk11","8.7.0-rc1","8.7.0-rc1-ubuntu-jdk11","8.7.0-beta1-ubuntu-jdk11","8.7.0-beta1","8.7.0-beta1-jdk11","8.7.0-beta1-jdk17","8.7.0-beta1-ubuntu-jdk17","8.7.0-m48-ubuntu-jdk17","8.7.0-m48-jdk17","8.7.0-m48-jdk11","8.7.0-m48-ubuntu-jdk11","8.7.0-m48","8.7.0-m41-ubuntu-jdk17","8.7.0-m41-ubuntu-jdk11","8.7.0-m41-jdk17","8.7.0-m41-jdk11","8.7.0-m41","8.6.0-rc1-ubuntu-jdk17","8.6.0-rc1-jdk17","8.6.0-rc1-ubuntu-jdk11","8.6.0-rc1-jdk11","8.6.0-rc1","8.6.0-beta2-jdk17","8.6.0-beta2","8.6.0-beta2-jdk11","8.6.0-beta2-ubuntu-jdk11","8.6.0-beta2-ubuntu-jdk17","8.6.0-beta1-jdk17","8.6.0-beta1-ubuntu-jdk17","8.6.0-beta1","8.6.0-beta1-ubuntu-jdk11","8.6.0-beta1-jdk11","8.6.0-m85-ubuntu-jdk17","8.6.0-m85-jdk17","8.6.0-m85","8.6.0-m85-ubuntu-jdk11","8.6.0-m85-jdk11","8.6.0-m79-jdk11","8.6.0-m79-ubuntu-jdk11","8.6.0-m79-ubuntu-jdk17","8.6.0-m79-jdk17","8.6.0-m79","8.5.0-rc1-jdk11","8.5.0-rc1","8.5.0-rc1-jdk17","8.5.0-rc1-ubuntu-jdk11","8.5.0-rc1-ubuntu-jdk17","8.5.0-beta1-ubuntu-jdk17","8.5.0-beta1-jdk17","8.5.0-beta1","8.5.0-beta1-ubuntu-jdk11","8.5.0-beta1-jdk11","8.5.0-m06-jdk17","8.5.0-m06-ubuntu-jdk17","8.5.0-m06-jdk11","8.5.0-m06","8.5.0-m06-ubuntu-jdk11","8.5.0-m05-jdk17","8.5.0-m05-jdk11","8.5.0-m05-ubuntu-jdk17","8.5.0-m05-ubuntu-jdk11","8.5.0-m05","8.5.0-m04-jdk17","8.5.0-m04-ubuntu-jdk11","8.5.0-m04-ubuntu-jdk17","8.5.0-m04","8.5.0-m04-jdk11","8.4.0-rc2-ubuntu-jdk17","8.4.0-rc2-jdk17","8.4.0-rc2-ubuntu-jdk11","8.4.0-rc2","8.4.0-rc2-jdk11","8.4.0-rc1-jdk17","8.4.0-rc1-ubuntu-jdk17","8.4.0-rc1-jdk11","8.4.0-rc1","8.4.0-rc1-ubuntu-jdk11","8.4.0-beta1-jdk17","8.4.0-beta1-ubuntu-jdk17","8.4.0-beta1","8.4.0-beta1-jdk11","8.4.0-beta1-ubuntu-jdk11","8.4.0-m48-jdk17","8.4.0-m48-ubuntu-jdk11","8.4.0-m48-jdk11","8.4.0-m48-ubuntu-jdk17","8.4.0-m48","8.4.0-m22","8.4.0-m22-jdk17","8.4.0-m22-ubuntu-jdk11","8.4.0-m22-jdk11","8.4.0-m22-ubuntu-jdk17","8.4.0-m21-ubuntu-jdk17","8.4.0-m21-jdk17","8.4.0-m21","8.4.0-m21-ubuntu-jdk11","8.4.0-m21-jdk11","8.3.0-rc2-ubuntu-jdk11","8.3.0-rc2-jdk11","8.3.0-rc2-ubuntu-jdk17","8.3.0-rc2-jdk17","8.3.0-rc2","8.3.0-rc1-ubuntu-jdk11","8.3.0-rc1-ubuntu-jdk17","8.3.0-rc1-jdk11","8.3.0-rc1-jdk17","8.3.0-rc1","8.3.0-beta1-jdk11","8.3.0-beta1-jdk17","8.3.0-beta1-ubuntu-jdk11","8.3.0-beta1","8.3.0-beta1-ubuntu-jdk17","8.3.0-tinymce6-m01-ubuntu-jdk11","8.3.0-tinymce6-m01","8.3.0-tinymce6-m01-ubuntu-jdk17","8.3.0-tinymce6-m01-jdk11","8.3.0-tinymce6-m01-jdk17","8.3.0-m48","8.3.0-m48-ubuntu-jdk17","8.3.0-m48-jdk11","8.3.0-m48-ubuntu-jdk11","8.3.0-m48-jdk17","8.3.0-m42-ubuntu-jdk17","8.3.0-m42-jdk17","8.3.0-m42-jdk11","8.3.0-m42-ubuntu-jdk11","8.3.0-m42","8.3.0-m37-jdk11","8.3.0-m37-ubuntu-jdk11","8.3.0-m37-jdk17","8.3.0-m37","8.3.0-m37-ubuntu-jdk17","8.3.0-m31-ubuntu-jdk17","8.3.0-m31","8.3.0-m31-ubuntu-jdk11","8.3.0-m31-jdk11","8.3.0-m31-jdk17","8.2.0-rc1-jdk11","8.2.0-rc1-jdk17","8.2.0-rc1-ubuntu-jdk11","8.2.0-rc1-ubuntu-jdk17","8.2.0-rc1","8.2.0-beta2","8.2.0-beta2-ubuntu-jdk11","8.2.0-beta2-jdk17","8.2.0-beta2-ubuntu-jdk17","8.2.0-beta2-jdk11","8.2.0-beta1-ubuntu-jdk11","8.2.0-beta1-ubuntu-jdk17","8.2.0-beta1-jdk17","8.2.0-beta1-jdk11","8.2.0-beta1","8.2.0-m36-jdk11","8.2.0-m36-jdk17","8.2.0-m36","8.2.0-m36-ubuntu-jdk17","8.2.0-m36-ubuntu-jdk11","8.2.0-m27-ubuntu-jdk11","8.2.0-m27-jdk17","8.2.0-m27-jdk11","8.2.0-m27","8.2.0-m27-ubuntu-jdk17","8.2.0-m20","8.2.0-m20-jdk11","8.2.0-m20-ubuntu-jdk11","8.2.0-m20-ubuntu-jdk17","8.2.0-m20-jdk17","8.1.0-rc1-jdk11","8.1.0-rc1","8.1.0-rc1-ubuntu-jdk11","8.1.0-rc1-ubuntu-jdk17","8.1.0-rc1-jdk17","8.1.0-beta2","8.1.0-beta2-jdk11","8.1.0-beta2-ubuntu-jdk11","8.1.0-beta2-ubuntu-jdk17","8.1.0-beta2-jdk17","8.1.0-beta1-jdk11","8.1.0-beta1","8.1.0-beta1-ubuntu-jdk11","8.1.0-beta1-jdk17","8.1.0-beta1-ubuntu-jdk17","8.1.0-m78-jdk11","8.1.0-m78-ubuntu-jdk17","8.1.0-m78-ubuntu-jdk11","8.1.0-m78","8.1.0-m78-jdk17","7.6.2-ubuntu-jdk11","7.6.2-jdk11","7.6.2","7.6.1-ubuntu-jdk11","7.6.1-jdk11","7.6.1","7.9-ubuntu-jdk11","7.9-jdk11","7.9.3-ubuntu-jdk11","7.9.3-jdk11","7.9.3","7.9.1-ubuntu-jdk11","7.9.1-jdk11","7.9.1","7.9.0-ubuntu-jdk11","7.9.0-jdk11","7.9.0","7.9","7.8-ubuntu-jdk11","7.8-jdk11","7.8.3-ubuntu-jdk11","7.8.3-jdk11","7.8.3","7.8","7.6.0-ubuntu-jdk11","7.6.0-jdk11","7.6.0","7.5-ubuntu-jdk11","7.5-jdk11","7.5.2-ubuntu-jdk11","7.5.2-jdk11","7.8.1-ubuntu-jdk11","7.8.1-jdk11","7.5.2","7.8.1","7.8.0-ubuntu-jdk11","7.8.0-jdk11","7.5.1-ubuntu-jdk11","7.8.0","7.7-ubuntu-jdk11","7.5.1-jdk11","7.7-jdk11","7.7.4-ubuntu-jdk11","7.5.1","7.7.4-jdk11","7.7.4","7.5.0-ubuntu-jdk11","7.7.3-ubuntu-jdk11","7.7.3-jdk11","7.7.3","7.5.0-jdk11","7.7.2-ubuntu-jdk11","7.7.2-jdk11","7.5.0","7.7.2","7.7","7.6-ubuntu-jdk11","7.5","7.6-jdk11","7.6.3-ubuntu-jdk11","7.4.9-ubuntu-jdk11","7.6.3-jdk11","7.6.3","7.6","7.4.9-jdk11","7.4.9","7.4.17-ubuntu-jdk11","7.4.17-jdk11","7.4-ubuntu-jdk11","7.4.17","7.4-jdk11","7.4.16-ubuntu-jdk11","7.4.8-ubuntu-jdk11","7.4.16-jdk11","7.4.8-jdk11","7.4.8","7.4.16","7.4.7-ubuntu-jdk11","7.4.7-jdk11","7.4.7","7.4.15-ubuntu-jdk11","7.4.6-ubuntu-jdk11","7.4.6-jdk11","7.4.6","7.4.15-jdk11","7.4.5-ubuntu-jdk11","7.4.5-jdk11","7.4.5","7.4.4-ubuntu-jdk11","7.4.15","7.4.4-jdk11","7.4.4","7.4.3-ubuntu-jdk11","7.4.3-jdk11","7.4.14-ubuntu-jdk11","7.4.3","7.4.1-ubuntu-jdk11","7.4.1-jdk11","7.4.14-jdk11","7.4.18-ubuntu-jdk11","7.4.18-jdk11","7.4.18","7.4.14","7.4.13-ubuntu-jdk11","7.4.13-jdk11","7.4.13","7.4.12-ubuntu-jdk11","7.4.12-jdk11","7.4.12","7.4.11-ubuntu-jdk11","7.4.11-jdk11","7.4.11","7.4.10-ubuntu-jdk11","7.4.10-jdk11","7.4.10","7.4.1","7.4.0-ubuntu-jdk11","7.4.0-jdk11","7.4.0","7.4","7.10-ubuntu-jdk11","7.10-jdk11","7.10.2-ubuntu-jdk11","7.10.2-jdk11","7.10.2","7.10.1-ubuntu-jdk11","7.10.1-jdk11","7.10.1","7.10.0-ubuntu-jdk11","7.10.0-jdk11","7.10.0","7.10","8.0.0-rc1-ubuntu-jdk11","8.0.0-rc1-jdk17","8.0.0-rc1-jdk11","8.0.0-rc1","8.0.0-rc1-ubuntu-jdk17","8.0.0-beta1-ubuntu-jdk17","8.0.0-beta1","8.0.0-beta1-ubuntu-jdk11","8.0.0-beta1-jdk17","8.0.0-beta1-jdk11","8.0.0-m90-ubuntu-jdk17","8.0.0-m90-ubuntu-jdk11","8.0.0-m90-jdk11","8.0.0-m90-jdk17","8.0.0-m90","8.0.0-m89-ubuntu-jdk17","8.0.0-m89-jdk17","8.0.0-m89-jdk11","8.0.0-m89","8.0.0-m89-ubuntu-jdk11","8.0.0-m86","8.0.0-m86-ubuntu-jdk17","8.0.0-m86-jdk11","8.0.0-m86-ubuntu-jdk11","8.0.0-m86-jdk17","8.0.0-m82-ubuntu-jdk11","8.0.0-m82-jdk11","8.0.0-m82","8.0.0-m82-ubuntu-jdk17","8.0.0-m82-jdk17","8.0.0-m76-ubuntu-jdk17","8.0.0-m76-ubuntu-jdk11","8.0.0-m76-jdk17","8.0.0-m76","8.0.0-m76-jdk11","8.0.0-m69","8.0.0-m69-ubuntu-jdk11","8.0.0-m69-jdk17","8.0.0-m69-ubuntu-jdk17","8.0.0-m69-jdk11","8.0.0-m60","8.0.0-m60-jdk17","8.0.0-m60-jdk11","8.0.0-m60-ubuntu-jdk17","8.0.0-m60-ubuntu-jdk11","7.20.0-rc1-ubuntu-jdk11","7.20.0-rc1-jdk11","7.20.0-rc1","8.0.0-struts-m48-ubuntu-jdk17","8.0.0-struts-m48-ubuntu-jdk11","8.0.0-struts-m48-jdk11","8.0.0-struts-m48","8.0.0-struts-m48-jdk17","7.20.0-beta4-jdk11","7.20.0-beta4-ubuntu-jdk11","7.20.0-beta4","8.0.0-m45-ubuntu-jdk11","8.0.0-m45-jdk17","8.0.0-m45-jdk11","8.0.0-m45-ubuntu-jdk17","8.0.0-m45","8.0.0-struts-m39-ubuntu-jdk11","8.0.0-struts-m39-ubuntu-jdk17","8.0.0-struts-m39-jdk11","8.0.0-struts-m39-jdk17","8.0.0-struts-m39","8.0.0-struts-m027-ubuntu-jdk11","8.0.0-struts-m027-ubuntu-jdk17","8.0.0-struts-m027","8.0.0-struts-m027-jdk17","8.0.0-struts-m027-jdk11","7.20.0-beta2-ubuntu-jdk11","7.20.0-beta2-jdk11","7.20.0-beta2-jdk17","7.20.0-beta2","7.20.0-beta2-ubuntu-jdk17","8.0.0-m026-ubuntu-jdk11","8.0.0-m026-ubuntu-jdk17","8.0.0-m026","8.0.0-m026-jdk17","8.0.0-m026-jdk11","8.0.0-struts-m020-ubuntu-jdk17","8.0.0-m023-jdk17","8.0.0-m023-ubuntu-jdk17","8.0.0-struts-m020-jdk17","7.20.0-m104-jdk17","7.20.0-m104-ubuntu-jdk17","8.0.0-m023-jdk11","7.20.0-m104","8.0.0-m023-ubuntu-jdk11","7.20.0-m104-ubuntu-jdk11","8.0.0-m023","7.20.0-m104-jdk11","8.0.0-m021-ubuntu-jdk11","8.0.0-m021","8.0.0-m021-jdk11","7.20.0-m99","7.20.0-m99-ubuntu-jdk11","7.20.0-m99-jdk11","8.0.0-struts-m020-jdk11","8.0.0-struts-m020-ubuntu-jdk11","8.0.0-struts-m020","8.0.0-m020-jdk11","8.0.0-m020","8.0.0-m020-ubuntu-jdk11","7.20.0-m78-ubuntu-jdk11","7.20.0-m78","7.20.0-m78-jdk11","7.19.0-rc3-jdk11","7.19.0-rc3-ubuntu-jdk11","7.19.0-rc3","8.0.0-m018-ubuntu-jdk11","8.0.0-m018-jdk11","8.0.0-m018","8.0.0-m017-ubuntu-jdk11","8.0.0-m017-jdk11","8.0.0-m017","7.19.0-rc2-ubuntu-jdk11","7.19.0-rc2-jdk11","7.19.0-rc2","8.0.0-m015-ubuntu-jdk11","8.0.0-m015","8.0.0-m015-jdk11","7.19.0-rc1-jdk11","7.19.0-rc1","7.19.0-rc1-ubuntu-jdk11","7.19.0-beta1-jdk11","7.19.0-beta1-ubuntu-jdk11","7.19.0-beta1","8.0.0-m014","8.0.0-m014-ubuntu-jdk11","8.0.0-m014-jdk11","7.17-ubuntu-18.04-adoptopenjdk11","7.17-ubuntu","7.17-adoptopenjdk11","7.17.5-ubuntu-18.04-adoptopenjdk11","7.17.5-ubuntu","7.17.5-adoptopenjdk11","eap-ubuntu-18.04-adoptopenjdk11","eap-ubuntu","8.0.0-m012-ubuntu-18.04-adoptopenjdk11","eap-adoptopenjdk11","8.0.0-m012-ubuntu","8.0.0-m012-adoptopenjdk11","8.0.0-m012","8.0.0-m012-jdk11","7.19.0-m02-jdk11","7.19.0-m02-ubuntu-18.04-adoptopenjdk11","7.19.0-m02-adoptopenjdk11","7.19.0-m02-ubuntu","7.19.0-m02","ubuntu-18.04-adoptopenjdk11","ubuntu","adoptopenjdk11","7-ubuntu-18.04-adoptopenjdk11","7-ubuntu","7-adoptopenjdk11","7.9.1-ubuntu-18.04-adoptopenjdk11","7.9.1-ubuntu","7.9.1-adoptopenjdk11","7.9.0-ubuntu-18.04-adoptopenjdk11","7.9.0-ubuntu","7.9.0-adoptopenjdk11","7.8-ubuntu-18.04-adoptopenjdk11","7.8-ubuntu","7.8-adoptopenjdk11","7.8.3-ubuntu-18.04-adoptopenjdk11","7.8.3-ubuntu","7.8.3-adoptopenjdk11","7.8.1-ubuntu-18.04-adoptopenjdk11","7.8.1-ubuntu","7.8.1-adoptopenjdk11","7.8.0-ubuntu-18.04-adoptopenjdk11","7.8.0-ubuntu","7.8.0-adoptopenjdk11","7.7-ubuntu-18.04-adoptopenjdk11","7.7-ubuntu","7.7-adoptopenjdk11","7.7.4-ubuntu-18.04-adoptopenjdk11","7.7.4-ubuntu","7.7.4-adoptopenjdk11","7.7.3-ubuntu-18.04-adoptopenjdk11","7.7.3-ubuntu","7.7.3-adoptopenjdk11","7.7.2-ubuntu-18.04-adoptopenjdk11","7.7.2-ubuntu","7.7.2-adoptopenjdk11","7.6-ubuntu-18.04-adoptopenjdk11","7.6-ubuntu","7.6-adoptopenjdk11","7.6.3-ubuntu-18.04-adoptopenjdk11","7.6.3-ubuntu","7.6.3-adoptopenjdk11","7.6.0-ubuntu-18.04-adoptopenjdk11","7.6.0-ubuntu","7.6.0-adoptopenjdk11","7.5-ubuntu-18.04-adoptopenjdk11","7.5-ubuntu","7.5-adoptopenjdk11","7.5.2-ubuntu-18.04-adoptopenjdk11","7.5.2-ubuntu","7.5.2-adoptopenjdk11","7.5.1-ubuntu-18.04-adoptopenjdk11","7.5.1-ubuntu","7.5.1-adoptopenjdk11","7.5.0-ubuntu-18.04-adoptopenjdk11","7.5.0-ubuntu","7.5.0-adoptopenjdk11","7.4-ubuntu-18.04-adoptopenjdk11","7.4-ubuntu","7.4-adoptopenjdk11","7.4.9-ubuntu-18.04-adoptopenjdk11","7.4.9-ubuntu","7.4.9-adoptopenjdk11","7.4.8-ubuntu-18.04-adoptopenjdk11","7.4.8-ubuntu","7.4.8-adoptopenjdk11","7.4.7-ubuntu-18.04-adoptopenjdk11","7.4.7-ubuntu","7.4.7-adoptopenjdk11","7.4.6-ubuntu-18.04-adoptopenjdk11","7.4.6-ubuntu","7.4.6-adoptopenjdk11","7.4.3-ubuntu-18.04-adoptopenjdk11","7.4.3-ubuntu","7.4.3-adoptopenjdk11","7.4.1-ubuntu","7.4.1-adoptopenjdk11","7.4.17-ubuntu-18.04-adoptopenjdk11","7.4.17-ubuntu","7.4.17-adoptopenjdk11","7.4.16-ubuntu-18.04-adoptopenjdk11","7.4.16-ubuntu","7.4.16-adoptopenjdk11","7.4.15-ubuntu-18.04-adoptopenjdk11","7.4.15-ubuntu","7.4.15-adoptopenjdk11","7.4.14-ubuntu-18.04-adoptopenjdk11","7.4.14-ubuntu","7.4.14-adoptopenjdk11","7.4.13-ubuntu-18.04-adoptopenjdk11","7.4.13-ubuntu","7.4.13-adoptopenjdk11","7.4.12-ubuntu-18.04-adoptopenjdk11","7.4.12-ubuntu","7.4.12-adoptopenjdk11","7.4.0-ubuntu-18.04-adoptopenjdk11","7.4.0-ubuntu","7.4.0-adoptopenjdk11","7.18-ubuntu-18.04-adoptopenjdk11","7.18-ubuntu","7.18-adoptopenjdk11","7.18.1-ubuntu-18.04-adoptopenjdk11","7.18.1-ubuntu","7.18.1-adoptopenjdk11","7.18.0-ubuntu-18.04-adoptopenjdk11","7.18.0-ubuntu","7.18.0-adoptopenjdk11","7.17.4-ubuntu-18.04-adoptopenjdk11","7.17.4-ubuntu","7.17.4-adoptopenjdk11","7.17.3-ubuntu-18.04-adoptopenjdk11","7.17.3-ubuntu","7.17.3-adoptopenjdk11","7.17.2-ubuntu-18.04-adoptopenjdk11","7.17.2-ubuntu","7.17.2-adoptopenjdk11","7.16-ubuntu-18.04-adoptopenjdk11","7.16-ubuntu","7.16-adoptopenjdk11","7.16.4-ubuntu-18.04-adoptopenjdk11","7.16.4-ubuntu","7.16.4-adoptopenjdk11","7.16.3-ubuntu-18.04-adoptopenjdk11","7.16.3-ubuntu","7.16.3-adoptopenjdk11","7.16.2-ubuntu-18.04-adoptopenjdk11","7.16.2-ubuntu","7.16.2-adoptopenjdk11","7.16.1-ubuntu-18.04-adoptopenjdk11","7.16.1-ubuntu","7.16.1-adoptopenjdk11","7.16.0-ubuntu-18.04-adoptopenjdk11","7.16.0-ubuntu","7.16.0-adoptopenjdk11","7.15-ubuntu-18.04-adoptopenjdk11","7.15-ubuntu","7.15-adoptopenjdk11","7.15.2-ubuntu-18.04-adoptopenjdk11","7.15.2-ubuntu","7.15.2-adoptopenjdk11","7.15.1-ubuntu-18.04-adoptopenjdk11","7.15.1-ubuntu","7.15.1-adoptopenjdk11","7.14-ubuntu-18.04-adoptopenjdk11","7.14.3-ubuntu-18.04-adoptopenjdk11","7.14.3-ubuntu","7.14.0-ubuntu","7.14.0-adoptopenjdk11","7.13-ubuntu-18.04-adoptopenjdk11","7.13-ubuntu","7.13-adoptopenjdk11","7.13.7-ubuntu-18.04-adoptopenjdk11","7.13.7-ubuntu","7.13.7-adoptopenjdk11","7.13.6-ubuntu-18.04-adoptopenjdk11","7.13.6-ubuntu","7.13.6-adoptopenjdk11","7.13.5-ubuntu-18.04-adoptopenjdk11","7.13.5-ubuntu","7.13.5-adoptopenjdk11","7.13.4-ubuntu-18.04-adoptopenjdk11","7.13.4-ubuntu","7.13.4-adoptopenjdk11","7.12.5-ubuntu-18.04-adoptopenjdk11","7.12.5-ubuntu","7.12.4-ubuntu-18.04-adoptopenjdk11","7.12.4-ubuntu","7.12.4-adoptopenjdk11","7.12.3-ubuntu-18.04-adoptopenjdk11","7.12.3-ubuntu","7.12.3-adoptopenjdk11","7.12.2-ubuntu-18.04-adoptopenjdk11","7.12.2-ubuntu","7.12.2-adoptopenjdk11","7.12.1-ubuntu-18.04-adoptopenjdk11","7.12.1-ubuntu","7.12.1-adoptopenjdk11","7.11.1-ubuntu-18.04-adoptopenjdk11","7.11.1-ubuntu","7.11.1-adoptopenjdk11","7.11.0-ubuntu-18.04-adoptopenjdk11","7.11.0-ubuntu","7.11.0-adoptopenjdk11","7.10-ubuntu-18.04-adoptopenjdk11","7.10-ubuntu","7.10-adoptopenjdk11","7.10.2-ubuntu-18.04-adoptopenjdk11","7.10.2-ubuntu","7.10.2-adoptopenjdk11","7.10.1-ubuntu-18.04-adoptopenjdk11","7.10.1-ubuntu","7.10.1-adoptopenjdk11","7.10.0-ubuntu-18.04-adoptopenjdk11","7.10.0-ubuntu","7.10.0-adoptopenjdk11","7.14-adoptopenjdk11","7.9-ubuntu-18.04-adoptopenjdk11","7.9-ubuntu","7.9-adoptopenjdk11","7.14.3-adoptopenjdk11","7.9.3-ubuntu-18.04-adoptopenjdk11","7.9.3-ubuntu","7.9.3-adoptopenjdk11","7.14.2-ubuntu-18.04-adoptopenjdk11","7.6.2-ubuntu-18.04-adoptopenjdk11","7.6.2-ubuntu","7.14.2-ubuntu","7.6.2-adoptopenjdk11","7.6.1-ubuntu-18.04-adoptopenjdk11","7.6.1-ubuntu","7.14.2-adoptopenjdk11","7.6.1-adoptopenjdk11","7.14.1-ubuntu-18.04-adoptopenjdk11","7.4.5-ubuntu-18.04-adoptopenjdk11","7.4.5-ubuntu","7.14.1-ubuntu","7.4.5-adoptopenjdk11","7.4.4-ubuntu-18.04-adoptopenjdk11","7.14.1-adoptopenjdk11","7.4.4-ubuntu","7.4.4-adoptopenjdk11","7.14.0-ubuntu-18.04-adoptopenjdk11","7.4.1-ubuntu-18.04-adoptopenjdk11","7.13.3-ubuntu-18.04-adoptopenjdk11","7.4.11-ubuntu-18.04-adoptopenjdk11","7.13.3-ubuntu","7.4.11-ubuntu","7.13.3-adoptopenjdk11","7.4.11-adoptopenjdk11","7.13.2-ubuntu-18.04-adoptopenjdk11","7.4.10-ubuntu-18.04-adoptopenjdk11","7.13.2-ubuntu","7.4.10-ubuntu","7.13.2-adoptopenjdk11","7.4.10-adoptopenjdk11","7.13.1-ubuntu-18.04-adoptopenjdk11","7.17.1-ubuntu-18.04-adoptopenjdk11","7.13.1-ubuntu","7.17.1-ubuntu","7.13.1-adoptopenjdk11","7.17.1-adoptopenjdk11","7.13.0-ubuntu-18.04-adoptopenjdk11","7.13.0-ubuntu","7.17.0-ubuntu-18.04-adoptopenjdk11","7.17.0-ubuntu","7.13.0-adoptopenjdk11","7.17.0-adoptopenjdk11","7.12-ubuntu-18.04-adoptopenjdk11","7.12-ubuntu","7.12-adoptopenjdk11","7.15.0-ubuntu-18.04-adoptopenjdk11","7.12.5-adoptopenjdk11","7.15.0-ubuntu","7.12.0-ubuntu-18.04-adoptopenjdk11","7.15.0-adoptopenjdk11","7.12.0-ubuntu","7.11-ubuntu-18.04-adoptopenjdk11","7.14-ubuntu","7.11-ubuntu","7.11.6-ubuntu-18.04-adoptopenjdk11","7.11.6-ubuntu","7.11.6-adoptopenjdk11","7.11.3-ubuntu-18.04-adoptopenjdk11","7.11.3-ubuntu","7.11.3-adoptopenjdk11","7.11.2-ubuntu-18.04-adoptopenjdk11","7.11.2-ubuntu","7.11.2-adoptopenjdk11","7.12.0-adoptopenjdk11","7.11-adoptopenjdk11","8.0.0-m011-jdk11","8.0.0-m011","8.0.0-m011-ubuntu-18.04-adoptopenjdk11","8.0.0-m011-ubuntu","7.19.0-m01-ubuntu-18.04-adoptopenjdk11","7.19.0-m01-jdk11","7.19.0-m01-adoptopenjdk11","8.0.0-m011-adoptopenjdk11","7.19.0-m01","7.19.0-m01-ubuntu","7.18.0-rc1-ubuntu-18.04-adoptopenjdk11","7.18.0-rc1-ubuntu","7.18.0-rc1-jdk11","7.18.0-rc1-adoptopenjdk11","7.18.0-rc1","7.18.0-beta1-ubuntu-18.04-adoptopenjdk11","7.18.0-beta1-ubuntu","7.18.0-beta1-jdk11","7.18.0-beta1-adoptopenjdk11","7.18.0-beta1","7.18.0-m68-jdk11","7.18.0-m68","7.18.0-m68-ubuntu-18.04-adoptopenjdk11","7.18.0-m68-ubuntu","7.18.0-m68-adoptopenjdk11","7.18.0-m61-ubuntu","7.18.0-m61-adoptopenjdk11","7.18.0-m61","7.18.0-m61-ubuntu-18.04-adoptopenjdk11","7.18.0-m61-jdk11","7.18.0-m53-ubuntu-18.04-adoptopenjdk11","7.18.0-m53-ubuntu","7.18.0-m53","7.18.0-m53-jdk11","7.18.0-m53-adoptopenjdk11","7.18.0-m46-ubuntu","7.18.0-m46-adoptopenjdk11","7.18.0-m46","7.18.0-m46-ubuntu-18.04-adoptopenjdk11","7.18.0-m46-jdk11","7.18.0-m40-ubuntu-18.04-adoptopenjdk11","7.18.0-m40-ubuntu","7.18.0-m40-jdk11","7.18.0-m40-adoptopenjdk11","7.18.0-m40","temurin-7.17.0","7.17.0-rc1-ubuntu-18.04-adoptopenjdk11","7.17.0-rc1-ubuntu","7.17.0-rc1-jdk11","7.17.0-rc1-adoptopenjdk11","7.17.0-rc1","7.4.6-ubuntu-jdk-11","7.4.5-ubuntu-jdk-11","7.4.4-ubuntu-jdk-11","7.4.3-ubuntu-jdk-11","7.4.1-ubuntu-jdk-11","7.4.0-ubuntu-jdk-11","7.3.2","7.3.2-jdk11","7.3.2-adoptopenjdk11","7.3.2-ubuntu-18.04-adoptopenjdk11","7.3.2-ubuntu","7.3.3-ubuntu-18.04-adoptopenjdk11","7.3.3-adoptopenjdk11","7.3.3-jdk11","7.3.3","7.3.3-ubuntu","7.3.4-jdk11","7.3.4-ubuntu-18.04-adoptopenjdk11","7.3.4-adoptopenjdk11","7.3.4-ubuntu","7.3.4","7.3.5-ubuntu","7.3-adoptopenjdk11","7.3-jdk11","7.3.5-ubuntu-18.04-adoptopenjdk11","7.3.5","7.3","7.3.5-adoptopenjdk11","7.3-ubuntu-18.04-adoptopenjdk11","7.3.5-jdk11","7.3-ubuntu","7.3.1-jdk11","7.3.1-ubuntu-18.04-adoptopenjdk11","7.3.1-adoptopenjdk11","7.3.1","7.3.1-ubuntu","7.17.0-beta1-jdk11","7.17.0-beta1-adoptopenjdk11","7.17.0-beta1","7.17.0-beta1-ubuntu-18.04-adoptopenjdk11","7.17.0-beta1-ubuntu","7.17.0-m61-adoptopenjdk11","7.17.0-m61","7.17.0-m61-ubuntu","7.17.0-m61-jdk11","7.17.0-m61-ubuntu-18.04-adoptopenjdk11","7.17.0-m59-ubuntu","7.17.0-m59-adoptopenjdk11","7.17.0-m59","7.17.0-m59-jdk11","7.17.0-m59-ubuntu-18.04-adoptopenjdk11","7.17.0-m47-jdk11","7.17.0-m47","7.17.0-m47-ubuntu","7.17.0-m47-adoptopenjdk11","7.17.0-m47-ubuntu-18.04-adoptopenjdk11","7.16.0-rc1","7.16.0-rc1-ubuntu-18.04-adoptopenjdk11","7.16.0-rc1-ubuntu","7.16.0-rc1-adoptopenjdk11","7.16.0-rc1-jdk11","7.2.0-adoptopenjdk11","7.2.0-ubuntu-18.04-adoptopenjdk11","7.2.0","7.2.0-jdk11","7.2.0-ubuntu","7.2.1","7.2.1-jdk11","7.2.1-ubuntu","7.2.1-adoptopenjdk11","7.2.1-ubuntu-18.04-adoptopenjdk11","7.2.2","7.2.2-adoptopenjdk11","7.2-jdk11","7.2-adoptopenjdk11","7.2-ubuntu","7.2","7.2.2-jdk11","7.2.2-ubuntu","7.2.2-ubuntu-18.04-adoptopenjdk11","7.2-ubuntu-18.04-adoptopenjdk11","7.16.0-beta2","7.16.0-beta2-adoptopenjdk11","7.16.0-beta2-ubuntu-18.04-adoptopenjdk11","7.16.0-beta2-ubuntu","7.16.0-beta2-jdk11","7.16.0-m49-ubuntu-18.04-adoptopenjdk11","7.16.0-m49-jdk11","7.16.0-m49-adoptopenjdk11","7.16.0-m49","7.16.0-m49-ubuntu","7.16.0-m39","7.16.0-m39-adoptopenjdk11","7.16.0-m39-ubuntu-18.04-adoptopenjdk11","7.16.0-m39-ubuntu","7.16.0-m39-jdk11","7.16.0-m30-ubuntu","7.16.0-m30","7.16.0-m30-adoptopenjdk11","7.16.0-m30-jdk11","7.16.0-m30-ubuntu-18.04-adoptopenjdk11","7.15.0-rc1-adoptopenjdk11","7.15.0-rc1-ubuntu-18.04-adoptopenjdk11","7.15.0-rc1-ubuntu","7.15.0-rc1","7.15.0-rc1-jdk11","7.15.0-beta3-jdk11","7.15.0-beta3-adoptopenjdk11","7.15.0-beta3","7.15.0-beta3-ubuntu-18.04-adoptopenjdk11","7.15.0-beta3-ubuntu","7.15.0-beta2-adoptopenjdk11","7.15.0-beta2-jdk11","7.15.0-beta2-ubuntu","7.15.0-beta2-ubuntu-18.04-adoptopenjdk11","7.15.0-beta2","7.15.0-beta1-ubuntu-18.04-adoptopenjdk11","7.15.0-beta1","7.15.0-beta1-jdk11","7.15.0-beta1-ubuntu","7.15.0-beta1-adoptopenjdk11","7.15.0-m35-jdk11","7.15.0-m35-adoptopenjdk11","7.15.0-m35-ubuntu-18.04-adoptopenjdk11","7.15.0-m35-ubuntu","7.15.0-m35","7.15.0-m27","7.15.0-m27-ubuntu","7.15.0-m27-ubuntu-18.04-adoptopenjdk11","7.15.0-m27-jdk11","7.15.0-m27-adoptopenjdk11","7.15.0-m20-ubuntu","7.15.0-m20","7.15.0-m20-ubuntu-18.04-adoptopenjdk11","7.15.0-m20-jdk11","7.15.0-m20-adoptopenjdk11","7.14.0-rc1-jdk11","7.14.0-rc1","7.14.0-rc1-ubuntu","7.14.0-rc1-ubuntu-18.04-adoptopenjdk11","7.14.0-rc1-adoptopenjdk11","7.14.0-beta1-ubuntu","7.14.0-beta1-jdk11","7.14.0-beta1","7.14.0-beta1-ubuntu-18.04-adoptopenjdk11","7.14.0-beta1-adoptopenjdk11","7.14.0-m176-jdk11","7.14.0-m176-ubuntu-18.04-adoptopenjdk11","7.14.0-m176","7.14.0-m176-ubuntu","7.14.0-m176-adoptopenjdk11","7.13.0-rc1-jdk11","7.13.0-rc1","7.13.0-rc1-adoptopenjdk11","7.13.0-rc1-ubuntu","7.13.0-rc1-ubuntu-18.04-adoptopenjdk11","7.13.0-beta-jdk11","7.13.0-beta","7.13.0-beta-ubuntu","7.13.0-beta-ubuntu-18.04-adoptopenjdk11","7.13.0-beta-adoptopenjdk11","7.13.0-m17","7.13.0-m17-adoptopenjdk11","7.13.0-m17-jdk11","7.13.0-m17-ubuntu-18.04-adoptopenjdk11","7.13.0-m17-ubuntu","7.13.0-m16-adoptopenjdk11","7.13.0-m16","7.13.0-m16-ubuntu","7.13.0-m16-ubuntu-18.04-adoptopenjdk11","7.13.0-m16-jdk11","6.13.20-ubuntu","6.5.2-jdk8","6.14.0-jdk8","6.15.7-jdk8","6.3.2-jdk8","6.6.8-adoptopenjdk8","6.11.1","6.6.15-ubuntu","6.1.1","6.13.10","6.8.3-ubuntu-18.04-adoptopenjdk8","6.5.2-ubuntu-18.04-adoptopenjdk8","6.13.20-adoptopenjdk8","6.14.0-ubuntu","6.15.7-ubuntu","6.6.8-ubuntu-18.04-adoptopenjdk8","6.3.2-ubuntu-18.04-adoptopenjdk8","6.11.1-ubuntu","6.6.15-jdk8","6.1.1-jdk8","6.13.10-adoptopenjdk8","6.8.3-adoptopenjdk8","6.5.2-adoptopenjdk8","6.13.20-ubuntu-18.04-adoptopenjdk8","6.14.0-ubuntu-18.04-adoptopenjdk8","6.15.7-adoptopenjdk8","6.6.8-ubuntu","6.3.2-adoptopenjdk8","6.6.15-ubuntu-18.04-adoptopenjdk8","6.8.3","6.13.3-ubuntu-18.04-adoptopenjdk8","6.13.3-adoptopenjdk8","6.6.0","6.13.3-ubuntu","6.6.0-ubuntu-18.04-adoptopenjdk8","6.13.3-jdk8","6.6.0-adoptopenjdk8","6.13.3","6.6.0-jdk8","6.6.0-ubuntu","6.13.4-ubuntu","6.13.4-jdk8","6.6.2","6.6.1-jdk8","6.13.4","6.6.2-adoptopenjdk8","6.6.1-ubuntu-18.04-adoptopenjdk8","6.13.4-ubuntu-18.04-adoptopenjdk8","6.6.2-ubuntu-18.04-adoptopenjdk8","6.6.1-ubuntu","6.13.4-adoptopenjdk8","6.6.2-ubuntu","6.6.1","6.6.2-jdk8","6.6.1-adoptopenjdk8","6.13.5-ubuntu-18.04-adoptopenjdk8","6.13.5-jdk8","6.6.3-ubuntu-18.04-adoptopenjdk8","6.6.10-jdk8","6.13.5","6.6.3-jdk8","6.6.10","6.13.5-adoptopenjdk8","6.6.3-adoptopenjdk8","6.6.10-ubuntu-18.04-adoptopenjdk8","6.13.5-ubuntu","6.6.3-ubuntu","6.6.10-ubuntu","6.6.3","6.6.10-adoptopenjdk8","6.13.6-ubuntu-18.04-adoptopenjdk8","6.13.6-ubuntu","6.6.4-jdk8","6.6.11","6.13.6-jdk8","6.6.4-adoptopenjdk8","6.6.11-adoptopenjdk8","6.13.6-adoptopenjdk8","6.6.11-jdk8","6.6.4-ubuntu-18.04-adoptopenjdk8","6.13.6","6.6.11-ubuntu","6.6.4","6.6.11-ubuntu-18.04-adoptopenjdk8","6.6.4-ubuntu","6.13.7-ubuntu-18.04-adoptopenjdk8","6.15.2-ubuntu","6.8.0-ubuntu","6.13.7-adoptopenjdk8","6.15.2-adoptopenjdk8","6.6.5-ubuntu-18.04-adoptopenjdk8","6.8.0-adoptopenjdk8","6.6.12-ubuntu-18.04-adoptopenjdk8","6.13.7-ubuntu","6.15.2","6.6.5-ubuntu","6.8.0-ubuntu-18.04-adoptopenjdk8","6.6.12-jdk8","6.13.7","6.15.2-jdk8","6.6.5","6.8.0-jdk8","6.6.12","6.13.7-jdk8","6.15.2-ubuntu-18.04-adoptopenjdk8","6.6.5-jdk8","6.8.0","6.6.12-ubuntu","6.6.5-adoptopenjdk8","6.6.12-adoptopenjdk8","6.13.0-jdk8","6.13.8-ubuntu","6.8.1","6.15.4-ubuntu","6.5.0-ubuntu","6.13.0-adoptopenjdk8","6.13.8","6.8.1-ubuntu-18.04-adoptopenjdk8","6.15.4-adoptopenjdk8","6.6.6-ubuntu","6.6.13-adoptopenjdk8","6.5.0-jdk8","6.13.0-ubuntu","6.13.8-jdk8","6.15.4","6.6.6-ubuntu-18.04-adoptopenjdk8","6.8.1-ubuntu","6.6.13","6.5.0-adoptopenjdk8","6.13.0","6.13.8-adoptopenjdk8","6.6.13-jdk8","6.8.1-jdk8","6.15.4-jdk8","6.6.6-jdk8","6.5.0","6.13.0-ubuntu-18.04-adoptopenjdk8","6.13.8-ubuntu-18.04-adoptopenjdk8","6.6.13-ubuntu-18.04-adoptopenjdk8","6.6.6","6.15.4-ubuntu-18.04-adoptopenjdk8","6.8.1-adoptopenjdk8","6.5.0-ubuntu-18.04-adoptopenjdk8","6.6.13-ubuntu","6.6.6-adoptopenjdk8","6.13.1-ubuntu","6.15.6-ubuntu-18.04-adoptopenjdk8","6.11.0-adoptopenjdk8","6.13.9-jdk8","6.1.0-ubuntu-18.04-adoptopenjdk8","6.5.1-ubuntu-18.04-adoptopenjdk8","6.3.1-jdk8","6.8.2-jdk8","6.13.1-jdk8","6.6.7-ubuntu","6.15.6-ubuntu","6.11.0-ubuntu-18.04-adoptopenjdk8","6.6.14-adoptopenjdk8","6.1.0-adoptopenjdk8","6.13.9","6.5.1-adoptopenjdk8","6.3.1","6.8.2-adoptopenjdk8","6.13.1-adoptopenjdk8","6.6.7-ubuntu-18.04-adoptopenjdk8","6.15.6-jdk8","6.6.14-ubuntu","6.11.0-ubuntu","6.13.9-ubuntu","6.1.0-ubuntu","6.5.1-ubuntu","6.3.1-ubuntu","6.8.2-ubuntu-18.04-adoptopenjdk8","6.13.1-ubuntu-18.04-adoptopenjdk8","6.6.7-adoptopenjdk8","6.15.6-adoptopenjdk8","6.6.14-jdk8","6.13.9-adoptopenjdk8","6.11.0-jdk8","6.1.0-jdk8","6.3.1-ubuntu-18.04-adoptopenjdk8","6.5.1","6.8.2","6.13.1","6.6.7-jdk8","6.15.6","6.6.14-ubuntu-18.04-adoptopenjdk8","6.13.9-ubuntu-18.04-adoptopenjdk8","6.1.0","6.11.0","6.3.1-adoptopenjdk8","6.5.1-jdk8","6.8.2-ubuntu","6.6.7","6.6.14","6.11.1-adoptopenjdk8","6.1.1-adoptopenjdk8","6.5.2-ubuntu","6.8.3-jdk8","6.13.10-ubuntu","6.6.8-jdk8","6.15.7-ubuntu-18.04-adoptopenjdk8","6.14.0-adoptopenjdk8","6.1.1-ubuntu-18.04-adoptopenjdk8","6.11.1-jdk8","6.8.3-ubuntu","6.6.15","6.15.7","6.14.0","6.1.1-ubuntu","6.3.2","6.5.2","6.13.10-ubuntu-18.04-adoptopenjdk8","6.6.8","6.3.2-ubuntu","6.13.10-jdk8","6.11.1-ubuntu-18.04-adoptopenjdk8","6.6.15-adoptopenjdk8","6.13.11-ubuntu-18.04-adoptopenjdk8","6.13.11-ubuntu","6.13.11-jdk8","6.13.11","6.13.11-adoptopenjdk8","6.13.12","6.13.12-jdk8","6.13.12-ubuntu-18.04-adoptopenjdk8","6.13.12-ubuntu","6.13.12-adoptopenjdk8","6.13.13-jdk8","6.13.13-ubuntu","6.13.13","6.13.13-ubuntu-18.04-adoptopenjdk8","6.13.13-adoptopenjdk8","6.13.15-ubuntu","6.13.15-adoptopenjdk8","6.13.15","6.13.15-jdk8","6.13.15-ubuntu-18.04-adoptopenjdk8","6.13.17","6.13.17-adoptopenjdk8","6.13.17-jdk8","6.13.17-ubuntu-18.04-adoptopenjdk8","6.13.17-ubuntu","6.13.18","6.13.18-ubuntu","6.13.18-jdk8","6.13.18-ubuntu-18.04-adoptopenjdk8","6.13.18-adoptopenjdk8","6.13.19-jdk8","6.13.19-ubuntu-18.04-adoptopenjdk8","6.13.19","6.13.19-adoptopenjdk8","6.13.19-ubuntu","6.13.2-adoptopenjdk8","6.13.2-jdk8","6.13.2","6.13.2-ubuntu","6.13.2-ubuntu-18.04-adoptopenjdk8","6.13.20-jdk8","6.13.20","7.13.0-m15-adoptopenjdk11","7.13.0-m15-ubuntu","7.13.0-m15-jdk11","7.13.0-m15","7.13.0-m14-jdk11","7.13.0-m14-ubuntu-18.04-adoptopenjdk11","7.13.0-m14-adoptopenjdk11","7.13.0-m14-ubuntu","7.13.0-m14","7.1.0-ubuntu","7.1.0-jdk11","7.1.0-ubuntu-18.04-adoptopenjdk11","7.1.0","7.1.0-adoptopenjdk11","7.1.1-ubuntu","7.1.1-adoptopenjdk11","7.1.1-ubuntu-18.04-adoptopenjdk11","7.1.1-jdk11","7.1.1","7.13.0-m13-adoptopenjdk11","7.13.0-m13","7.13.0-m13-ubuntu-18.04-adoptopenjdk11","7.13.0-m13-ubuntu","7.13.0-m13-jdk11","7.1.2-ubuntu-18.04-adoptopenjdk11","6.4.2-jdk8","6.7.3-adoptopenjdk8","6.12.3-jdk8","6.15.10","6.10.1","6.0.6-jdk8","6.4.2-adoptopenjdk8","6.7-jdk8","6.15.10-adoptopenjdk8","6.2.3","6.0.6-ubuntu-18.04-adoptopenjdk8","6.7-adoptopenjdk8","7.0.2-ubuntu","6-jdk8","6.2.3-jdk8","6.0.6-adoptopenjdk8","7.0.2-jdk8","6.7","6.12.4-jdk8","6","6.2.3-ubuntu","6.10.2-ubuntu","6.0.6","6.4-adoptopenjdk8","7.0.2","6.7-ubuntu-18.04-adoptopenjdk8","6.12-ubuntu","6.15-ubuntu","6.2.3-ubuntu-18.04-adoptopenjdk8","6.10.2-adoptopenjdk8","6.0.6-ubuntu","6.4","7.0.2-ubuntu-18.04-adoptopenjdk8","6.12.4-ubuntu","6.7.3-ubuntu","6.2.3-adoptopenjdk8","6.10.2","6.4-ubuntu","7.0.2-adoptopenjdk8","6.12-adoptopenjdk8","6.10.2-ubuntu-18.04-adoptopenjdk8","6.4.3","6.12.4-adoptopenjdk8","6.0-jdk8","6.4.3-ubuntu-18.04-adoptopenjdk8","6.10.2-jdk8","6.12.4","6.2.4-jdk8","6.4.3-jdk8","6.0-ubuntu","6.12.4-ubuntu-18.04-adoptopenjdk8","7.0.3-adoptopenjdk8","6.2.4","6.0","6.4.3-adoptopenjdk8","6.12","7.0.3-jdk8","6.2.4-ubuntu","6.0.7-jdk8","6.10-adoptopenjdk8","6.4-ubuntu-18.04-adoptopenjdk8","6.12-jdk8","7.0.3-ubuntu-18.04-adoptopenjdk8","6.10.3","6.0.7-ubuntu-18.04-adoptopenjdk8","6.2-jdk8","6.4-jdk8","6.12-ubuntu-18.04-adoptopenjdk8","6.0-adoptopenjdk8","6.2","6.10.3-ubuntu","7.0.3","6.4.3-ubuntu","6.0-ubuntu-18.04-adoptopenjdk8","6.2-ubuntu-18.04-adoptopenjdk8","6.10.3-jdk8","7.0.3-ubuntu","6.0.7-adoptopenjdk8","6.2-adoptopenjdk8","6.10.3-ubuntu-18.04-adoptopenjdk8","6.0.7","6.10-ubuntu-18.04-adoptopenjdk8","6.2.4-ubuntu-18.04-adoptopenjdk8","6.0.7-ubuntu","6.10","6.2.4-adoptopenjdk8","7.0.4-jdk8","6.10.3-adoptopenjdk8","6.2-ubuntu","7.0.4","6.10-ubuntu","7.0.4-ubuntu-18.04-adoptopenjdk8","6.10-jdk8","7.0.4-adoptopenjdk8","7.0.4-ubuntu","7.0.5-adoptopenjdk8","7.0-adoptopenjdk8","7.0.5-ubuntu","7.0-ubuntu","7.0.5-jdk8","7.0.5-ubuntu-18.04-adoptopenjdk8","7.0","7.0-ubuntu-18.04-adoptopenjdk8","7.0-jdk8","7.0.5","7.13.0-m12-jdk11","7.13.0-m12-ubuntu-18.04-adoptopenjdk11","7.13.0-m12","7.13.0-m12-ubuntu","7.13.0-m12-adoptopenjdk11","6.14.1-adoptopenjdk8","6.14.1-ubuntu-18.04-adoptopenjdk8","6.14.1-ubuntu","6.8-ubuntu","6.14.1","6.8-adoptopenjdk8","6.14.1-jdk8","6.8.5-jdk8","6.8.5","6.8.5-ubuntu","6.8-ubuntu-18.04-adoptopenjdk8","6.1.2-adoptopenjdk8","6.14.2-ubuntu","6.8-jdk8","6.1.2-ubuntu","6.14.2-adoptopenjdk8","6.8","6.1.2","6.14.2","6.8.5-ubuntu-18.04-adoptopenjdk8","6.1.2-ubuntu-18.04-adoptopenjdk8","6.14.2-jdk8","6.8.5-adoptopenjdk8","6.1.2-jdk8","6.14.2-ubuntu-18.04-adoptopenjdk8","6.3.3-adoptopenjdk8","6.1.3-ubuntu","6.14-adoptopenjdk8","6.3.3-jdk8","6.1.3-ubuntu-18.04-adoptopenjdk8","6.3.3-ubuntu-18.04-adoptopenjdk8","6.14","6.1.3-jdk8","6.3.3-ubuntu","6.14-ubuntu-18.04-adoptopenjdk8","6.1.3","6.9.0-ubuntu-18.04-adoptopenjdk8","6.3.3","6.14.3-ubuntu-18.04-adoptopenjdk8","6.1.3-adoptopenjdk8","6.9.0-adoptopenjdk8","6.0.1-adoptopenjdk8","6.14-ubuntu","6.9.0-jdk8","6.0.1-ubuntu","6.14-jdk8","6.9.0","6.0.1","6.14.3-ubuntu","6.9.0-ubuntu","6.3.4-jdk8","6.0.1-ubuntu-18.04-adoptopenjdk8","6.1.4-ubuntu-18.04-adoptopenjdk8","6.14.3","6.3-adoptopenjdk8","6.6.16-ubuntu-18.04-adoptopenjdk8","6.6.9-jdk8","6.1-jdk8","6.0.1-jdk8","6.14.3-adoptopenjdk8","6.3.4","6.6.9-ubuntu-18.04-adoptopenjdk8","6.1.4","6.6.16-ubuntu","6.14.3-jdk8","6.3-ubuntu-18.04-adoptopenjdk8","6.6.9","6.1-adoptopenjdk8","6.6.16","6.9.1-adoptopenjdk8","6.6.9-adoptopenjdk8","6.1.4-ubuntu","6.3-jdk8","6.6.16-adoptopenjdk8","6.9.1-ubuntu","6.0.2-adoptopenjdk8","6.6.9-ubuntu","6.3.4-ubuntu","6.6.16-jdk8","6.1-ubuntu","6.0.2","6.9.1-ubuntu-18.04-adoptopenjdk8","6.3","6.0.2-ubuntu","6.1.4-jdk8","6.9.1-jdk8","6.3-ubuntu","6.0.2-jdk8","6.1-ubuntu-18.04-adoptopenjdk8","6.9.1","6.3.4-ubuntu-18.04-adoptopenjdk8","6.7.0-adoptopenjdk8","6.0.2-ubuntu-18.04-adoptopenjdk8","6.1.4-adoptopenjdk8","6.6","6.15.1-jdk8","6.3.4-adoptopenjdk8","6.7.0","6.1","6.6.17-ubuntu","6.15.1-adoptopenjdk8","6.7.0-ubuntu","6.6-jdk8","6.9.3-jdk8","6.15.1-ubuntu","6.7.0-jdk8","6.0.3-ubuntu-18.04-adoptopenjdk8","6.6.17","6.9.3","6.15.1-ubuntu-18.04-adoptopenjdk8","6.7.0-ubuntu-18.04-adoptopenjdk8","6.0.3","6.6.17-ubuntu-18.04-adoptopenjdk8","6.9-adoptopenjdk8","6.15.1","6.0.3-adoptopenjdk8","6.9-jdk8","6.6-ubuntu","6.0.3-jdk8","6.6.17-jdk8","6.9.3-adoptopenjdk8","6.0.3-ubuntu","6.4.0-adoptopenjdk8","6.7.1-jdk8","6.10.0-ubuntu-18.04-adoptopenjdk8","6.6-adoptopenjdk8","6.9-ubuntu-18.04-adoptopenjdk8","6.4.0","6.7.1-adoptopenjdk8","6.10.0-jdk8","6.6.17-adoptopenjdk8","6.9-ubuntu","6.4.0-ubuntu-18.04-adoptopenjdk8","6.7.1-ubuntu","6.15.10-ubuntu","6.10.0-adoptopenjdk8","6.9.3-ubuntu-18.04-adoptopenjdk8","6.6-ubuntu-18.04-adoptopenjdk8","6.4.0-ubuntu","6.7.1","6.15","6.10.0-ubuntu","6.9.3-ubuntu","6.0.4-jdk8","6.4.0-jdk8","6.7.1-ubuntu-18.04-adoptopenjdk8","6-adoptopenjdk8","6.10.0","6.9","6.0.4-adoptopenjdk8","6.0.4-ubuntu","6.15-jdk8","6.0.4-ubuntu-18.04-adoptopenjdk8","6.15.10-ubuntu-18.04-adoptopenjdk8","6.4.1-ubuntu","6.0.4","7.1-ubuntu-18.04-adoptopenjdk11","6.7.2-ubuntu-18.04-adoptopenjdk8","6.4.1-ubuntu-18.04-adoptopenjdk8","6-ubuntu-18.04-adoptopenjdk8","6.7.2-ubuntu","7.1.2","6.10.1-ubuntu-18.04-adoptopenjdk8","6.4.1-adoptopenjdk8","6.15.10-jdk8","6.7.2","6.10.1-ubuntu","7.1","6.4.1-jdk8","6.15-ubuntu-18.04-adoptopenjdk8","6.7.2-jdk8","6.10.1-adoptopenjdk8","6.0.5","7.1.2-ubuntu","7.0.1-jdk8","6.4.1","6.7.2-adoptopenjdk8","6.10.1-jdk8","6.0.5-adoptopenjdk8","7.1-ubuntu","7.0.1","6.0.5-ubuntu-18.04-adoptopenjdk8","7.1.2-jdk11","7.0.1-adoptopenjdk8","6-ubuntu","6.0.5-jdk8","7.0.1-ubuntu","6.15-adoptopenjdk8","6.4.2-ubuntu-18.04-adoptopenjdk8","6.0.5-ubuntu","7.1.2-adoptopenjdk11","7.0.1-ubuntu-18.04-adoptopenjdk8","6.7.3-ubuntu-18.04-adoptopenjdk8","7.1-adoptopenjdk11","7.1-jdk11","6.4.2","6.4.2-ubuntu","6.7.3","6.7.3-jdk8","6.7-ubuntu","6.13","6.13.21-adoptopenjdk8","6.13.21-ubuntu-18.04-adoptopenjdk8","6.13-ubuntu","6.13.21-jdk8","6.13-adoptopenjdk8","6.13-ubuntu-18.04-adoptopenjdk8","6.13.21-ubuntu","6.13-jdk8","6.13.21","6.12.2-jdk8","6.12.3-ubuntu-18.04-adoptopenjdk8","6.12.3-adoptopenjdk8","6.12.3","6.12.3-ubuntu","7.13.0-m09-jdk11","7.13.0-m09","7.13.0-m09-adoptopenjdk11","7.13.0-m09-ubuntu-18.04-adoptopenjdk11","7.13.0-m09-ubuntu","6.11.2-ubuntu","6.11-adoptopenjdk8","6.11.2-adoptopenjdk8","6.11.2-ubuntu-18.04-adoptopenjdk8","6.11.2","6.11-ubuntu-18.04-adoptopenjdk8","6.11.2-jdk8","6.11-jdk8","6.11","6.11-ubuntu","6.15.8-ubuntu-18.04-adoptopenjdk8","6.15.8-ubuntu","6.15.8-adoptopenjdk8","6.15.8","6.15.8-jdk8","6.12.0-jdk8","6.5.3-ubuntu","6.12.0","6.5.3-jdk8","6.5","6.15.9","6.5-ubuntu","6.15.9-ubuntu","6.5-jdk8","6.15.9-jdk8","6.5.3-adoptopenjdk8","6.15.9-adoptopenjdk8","6.5.3-ubuntu-18.04-adoptopenjdk8","6.15.9-ubuntu-18.04-adoptopenjdk8","6.5-ubuntu-18.04-adoptopenjdk8","6.5-adoptopenjdk8","6.12.0-ubuntu","6.5.3","6.12.0-ubuntu-18.04-adoptopenjdk8","6.2.0","6.12.0-adoptopenjdk8","6.2.0-jdk8","6.2.0-adoptopenjdk8","6.2.0-ubuntu-18.04-adoptopenjdk8","6.12.1-ubuntu-18.04-adoptopenjdk8","6.2.0-ubuntu","6.12.1","6.12.1-ubuntu","6.12.1-adoptopenjdk8","6.2.1-jdk8","6.12.1-jdk8","6.2.1-adoptopenjdk8","6.2.1-ubuntu","6.2.1","6.2.1-ubuntu-18.04-adoptopenjdk8","6.12.2-ubuntu","6.12.2","6.12.2-adoptopenjdk8","6.2.2-ubuntu","6.12.2-ubuntu-18.04-adoptopenjdk8","6.2.2-ubuntu-18.04-adoptopenjdk8","6.2.2-adoptopenjdk8","6.2.2","6.2.2-jdk8","7.13.0-m08","7.13.0-m08-adoptopenjdk11","7.13.0-m08-ubuntu-18.04-adoptopenjdk11","7.13.0-m08-jdk11","7.13.0-m08-ubuntu","6.15.2-alpine-adoptopenjdk8","6.15.2-alpine","6.13.0-alpine-adoptopenjdk8","6.13.0-alpine","6.15.4-alpine","6.15.4-alpine-adoptopenjdk8","6.13.1-alpine","6.13.1-alpine-adoptopenjdk8","6.15.6-alpine","6.15.6-alpine-adoptopenjdk8","6.13.10-alpine","6.13.10-alpine-adoptopenjdk8","6.15.7-alpine","6.15.7-alpine-adoptopenjdk8","6.13.11-alpine","6.0.1-alpine","6.15.8-alpine-adoptopenjdk8","6.13.11-alpine-adoptopenjdk8","6.0.1-alpine-adoptopenjdk8","6.15.8-alpine","6.6.9-alpine","6.13.12-alpine-adoptopenjdk8","6.13.3-alpine","6.0.2-alpine","6.12.0-alpine-adoptopenjdk8","6.15.9-alpine-adoptopenjdk8","6.13.12-alpine","6.7.0-alpine-adoptopenjdk8","6.6.0-alpine","6.13.3-alpine-adoptopenjdk8","6.0.2-alpine-adoptopenjdk8","6.12.0-alpine","6.15.9-alpine","6.6.0-alpine-adoptopenjdk8","6.7.0-alpine","6.13.13-alpine","6.0.3-alpine-adoptopenjdk8","6.13.4-alpine-adoptopenjdk8","6.2.0-alpine","6.12.1-alpine-adoptopenjdk8","6.6.2-alpine-adoptopenjdk8","6.6.1-alpine","6.7.1-alpine","6.13.13-alpine-adoptopenjdk8","6.0.3-alpine","6.2.0-alpine-adoptopenjdk8","6.12.1-alpine","6.13.4-alpine","6.6.2-alpine","6.6.1-alpine-adoptopenjdk8","6.7.1-alpine-adoptopenjdk8","6.10.0-alpine-adoptopenjdk8","6.13.15-alpine","6.0.4-alpine","6.13.5-alpine","6.2.1-alpine","6.6.3-alpine","6.12.2-alpine-adoptopenjdk8","6.15.1-alpine-adoptopenjdk8","6.7.2-alpine-adoptopenjdk8","6.6.10-alpine-adoptopenjdk8","6.10.0-alpine","6.13.15-alpine-adoptopenjdk8","6.0.4-alpine-adoptopenjdk8","6.13.5-alpine-adoptopenjdk8","6.2.1-alpine-adoptopenjdk8","6.6.3-alpine-adoptopenjdk8","6.12.2-alpine","6.15.1-alpine","6.7.2-alpine","6.6.10-alpine","7.13.0-m07-jdk11","7.13.0-m07-ubuntu-18.04-adoptopenjdk11","7.13.0-m07-ubuntu","7.13.0-m07-adoptopenjdk11","7.13.0-m07","6.6.4-alpine","6.6.4-alpine-adoptopenjdk8","6.6.5-alpine-adoptopenjdk8","6.6.5-alpine","6.6.6-alpine","6.6.6-alpine-adoptopenjdk8","6.6.7-alpine-adoptopenjdk8","6.6.7-alpine","6.6.8-alpine","6.6.8-alpine-adoptopenjdk8","6.6.9-alpine-adoptopenjdk8","6.4.0-alpine","6.4.0-alpine-adoptopenjdk8","6.4.1-alpine","6.4.1-alpine-adoptopenjdk8","7.13.0-m06-ubuntu-18.04-adoptopenjdk11","7.13.0-m06-adoptopenjdk11","7.13.0-m06","7.13.0-m06-ubuntu","7.13.0-m06-jdk11","6.7-alpine-adoptopenjdk8","6.7.3-alpine-adoptopenjdk8","6.7.3-alpine","6.10.1-alpine","6.7-alpine","6.2.2-alpine","6.10.1-alpine-adoptopenjdk8","6.2.2-alpine-adoptopenjdk8","6.4.2-alpine","6-alpine-adoptopenjdk8","6.4.2-alpine-adoptopenjdk8","6.10.2-alpine","6.15.10-alpine","6.13.17-alpine","6.2.3-alpine-adoptopenjdk8","6.13.6-alpine-adoptopenjdk8","6.12.3-alpine","6.10.2-alpine-adoptopenjdk8","6.15-alpine","6.13.17-alpine-adoptopenjdk8","6.8.0-alpine","6.13.6-alpine","6.2.3-alpine","6.4.3-alpine","6.12.3-alpine-adoptopenjdk8","6.8.0-alpine-adoptopenjdk8","6.15-alpine-adoptopenjdk8","6.6.11-alpine-adoptopenjdk8","6.4-alpine-adoptopenjdk8","6-alpine","6.6.11-alpine","6.10.3-alpine","6.4-alpine","6.13.18-alpine-adoptopenjdk8","6.15.10-alpine-adoptopenjdk8","6.12-alpine","6.2-alpine","6.13.7-alpine-adoptopenjdk8","6.10-alpine","6.4.3-alpine-adoptopenjdk8","6.8.1-alpine-adoptopenjdk8","6.13.18-alpine","6.12-alpine-adoptopenjdk8","6.13.7-alpine","6.10.3-alpine-adoptopenjdk8","6.2.4-alpine","6.8.1-alpine","6.6.12-alpine-adoptopenjdk8","6.12.4-alpine-adoptopenjdk8","6.10-alpine-adoptopenjdk8","6.2-alpine-adoptopenjdk8","6.6.12-alpine","6.12.4-alpine","6.13.19-alpine-adoptopenjdk8","6.2.4-alpine-adoptopenjdk8","6.13.8-alpine","6.8.2-alpine-adoptopenjdk8","6.13.19-alpine","6.13.8-alpine-adoptopenjdk8","6.5.0-alpine-adoptopenjdk8","6.8.2-alpine","6.6.13-alpine","6.5.0-alpine","6.6.13-alpine-adoptopenjdk8","6.13.2-alpine","6.11.0-alpine-adoptopenjdk8","6.13.9-alpine-adoptopenjdk8","6.8.3-alpine-adoptopenjdk8","6.13.2-alpine-adoptopenjdk8","6.11.0-alpine","6.3.1-alpine","6.13.9-alpine","6.5.1-alpine","6.8.3-alpine","6.6.14-alpine","6.3.1-alpine-adoptopenjdk8","6.6.14-alpine-adoptopenjdk8","6.5.1-alpine-adoptopenjdk8","6.13.20-alpine","6.11.1-alpine","6.14.0-alpine","6.8-alpine-adoptopenjdk8","6.11.1-alpine-adoptopenjdk8","6.13.20-alpine-adoptopenjdk8","6.3.2-alpine-adoptopenjdk8","6.14.0-alpine-adoptopenjdk8","6.6.15-alpine","6.5.2-alpine-adoptopenjdk8","6.8.5-alpine","6.3.2-alpine","6.6.15-alpine-adoptopenjdk8","6.8.5-alpine-adoptopenjdk8","6.5.2-alpine","6.13.21-alpine-adoptopenjdk8","6.11.2-alpine","6.8-alpine","6.14.1-alpine-adoptopenjdk8","6.13.21-alpine","6.3.3-alpine-adoptopenjdk8","6.11-alpine","6.6.16-alpine","6.14.1-alpine","6.5-alpine","6.13-alpine","6.3.3-alpine","6.11.2-alpine-adoptopenjdk8","6.6.16-alpine-adoptopenjdk8","6.5-alpine-adoptopenjdk8","6.13-alpine-adoptopenjdk8","6.11-alpine-adoptopenjdk8","6.5.3-alpine","6.14.2-alpine","6.3-alpine","6.5.3-alpine-adoptopenjdk8","6.6-alpine-adoptopenjdk8","6.9.0-alpine-adoptopenjdk8","6.14.2-alpine-adoptopenjdk8","6.3-alpine-adoptopenjdk8","6.6.17-alpine","6.9.0-alpine","6.3.4-alpine-adoptopenjdk8","6.6-alpine","6.6.17-alpine-adoptopenjdk8","6.3.4-alpine","6.14.3-alpine","6.9.1-alpine","6.14-alpine-adoptopenjdk8","6.9.1-alpine-adoptopenjdk8","6.1-alpine","6.14.3-alpine-adoptopenjdk8","6.14-alpine","6.9-alpine","6.9.3-alpine-adoptopenjdk8","6.9.3-alpine","6.9-alpine-adoptopenjdk8","6.1.3-alpine","6.1.4-alpine","6.1.4-alpine-adoptopenjdk8","6.1-alpine-adoptopenjdk8","6.1.3-alpine-adoptopenjdk8","6.1.2-alpine-adoptopenjdk8","6.1.2-alpine","6.0.5-alpine-adoptopenjdk8","6.0.5-alpine","6.0.6-alpine-adoptopenjdk8","6.0.6-alpine","7.13.0-m04-jdk11","7.13.0-m04","7.13.0-m04-ubuntu-18.04-adoptopenjdk11","7.13.0-m04-ubuntu","7.13.0-m04-adoptopenjdk11","7.13.0-m03-ubuntu-18.04-adoptopenjdk11","7.13.0-m03","7.13.0-m03-ubuntu","7.13.0-m03-jdk11","7.13.0-m03-adoptopenjdk11","7.13.0-m02-jdk11","7.13.0-m02-adoptopenjdk11","7.13.0-m02-ubuntu","7.13.0-m02","7.13.0-m02-ubuntu-18.04-adoptopenjdk11","6.0.7-alpine","6.0-alpine","6.0-alpine-adoptopenjdk8","6.0.7-alpine-adoptopenjdk8","6.1.0-alpine","6.1.0-alpine-adoptopenjdk8","6.1.1-alpine","6.1.1-alpine-adoptopenjdk8"];const T="AAACzg0ODAoPeNp9VO9v2jAQ/Z6/wtK+IYWGsEKHFGmQmJau/GgIm9iYJhMOYprYke1A4a+fSchGKtqPPvvevXv3zp/6gqLHLEb2HbKsTvNzp9lC98MA2ZbdNKYgdiAGntPDQ2z688HcdH/aM7P5o2kZTzQEJiE4pDAiCTgBngaD0b0RCr5f1S9uHfcUWXSQBzuIeQrCCDlb10mo6A4cJTLQSVlIlzFUggpI8ickMbAVEbI+ypIliPG6R5Il5z4kXEF3A0xJp1Gywa8pFQePKHAmDdt6+A9cJVQEK5yWmhMV8HGZLRWkwrF8PZMgpGPfGh7IUNBUUc6cAKRCcVEYrblAaZxtKEOrsqj8V/US85zxXd+fUGwD70ickRwyf7ARACziqUYo+8Irmt/jUYD9iT+YYmNIKFPACAuvyHIaQEUSHYgz0G8rorgC8rp5qvaEZVp3pt0u8sve3TiTCsSIr0A6llGr1VwfdwPsmb25PjjbVwq2EcZcm6nS6DKX+I3iT1yP/Cy42TBe4FAK0WhZVtu6azYbZeZlB0U2wrpnkQoqq40Uyst67RqB9zU8k64olYeqKnGmNCzWiseOUoKwhLLoK1ExkZISVg95cr3ZN/YqdueSYW649/mdrfJAZOQM3b3b96DRuhVk3261kkFvexwe41UQtJN12u5Gz6GcPT7Pn71H70t69CPcbx/a9rcj3rDuwlk4xprKCA5VN+oJjsaB2R/75sQfezM3GIxH5myKT6PN/QErtDwgFQE6E9VDCLUZtN8F30Ko0K9IqXTRubnZ8HpFlZtzAyYUGb/ryOOIcYVWVCpBl5kCjUwlUhyF2mY80WaoXxdzEhOWe2YsNoRRWWxMt6xX/hH6P5uxF8b3rLJIlz1LpQW95pQPvqfLq0kmwohIeLs2l9PMzfQ48LvvWTbfMY1AXDg9KJDLCV2C9HUMH+CaJfOfudi/v0kIGVswLAIUEMQ9X77gqGBdfH0HIzBaV8NadPUCFBn+RiUA4D+IqVQpTTouLVY66aCGX02121",toAbsolutePath=u=>{const[,d]=process.argv,t=o(d),n=t.substring(0,t.indexOf("dcdx")+4);return p(n,u.replaceAll("../",""))};var R;!function(u){u.JIRA="jira",u.CONFLUENCE="confluence",u.BITBUCKET="bitbucket",u.BAMBOO="bamboo"}(R||(R={}));const x={name:"shared",driver:"bridge"};let q=class Base extends m{options;sequelize=null;constructor(u){super(),this.options=u}async run(u,d){try{if(!this.sequelize)throw new Error("Database connection does not exist");await this.sequelize.query(u,{logging:d})}catch(d){console.error("An error occurred while trying to run the following SQL query:",u,d),t()}return null}async start(u=this.options.clean){console.log(`Starting instance of ${this.name} ⏳`),u&&await this.down(),await this.up(),this.emit(`${this.name}:up`);if(await this.waitUntilReady()){if(console.log(`Database is ready and accepting connections on localhost:${this.options.port} 🗄️`),await this.onDatabaseReady(),this.emit("db:ready"),this.options.logging){const u=await this.getServiceState();u&&await this.showDockerLogs(u.name)}}else console.log(`Failed to start database ${this.name} ⛔`),t(0)}async stop(u=this.options.prune){if(u)await this.down();else{const u=c(this.getDockerComposeConfig());await j({cwd:g(),configAsString:u,log:!0})}this.emit("db:stopped")}async onDatabaseReady(){}getDockerComposeConfig(){return{version:"3.8",services:{db:this.getService()},networks:{shared:x}}}async up(){const u=c(this.getDockerComposeConfig());return f({cwd:g(),configAsString:u,log:!0})}async down(){const u=c(this.getDockerComposeConfig());return a({cwd:g(),configAsString:u,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async waitUntilReady(){try{const u="mssql"===this.name?"master":this.options.database;return this.sequelize=new S(u,this.options.username,this.options.password,{host:"localhost",port:this.options.port,dialect:this.name.replace("postgresql","postgres"),retry:{max:30,match:[A,v,y,D,C],backoffBase:1e3,backoffExponent:1},logging:!1}),this.sequelize.authenticate().then((()=>!0)).catch((u=>(console.log(u),!1)))}catch(u){return!1}}async getServiceState(){const u=c(this.getDockerComposeConfig());return(await b({configAsString:u,log:!1,commandOptions:["--all"]})).data.services.find((u=>u.name.includes(this.name)))}async showDockerLogs(u){return new Promise(((d,t)=>{k("docker",["logs","-f","-n","5000",u],{cwd:g(),stdio:"inherit"}).on("exit",(u=>0===u?d():t(new Error(`Docker exited with code ${u}`))))}))}};const L={port:1433,database:"dcdx",username:"sa",password:"DataCenterDX!",edition:"Developer",version:"2022"};class MSSQL extends q{name="mssql";driver="com.microsoft.sqlserver.jdbc.SQLServerDriver";options=L;version="2022";get url(){return`jdbc:sqlserver://db:${this.options.port};databaseName=${this.options.database};trustServerCertificate=true`}constructor(u=L){super({...L,...u})}async onDatabaseReady(){await this.run(`CREATE DATABASE ${this.options.database}`),await this.run(`ALTER DATABASE ${this.options.database} COLLATE SQL_Latin1_General_CP1_CS_AS`),await this.run(`ALTER DATABASE ${this.options.database} SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;`)}getService=()=>({image:`mcr.microsoft.com/mssql/server:${this.version}-latest`,ports:[`${this.options.port||1433}:1433`],environment:{ACCEPT_EULA:"y",MSSQL_SA_PASSWORD:this.options.password||"dcdx",MSSQL_PID:this.options.edition},networks:{shared:{aliases:["db","database"]}}})}const P={port:3306,database:"dcdx",username:"dcdx",password:"dcdx",version:"8.0"};class MySQL extends q{name="mysql";driver="com.mysql.jdbc.Driver";options=P;version="8.0";get url(){return`jdbc:mysql://db:${this.options.port}/${this.options.database}?sessionVariables=transaction_isolation='READ-COMMITTED'`}constructor(u=P){super({...P,...u})}async onDatabaseReady(){await this.run(`ALTER DATABASE ${this.options.database} CHARACTER SET 'utf8mb4' COLLATE utf8mb4_bin`)}getService=()=>({image:`mysql:${this.version}`,ports:[`${this.options.port||3306}:3306`],environment:{MYSQL_ROOT_PASSWORD:this.options.password||"dcdx",MYSQL_USER:this.options.username||"dcdx",MYSQL_PASSWORD:this.options.password||"dcdx",MYSQL_DATABASE:this.options.database||"dcdx"},command:["--log_bin_trust_function_creators=1"],networks:{shared:{aliases:["db","database"]}}})}const O={version:"15",database:"dcdx",port:5432,username:"dcdx",password:"dcdx"};class Postgres extends q{name="postgresql";driver="org.postgresql.Driver";options=O;version="15";get url(){return`jdbc:postgresql://db:${this.options.port}/${this.options.database}`}constructor(u=O){super({...O,...u})}getService=()=>({image:`postgres:${this.version}`,ports:[`${this.options.port||5432}:5432`],environment:{POSTGRES_USER:this.options.username||"dcdx",POSTGRES_PASSWORD:this.options.password||"dcdx",POSTGRES_DB:this.options.database||"dcdx",POSTGRES_HOST_AUTH_METHOD:"md5",POSTGRES_INITDB_ARGS:"--encoding=UTF-8 --lc-collate=C --lc-ctype=C"},networks:{shared:{aliases:["db","database"]}}})}const $=p(h(),".dcdx");class Base extends m{options;constructor(u){super(),this.options=u}get baseUrl(){let u="http://localhost";return this.options.port&&(u+=`:${this.options.port}`),this.options.contextPath?`${u}/${this.options.contextPath}`:u}getDatabaseEngine(u){switch(u){case"postgresql":return new Postgres;case"mssql":return new MSSQL;case"mysql":return new MySQL}}async start(){this.options.clean&&await this.down(),await this.build(this.options.version),await this.database.start(this.options.clean),await this.up()}async stop(){if(await this.database.stop(this.options.prune),this.options.prune)await this.down();else{const u=c(this.getDockerComposeConfig());await j({cwd:g(),configAsString:u,log:!0})}this.emit(`${this.name}:stopped`)}async reset(){await this.database.stop(!0),await this.down()}async cp(u){const d=await this.getServiceState();if(d&&d.state.toLowerCase().startsWith("up")){const d=this.getDockerComposeConfig(),t=c(d);await i("cp",[u,`${this.name}:/opt/quickreload/`],{cwd:g(),configAsString:t,log:!1})}}async isApplicationReady(){try{const u=await e.get(`${this.baseUrl}/status`,{validateStatus:()=>!0}).catch((()=>null));if(u&&200===u.status){const{data:d}=u;if("FIRST_RUN"===d.state)return console.log(`The application ${this.name} is ready on ${this.baseUrl} 🎉`),!0}return!1}catch(u){return!1}}getDockerComposeConfig(){return{version:"3.8",services:{[this.name]:this.getService()},networks:{shared:x}}}async up(){const u=this.getDockerComposeConfig(),d=c(u);await s({cwd:g(),configAsString:d,log:!0}),this.emit(`${this.name}:up`);await this.waitUntilReady()?(this.emit(`${this.name}:ready`),await this.tailApplicationLogs()):console.log(`Failed to start ${this.name} ⛔`),t(0)}async down(){const u=c(this.getDockerComposeConfig());await a({cwd:g(),configAsString:u,commandOptions:["-v","--remove-orphans","--rmi","local"],log:!0})}async getServiceState(){const u=c(this.getDockerComposeConfig());return(await b({configAsString:u,log:!1,commandOptions:["--all"]})).data.services.find((u=>u.name.includes(this.name)))}async waitUntilReady(u=0){console.log(`Waiting for ${this.name} to become available... ${u}s`);const d=await this.getServiceState();return!!(d&&d.state.toLowerCase().startsWith("up")&&await this.isApplicationReady())||(u>=300?(console.error(`A timeout occurred while waiting for ${this.name} to become available ⛔`),d&&await this.showDockerLogs(d.name),!1):(await new Promise((u=>setTimeout(u,1e3))),this.waitUntilReady(u+1)))}getDockerRepositoryUrl(){return`https://bitbucket.org/atlassian-docker/docker-${"jira"===this.name?"atlassian-jira":"bamboo"===this.name?`${this.name}-server`:`atlassian-${this.name}-server`}.git`}async build(u){const d=this.getDockerRepositoryUrl(),t=p($,this.name,"source");r(t)?await w({baseDir:t}).pull({"--recurse-submodule":null}):(l(p($,this.name),{recursive:!0}),await w().clone(d,t,{"--recurse-submodule":null})),await new Promise(((d,n)=>{k("docker",["build","-t",`dcdx/${this.name}:${u}`,"--build-arg",`${this.name.toUpperCase()}_VERSION=${u}`,"."],{cwd:t,stdio:"inherit"}).on("exit",(u=>0===u?d():n(new Error(`Docker exited with code ${u}`))))}))}async tailApplicationLogs(){const u=await this.getServiceState();u&&u.state.toLowerCase().startsWith("up")&&await this.showApplicationLogs(u.name).catch((()=>null))}async showDockerLogs(u){return new Promise(((d,t)=>{k("docker",["logs","-f","-n","5000",u],{cwd:g(),stdio:"inherit"}).on("exit",(u=>0===u?d():t(new Error(`Docker exited with code ${u}`))))}))}async showApplicationLogs(u){return new Promise(((d,t)=>{k("docker",["exec","-i",u,"tail","-F","-n","5000",this.logFilePath],{cwd:g(),stdio:"inherit"}).on("exit",(u=>0===u?d():t(new Error(`Docker exited with code ${u}`))))}))}}class Confluence extends Base{name=R.CONFLUENCE;database;logFilePath="/var/atlassian/application-data/confluence/logs/atlassian-confluence.log";constructor(u){super(u),this.database=this.getDatabaseEngine(u.database)}getService(){const u=this.getVolumes(),d=this.getEnvironmentVariables();return{build:{context:toAbsolutePath("../../assets"),dockerfile_inline:`\nFROM dcdx/${this.name}:${this.options.version}\nCOPY ./mysql-connector-j-8.3.0.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-j-8.3.0.jar\nCOPY ./quickreload-5.0.2.jar /opt/atlassian/confluence/confluence/WEB-INF/atlassian-bundled-plugins/quickreload-5.0.2.jar\nRUN echo "/opt/quickreload" > /var/atlassian/application-data/confluence/quickreload.properties; mkdir -p /opt/quickreload; chown -R confluence:confluence /opt/quickreload;\n\nRUN chown -R confluence:confluence /opt/atlassian/confluence`},ports:[`${this.options.port||80}:8090`,...this.options.debug?["5005:5005"]:[]],environment:Object.keys(d).length>0?d:void 0,volumes:u.length>0?u:void 0,networks:["shared"]}}getEnvironmentVariables(){return{...this.options.contextPath?{ATL_TOMCAT_CONTEXTPATH:this.options.contextPath}:"",...this.options.debug?{JVM_SUPPORT_RECOMMENDED_ARGS:this.getJVMArgs()}:"",ATL_LICENSE_KEY:this.options.license||T,ATL_JDBC_URL:this.database.url,ATL_JDBC_USER:this.database.options.username,ATL_JDBC_PASSWORD:this.database.options.password,ATL_DB_TYPE:`${this.database.name}`}}getJVMArgs(){const u=[];return this.options.debug&&(u.push("-Dupm.plugin.upload.enabled=true"),u.push("-Xdebug"),u.push("-Xrunjdwp:transport=dt_socket,address=*:5005,server=y,suspend=n"),u.push("-Dcom.sun.management.jmxremote.port=9999"),u.push("-Dcom.sun.management.jmxremote.rmi.port=9998"),u.push("-Dcom.sun.management.jmxremote.authenticate=false"),u.push("-Dcom.sun.management.jmxremote.ssl=false")),this.options.quickReload&&u.push("-Dquickreload.dirs=/opt/quickreload"),u.join(" ")}getVolumes(){return[...this.options.quickReload?[`${this.options.quickReload}:/opt/quickreload`]:""]}}(async()=>{const t=u.showHelpAfterError(!0).addOption(new d("-v, --version <version>","The version of the host application").choices(E).default("latest")).addOption(new d("-d, --database <name>","The database engine on which the host application will run").choices(["postgresql","mysql","mssql"]).default("postgresql")).addOption(new d("-p, --port <port>","The HTTP port on which the host application will be accessible").default("80")).addOption(new d("-c, --contextPath <contextPath>","The context path on which the host application will be accessible")).addOption(new d("-qr, --quickReload <path_to_watch>","Add support for QuickReload and add the provided path to the watch list")).addOption(new d("--clean","Remove data files before starting the database").default(!1)).addOption(new d("--prune","Remove data files when stopping the database").default(!1)).addOption(new d("--debug","Add support for JVM debugger on port 5005")).parse(process.argv).opts(),o=new Confluence({version:t.version,database:t.database,port:Number(t.port),contextPath:t.contextPath,quickReload:t.qr,clean:t.clean,prune:t.prune,debug:t.debug});n((async()=>{console.log(`Stopping ${o.name}... ⏳`),await o.stop(),console.log(`Stopped ${o.name} 💪`)}),{wait:3e4}),await o.start()})(),process.on("SIGINT",(()=>{console.log("Received term signal, trying to stop gracefully 💪"),t()}));
|