From 06fe1405b9285edf2e3692742591b876883ddec9 Mon Sep 17 00:00:00 2001 From: kcirtapfromspace <105461352+kcirtapfromspace@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:47:04 -0700 Subject: [PATCH 1/7] use multistage builds --- Dockerfile.dev | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ tiltfile | 1 + 2 files changed, 55 insertions(+) create mode 100644 Dockerfile.dev create mode 100644 tiltfile diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000000..ead9c98e9c --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,54 @@ +FROM node:18.18.2 as base +WORKDIR /app +RUN apt-get update && apt-get install -y --no-install-recommends dumb-init lcov chromium +ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ + PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser +COPY package.json yarn.lock ./ +RUN yarn global add node-gyp &&\ + yarn install &&\ + yarn cache clean + +FROM node:18.18.2-alpine as frontend-base +WORKDIR /app +RUN apk update && apk add yarn dumb-init +COPY frontend/package.json frontend/yarn.lock ./ +RUN yarn install &&\ + yarn cache clean + +FROM node:18.18.2 as build +ENV NODE_OPTIONS=--max_old_space_size=2048 +WORKDIR /app +COPY --from=base /app/node_modules /app/node_modules +COPY . . +RUN yarn build + +FROM node:18.18.2-alpine as frontend-build +ENV NODE_OPTIONS=--max_old_space_size=2048 +WORKDIR /app +ENV DISABLE_ESLINT_PLUGIN=true +COPY --from=frontend-base /app/node_modules /app/node_modules +COPY ./frontend . +RUN yarn build:local + +FROM node:18.18.2-alpine as frontend +RUN apk update +ENV NODE_ENV dev +ENV CHOKIDAR_USEPOLLING=true +COPY --chown=node:node --from=frontend-base /usr/bin/dumb-init /usr/bin/dumb-init +COPY --chown=node:node --from=frontend-build /app/build /app +USER node +WORKDIR /app +COPY --chown=node:node --from=frontend-build /app/node_modules /app/node_modules +COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json + +CMD ["/usr/bin/dumb-init", "node", "server.js"] + +FROM node:18.18.2-slim as backend +COPY --from=base /usr/bin/dumb-init /usr/bin/dumb-init +COPY --from=build /app/build /app +USER node +WORKDIR /app +COPY --chown=node:node --from=build /app/node_modules /app/node_modules +COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json +COPY --chown=node:node . /app +CMD ["dumb-init", "node", "server.js"] \ No newline at end of file diff --git a/tiltfile b/tiltfile new file mode 100644 index 0000000000..e0ebd3aed9 --- /dev/null +++ b/tiltfile @@ -0,0 +1 @@ +docker_compose(["./docker-compose.yml", "./docker-compose.override.yml"]) \ No newline at end of file From 7d7f3c1539b6ff8d68448cd50529e5f67686d83f Mon Sep 17 00:00:00 2001 From: kcirtapfromspace <105461352+kcirtapfromspace@users.noreply.github.com> Date: Sat, 3 Feb 2024 01:07:26 -0700 Subject: [PATCH 2/7] Updates to dev system --- .dockerignore | 16 ++++++++++++- .env.example | 1 + .gitignore | 3 ++- Dockerfile.dev | 20 ++++++++--------- docker-compose.override.yml | 19 +++++++++++++++- docker-compose.yml | 8 ++++++- frontend/package.json | 5 ++++- frontend/yarn.lock | 6 ++--- package.json | 45 +++++++++++++++++++------------------ tiltfile | 14 +++++++++++- 10 files changed, 95 insertions(+), 42 deletions(-) diff --git a/.dockerignore b/.dockerignore index 5532b25f26..7feb4233ac 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,17 @@ .dockerignore +Dockerfile +Dockerfile.* +docker-compose.* node_modules -docker-compose.yaml \ No newline at end of file +docker-compose.yaml +similarity_api/ +docs/ +bin/ +deployment_config/ +terraform/ +**/node_modules +**/.next +**/dist +*.md +reports +.env \ No newline at end of file diff --git a/.env.example b/.env.example index 9c96dde145..622f274916 100644 --- a/.env.example +++ b/.env.example @@ -27,6 +27,7 @@ REDIRECT_URI_HOST=http://localhost:8080 CURRENT_USER_ID=1 # NEW_RELIC_LICENSE_KEY can be omitted in local development NEW_RELIC_LICENSE_KEY=secret_key +NEW_RELIC_ENABLED=false # Set to false to require user to go through auth flow, never true in production envs BYPASS_AUTH=true HSES_DATA_FILE_URL=url diff --git a/.gitignore b/.gitignore index 95ebf66dde..69aac04d7b 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,8 @@ tests/e2e/report /doc # Build related -build/ +build/** +dist/** frontend/build node_modules diff --git a/Dockerfile.dev b/Dockerfile.dev index ead9c98e9c..b315c4ccaf 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -32,23 +32,21 @@ RUN yarn build:local FROM node:18.18.2-alpine as frontend RUN apk update -ENV NODE_ENV dev -ENV CHOKIDAR_USEPOLLING=true -COPY --chown=node:node --from=frontend-base /usr/bin/dumb-init /usr/bin/dumb-init -COPY --chown=node:node --from=frontend-build /app/build /app + +# ENV CHOKIDAR_USEPOLLING=true USER node WORKDIR /app -COPY --chown=node:node --from=frontend-build /app/node_modules /app/node_modules -COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json - +COPY --chown=node:node --from=frontend-base /usr/bin/dumb-init /usr/bin/dumb-init +COPY --chown=node:node --from=frontend-build /app/build /app +COPY --chown=node:node --from=frontend-build /app/node_modules /app/node_modules +COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json CMD ["/usr/bin/dumb-init", "node", "server.js"] FROM node:18.18.2-slim as backend -COPY --from=base /usr/bin/dumb-init /usr/bin/dumb-init -COPY --from=build /app/build /app USER node WORKDIR /app +COPY --chown=node:node --from=base /usr/bin/dumb-init /usr/bin/dumb-init +COPY --chown=node:node --from=build /app/build /app COPY --chown=node:node --from=build /app/node_modules /app/node_modules -COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json -COPY --chown=node:node . /app +COPY --chown=node:node --from=build /app/package.json /app/package.json CMD ["dumb-init", "node", "server.js"] \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index fbfe4d4da6..bb95c09cfc 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -3,6 +3,12 @@ services: backend: build: context: . + dockerfile: ./Dockerfile.dev + cache_from: + - node:18.18.2 # Using the base image as a cache source + - node:18.18.2-slim + - head-start-ttadp-backend:latest + target: backend command: yarn server user: ${CURRENT_USER:-root} ports: @@ -32,6 +38,12 @@ services: frontend: build: context: . + dockerfile: ./Dockerfile.dev + cache_from: + - node:18.18.2 # Using the base image as a cache source + - node:18.18.2-alpine + - head-start-ttadp-frontend:latest + target: frontend command: yarn start user: ${CURRENT_USER:-root} stdin_open: true @@ -48,6 +60,11 @@ services: worker: build: context: . + dockerfile: ./Dockerfile.dev + cache_from: + - node:18.18.2 # Using the base image as a cache source + - head-start-ttadp-worker:latest + target: backend command: yarn worker env_file: .env depends_on: @@ -73,7 +90,7 @@ services: image: owasp/zap2docker-stable:latest platform: linux/arm64 user: zap - command: zap-api-scan.py -t http://similarity:8080/openapi.json -f openapi -I -i -r owasp_api_report.html + command: zap-api-scan.py -t http://similarity_api:8080/openapi.json -f openapi -I -i -r owasp_api_report.html volumes: - ./zap.conf:/zap/wrk/zap.conf:ro - ./reports:/zap/wrk:rw diff --git a/docker-compose.yml b/docker-compose.yml index 8d01744fc0..48d71c66ba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -33,7 +33,7 @@ services: depends_on: - minio clamav-rest: - image: ajilaag/clamav-rest + image: kcirtapfromspace/clamav-rest ports: - "9443:9443" environment: @@ -76,6 +76,12 @@ services: testingonly: build: context: . + dockerfile: ./Dockerfile.dev + # target: dependencies + cache_from: + - node:18.18.2 # Using the base image as a cache source + - head-start-ttadp-worker:latest + target: backend ports: - "9999:9999" depends_on: diff --git a/frontend/package.json b/frontend/package.json index 79ea67688c..f4e729d4b0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -88,7 +88,6 @@ "tar": "^4.4.18", "d3-color": "^3.1.0", "minimatch": "^3.0.5", - "postcss": "^8.4.31", "decode-uri-component": "^0.2.1", "tough-cookie": "^4.0.0", "ua-parser-js": "^0.7.33", @@ -159,6 +158,7 @@ ] }, "devDependencies": { + "postcss": "^8.4.33", "@sheerun/mutationobserver-shim": "^0.3.3", "@testing-library/dom": "^8.11.1", "@testing-library/jest-dom": "^5.11.9", @@ -183,6 +183,9 @@ "react-scripts": "^5.0.1", "react-select-event": "^5.1.0" }, + "peerDependencies": { + "postcss": "^8.4.33" + }, "jest": { "coveragePathIgnorePatterns": [ "/src/index.js", diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 3f86a3e235..af0b5d3075 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -3799,9 +3799,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: - version "1.0.30001441" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz#987437b266260b640a23cd18fbddb509d7f69f3e" - integrity sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg== + version "1.0.30001583" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001583.tgz" + integrity sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q== canvas-fit@^1.5.0: version "1.5.0" diff --git a/package.json b/package.json index b6a8c22919..41c926086c 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "start:web": "node ./build/server/src/index.js", "start:worker": "node ./build/server/src/worker.js", "start:testingonly": "tsx watch ./src/testingOnly.js", - "server": "tsx watch src/index.ts", - "worker": "tsx watch src/worker.ts", + "server": "tsx watch --trace-warnings src/index.ts", + "worker": "tsx watch --trace-warnings src/worker.ts", "server:debug": "nodemon --inspect=0.0.0.0:9229 src/index.js --exec babel-node", "client": "yarn --cwd frontend start", "test": "yarn build && jest build/server/src --runInBand", @@ -52,28 +52,28 @@ "db:seed:prod": "node_modules/.bin/sequelize db:seed:all --options-path .production.sequelizerc", "db:seed:undo": "node_modules/.bin/sequelize db:seed:undo:all", "db:seed:undo:prod": "node_modules/.bin/sequelize db:seed:undo:all --options-path .production.sequelizerc", - "docker:deps": "docker-compose run --rm backend yarn global add node-gyp && docker-compose run --rm backend yarn install && docker-compose run --rm frontend yarn global add node-gyp && docker-compose run --rm frontend yarn install && docker-compose run --rm testingonly yarn global add node-gyp && docker-compose run --rm testingonly yarn install", + "docker:deps": "docker compose run --rm backend yarn global add node-gyp && docker compose run --rm backend yarn install && docker compose run --rm frontend yarn global add node-gyp && docker compose run --rm frontend yarn install && docker compose run --rm testingonly yarn global add node-gyp && docker compose run --rm testingonly yarn install", "docker:reset": "./bin/reset-all", - "docker:start": "docker-compose up", - "docker:start:debug": "docker-compose --compatibility -f docker-compose.yml -f docker-compose.debug.yml up", - "docker:stop": "docker-compose down", - "docker:dbs:start": "docker-compose -f 'docker-compose.yml' up", - "docker:dbs:stop": "docker-compose -f 'docker-compose.yml' down", + "docker:start": "docker compose up", + "docker:start:debug": "docker compose --compatibility -f docker compose.yml -f docker compose.debug.yml up", + "docker:stop": "docker compose down", + "docker:dbs:start": "docker compose -f 'docker compose.yml' up", + "docker:dbs:stop": "docker compose -f 'docker compose.yml' down", "docker:test": "./bin/run-tests", - "docker:test:be": "docker-compose run --rm backend yarn test", - "docker:lint": "docker-compose run --rm backend yarn lint:ci && docker-compose run --rm frontend yarn lint:ci", - "docker:lint:fix": "docker-compose run --rm backend yarn lint:fix && docker-compose run --rm frontend yarn lint:fix", - "docker:shell:frontend": "docker-compose run --rm frontend /bin/bash", - "docker:shell:backend": "docker-compose run --rm backend /bin/bash", - "docker:db:migrate": "docker-compose run --rm backend node_modules/.bin/sequelize db:migrate && yarn docker:ldm", - "docker:db:migrate:undo": "docker-compose run --rm backend node_modules/.bin/sequelize db:migrate:undo", - "docker:db:seed": "docker-compose run --rm backend yarn db:seed", - "docker:db:seed:undo": "docker-compose run --rm backend yarn db:seed:undo", - "docker:ldm": "docker-compose run --rm backend yarn ldm", - "docker:makecolors": "docker-compose run --rm frontend yarn makecolors", - "docker:yarn": "docker-compose run yarn", - "docker:yarn:fe": "docker-compose run --rm frontend yarn", - "docker:yarn:be": "docker-compose run --rm backend yarn", + "docker:test:be": "docker compose run --rm backend yarn test", + "docker:lint": "docker compose run --rm backend yarn lint:ci && docker compose run --rm frontend yarn lint:ci", + "docker:lint:fix": "docker compose run --rm backend yarn lint:fix && docker compose run --rm frontend yarn lint:fix", + "docker:shell:frontend": "docker compose run --rm frontend /bin/bash", + "docker:shell:backend": "docker compose run --rm backend /bin/bash", + "docker:db:migrate": "docker compose run --rm backend node_modules/.bin/sequelize db:migrate && yarn docker:ldm", + "docker:db:migrate:undo": "docker compose run --rm backend node_modules/.bin/sequelize db:migrate:undo", + "docker:db:seed": "docker compose run --rm backend yarn db:seed", + "docker:db:seed:undo": "docker compose run --rm backend yarn db:seed:undo", + "docker:ldm": "docker compose run --rm backend yarn ldm", + "docker:makecolors": "docker compose run --rm frontend yarn makecolors", + "docker:yarn": "docker compose run yarn", + "docker:yarn:fe": "docker compose run --rm frontend yarn", + "docker:yarn:be": "docker compose run --rm backend yarn", "import:reports:local": "./node_modules/.bin/babel-node ./src/tools/importSSActivityReports.js", "import:reports": "node ./build/server/src/tools/importSSActivityReports.js", "import:goals:local": "./node_modules/.bin/babel-node ./src/tools/importTTAPlanGoals.js", @@ -245,6 +245,7 @@ ] }, "devDependencies": { + "turbo": "^1.9.6", "@axe-core/cli": "4.6.0", "@axe-core/playwright": "^4.6.0", "@babel/cli": "^7.11.6", diff --git a/tiltfile b/tiltfile index e0ebd3aed9..bb77ad2fb1 100644 --- a/tiltfile +++ b/tiltfile @@ -1 +1,13 @@ -docker_compose(["./docker-compose.yml", "./docker-compose.override.yml"]) \ No newline at end of file + + +docker_compose(["./docker-compose.yml", "./docker-compose.override.yml"]) + +local_resource( + 'set-node-version', + cmd='nvm install 18.18.2 && nvm use 18.18.2', + deps=[], + allow_parallel=True +) + +local_resource('db:migrate', cmd='docker compose run --rm backend node_modules/.bin/sequelize db:migrate', deps=['package.json', 'db']) +local_resource('db:seed', cmd='docker compose run --rm backend node_modules/.bin/sequelize db:migrate', deps=['package.json','db']) From 83acbaf7fee9e817185255b5261795ba4ed7c00e Mon Sep 17 00:00:00 2001 From: kcirtapfromspace <105461352+kcirtapfromspace@users.noreply.github.com> Date: Sat, 3 Feb 2024 12:17:09 -0700 Subject: [PATCH 3/7] minor --- docker-compose.yml | 4 ++++ tiltfile | 7 ------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 48d71c66ba..d3a1da55e9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -50,6 +50,10 @@ services: - "./similarity_api/src:/app:rw" redis: image: redis:5.0.6-alpine + # https://github.com/docker-library/redis/issues/191 + sysctls: + - net.core.somaxconn=511 + # - vm.overcommit_memory=1 command: ['redis-server', '--requirepass', '$REDIS_PASS'] env_file: .env ports: diff --git a/tiltfile b/tiltfile index bb77ad2fb1..dc4ba067ec 100644 --- a/tiltfile +++ b/tiltfile @@ -2,12 +2,5 @@ docker_compose(["./docker-compose.yml", "./docker-compose.override.yml"]) -local_resource( - 'set-node-version', - cmd='nvm install 18.18.2 && nvm use 18.18.2', - deps=[], - allow_parallel=True -) - local_resource('db:migrate', cmd='docker compose run --rm backend node_modules/.bin/sequelize db:migrate', deps=['package.json', 'db']) local_resource('db:seed', cmd='docker compose run --rm backend node_modules/.bin/sequelize db:migrate', deps=['package.json','db']) From 65891701f19c93203a9c3f17e28f92d123361f4f Mon Sep 17 00:00:00 2001 From: kcirtapfromspace <105461352+kcirtapfromspace@users.noreply.github.com> Date: Tue, 6 Feb 2024 10:51:35 -0700 Subject: [PATCH 4/7] get docker working --- Dockerfile.dev | 31 +++++++++++-------- docker-compose.override.yml | 60 ++++++++++++++++++++++++++----------- docker-compose.yml | 8 +++-- tiltfile | 7 +---- 4 files changed, 69 insertions(+), 37 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index b315c4ccaf..cfdc9a436d 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -19,8 +19,11 @@ FROM node:18.18.2 as build ENV NODE_OPTIONS=--max_old_space_size=2048 WORKDIR /app COPY --from=base /app/node_modules /app/node_modules -COPY . . -RUN yarn build +COPY --from=base /app/package.json /app/package.json +COPY src/ /app/src/ +COPY tests/ /app/tests/ +COPY config/ /app/config/ +RUN yarn tsc --build --verbose src FROM node:18.18.2-alpine as frontend-build ENV NODE_OPTIONS=--max_old_space_size=2048 @@ -32,21 +35,25 @@ RUN yarn build:local FROM node:18.18.2-alpine as frontend RUN apk update - # ENV CHOKIDAR_USEPOLLING=true -USER node WORKDIR /app -COPY --chown=node:node --from=frontend-base /usr/bin/dumb-init /usr/bin/dumb-init -COPY --chown=node:node --from=frontend-build /app/build /app -COPY --chown=node:node --from=frontend-build /app/node_modules /app/node_modules -COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json -CMD ["/usr/bin/dumb-init", "node", "server.js"] +COPY --chown=node:node --from=frontend-base /usr/bin/dumb-init /usr/bin/dumb-init +COPY --chown=node:node --from=frontend-build /app/build /app +COPY --chown=node:node --from=frontend-build /app/node_modules /app/node_modules +COPY --chown=node:node --from=frontend-build /app/package.json /app/package.json +USER node +# CMD ["/usr/bin/dumb-init", "node", "server.js"] FROM node:18.18.2-slim as backend -USER node WORKDIR /app +COPY --chown=node:node .sequelizerc /app/.sequelizerc COPY --chown=node:node --from=base /usr/bin/dumb-init /usr/bin/dumb-init COPY --chown=node:node --from=build /app/build /app -COPY --chown=node:node --from=build /app/node_modules /app/node_modules +COPY --chown=node:node --from=build /app/node_modules/ /app/node_modules/ COPY --chown=node:node --from=build /app/package.json /app/package.json -CMD ["dumb-init", "node", "server.js"] \ No newline at end of file +USER node +# CMD ["dumb-init", "node", "server.js"] + +FROM backend as worker + +FROM backend as testingonly \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index bb95c09cfc..a56ddbf620 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -7,6 +7,7 @@ services: cache_from: - node:18.18.2 # Using the base image as a cache source - node:18.18.2-slim + - node:18.18.2-alpine - head-start-ttadp-backend:latest target: backend command: yarn server @@ -16,11 +17,12 @@ services: depends_on: - db - redis - environment: - - POSTGRES_HOST=postgres_docker - - REDIS_HOST=redis - - SMTP_HOST=mailcatcher - - FONTAWESOME_NPM_AUTH_TOKEN + env_file: .env + # environment: + # POSTGRES_HOST: postgres_docker + # REDIS_HOST: redis + # SMTP_HOST: mailcatcher + # FONTAWESOME_NPM_AUTH_TOKEN: # On an M1 mac, puppeteer install fails with the message: # "The chromium binary is not available for arm64" # @@ -31,19 +33,34 @@ services: # In ~/.zshrc (in my case) add: # export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true # export PUPPETEER_EXECUTABLE_PATH=`which chromium` - - PUPPETEER_EXECUTABLE_PATH - - PUPPETEER_SKIP_CHROMIUM_DOWNLOAD + # PUPPETEER_EXECUTABLE_PATH: + # PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: + # POSTGRES_DB: ${POSTGRES_DB} + # POSTGRES_USER: ${POSTGRES_USERNAME} + # POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + # BACKEND_PROXY: ${BACKEND_PROXY} + # AUTH_CLIENT_SECRET: ${AUTH_CLIENT_SECRET} + # SESSION_SECRET: ${SESSION_SECRET} + # JWT_SECRET: ${JWT_SECRET} + # REDIRECT_URI_HOST: ${REDIRECT_URI_HOST} + # AUTH_BASE: ${AUTH_BASE} volumes: - - ".:/app:rw" + - "./src/:/app/src/:rw" + - "./tests/:/app/tests/:rw" + - "./config/:/app/config:rw" + - "./packages:/packages:ro" + - ".env:/app/.env:ro" frontend: build: context: . dockerfile: ./Dockerfile.dev cache_from: - node:18.18.2 # Using the base image as a cache source + - node:18.18.2-slim - node:18.18.2-alpine - head-start-ttadp-frontend:latest target: frontend + env_file: .env command: yarn start user: ${CURRENT_USER:-root} stdin_open: true @@ -53,16 +70,22 @@ services: - "./frontend:/app:rw" - "./scripts:/app/scripts" - "./packages:/packages:ro" - environment: - - BACKEND_PROXY=http://backend:8080 - - FONTAWESOME_NPM_AUTH_TOKEN - - REACT_APP_WEBSOCKET_URL + - ".env:/app/.env:ro" + # environment: + # REDIRECT_URI_HOST: ${REDIRECT_URI_HOST} + # CURRENT_USER_ID: ${CURRENT_USER_ID} + # BYPASS_AUTH: ${BYPASS_AUTH} + # FONTAWESOME_NPM_AUTH_TOKEN: ${FONTAWESOME_NPM_AUTH_TOKEN} + # REACT_APP_WEBSOCKET_URL: REACT_APP_WEBSOCKET_URL + # BACKEND_PROXY: ${BACKEND_PROXY} worker: build: context: . dockerfile: ./Dockerfile.dev cache_from: - node:18.18.2 # Using the base image as a cache source + - node:18.18.2-slim + - node:18.18.2-alpine - head-start-ttadp-worker:latest target: backend command: yarn worker @@ -70,12 +93,15 @@ services: depends_on: - db - redis - environment: - - POSTGRES_HOST=postgres_docker - - REDIS_HOST=redis - - SMTP_HOST=mailcatcher + # environment: + # - POSTGRES_HOST=postgres_docker + # - REDIS_HOST=redis + # - SMTP_HOST=mailcatcher volumes: - - ".:/app:rw" + - "./src/:/app/src/:rw" + - "./tests/:/app/tests/:rw" + - "./config/:/app/config:rw" + - ".env:/app/.env:ro" owasp_zap_backend: image: owasp/zap2docker-stable:latest platform: linux/arm64 diff --git a/docker-compose.yml b/docker-compose.yml index d3a1da55e9..fc938019e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,8 @@ services: volumes: - dbdata:/var/lib/postgresql/data shm_size: 1g + environment: + POSTGRES_HOST: localhost minio: image: minio/minio:RELEASE.2024-01-01T16-36-33Z env_file: .env @@ -84,14 +86,16 @@ services: # target: dependencies cache_from: - node:18.18.2 # Using the base image as a cache source - - head-start-ttadp-worker:latest + - head-start-ttadp-testingonly:latest target: backend ports: - "9999:9999" depends_on: - db volumes: - - ".:/app:rw" + - "./src/:/app/src/:rw" + - "./tests/:/app/tests/:rw" + - "./config/:/app/config:rw" command: yarn start:testingonly environment: - POSTGRES_HOST=postgres_docker diff --git a/tiltfile b/tiltfile index dc4ba067ec..e0ebd3aed9 100644 --- a/tiltfile +++ b/tiltfile @@ -1,6 +1 @@ - - -docker_compose(["./docker-compose.yml", "./docker-compose.override.yml"]) - -local_resource('db:migrate', cmd='docker compose run --rm backend node_modules/.bin/sequelize db:migrate', deps=['package.json', 'db']) -local_resource('db:seed', cmd='docker compose run --rm backend node_modules/.bin/sequelize db:migrate', deps=['package.json','db']) +docker_compose(["./docker-compose.yml", "./docker-compose.override.yml"]) \ No newline at end of file From 6ada27b24c156ca0fbd980c7179cd437b997ac64 Mon Sep 17 00:00:00 2001 From: kcirtapfromspace <105461352+kcirtapfromspace@users.noreply.github.com> Date: Tue, 6 Feb 2024 14:49:56 -0700 Subject: [PATCH 5/7] minor --- docker-compose.override.yml | 27 +-------------------------- package.json | 1 - 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/docker-compose.override.yml b/docker-compose.override.yml index a56ddbf620..ec475fa881 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -19,10 +19,6 @@ services: - redis env_file: .env # environment: - # POSTGRES_HOST: postgres_docker - # REDIS_HOST: redis - # SMTP_HOST: mailcatcher - # FONTAWESOME_NPM_AUTH_TOKEN: # On an M1 mac, puppeteer install fails with the message: # "The chromium binary is not available for arm64" # @@ -33,17 +29,7 @@ services: # In ~/.zshrc (in my case) add: # export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true # export PUPPETEER_EXECUTABLE_PATH=`which chromium` - # PUPPETEER_EXECUTABLE_PATH: - # PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: - # POSTGRES_DB: ${POSTGRES_DB} - # POSTGRES_USER: ${POSTGRES_USERNAME} - # POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - # BACKEND_PROXY: ${BACKEND_PROXY} - # AUTH_CLIENT_SECRET: ${AUTH_CLIENT_SECRET} - # SESSION_SECRET: ${SESSION_SECRET} - # JWT_SECRET: ${JWT_SECRET} - # REDIRECT_URI_HOST: ${REDIRECT_URI_HOST} - # AUTH_BASE: ${AUTH_BASE} + volumes: - "./src/:/app/src/:rw" - "./tests/:/app/tests/:rw" @@ -71,13 +57,6 @@ services: - "./scripts:/app/scripts" - "./packages:/packages:ro" - ".env:/app/.env:ro" - # environment: - # REDIRECT_URI_HOST: ${REDIRECT_URI_HOST} - # CURRENT_USER_ID: ${CURRENT_USER_ID} - # BYPASS_AUTH: ${BYPASS_AUTH} - # FONTAWESOME_NPM_AUTH_TOKEN: ${FONTAWESOME_NPM_AUTH_TOKEN} - # REACT_APP_WEBSOCKET_URL: REACT_APP_WEBSOCKET_URL - # BACKEND_PROXY: ${BACKEND_PROXY} worker: build: context: . @@ -93,10 +72,6 @@ services: depends_on: - db - redis - # environment: - # - POSTGRES_HOST=postgres_docker - # - REDIS_HOST=redis - # - SMTP_HOST=mailcatcher volumes: - "./src/:/app/src/:rw" - "./tests/:/app/tests/:rw" diff --git a/package.json b/package.json index 41c926086c..cfbb619f90 100644 --- a/package.json +++ b/package.json @@ -245,7 +245,6 @@ ] }, "devDependencies": { - "turbo": "^1.9.6", "@axe-core/cli": "4.6.0", "@axe-core/playwright": "^4.6.0", "@babel/cli": "^7.11.6", From 2bb8802a8aaa7e432dfa30c3306a47edc9fdb292 Mon Sep 17 00:00:00 2001 From: Patrick Deutsch <105461352+kcirtapfromspace@users.noreply.github.com> Date: Tue, 6 Feb 2024 18:44:35 -0700 Subject: [PATCH 6/7] move ci/cd components to their own layer --- docker-compose.ci_cd.yml | 43 +++++++++++++++++++++++++++++++++++++ docker-compose.override.yml | 21 +----------------- docker-compose.yml | 21 ------------------ 3 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 docker-compose.ci_cd.yml diff --git a/docker-compose.ci_cd.yml b/docker-compose.ci_cd.yml new file mode 100644 index 0000000000..b9fe7a1c8c --- /dev/null +++ b/docker-compose.ci_cd.yml @@ -0,0 +1,43 @@ +version: "3.7" +services: + owasp_zap_backend: + image: ghcr.io/zaproxy/zaproxy:bare + # platform: linux/arm64 + user: zap + command: zap-full-scan.py -t http://backend:8080 -c zap.conf -i -r owasp_report.html + volumes: + - ./zap.conf:/zap/wrk/zap.conf:ro + - ./reports:/zap/wrk:rw + depends_on: + - backend + owasp_zap_similarity: + image: ghcr.io/zaproxy/zaproxy:bare + # platform: linux/arm64 + user: zap + command: zap-api-scan.py -t http://similarity_api:8080/openapi.json -f openapi -I -i -r owasp_api_report.html + volumes: + - ./zap.conf:/zap/wrk/zap.conf:ro + - ./reports:/zap/wrk:rw + depends_on: + - similarity_api + testingonly: + build: + context: . + dockerfile: ./Dockerfile.dev + # target: dependencies + cache_from: + - node:18.18.2 # Using the base image as a cache source + - head-start-ttadp-testingonly:latest + target: backend + ports: + - "9999:9999" + depends_on: + - db + volumes: + - "./src/:/app/src/:rw" + - "./tests/:/app/tests/:rw" + - "./config/:/app/config:rw" + command: yarn start:testingonly + environment: + - POSTGRES_HOST=postgres_docker + - NODE_ENV=development \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index ec475fa881..dfa8f04557 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -77,23 +77,4 @@ services: - "./tests/:/app/tests/:rw" - "./config/:/app/config:rw" - ".env:/app/.env:ro" - owasp_zap_backend: - image: owasp/zap2docker-stable:latest - platform: linux/arm64 - user: zap - command: zap-full-scan.py -t http://backend:8080 -c zap.conf -i -r owasp_report.html - volumes: - - ./zap.conf:/zap/wrk/zap.conf:ro - - ./reports:/zap/wrk:rw - depends_on: - - backend - owasp_zap_similarity: - image: owasp/zap2docker-stable:latest - platform: linux/arm64 - user: zap - command: zap-api-scan.py -t http://similarity_api:8080/openapi.json -f openapi -I -i -r owasp_api_report.html - volumes: - - ./zap.conf:/zap/wrk/zap.conf:ro - - ./reports:/zap/wrk:rw - depends_on: - - similarity_api + diff --git a/docker-compose.yml b/docker-compose.yml index fc938019e7..a91575b586 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,27 +79,6 @@ services: ports: - 9200:9200 - 9600:9600 # required for Performance Analyzer - testingonly: - build: - context: . - dockerfile: ./Dockerfile.dev - # target: dependencies - cache_from: - - node:18.18.2 # Using the base image as a cache source - - head-start-ttadp-testingonly:latest - target: backend - ports: - - "9999:9999" - depends_on: - - db - volumes: - - "./src/:/app/src/:rw" - - "./tests/:/app/tests/:rw" - - "./config/:/app/config:rw" - command: yarn start:testingonly - environment: - - POSTGRES_HOST=postgres_docker - - NODE_ENV=development volumes: dbdata: {} minio-data: {} From 110058c9f9acda66d52543e00a4711188928a3c8 Mon Sep 17 00:00:00 2001 From: Patrick Deutsch <105461352+kcirtapfromspace@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:28:08 -0700 Subject: [PATCH 7/7] Add mount directy for yarn cache. --- Dockerfile.dev | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index cfdc9a436d..c7c612ee36 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -5,15 +5,17 @@ ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \ PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser COPY package.json yarn.lock ./ RUN yarn global add node-gyp &&\ - yarn install &&\ - yarn cache clean +RUN --mount=type=cache,target=/root/.yarn \ + YARN_CACHE_FOLDER=/root/.yarn \ + yarn install FROM node:18.18.2-alpine as frontend-base WORKDIR /app RUN apk update && apk add yarn dumb-init COPY frontend/package.json frontend/yarn.lock ./ -RUN yarn install &&\ - yarn cache clean +RUN --mount=type=cache,target=/root/.yarn \ + YARN_CACHE_FOLDER=/root/.yarn \ + arn install FROM node:18.18.2 as build ENV NODE_OPTIONS=--max_old_space_size=2048