Parcourir la source

fix: production mode getting git info in docker images wasn't working

Kristian Vos il y a 1 an
Parent
commit
fdb9102d31
5 fichiers modifiés avec 37 ajouts et 27 suppressions
  1. 4 3
      backend/Dockerfile
  2. 21 15
      backend/index.js
  3. 6 4
      docker-compose.yml
  4. 4 3
      frontend/Dockerfile
  5. 2 2
      frontend/vite.config.js

+ 4 - 3
backend/Dockerfile

@@ -3,8 +3,8 @@ FROM node:18 AS backend_node_modules
 RUN mkdir -p /opt/app
 WORKDIR /opt/app
 
-COPY package.json /opt/app/package.json
-COPY package-lock.json /opt/app/package-lock.json
+COPY backend/package.json /opt/app/package.json
+COPY backend/package-lock.json /opt/app/package-lock.json
 
 RUN npm install --silent
 
@@ -16,7 +16,8 @@ ENV CONTAINER_MODE=${CONTAINER_MODE}
 RUN mkdir -p /opt/app /opt/types
 WORKDIR /opt/app
 
-COPY . /opt/app
+COPY backend /opt/app
+COPY .git /opt/app/.git
 COPY --from=backend_node_modules /opt/app/node_modules node_modules
 
 ENTRYPOINT bash -c '([[ "${CONTAINER_MODE}" == "development" ]] && npm install --silent); npm run docker:dev'

+ 21 - 15
backend/index.js

@@ -39,21 +39,27 @@ const printVersion = () => {
 	console.log(`Musare version: ${MUSARE_VERSION}.`);
 
 	try {
-		const head_contents = fs.readFileSync(".parent_git/HEAD").toString().replaceAll("\n", "");
-		const branch = new RegExp("ref: refs/heads/([A-Za-z0-9_.-]+)").exec(head_contents)[1];
-		const config_contents = fs.readFileSync(".parent_git/config").toString().replaceAll("\t", "").split("\n");
-		const remote = new RegExp("remote = (.+)").exec(
-			config_contents[config_contents.indexOf(`[branch "${branch}"]`) + 1]
-		)[1];
-		const remote_url = new RegExp("url = (.+)").exec(
-			config_contents[config_contents.indexOf(`[remote "${remote}"]`) + 1]
-		)[1];
-		const latest_commit = fs.readFileSync(`.parent_git/refs/heads/${branch}`).toString().replaceAll("\n", "");
-		const latest_commit_short = latest_commit.substr(0, 7);
-
-		console.log(
-			`Git branch: ${remote}/${branch}. Remote url: ${remote_url}. Latest commit: ${latest_commit} (${latest_commit_short}).`
-		);
+		let gitFolder = null;
+		if (fs.existsSync(".git/HEAD")) gitFolder = ".git";
+		else if (fs.existsSync("../.git/HEAD")) gitFolder = "../.git";
+
+		if (gitFolder) {
+			const head_contents = fs.readFileSync(`${gitFolder}/HEAD`).toString().replaceAll("\n", "");
+			const branch = new RegExp("ref: refs/heads/([A-Za-z0-9_.-]+)").exec(head_contents)[1];
+			const config_contents = fs.readFileSync(`${gitFolder}/config`).toString().replaceAll("\t", "").split("\n");
+			const remote = new RegExp("remote = (.+)").exec(
+				config_contents[config_contents.indexOf(`[branch "${branch}"]`) + 1]
+			)[1];
+			const remote_url = new RegExp("url = (.+)").exec(
+				config_contents[config_contents.indexOf(`[remote "${remote}"]`) + 1]
+			)[1];
+			const latest_commit = fs.readFileSync(`${gitFolder}/refs/heads/${branch}`).toString().replaceAll("\n", "");
+			const latest_commit_short = latest_commit.substr(0, 7);
+
+			console.log(
+				`Git branch: ${remote}/${branch}. Remote url: ${remote_url}. Latest commit: ${latest_commit} (${latest_commit_short}).`
+			);
+		} else console.log("Could not find .git folder.");
 	} catch (e) {
 		console.log(`Could not get Git info: ${e.message}.`);
 	}

+ 6 - 4
docker-compose.yml

@@ -3,11 +3,12 @@ version: "3.8"
 services:
   backend:
     build:
-      context: ./backend
+      context: .
+      dockerfile: ./backend/Dockerfile
       target: musare_backend
     restart: ${RESTART_POLICY:-unless-stopped}
     volumes:
-      - ./.git:/opt/app/.parent_git:ro
+      - ./.git:/opt/app/.git:ro
       - ./backend/config:/opt/app/config
       - ./types:/opt/types
     environment:
@@ -27,7 +28,8 @@ services:
 
   frontend:
     build:
-      context: ./frontend
+      context: .
+      dockerfile: ./frontend/Dockerfile
       target: musare_frontend
       args:
         FRONTEND_MODE: "${FRONTEND_MODE:-production}"
@@ -44,7 +46,7 @@ services:
     ports:
       - "${FRONTEND_HOST:-0.0.0.0}:${FRONTEND_PORT:-80}:80"
     volumes:
-      - ./.git:/opt/app/.parent_git:ro
+      - ./.git:/opt/app/.git:ro
       - ./types:/opt/types
     environment:
       - CONTAINER_MODE=${CONTAINER_MODE:-production}

+ 4 - 3
frontend/Dockerfile

@@ -3,8 +3,8 @@ FROM node:18 AS frontend_node_modules
 RUN mkdir -p /opt/app
 WORKDIR /opt/app
 
-COPY package.json /opt/app/package.json
-COPY package-lock.json /opt/app/package-lock.json
+COPY frontend/package.json /opt/app/package.json
+COPY frontend/package-lock.json /opt/app/package-lock.json
 
 RUN npm install --silent
 
@@ -35,7 +35,8 @@ RUN apt update && apt install nginx -y
 RUN mkdir -p /opt/app /opt/types
 WORKDIR /opt/app
 
-COPY . /opt/app
+COPY frontend /opt/app
+COPY .git /opt/app/.git
 COPY --from=frontend_node_modules /opt/app/node_modules node_modules
 
 RUN mkdir -p /run/nginx

+ 2 - 2
frontend/vite.config.js

@@ -30,7 +30,7 @@ const fetchVersionAndGitInfo = () => {
 
 	try {
 		let gitFolder = null;
-		if (fs.existsSync(".parent_git/HEAD")) gitFolder = ".parent_git";
+		if (fs.existsSync(".git/HEAD")) gitFolder = ".git";
 		else if (fs.existsSync("../.git/HEAD")) gitFolder = "../.git";
 
 		if (gitFolder) {
@@ -85,7 +85,7 @@ const fetchVersionAndGitInfo = () => {
 				debug.git.latestCommit = latestCommit;
 			if (process.env.MUSARE_DEBUG_GIT_LATEST_COMMIT_SHORT)
 				debug.git.latestCommitShort = latestCommitShort;
-		}
+		} else console.log("Could not find .git folder.");
 	} catch (e) {
 		console.log(`Could not get Git info: ${e.message}.`, e);
 	}