From 6eed01a8829048d1ef68636354acc1bec7446670 Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Wed, 2 Jul 2025 10:23:38 -0600 Subject: [PATCH 1/8] fix some issues preventing the docker container from starting --- docker/Dockerfile | 8 +++----- docker/healthcheck.js | 10 ---------- docker/saveconfig.sh | 7 +++++++ gitrevupdate.js | 18 ++++++++++++++++++ lib/config.js | 1 - lib/sparql/sparql.js | 12 +++++++++++- synbiohub.js | 3 --- 7 files changed, 39 insertions(+), 20 deletions(-) delete mode 100644 docker/healthcheck.js create mode 100755 docker/saveconfig.sh create mode 100644 gitrevupdate.js diff --git a/docker/Dockerfile b/docker/Dockerfile index f47f1e89a..99d1c5bd1 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -5,10 +5,11 @@ RUN apk add nss git openjdk8-jre openjdk8 maven python alpine-sdk libxml2-dev ya WORKDIR /synbiohub COPY . . +RUN git config --global url."https://".insteadOf git:// +RUN docker/saveconfig.sh RUN rm -rf .git RUN cd java && mvn package -RUN git config --global url."https://".insteadOf git:// RUN yarn install RUN mkdir /mnt/data && \ @@ -19,8 +20,6 @@ RUN mkdir /mnt/data && \ mkdir /mnt/config COPY docker/config.local.json /mnt/config/config.local.json -COPY docker/healthcheck.js healthcheck.js -COPY docker/entry.sh entry.sh RUN ln -s /mnt/config/config.local.json ./config.local.json && \ touch /mnt/data/synbiohub.sqlite && ln -s /mnt/data/synbiohub.sqlite ./synbiohub.sqlite && \ @@ -31,6 +30,5 @@ RUN ln -s /mnt/config/config.local.json ./config.local.json && \ EXPOSE 7777 -HEALTHCHECK --start-period=60s CMD ["node", "healthcheck.js"] -ENTRYPOINT ["./entry.sh"] +ENTRYPOINT ["./docker/entry.sh"] diff --git a/docker/healthcheck.js b/docker/healthcheck.js deleted file mode 100644 index b193f8135..000000000 --- a/docker/healthcheck.js +++ /dev/null @@ -1,10 +0,0 @@ -const axios = require('axios') -const config = require('./lib/config') - -const url = 'http://localhost:' + config.get('port') + '/' - -axios.get(url).then(response => { - return process.exit(0) -}).catch(error => { - return process.exit(1) -}) diff --git a/docker/saveconfig.sh b/docker/saveconfig.sh new file mode 100755 index 000000000..236eb5fb9 --- /dev/null +++ b/docker/saveconfig.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# Save git revision to config before removing .git folder +echo "Saving git revision to configuration..." +node gitrevupdate.js + +echo "Git revision saved successfully!" \ No newline at end of file diff --git a/gitrevupdate.js b/gitrevupdate.js new file mode 100644 index 000000000..eb2aed785 --- /dev/null +++ b/gitrevupdate.js @@ -0,0 +1,18 @@ +#!/usr/bin/env node + +const config = require('./lib/config') +const gitRev = require('./lib/gitRevision') + +console.log('Updating git revision in configuration...') + +// Get the current git revision +const revision = gitRev() + +if (revision) { + // Set the revision in the config + config.set('revision', revision) + console.log(`Git revision updated to: ${revision}`) +} else { + console.error('Failed to get git revision') + process.exit(1) +} \ No newline at end of file diff --git a/lib/config.js b/lib/config.js index 1f7652c09..3953c4a3a 100644 --- a/lib/config.js +++ b/lib/config.js @@ -1,4 +1,3 @@ - var fs = require('fs') var extend = require('xtend') var deepmerge = require('deepmerge') diff --git a/lib/sparql/sparql.js b/lib/sparql/sparql.js index 3c31ed128..da7455c8f 100644 --- a/lib/sparql/sparql.js +++ b/lib/sparql/sparql.js @@ -60,7 +60,7 @@ function updateQuery (sparql, graphUri, accept) { function updateQueryJson (sparql, graphUri) { // const timer = Timer('sparql query') - return updateQuery(sparql, graphUri, 'application/sparql-results+json').then(parseResult) + return updateQuery(sparql, graphUri, 'application/sparql-results+json').then(parseResult, handleError) function parseResult (res) { // timer() @@ -71,6 +71,12 @@ function updateQueryJson (sparql, graphUri) { return Promise.resolve(sparqlResultsToArray(results)) } + + function handleError (error) { + console.error('SPARQL update query failed') + console.error(error.stack) + return Promise.reject(error) + } } function query (sparql, graphUri, accept, explorer = false) { @@ -200,6 +206,10 @@ function deleteStaggered (sparql, graphUri) { } else { return performQuery() } + }).catch((error) => { + console.error('Delete operation failed') + console.error(error.stack) + return Promise.reject(error) }) } } diff --git a/synbiohub.js b/synbiohub.js index d4f1feff6..cd8861643 100644 --- a/synbiohub.js +++ b/synbiohub.js @@ -4,7 +4,6 @@ const db = require('./lib/db') const fs = require('fs') const jobUtils = require('./lib/jobs/job-utils') const java = require('./lib/java') -const gitRev = require('./lib/gitRevision') const logger = require('./lib/logger') const theme = require('./lib/theme') @@ -22,8 +21,6 @@ if (!fs.existsSync('synbiohub.sqlite') || fs.statSync('synbiohub.sqlite').size = db.umzug.up().then(startServer) } -config.set('revision', gitRev()) - async function startServer () { await java.init() await theme.setCurrentThemeFromConfig() From b068ad539879b2b6439c84cbfd6596ca7bac125a Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Wed, 9 Jul 2025 12:22:58 -0600 Subject: [PATCH 2/8] Update Dockerfile --- docker/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 99d1c5bd1..1336deae2 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -29,6 +29,7 @@ RUN ln -s /mnt/config/config.local.json ./config.local.json && \ ln -s /mnt/data/icons public/. EXPOSE 7777 +HEALTHCHECK --interval=10s --timeout=10s --start-period=30s --retries=5 \ + CMD curl -f http://localhost:7777/ || exit 1 ENTRYPOINT ["./docker/entry.sh"] - From 7adf2e4b5ae3b8875d7ab890dfbdfb97442e8e8b Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:34:14 -0600 Subject: [PATCH 3/8] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 1336deae2..afc64e439 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /synbiohub COPY . . RUN git config --global url."https://".insteadOf git:// -RUN docker/saveconfig.sh +RUN chmod +x docker/saveconfig.sh && ./docker/saveconfig.sh RUN rm -rf .git RUN cd java && mvn package From 7cbdc733003b7315104dacbd69b41c7f81a01957 Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:34:36 -0600 Subject: [PATCH 4/8] Update Dockerfile --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index afc64e439..bd4c4f56e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,6 +1,6 @@ FROM node:11.1.0-alpine -RUN apk add nss git openjdk8-jre openjdk8 maven python alpine-sdk libxml2-dev yarn g++ gcc bash raptor2 jq +RUN apk add nss git openjdk8-jre openjdk8 maven python alpine-sdk libxml2-dev yarn g++ gcc bash raptor2 jq curl WORKDIR /synbiohub COPY . . From 2a67205c0294a99cc046bdc5017250355889a6de Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:36:46 -0600 Subject: [PATCH 5/8] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- lib/sparql/sparql.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/sparql/sparql.js b/lib/sparql/sparql.js index da7455c8f..55461aeed 100644 --- a/lib/sparql/sparql.js +++ b/lib/sparql/sparql.js @@ -60,7 +60,9 @@ function updateQuery (sparql, graphUri, accept) { function updateQueryJson (sparql, graphUri) { // const timer = Timer('sparql query') - return updateQuery(sparql, graphUri, 'application/sparql-results+json').then(parseResult, handleError) + return updateQuery(sparql, graphUri, 'application/sparql-results+json') + .then(parseResult) + .catch(handleError) function parseResult (res) { // timer() From 2fdb18d34d2493782b383b07433d2072d2d6ee24 Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:39:43 -0600 Subject: [PATCH 6/8] Update saveconfig.sh --- docker/saveconfig.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/saveconfig.sh b/docker/saveconfig.sh index 236eb5fb9..25782e637 100755 --- a/docker/saveconfig.sh +++ b/docker/saveconfig.sh @@ -1,7 +1,8 @@ #!/bin/bash +set -o errexit # Save git revision to config before removing .git folder echo "Saving git revision to configuration..." node gitrevupdate.js -echo "Git revision saved successfully!" \ No newline at end of file +echo "Git revision saved successfully!" From 77c0f57f53196e66e2e72219ca414d7e3e6dfa80 Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Mon, 14 Jul 2025 10:43:53 -0600 Subject: [PATCH 7/8] Update Dockerfile --- docker/Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index bd4c4f56e..7cd6ab7bd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -6,12 +6,13 @@ WORKDIR /synbiohub COPY . . RUN git config --global url."https://".insteadOf git:// -RUN chmod +x docker/saveconfig.sh && ./docker/saveconfig.sh -RUN rm -rf .git RUN cd java && mvn package RUN yarn install +RUN chmod +x docker/saveconfig.sh && ./docker/saveconfig.sh +RUN rm -rf .git + RUN mkdir /mnt/data && \ mkdir /mnt/data/backup && \ mkdir /mnt/data/uploads && \ From dabe66aac33e410db9e361815153cea136146605 Mon Sep 17 00:00:00 2001 From: Peter Hindes <19994487+PeterHindes@users.noreply.github.com> Date: Wed, 13 Aug 2025 11:51:24 -0600 Subject: [PATCH 8/8] simplify changes --- docker/Dockerfile | 9 +++++---- docker/saveconfig.sh | 8 -------- lib/sparql/sparql.js | 14 +------------- 3 files changed, 6 insertions(+), 25 deletions(-) delete mode 100755 docker/saveconfig.sh diff --git a/docker/Dockerfile b/docker/Dockerfile index 7cd6ab7bd..50319bd0f 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -10,8 +10,8 @@ RUN git config --global url."https://".insteadOf git:// RUN cd java && mvn package RUN yarn install -RUN chmod +x docker/saveconfig.sh && ./docker/saveconfig.sh -RUN rm -rf .git +RUN node gitrevupdate.js +RUN rm -rf .git ; apk del git RUN mkdir /mnt/data && \ mkdir /mnt/data/backup && \ @@ -30,7 +30,8 @@ RUN ln -s /mnt/config/config.local.json ./config.local.json && \ ln -s /mnt/data/icons public/. EXPOSE 7777 -HEALTHCHECK --interval=10s --timeout=10s --start-period=30s --retries=5 \ - CMD curl -f http://localhost:7777/ || exit 1 + +HEALTHCHECK --interval=10s --timeout=10s --start-period=20s --retries=5 \ + CMD ["node", "healthcheck.js"] ENTRYPOINT ["./docker/entry.sh"] diff --git a/docker/saveconfig.sh b/docker/saveconfig.sh deleted file mode 100755 index 25782e637..000000000 --- a/docker/saveconfig.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -o errexit - -# Save git revision to config before removing .git folder -echo "Saving git revision to configuration..." -node gitrevupdate.js - -echo "Git revision saved successfully!" diff --git a/lib/sparql/sparql.js b/lib/sparql/sparql.js index 55461aeed..3c31ed128 100644 --- a/lib/sparql/sparql.js +++ b/lib/sparql/sparql.js @@ -60,9 +60,7 @@ function updateQuery (sparql, graphUri, accept) { function updateQueryJson (sparql, graphUri) { // const timer = Timer('sparql query') - return updateQuery(sparql, graphUri, 'application/sparql-results+json') - .then(parseResult) - .catch(handleError) + return updateQuery(sparql, graphUri, 'application/sparql-results+json').then(parseResult) function parseResult (res) { // timer() @@ -73,12 +71,6 @@ function updateQueryJson (sparql, graphUri) { return Promise.resolve(sparqlResultsToArray(results)) } - - function handleError (error) { - console.error('SPARQL update query failed') - console.error(error.stack) - return Promise.reject(error) - } } function query (sparql, graphUri, accept, explorer = false) { @@ -208,10 +200,6 @@ function deleteStaggered (sparql, graphUri) { } else { return performQuery() } - }).catch((error) => { - console.error('Delete operation failed') - console.error(error.stack) - return Promise.reject(error) }) } }