From e7eb75ad1b855089ee75ca5bdaa676c09fc1df2a Mon Sep 17 00:00:00 2001
From: "patrick.tafoya" <patricktafoya@seed-innovations.com>
Date: Mon, 9 Dec 2024 16:15:10 -0700
Subject: [PATCH] BULL-3225-better-startup - POC updates to include a startup
 job that runs with proper user permissions.

---
 docker/baselines/docker-compose-startup.yml   | 19 +++++++++++++++++++
 docker/docker-compose-cosmtrek.yml            |  3 +++
 docker/docker-compose-express.yml             |  4 +++-
 docker/docker-compose-postgres.yml            |  4 ++++
 docker/docker-compose-vue.yml                 |  4 ++++
 .../docker-compose-dockerfile-lint.yml        |  1 +
 .../docker-compose-find-unauthorized.yml      |  1 +
 .../pipeline-jobs/docker-compose-npm-lint.yml |  1 +
 .../docker-compose-npm-unit-tests.yml         |  1 +
 .../docker-compose-trufflehog.yml             |  1 +
 formulas/baselines/universal.yml              |  4 +++-
 11 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 docker/baselines/docker-compose-startup.yml

diff --git a/docker/baselines/docker-compose-startup.yml b/docker/baselines/docker-compose-startup.yml
new file mode 100644
index 0000000..bb49c7b
--- /dev/null
+++ b/docker/baselines/docker-compose-startup.yml
@@ -0,0 +1,19 @@
+version: "3.6"
+services:
+
+  startup:
+    image: alpine:latest
+    container_name: startup-service
+    working_dir: /local-dev
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
+    volumes:
+      - .:/local-dev  # Map the root folder to /local-dev in the container
+    command: >
+      sh -c "chmod +x /local-dev/scripts/setup.sh && /local-dev/scripts/setup.sh"
+    healthcheck:
+      test: [ "CMD", "sh", "-c", "test -d /local-dev/reports" ]
+      interval: 10s
+      timeout: 5s
+      retries: 3
+      start_period: 5s
+    restart: "no"
diff --git a/docker/docker-compose-cosmtrek.yml b/docker/docker-compose-cosmtrek.yml
index e999fac..97de281 100644
--- a/docker/docker-compose-cosmtrek.yml
+++ b/docker/docker-compose-cosmtrek.yml
@@ -3,6 +3,7 @@ services:
   xx_project_name_xx-api:
     image: cosmtrek/air:v1.49.0
     container_name: xx_project_name_xx-api
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     working_dir: /app
     env_file:
       - .env
@@ -26,6 +27,8 @@ services:
     depends_on:
       db:
         condition: service_healthy
+      startup:
+        condition: service_healthy
     healthcheck:
       # due to the way the api authorizes requests, we expect a 401
       test: /opt/healthcheck/healthcheck.sh http://localhost:$$PORT/api/docs 401
diff --git a/docker/docker-compose-express.yml b/docker/docker-compose-express.yml
index cf013ef..3bbc6be 100644
--- a/docker/docker-compose-express.yml
+++ b/docker/docker-compose-express.yml
@@ -6,10 +6,10 @@ services:
       context: .
       dockerfile: Dockerfile.be.dev
     container_name: xx_project_name_xx-api
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     volumes:
       - ./xx_project_name_xx-api:/app
       - /app/node_modules
-    user: node
     command: bash -c "npm run dev"
     environment:
       # container internal port (not exposed to host)
@@ -27,6 +27,8 @@ services:
     depends_on:
       db:
         condition: service_healthy
+      startup:
+        condition: service_healthy
     healthcheck:
       test: curl -f http://localhost:$$PORT/api/health
       timeout: 10s
diff --git a/docker/docker-compose-postgres.yml b/docker/docker-compose-postgres.yml
index 0172177..b6d7454 100644
--- a/docker/docker-compose-postgres.yml
+++ b/docker/docker-compose-postgres.yml
@@ -3,6 +3,7 @@ services:
   db:
     image: postgres:11-alpine
     container_name: xx_project_name_xx-db
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     entrypoint: /postgres-entrypoint.sh
     command: >
       -c ssl=on
@@ -19,6 +20,9 @@ services:
       - xx_project_name_xx-net
     ports:
       - "5432:5432"
+    depends_on:
+      startup:
+        condition: service_healthy
     healthcheck:
       test: >
         pg_isready -d $$POSTGRES_DB -U $$POSTGRES_USER
diff --git a/docker/docker-compose-vue.yml b/docker/docker-compose-vue.yml
index 8e5563c..58e3558 100644
--- a/docker/docker-compose-vue.yml
+++ b/docker/docker-compose-vue.yml
@@ -5,6 +5,7 @@ services:
       context: .
       dockerfile: Dockerfile.ui.dev
     container_name: xx_project_name_xx-ui
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     volumes:
       - ./xx_project_name_xx-ui:/home/node
       - /home/node/node_modules
@@ -18,6 +19,9 @@ services:
     tty: true
     networks:
       - xx_project_name_xx-net
+    depends_on:
+      startup:
+        condition: service_healthy
     healthcheck:
       test: curl -f http://localhost:$$PORT
       timeout: 10s
diff --git a/docker/pipeline-jobs/docker-compose-dockerfile-lint.yml b/docker/pipeline-jobs/docker-compose-dockerfile-lint.yml
index 9e93110..5c44ee9 100644
--- a/docker/pipeline-jobs/docker-compose-dockerfile-lint.yml
+++ b/docker/pipeline-jobs/docker-compose-dockerfile-lint.yml
@@ -3,6 +3,7 @@ services:
   dockerfile-lint<<subProject>>:
     image: registry1.dso.mil/ironbank/opensource/hadolint/hadolint:v2.12.0
     container_name: dockerfile-lint<<subProject>>
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     entrypoint: ["/local-dev/${BASE_SCRIPTS_DIR}/dockerfile-lint/entrypoint.sh"]
     working_dir: /local-dev
     environment:
diff --git a/docker/pipeline-jobs/docker-compose-find-unauthorized.yml b/docker/pipeline-jobs/docker-compose-find-unauthorized.yml
index f72e1b2..e69691e 100644
--- a/docker/pipeline-jobs/docker-compose-find-unauthorized.yml
+++ b/docker/pipeline-jobs/docker-compose-find-unauthorized.yml
@@ -3,6 +3,7 @@ services:
   find-unauthorized<<subProject>>:
     image: registry1.dso.mil/ironbank/opensource/python:v3.12.5
     container_name: find-unauthorized<<subProject>>
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     entrypoint: ["/local-dev/${BASE_SCRIPTS_DIR}/find-unauthorized/entrypoint.sh"]
     working_dir: /local-dev
     environment:
diff --git a/docker/pipeline-jobs/docker-compose-npm-lint.yml b/docker/pipeline-jobs/docker-compose-npm-lint.yml
index 991f0fd..5bf0ba8 100644
--- a/docker/pipeline-jobs/docker-compose-npm-lint.yml
+++ b/docker/pipeline-jobs/docker-compose-npm-lint.yml
@@ -3,6 +3,7 @@ services:
   npm-lint<<subProject>>:
     image: registry1.dso.mil/ironbank/opensource/nodejs/nodejs20:20.11
     container_name: npm-lint<<subProject>>
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     entrypoint: ["/local-dev/${BASE_SCRIPTS_DIR}/npm-lint/entrypoint.sh"]
     working_dir: /local-dev
     environment:
diff --git a/docker/pipeline-jobs/docker-compose-npm-unit-tests.yml b/docker/pipeline-jobs/docker-compose-npm-unit-tests.yml
index 86ba911..5790711 100644
--- a/docker/pipeline-jobs/docker-compose-npm-unit-tests.yml
+++ b/docker/pipeline-jobs/docker-compose-npm-unit-tests.yml
@@ -3,6 +3,7 @@ services:
   npm-unit-tests<<subProject>>:
     image: registry1.dso.mil/ironbank/opensource/nodejs/nodejs20:20.11
     container_name: npm-unit-tests<<subProject>>
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     entrypoint: ["/local-dev/${BASE_SCRIPTS_DIR}/npm-unit-tests/entrypoint.sh"]
     working_dir: /local-dev
     environment:
diff --git a/docker/pipeline-jobs/docker-compose-trufflehog.yml b/docker/pipeline-jobs/docker-compose-trufflehog.yml
index b97ab45..6e3def2 100644
--- a/docker/pipeline-jobs/docker-compose-trufflehog.yml
+++ b/docker/pipeline-jobs/docker-compose-trufflehog.yml
@@ -3,6 +3,7 @@ services:
   trufflehog<<subProject>>:
     image: registry1.dso.mil/ironbank/opensource/trufflehog/trufflehog3:3.0.10
     container_name: trufflehog<<subProject>>
+    user: "${UID:-1000}:${GID:-1000}" # Default to 1000:1000 if UID/GID not set
     entrypoint: ["/local-dev/${BASE_SCRIPTS_DIR}/trufflehog/entrypoint.sh"]
     working_dir: /local-dev
     environment:
diff --git a/formulas/baselines/universal.yml b/formulas/baselines/universal.yml
index e121ca4..8f23f36 100644
--- a/formulas/baselines/universal.yml
+++ b/formulas/baselines/universal.yml
@@ -3,6 +3,8 @@ pipeline:
     subProject: ''
     exclusions: ''
   pipelineJobs:
+    startup:
+      composeFile: docker/baselines/docker-compose-startup.yml
     trufflehog:
       composeFile: docker/pipeline-jobs/docker-compose-trufflehog.yml
     dockerfile-lint:
@@ -26,4 +28,4 @@ getLocalDevDirs:
 
 getLocalDevFiles:
   - from: scripts/setup.sh
-    to: scripts/setup.sh
\ No newline at end of file
+    to: scripts/setup.sh
-- 
GitLab