From f9200cf789ec8774dcee487b10ea23c0d739d22f Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 7 Aug 2024 10:01:38 -0400 Subject: [PATCH 01/66] - Jsut committing to not lose state --- nexus/README.md | 4 ++++ nexus/docker-compose.yml | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 nexus/README.md create mode 100644 nexus/docker-compose.yml diff --git a/nexus/README.md b/nexus/README.md new file mode 100644 index 000000000..4ce60b65f --- /dev/null +++ b/nexus/README.md @@ -0,0 +1,4 @@ +# Tag an Image +docker build -t localhost:8082/repository/tdp-docker/tdp-backend:latest . +# Push the image +docker push localhost:8082/repository/tdp-docker/tdp-backend:latest diff --git a/nexus/docker-compose.yml b/nexus/docker-compose.yml new file mode 100644 index 000000000..345ac10a1 --- /dev/null +++ b/nexus/docker-compose.yml @@ -0,0 +1,20 @@ +# Base Docker compose for all environments +version: "3.4" + +services: + nexus: + image: sonatype/nexus3 + volumes: + - nexus-data:/nexus-data + ports: + - "8081:8081" # Web interface + - "8082:8082" # Docker registry + +volumes: + nexus-data: + + +networks: + default: + name: external-net + external: true From f4827075d44b8b9966092fa608632d5ada447dd2 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 30 Aug 2024 14:55:22 -0400 Subject: [PATCH 02/66] - Updated docs - Updated compose files to name tdp containers better --- docs/Technical-Documentation/nexus-repo.md | 22 +++++++++++++++------- tdrs-backend/docker-compose.yml | 2 +- tdrs-frontend/docker-compose.yml | 1 + 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/Technical-Documentation/nexus-repo.md b/docs/Technical-Documentation/nexus-repo.md index 6f4a15bf5..d43e19107 100644 --- a/docs/Technical-Documentation/nexus-repo.md +++ b/docs/Technical-Documentation/nexus-repo.md @@ -40,7 +40,7 @@ After logging in as root for the first time, you will be taken to a page to set In order to use Nexus as a Docker repository, the DNS for the repo needs to be able to terminate https. We are currently using cloudflare to do this. -When creating the repository (must be signed in with admin privileges), since the nexus server isn't actually terminating the https, select the HTTP repository connector. The port can be anything you assign, as long as the tool used to terminate the https connection forwards the traffic to that port. +When creating the repository (must be signed in with admin privileges), since the nexus server isn't actually terminating the https, select the HTTP repository connector. The port can be anything you assign, as long as the tool used to terminate the https connection forwards the traffic to that port. In order to allow [Docker client login and connections](https://help.sonatype.com/repomanager3/nexus-repository-administration/formats/docker-registry/docker-authentication) you must set up the Docker Bearer Token Realm in Settings -> Security -> Realms -> and move the Docker Bearer Token Realm over to Active. Also, any users will need nx-repository-view-docker-#{RepoName}-(browse && read) at a minimum and (add and edit) in order to push images. @@ -48,21 +48,29 @@ Also, any users will need nx-repository-view-docker-#{RepoName}-(browse && read) We have a separate endpoint to connect specifically to the docker repository. [https://tdp-docker.dev.raftlabs.tech](tdp-docker.dev.raftlabs.tech) -e.g. `docker login https://tdp-docker.dev.raftlabs.tech` +e.g. +``` +docker login https://tdp-docker.dev.raftlabs.tech +``` ### Pushing Images Before an image can be pushed to the nexus repository, it must be tagged for that repo: -`docker image tag ${ImageId} tdp-docker.dev.raftlabs.tech/${ImageName}:${Version}` +``` +docker image tag ${ImageId} tdp-docker.dev.raftlabs.tech/${ImageName}:${Version} +``` then you can push: -`docker push tdp-docker.dev.raftlabs.tech/${ImageName}:${Version}` +``` +docker push tdp-docker.dev.raftlabs.tech/${ImageName}:${Version} +``` ### Pulling Images -We have set up a proxy mirror to dockerhub that can pull and cache DockerHub images. -Then we have created a group docker repository that can be pulled from. If the container is in our hosted repo, the group will return that container. If not, it will see if we have a cached version of that container in our proxy repo and, if not, pull that from dockerhub, cache it and allow the docker pull to happen. +We do not allow anonymous access on our Nexus instance. With that said, if you have not logged in with Docker you will not be able to pull. If you are logged in: -`docker pull https://tdp-docker-store.dev.raftlabs.tech/${ImageName}:${Version}` \ No newline at end of file +``` +docker pull tdp-docker.dev.raftlabs.tech/${ImageName}:${Version} +``` diff --git a/tdrs-backend/docker-compose.yml b/tdrs-backend/docker-compose.yml index 81d7065c4..68dd1f53b 100644 --- a/tdrs-backend/docker-compose.yml +++ b/tdrs-backend/docker-compose.yml @@ -111,7 +111,7 @@ services: - ELASTICSEARCH_LOG_INDEX_SLOW_LEVEL volumes: - .:/tdpapp - image: tdp + image: tdp-backend build: . command: > bash -c "./wait_for_services.sh && diff --git a/tdrs-frontend/docker-compose.yml b/tdrs-frontend/docker-compose.yml index 9bfa26bc4..bcdf48f62 100644 --- a/tdrs-frontend/docker-compose.yml +++ b/tdrs-frontend/docker-compose.yml @@ -14,6 +14,7 @@ services: tdp-frontend: stdin_open: true # docker run -i tty: true # docker run -t + image: tdp-frontend build: context: . target: nginx From 63d40e4179eb67168d4e7b80d0fe1d70b84a313b Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 30 Aug 2024 15:27:21 -0400 Subject: [PATCH 03/66] - remove unneeded nexus docker stuff --- nexus/README.md | 4 ---- nexus/docker-compose.yml | 20 -------------------- 2 files changed, 24 deletions(-) delete mode 100644 nexus/README.md delete mode 100644 nexus/docker-compose.yml diff --git a/nexus/README.md b/nexus/README.md deleted file mode 100644 index 4ce60b65f..000000000 --- a/nexus/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Tag an Image -docker build -t localhost:8082/repository/tdp-docker/tdp-backend:latest . -# Push the image -docker push localhost:8082/repository/tdp-docker/tdp-backend:latest diff --git a/nexus/docker-compose.yml b/nexus/docker-compose.yml deleted file mode 100644 index 345ac10a1..000000000 --- a/nexus/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -# Base Docker compose for all environments -version: "3.4" - -services: - nexus: - image: sonatype/nexus3 - volumes: - - nexus-data:/nexus-data - ports: - - "8081:8081" # Web interface - - "8082:8082" # Docker registry - -volumes: - nexus-data: - - -networks: - default: - name: external-net - external: true From 1f7c7c16010da723166f4f8aa7995ab250052eb5 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:19:42 -0400 Subject: [PATCH 04/66] - adding tag command for circleci - commenting build and test for fast iteration - created init command to avoid tagging on dev environments --- .circleci/build-and-test/workflows.yml | 100 ++++++++++++------------- .circleci/deployment/commands.yml | 29 ++++++- .circleci/deployment/jobs.yml | 7 ++ 3 files changed, 83 insertions(+), 53 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index b822f1cdc..acbae0de2 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - - test-backend: - requires: - - secrets-check - - test-frontend: - requires: - - secrets-check - - test-e2e: - requires: - - secrets-check + # - test-backend: + # requires: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check + # - test-e2e: + # requires: + # - secrets-check ci-build-and-test-all: jobs: @@ -22,46 +22,46 @@ - main - master - /^release.*/ - - test-backend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-frontend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-e2e: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check + # - test-backend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-frontend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-e2e: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check - build-and-test-backend: - when: << pipeline.parameters.build_and_test_backend >> - jobs: - - secrets-check - - test-backend: - requires: - - secrets-check + # build-and-test-backend: + # when: << pipeline.parameters.build_and_test_backend >> + # jobs: + # - secrets-check + # - test-backend: + # requires: + # - secrets-check - build-and-test-frontend: - when: << pipeline.parameters.build_and_test_frontend >> - jobs: - - secrets-check - - test-frontend: - requires: - - secrets-check + # build-and-test-frontend: + # when: << pipeline.parameters.build_and_test_frontend >> + # jobs: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index af907351b..812923fac 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -1,4 +1,30 @@ # commands: + init: + steps: + - checkout + - sudo-check + - cf-check + + tag-build: + parameters: + backend-appname: + default: tdp-backend + type: string + frontend-appname: + default: tdp-frontend + type: string + steps: + - run: + name: Docker Login + command: | + docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi -p $DOCKER_PASSWORD + # - run: + # name: Tag Backend + # command: | + # sudo apt update + # sudo apt-get install -y wget + # sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.42.1/yq_linux_amd64 && chmod +x /usr/local/bin/yq + deploy-cloud-dot-gov: parameters: environment: @@ -25,9 +51,6 @@ default: tdp-frontend type: string steps: - - checkout - - sudo-check - - cf-check - login-cloud-dot-gov: cf-password: <> cf-org: <> diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 63d5bc070..8824c7350 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -5,6 +5,10 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init + - tag-build: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> - deploy-cloud-dot-gov: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> @@ -13,6 +17,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -24,6 +29,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -133,6 +139,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod From 1e110e20335822054477ec362238931abf7bf0c9 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:25:59 -0400 Subject: [PATCH 05/66] - remove commented code --- .circleci/deployment/commands.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 812923fac..ee7e9d13e 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -18,12 +18,6 @@ name: Docker Login command: | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi -p $DOCKER_PASSWORD - # - run: - # name: Tag Backend - # command: | - # sudo apt update - # sudo apt-get install -y wget - # sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/download/v4.42.1/yq_linux_amd64 && chmod +x /usr/local/bin/yq deploy-cloud-dot-gov: parameters: From 29a18302217acddb7a6e094f5dabebc20accbcff Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:27:14 -0400 Subject: [PATCH 06/66] - make executable --- .circleci/generate_config.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 .circleci/generate_config.sh diff --git a/.circleci/generate_config.sh b/.circleci/generate_config.sh old mode 100644 new mode 100755 From 33ac5b65c8363634636def022d5488a787ea386e Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:34:29 -0400 Subject: [PATCH 07/66] - rename command --- .circleci/deployment/commands.yml | 2 +- .circleci/deployment/jobs.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index ee7e9d13e..ae9b4345a 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -5,7 +5,7 @@ - sudo-check - cf-check - tag-build: + build-and-tag-images: parameters: backend-appname: default: tdp-backend diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 8824c7350..ef5c34ce4 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,7 +6,7 @@ working_directory: ~/tdp-deploy steps: - init - - tag-build: + - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> - deploy-cloud-dot-gov: From 7b352cb96939320bdca9bb44e64168428cdb9a34 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:36:58 -0400 Subject: [PATCH 08/66] - rename init command --- .circleci/deployment/commands.yml | 2 +- .circleci/deployment/jobs.yml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index ae9b4345a..6365ecacc 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -1,5 +1,5 @@ # commands: - init: + init-deploy: steps: - checkout - sudo-check diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index ef5c34ce4..c3523b7d5 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -5,7 +5,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init + - init-deploy - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> @@ -17,7 +17,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init + - init-deploy - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -29,7 +29,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init + - init-deploy - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -139,7 +139,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init + - init-deploy - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod From a1c44e831e5d1a5f8f2a570e296038c006fb990b Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:41:41 -0400 Subject: [PATCH 09/66] - move init back to original command - add init to docker for now --- .circleci/deployment/commands.yml | 12 ++++++------ .circleci/deployment/jobs.yml | 4 ---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 6365ecacc..6c0b7fd75 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -1,10 +1,4 @@ # commands: - init-deploy: - steps: - - checkout - - sudo-check - - cf-check - build-and-tag-images: parameters: backend-appname: @@ -14,6 +8,9 @@ default: tdp-frontend type: string steps: + - checkout + - sudo-check + - cf-check - run: name: Docker Login command: | @@ -45,6 +42,9 @@ default: tdp-frontend type: string steps: + - checkout + - sudo-check + - cf-check - login-cloud-dot-gov: cf-password: <> cf-org: <> diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index c3523b7d5..0b312378c 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -5,7 +5,6 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init-deploy - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> @@ -17,7 +16,6 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init-deploy - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -29,7 +27,6 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init-deploy - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -139,7 +136,6 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: - - init-deploy - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod From c8ade93b8e337a7b7c39a3d0b5be121c07ff7643 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 12:48:22 -0400 Subject: [PATCH 10/66] - fixed yaml - re-added init command --- .circleci/deployment/commands.yml | 18 +++++++++--------- .circleci/deployment/jobs.yml | 10 +++++++--- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 6c0b7fd75..db9b88705 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -1,4 +1,10 @@ # commands: + init-deploy: + steps: + - checkout + - sudo-check + - cf-check + build-and-tag-images: parameters: backend-appname: @@ -8,13 +14,10 @@ default: tdp-frontend type: string steps: - - checkout - - sudo-check - - cf-check - run: - name: Docker Login - command: | - docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi -p $DOCKER_PASSWORD + name: Docker Login + command: | + docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi -p $DOCKER_PASSWORD deploy-cloud-dot-gov: parameters: @@ -42,9 +45,6 @@ default: tdp-frontend type: string steps: - - checkout - - sudo-check - - cf-check - login-cloud-dot-gov: cf-password: <> cf-org: <> diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 0b312378c..933707431 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -5,17 +5,19 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init-deploy - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> - - deploy-cloud-dot-gov: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + # - deploy-cloud-dot-gov: + # backend-appname: tdp-backend-<< parameters.target_env >> + # frontend-appname: tdp-frontend-<< parameters.target_env >> deploy-staging: executor: docker-executor working_directory: ~/tdp-deploy steps: + - init-deploy - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -27,6 +29,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init-deploy - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -136,6 +139,7 @@ executor: docker-executor working_directory: ~/tdp-deploy steps: + - init-deploy - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod From ec69916dea81fbf599ef5db0f58a886d34d12a95 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 13:02:05 -0400 Subject: [PATCH 11/66] - password from stdin --- .circleci/deployment/commands.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index db9b88705..178c1e73f 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -17,7 +17,7 @@ - run: name: Docker Login command: | - docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi -p $DOCKER_PASSWORD + echo "$DOCKER_PASSWORD" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin deploy-cloud-dot-gov: parameters: From 34eeff6aa43db08d6226a10c2b857f0d050478a4 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 13:03:30 -0400 Subject: [PATCH 12/66] - Update env name --- .circleci/deployment/commands.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 178c1e73f..b89707ad0 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -17,7 +17,7 @@ - run: name: Docker Login command: | - echo "$DOCKER_PASSWORD" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin + echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin deploy-cloud-dot-gov: parameters: From dc5dd8def4a78870e3c258dd5276eb7930a2b473 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 14:12:12 -0400 Subject: [PATCH 13/66] - getting directory structure --- .circleci/deployment/commands.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index b89707ad0..9237398a3 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -17,7 +17,15 @@ - run: name: Docker Login command: | + pwd + ls echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin + # - run: + # name: Tag Backend + # command: | + # BUILD_DATE=`date +%F` + # docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE . + # docker image tag tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE tdp-docker.dev.raftlabs.tech/<>:latest deploy-cloud-dot-gov: parameters: From cdefbbdf4918e0c96244dda370c1cfc0416c1de5 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 14:29:59 -0400 Subject: [PATCH 14/66] - tagging for frontend and backend --- .circleci/deployment/commands.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 9237398a3..cd55f0e50 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -20,12 +20,18 @@ pwd ls echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin - # - run: - # name: Tag Backend - # command: | - # BUILD_DATE=`date +%F` - # docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE . - # docker image tag tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE tdp-docker.dev.raftlabs.tech/<>:latest + - run: + name: Tag Backend + command: | + BUILD_DATE=`date +%F` + docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend + docker push tdp-docker.dev.raftlabs.tech/<> --all-tags + - run: + name: Tag Frontend + command: | + BUILD_DATE=`date +%F` + docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend + docker push tdp-docker.dev.raftlabs.tech/<> --all-tags deploy-cloud-dot-gov: parameters: From 542bb142e2fafa96009d55d4ac403c76850b1ead Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 14:30:11 -0400 Subject: [PATCH 15/66] - remove debug code --- .circleci/deployment/commands.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index cd55f0e50..5536446a9 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -17,8 +17,6 @@ - run: name: Docker Login command: | - pwd - ls echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin - run: name: Tag Backend From c2412612005ef0d808186cb4d6cb39ce15ba0861 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 14:44:30 -0400 Subject: [PATCH 16/66] - consolidate command --- .circleci/deployment/commands.yml | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 5536446a9..b133c1d16 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -15,19 +15,12 @@ type: string steps: - run: - name: Docker Login - command: | - echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin - - run: - name: Tag Backend + name: Tag images command: | BUILD_DATE=`date +%F` + echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend docker push tdp-docker.dev.raftlabs.tech/<> --all-tags - - run: - name: Tag Frontend - command: | - BUILD_DATE=`date +%F` docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend docker push tdp-docker.dev.raftlabs.tech/<> --all-tags From a5c3041fae381c520824b3b16052f20ae7070a4b Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 14:53:53 -0400 Subject: [PATCH 17/66] - add missing step --- .circleci/deployment/commands.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index b133c1d16..e46686274 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -14,6 +14,7 @@ default: tdp-frontend type: string steps: + - setup_remote_docker - run: name: Tag images command: | From 23c1aeb2784a56af707479858ce4968f4a09ac0d Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 15:17:40 -0400 Subject: [PATCH 18/66] - Revert build and test workflow - Add image tagging for deployments - Update docs for admin login to Nexus UI --- .circleci/build-and-test/workflows.yml | 100 +++++++++--------- .circleci/deployment/jobs.yml | 14 ++- .../images/nexus-dev-admin-login.png | Bin 0 -> 293938 bytes docs/Technical-Documentation/nexus-repo.md | 27 +++++ 4 files changed, 87 insertions(+), 54 deletions(-) create mode 100644 docs/Technical-Documentation/images/nexus-dev-admin-login.png diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index acbae0de2..b822f1cdc 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - # - test-backend: - # requires: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check - # - test-e2e: - # requires: - # - secrets-check + - test-backend: + requires: + - secrets-check + - test-frontend: + requires: + - secrets-check + - test-e2e: + requires: + - secrets-check ci-build-and-test-all: jobs: @@ -22,46 +22,46 @@ - main - master - /^release.*/ - # - test-backend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-frontend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-e2e: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check + - test-backend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-frontend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-e2e: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check - # build-and-test-backend: - # when: << pipeline.parameters.build_and_test_backend >> - # jobs: - # - secrets-check - # - test-backend: - # requires: - # - secrets-check + build-and-test-backend: + when: << pipeline.parameters.build_and_test_backend >> + jobs: + - secrets-check + - test-backend: + requires: + - secrets-check - # build-and-test-frontend: - # when: << pipeline.parameters.build_and_test_frontend >> - # jobs: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check + build-and-test-frontend: + when: << pipeline.parameters.build_and_test_frontend >> + jobs: + - secrets-check + - test-frontend: + requires: + - secrets-check diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 933707431..e515951c5 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,18 +6,18 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: + - deploy-cloud-dot-gov: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> - # - deploy-cloud-dot-gov: - # backend-appname: tdp-backend-<< parameters.target_env >> - # frontend-appname: tdp-frontend-<< parameters.target_env >> deploy-staging: executor: docker-executor working_directory: ~/tdp-deploy steps: - init-deploy + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -30,6 +30,9 @@ working_directory: ~/tdp-deploy steps: - init-deploy + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -140,6 +143,9 @@ working_directory: ~/tdp-deploy steps: - init-deploy + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod diff --git a/docs/Technical-Documentation/images/nexus-dev-admin-login.png b/docs/Technical-Documentation/images/nexus-dev-admin-login.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b00e90311492ff257ca6de83f25259369101d3 GIT binary patch literal 293938 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
fB0u;m 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ʡ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 R?Op Date: Tue, 3 Sep 2024 15:28:03 -0400 Subject: [PATCH 19/66] - Point compose to nexus --- tdrs-backend/docker-compose.yml | 14 +++++++------- tdrs-frontend/docker-compose.yml | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tdrs-backend/docker-compose.yml b/tdrs-backend/docker-compose.yml index 68dd1f53b..4a5d195df 100644 --- a/tdrs-backend/docker-compose.yml +++ b/tdrs-backend/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.4" services: zaproxy: - image: softwaresecurityproject/zap-stable:2.14.0 + image: tdp-docker.dev.raftlabs.tech/dependencies/softwaresecurityproject/zap-stable:2.14.0 command: sleep 3600 depends_on: - web @@ -12,7 +12,7 @@ services: - ../scripts/zap-hook.py:/zap/scripts/zap-hook.py:ro postgres: - image: postgres:15.7 + image: tdp-docker.dev.raftlabs.tech/dependencies/postgres:15.7 environment: - PGDATA=/var/lib/postgresql/data/ - POSTGRES_DB=tdrs_test @@ -25,14 +25,14 @@ services: - postgres_data:/var/lib/postgresql/data/:rw clamav-rest: - image: rafttech/clamav-rest:0.103.2 + image: tdp-docker.dev.raftlabs.tech/dependencies/rafttech/clamav-rest:0.103.2 environment: - MAX_FILE_SIZE=200M ports: - "9000:9000" localstack: - image: localstack/localstack:0.13.3 + image: tdp-docker.dev.raftlabs.tech/dependencies/localstack/localstack:0.13.3 environment: - SERVICES=s3 - DATA_DIR=/tmp/localstack/data @@ -46,7 +46,7 @@ services: - ../scripts/localstack-setup.sh:/docker-entrypoint-initaws.d/localstack-setup.sh kibana: - image: docker.elastic.co/kibana/kibana-oss:7.10.2 + image: tdp-docker.dev.raftlabs.tech/dependencies/docker.elastic.co/kibana/kibana-oss:7.10.2 ports: - 5601:5601 environment: @@ -59,7 +59,7 @@ services: - elastic elastic: - image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 + image: tdp-docker.dev.raftlabs.tech/dependencies/docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 environment: - discovery.type=single-node - logger.discovery.level=debug @@ -130,7 +130,7 @@ services: - elastic redis-server: - image: "redis:alpine" + image: tdp-docker.dev.raftlabs.tech/dependencies/redis:alpine command: redis-server /tdpapp/redis.conf ports: - "6379:6379" diff --git a/tdrs-frontend/docker-compose.yml b/tdrs-frontend/docker-compose.yml index bcdf48f62..588e538b2 100644 --- a/tdrs-frontend/docker-compose.yml +++ b/tdrs-frontend/docker-compose.yml @@ -1,7 +1,7 @@ version: "3.4" services: zaproxy: - image: softwaresecurityproject/zap-stable:2.14.0 + image: tdp-docker.dev.raftlabs.tech/dependencies/softwaresecurityproject/zap-stable:2.14.0 container_name: zap-scan command: sleep 3600 ports: From cb68a943c6dbfb3eac56f31ca05fef31e87f579c Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 15:30:12 -0400 Subject: [PATCH 20/66] - Update variables on deployments --- .circleci/deployment/jobs.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index e515951c5..f7836ff6f 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -16,8 +16,8 @@ steps: - init-deploy - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + backend-appname: tdp-backend-staging + frontend-appname: tdp-frontend-staging - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -31,8 +31,8 @@ steps: - init-deploy - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + backend-appname: tdp-backend-develop + frontend-appname: tdp-frontend-develop - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -144,8 +144,8 @@ steps: - init-deploy - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + backend-appname: tdp-backend-prod + frontend-appname: tdp-frontend-prod - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod From 18649a8638498d3627cb71c3d37070667950184d Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 15:56:15 -0400 Subject: [PATCH 21/66] - add docker login docs --- docs/Technical-Documentation/nexus-repo.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/nexus-repo.md b/docs/Technical-Documentation/nexus-repo.md index 3e10bce53..1412083a8 100644 --- a/docs/Technical-Documentation/nexus-repo.md +++ b/docs/Technical-Documentation/nexus-repo.md @@ -69,7 +69,7 @@ docker push tdp-docker.dev.raftlabs.tech/${ImageName}:${Version} ### Pulling Images -We do not allow anonymous access on our Nexus instance. With that said, if you have not logged in with Docker you will not be able to pull. If you are logged in: +We do not allow anonymous access on our Nexus instance. With that said, if you have not [logged in with Docker](#docker-login) you will not be able to pull. If you are logged in: ``` docker pull tdp-docker.dev.raftlabs.tech/${ImageName}:${Version} @@ -101,3 +101,15 @@ The key returns a username and a password: Copy the `password` to your clipboard and login into the Nexus UI with the `tdp-dev-admin` user. See below: ![Nexus Dev Admin Login](./images/nexus-dev-admin-login.png) + +## Docker Login +After logging into the `tanf-dev` space with the `cf` cli, execute the following commands to authenticate your local docker daemon +``` +export NEXUS_DOCKER_PASSWORD=`cf service-key tanf-keys nexus-dev | tail -n +2 | jq .credentials.password` +echo "$NEXUS_DOCKER_PASSWORD" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-dev --password-stdin +``` + +Sometimes the `docker login...` command above doesn't work. If that happens, just copy the content of `NEXUS_DOCKER_PASSWORD` to your clipboard and paste it when prompted for the password after executing the command below. +``` +docker login https://tdp-docker.dev.raftlabs.tech -u tdp-dev +``` From 1be7fab17e123ccbf0e0f593bd13fceb01690d0d Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 15:58:03 -0400 Subject: [PATCH 22/66] - title update --- docs/Technical-Documentation/nexus-repo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/nexus-repo.md b/docs/Technical-Documentation/nexus-repo.md index 1412083a8..4451757e2 100644 --- a/docs/Technical-Documentation/nexus-repo.md +++ b/docs/Technical-Documentation/nexus-repo.md @@ -102,7 +102,7 @@ Copy the `password` to your clipboard and login into the Nexus UI with the `tdp- ![Nexus Dev Admin Login](./images/nexus-dev-admin-login.png) -## Docker Login +## Local Docker Login After logging into the `tanf-dev` space with the `cf` cli, execute the following commands to authenticate your local docker daemon ``` export NEXUS_DOCKER_PASSWORD=`cf service-key tanf-keys nexus-dev | tail -n +2 | jq .credentials.password` From 35c2c90119c4ce4dbbf454e49f223243b788c1de Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 16:04:10 -0400 Subject: [PATCH 23/66] - add docker login for build and test --- .circleci/build-and-test/commands.yml | 9 ++++++++- .circleci/build-and-test/jobs.yml | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.circleci/build-and-test/commands.yml b/.circleci/build-and-test/commands.yml index 52cfe7149..1398430a6 100644 --- a/.circleci/build-and-test/commands.yml +++ b/.circleci/build-and-test/commands.yml @@ -49,6 +49,13 @@ - run: name: Disable npm audit warnings in CI command: npm set audit false - + # This allows us to use the node orb to install packages within other commands install-nodejs-packages: node/install-packages + + docker-login: + steps: + - run: + name: Docker Login + command: | + echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin \ No newline at end of file diff --git a/.circleci/build-and-test/jobs.yml b/.circleci/build-and-test/jobs.yml index a40d1568f..469c92250 100644 --- a/.circleci/build-and-test/jobs.yml +++ b/.circleci/build-and-test/jobs.yml @@ -3,6 +3,7 @@ steps: - checkout - docker-compose-check + - docker-login - docker-compose-up-backend - run: name: Run Unit Tests And Create Code Coverage Report @@ -46,6 +47,7 @@ steps: - checkout - docker-compose-check + - docker-login - docker-compose-up-backend - docker-compose-up-frontend - install-nodejs-machine From 4f9a81a942023756bc7715f629d26ab9a92af094 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 3 Sep 2024 16:06:13 -0400 Subject: [PATCH 24/66] - fix indent --- .circleci/build-and-test/commands.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/build-and-test/commands.yml b/.circleci/build-and-test/commands.yml index 1398430a6..70ef3f98d 100644 --- a/.circleci/build-and-test/commands.yml +++ b/.circleci/build-and-test/commands.yml @@ -56,6 +56,6 @@ docker-login: steps: - run: - name: Docker Login - command: | - echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin \ No newline at end of file + name: Docker login + command: | + echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin From 5388116da06d9d56cc9f15e59e0dff63b425f3c1 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 4 Sep 2024 07:49:22 -0400 Subject: [PATCH 25/66] - Debugging --- .circleci/build-and-test/jobs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/build-and-test/jobs.yml b/.circleci/build-and-test/jobs.yml index 469c92250..b45f41568 100644 --- a/.circleci/build-and-test/jobs.yml +++ b/.circleci/build-and-test/jobs.yml @@ -9,6 +9,7 @@ name: Run Unit Tests And Create Code Coverage Report command: | cd tdrs-backend; + docker ps docker-compose run --rm web bash -c "./wait_for_services.sh && pytest --cov-report=xml" - run: name: Execute Python Linting Test From 85ce8e2c50bef84df726b19e0084d8c5cc6bdbe7 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 4 Sep 2024 08:23:21 -0400 Subject: [PATCH 26/66] - Build images for both architectures --- .circleci/deployment/commands.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index e46686274..e47b6bf22 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -16,13 +16,22 @@ steps: - setup_remote_docker - run: - name: Tag images + name: Tag AMD64 images command: | BUILD_DATE=`date +%F` echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin - docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend + docker build --platform linux/amd64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend docker push tdp-docker.dev.raftlabs.tech/<> --all-tags - docker build -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend + docker build --platform linux/amd64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend + docker push tdp-docker.dev.raftlabs.tech/<> --all-tags + - run: + name: Tag Arm64 images + command: | + BUILD_DATE=`date +%F` + echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin + docker build --platform linux/arm64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend + docker push tdp-docker.dev.raftlabs.tech/<> --all-tags + docker build --platform linux/arm64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend docker push tdp-docker.dev.raftlabs.tech/<> --all-tags deploy-cloud-dot-gov: From bc28e5f99c9f03c1f12663647c7ab647ede713ea Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 4 Sep 2024 08:53:35 -0400 Subject: [PATCH 27/66] - add layer caching --- .circleci/base_config.yml | 4 ++-- .circleci/deployment/commands.yml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 634a3c29b..6c4b5fc6d 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -12,11 +12,11 @@ executors: user: root machine-executor: machine: - docker_layer_caching: false + docker_layer_caching: true image: ubuntu-2204:2024.01.1 large-machine-executor: machine: - docker_layer_caching: false + docker_layer_caching: true image: ubuntu-2204:2024.01.1 resource_class: large diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index e47b6bf22..a83d67a7b 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -14,7 +14,8 @@ default: tdp-frontend type: string steps: - - setup_remote_docker + - setup_remote_docker: + docker_layer_caching: true - run: name: Tag AMD64 images command: | From 128739f93f7eb92b0fcba73234392470dfdcea78 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 4 Sep 2024 10:28:25 -0400 Subject: [PATCH 28/66] - stop docker caching --- .circleci/base_config.yml | 4 ++-- .circleci/deployment/commands.yml | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 6c4b5fc6d..634a3c29b 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -12,11 +12,11 @@ executors: user: root machine-executor: machine: - docker_layer_caching: true + docker_layer_caching: false image: ubuntu-2204:2024.01.1 large-machine-executor: machine: - docker_layer_caching: true + docker_layer_caching: false image: ubuntu-2204:2024.01.1 resource_class: large diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index a83d67a7b..e47b6bf22 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -14,8 +14,7 @@ default: tdp-frontend type: string steps: - - setup_remote_docker: - docker_layer_caching: true + - setup_remote_docker - run: name: Tag AMD64 images command: | From 2bec695fbafbc60ecd7d285dde382acb6fa250fc Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 11:10:04 -0400 Subject: [PATCH 29/66] - add vm access instructions --- docs/Technical-Documentation/nexus-repo.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/Technical-Documentation/nexus-repo.md b/docs/Technical-Documentation/nexus-repo.md index 4451757e2..5e504a384 100644 --- a/docs/Technical-Documentation/nexus-repo.md +++ b/docs/Technical-Documentation/nexus-repo.md @@ -75,7 +75,9 @@ We do not allow anonymous access on our Nexus instance. With that said, if you h docker pull tdp-docker.dev.raftlabs.tech/${ImageName}:${Version} ``` -## Nexus Admin UI Login +## Nexus Administration + +### UI Admin Login To administer Nexus via the UI, you will need to access the service key in our dev cloud.gov environment. Log in with CloudFoundry @@ -102,6 +104,22 @@ Copy the `password` to your clipboard and login into the Nexus UI with the `tdp- ![Nexus Dev Admin Login](./images/nexus-dev-admin-login.png) +### VM Login +To access the VM running Nexus, you will need to gain access to the Raft internal network. To do this, you will need to install CloudFlare's WARP zero trust VPN. Follow the instructions [here](https://gorafttech-my.sharepoint.com/:w:/g/personal/tradin_teamraft_com/EZePOTv0dbdBguHITcoXQF0Bd5JAcqeLsJTlEOktTfIXHA?e=34WqB4) to get setup. From there, reach out to Eric Lipe or Connor Meehan for the IP, username, and password to access the VM. Once you have the credentials, you can login with SSH: +``` +ssh username@IP_Address +``` + +Once logged in, you can run `docker ps` or other docker commands to view and administer the Nexus container as necessary. You should also consider generating an ssh key to avoid having to enter the password each time you login. To do so, run the following commands on your local machine. +``` +ssh-keygen +``` + +``` +ssh-copy-id username@IP_Address +``` +Now you will no longer have to enter the password when logging in. + ## Local Docker Login After logging into the `tanf-dev` space with the `cf` cli, execute the following commands to authenticate your local docker daemon ``` From bb6d156e767b30da097cd8bab84fdbee8b580f98 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:06:32 -0400 Subject: [PATCH 30/66] - Added script for image building/tagging - Using script in pipeline --- .circleci/deployment/commands.yml | 18 ++-------------- scripts/build-and-tag-images.sh | 34 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 16 deletions(-) create mode 100755 scripts/build-and-tag-images.sh diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index e47b6bf22..090c1895d 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -16,23 +16,9 @@ steps: - setup_remote_docker - run: - name: Tag AMD64 images + name: Build and tag images command: | - BUILD_DATE=`date +%F` - echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin - docker build --platform linux/amd64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend - docker push tdp-docker.dev.raftlabs.tech/<> --all-tags - docker build --platform linux/amd64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend - docker push tdp-docker.dev.raftlabs.tech/<> --all-tags - - run: - name: Tag Arm64 images - command: | - BUILD_DATE=`date +%F` - echo "$CIRCI_DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u tdp-circi --password-stdin - docker build --platform linux/arm64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-backend - docker push tdp-docker.dev.raftlabs.tech/<> --all-tags - docker build --platform linux/arm64 -t tdp-docker.dev.raftlabs.tech/<>:$BUILD_DATE -t tdp-docker.dev.raftlabs.tech/<>:latest ./tdrs-frontend - docker push tdp-docker.dev.raftlabs.tech/<> --all-tags + ../scripts/build-and-tag-images.sh <> <> ../tdrs-backend ../tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 $CIRCI_DOCKER_LOGIN tdp-circi deploy-cloud-dot-gov: parameters: diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh new file mode 100755 index 000000000..57b23c849 --- /dev/null +++ b/scripts/build-and-tag-images.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +if [ "$#" -ne 8 ]; then + echo "Error, this script expects 8 parameters." + echo "I.e: ./build-tag-images.sh BACKEND_APP_NAME FRONTEND_APP_NAME BACKEND_PATH FRONTEND_PATH BUILD_NUM COMMIT_HASH DOCKER_LOGIN DOCKER_USER" + exit 1 +fi + +BACKEND_APP_NAME=$1 +FRONTEND_APP_NAME=$2 +BACKEND_PATH=$3 +FRONTEND_PATH=$4 +BUILD_NUM=$5 +COMMIT_HASH=$6 +DOCKER_LOGIN=$7 +DOCKER_USER=$8 +TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" + +BUILD_DATE=`date +%F` + +build_and_tag() { + echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin + for platform in "linux/amd64" "linux/arm64"; do + docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest $BACKEND_PATH + docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest $FRONTEND_PATH + + docker push tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME --all-tags + docker push tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME --all-tags + done + docker logout +} + +echo "Building and Tagging images for $BACKEND_APP_NAME and $FRONTEND_APP_NAME" +build_and_tag From dbbad071a78fa6668e455c33bbe11cdc57f9d676 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:08:10 -0400 Subject: [PATCH 31/66] - testing --- .circleci/build-and-test/workflows.yml | 100 ++++++++++++------------- .circleci/deployment/jobs.yml | 5 +- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index b822f1cdc..d0a4d8ec7 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - - test-backend: - requires: - - secrets-check - - test-frontend: - requires: - - secrets-check - - test-e2e: - requires: - - secrets-check + # - test-backend: + # requires: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check + # - test-e2e: + # requires: + # - secrets-check ci-build-and-test-all: jobs: @@ -22,46 +22,46 @@ - main - master - /^release.*/ - - test-backend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-frontend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-e2e: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check + # - test-backend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-frontend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-e2e: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check - build-and-test-backend: - when: << pipeline.parameters.build_and_test_backend >> - jobs: - - secrets-check - - test-backend: - requires: - - secrets-check + # build-and-test-backend: + # when: << pipeline.parameters.build_and_test_backend >> + # jobs: + # - secrets-check + # - test-backend: + # requires: + # - secrets-check - build-and-test-frontend: - when: << pipeline.parameters.build_and_test_frontend >> - jobs: - - secrets-check - - test-frontend: - requires: - - secrets-check + # build-and-test-frontend: + # when: << pipeline.parameters.build_and_test_frontend >> + # jobs: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index f7836ff6f..58b1f4fa5 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,9 +6,12 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - deploy-cloud-dot-gov: + - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> + # - deploy-cloud-dot-gov: + # backend-appname: tdp-backend-<< parameters.target_env >> + # frontend-appname: tdp-frontend-<< parameters.target_env >> deploy-staging: executor: docker-executor From 5e1b5e18cd6ee27d1fdb0f02772941c4c52f813d Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:22:25 -0400 Subject: [PATCH 32/66] - fix path --- .circleci/deployment/commands.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 090c1895d..77116b668 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -18,7 +18,7 @@ - run: name: Build and tag images command: | - ../scripts/build-and-tag-images.sh <> <> ../tdrs-backend ../tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 $CIRCI_DOCKER_LOGIN tdp-circi + ./scripts/build-and-tag-images.sh <> <> ../tdrs-backend ../tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 $CIRCI_DOCKER_LOGIN tdp-circi deploy-cloud-dot-gov: parameters: From 7625f9ab9de4c2babd05d71da283fea626b74f9c Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:31:32 -0400 Subject: [PATCH 33/66] - use workdir var - debug statements --- .circleci/deployment/commands.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 77116b668..f435357ba 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -18,7 +18,9 @@ - run: name: Build and tag images command: | - ./scripts/build-and-tag-images.sh <> <> ../tdrs-backend ../tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 $CIRCI_DOCKER_LOGIN tdp-circi + ls + pwd + ./scripts/build-and-tag-images.sh <> <> $CIRCLE_WORKING_DIRECTORY/tdrs-backend $CIRCLE_WORKING_DIRECTORY/tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 $CIRCI_DOCKER_LOGIN tdp-circi deploy-cloud-dot-gov: parameters: From 0ad5e1c6b4475dee8109fed9aa637e1dea4a754f Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:41:45 -0400 Subject: [PATCH 34/66] - quoting paths - extra debugging --- .circleci/deployment/commands.yml | 2 +- scripts/build-and-tag-images.sh | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index f435357ba..774cd1ee3 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -20,7 +20,7 @@ command: | ls pwd - ./scripts/build-and-tag-images.sh <> <> $CIRCLE_WORKING_DIRECTORY/tdrs-backend $CIRCLE_WORKING_DIRECTORY/tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 $CIRCI_DOCKER_LOGIN tdp-circi + ./scripts/build-and-tag-images.sh <> <> "$CIRCLE_WORKING_DIRECTORY/tdrs-backend" "$CIRCLE_WORKING_DIRECTORY/tdrs-frontend" $CIRCLE_BUILD_NUM $CIRCLE_SHA1 "$CIRCI_DOCKER_LOGIN" tdp-circi deploy-cloud-dot-gov: parameters: diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index 57b23c849..e172803fa 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -e if [ "$#" -ne 8 ]; then echo "Error, this script expects 8 parameters." @@ -18,11 +19,14 @@ TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" BUILD_DATE=`date +%F` +ls $BACKEND_PATH +ls $FRONTEND_PATH + build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin for platform in "linux/amd64" "linux/arm64"; do - docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest $BACKEND_PATH - docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest $FRONTEND_PATH + docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" docker push tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME --all-tags docker push tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME --all-tags From 0c8982db62de76991bf0951bbdf5145123d2d5d3 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:47:27 -0400 Subject: [PATCH 35/66] - debug --- scripts/build-and-tag-images.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index e172803fa..87fa9b7cc 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -19,6 +19,8 @@ TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" BUILD_DATE=`date +%F` +pwd +ls .. ls $BACKEND_PATH ls $FRONTEND_PATH From 650059d04806448391f1f1d2fb4cd5d84e7caa98 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 12:54:50 -0400 Subject: [PATCH 36/66] - passing current dir - still debugging --- .circleci/deployment/commands.yml | 4 +--- scripts/build-and-tag-images.sh | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 774cd1ee3..0b989139b 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -18,9 +18,7 @@ - run: name: Build and tag images command: | - ls - pwd - ./scripts/build-and-tag-images.sh <> <> "$CIRCLE_WORKING_DIRECTORY/tdrs-backend" "$CIRCLE_WORKING_DIRECTORY/tdrs-frontend" $CIRCLE_BUILD_NUM $CIRCLE_SHA1 "$CIRCI_DOCKER_LOGIN" tdp-circi + ./scripts/build-and-tag-images.sh <> <> ./tdrs-backend ./tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 "$CIRCI_DOCKER_LOGIN" tdp-circi deploy-cloud-dot-gov: parameters: diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index 87fa9b7cc..cc322a926 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -20,7 +20,7 @@ TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" BUILD_DATE=`date +%F` pwd -ls .. +ls ls $BACKEND_PATH ls $FRONTEND_PATH From 79ef9f85e34680e88328b4c952b4dd78b3383e54 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 13:02:10 -0400 Subject: [PATCH 37/66] - remove debugging code - always let script keep running --- .circleci/build-and-test/workflows.yml | 100 ++++++++++++------------- .circleci/deployment/jobs.yml | 5 +- scripts/build-and-tag-images.sh | 6 -- 3 files changed, 51 insertions(+), 60 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index d0a4d8ec7..b822f1cdc 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - # - test-backend: - # requires: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check - # - test-e2e: - # requires: - # - secrets-check + - test-backend: + requires: + - secrets-check + - test-frontend: + requires: + - secrets-check + - test-e2e: + requires: + - secrets-check ci-build-and-test-all: jobs: @@ -22,46 +22,46 @@ - main - master - /^release.*/ - # - test-backend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-frontend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-e2e: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check + - test-backend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-frontend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-e2e: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check - # build-and-test-backend: - # when: << pipeline.parameters.build_and_test_backend >> - # jobs: - # - secrets-check - # - test-backend: - # requires: - # - secrets-check + build-and-test-backend: + when: << pipeline.parameters.build_and_test_backend >> + jobs: + - secrets-check + - test-backend: + requires: + - secrets-check - # build-and-test-frontend: - # when: << pipeline.parameters.build_and_test_frontend >> - # jobs: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check + build-and-test-frontend: + when: << pipeline.parameters.build_and_test_frontend >> + jobs: + - secrets-check + - test-frontend: + requires: + - secrets-check diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 58b1f4fa5..f7836ff6f 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,12 +6,9 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: + - deploy-cloud-dot-gov: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> - # - deploy-cloud-dot-gov: - # backend-appname: tdp-backend-<< parameters.target_env >> - # frontend-appname: tdp-frontend-<< parameters.target_env >> deploy-staging: executor: docker-executor diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index cc322a926..8f2a99b60 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e if [ "$#" -ne 8 ]; then echo "Error, this script expects 8 parameters." @@ -19,11 +18,6 @@ TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" BUILD_DATE=`date +%F` -pwd -ls -ls $BACKEND_PATH -ls $FRONTEND_PATH - build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin for platform in "linux/amd64" "linux/arm64"; do From 42f42a37ce6163d645df1122c89c95e32f315a33 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 13:49:14 -0400 Subject: [PATCH 38/66] - adding step for docker buildx --- .circleci/deployment/commands.yml | 7 +++++++ scripts/build-and-tag-images.sh | 12 ++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 0b989139b..417be0b13 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -15,6 +15,13 @@ type: string steps: - setup_remote_docker + - run: + name: Install Buildx + command: | + export DOCKER_CLI_EXPERIMENTAL=enabled + sudo apt update + sudo apt install -y docker-buildx + docker buildx create --driver docker-container --use --bootstrap - run: name: Build and tag images command: | diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index 8f2a99b60..b35744967 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -14,19 +14,15 @@ BUILD_NUM=$5 COMMIT_HASH=$6 DOCKER_LOGIN=$7 DOCKER_USER=$8 +BUILD_DATE=`date +%F` TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" -BUILD_DATE=`date +%F` +export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - for platform in "linux/amd64" "linux/arm64"; do - docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker build --platform $platform -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" - - docker push tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME --all-tags - docker push tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME --all-tags - done + docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" docker logout } From 8bcdee1b4a4871b4742bbc2a12667923555eec47 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 13:49:48 -0400 Subject: [PATCH 39/66] - comment to increase speed --- .circleci/build-and-test/workflows.yml | 100 ++++++++++++------------- .circleci/deployment/jobs.yml | 5 +- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index b822f1cdc..d0a4d8ec7 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - - test-backend: - requires: - - secrets-check - - test-frontend: - requires: - - secrets-check - - test-e2e: - requires: - - secrets-check + # - test-backend: + # requires: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check + # - test-e2e: + # requires: + # - secrets-check ci-build-and-test-all: jobs: @@ -22,46 +22,46 @@ - main - master - /^release.*/ - - test-backend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-frontend: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check - - test-e2e: - filters: - branches: - only: - - main - - master - - /^release.*/ - requires: - - secrets-check + # - test-backend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-frontend: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check + # - test-e2e: + # filters: + # branches: + # only: + # - main + # - master + # - /^release.*/ + # requires: + # - secrets-check - build-and-test-backend: - when: << pipeline.parameters.build_and_test_backend >> - jobs: - - secrets-check - - test-backend: - requires: - - secrets-check + # build-and-test-backend: + # when: << pipeline.parameters.build_and_test_backend >> + # jobs: + # - secrets-check + # - test-backend: + # requires: + # - secrets-check - build-and-test-frontend: - when: << pipeline.parameters.build_and_test_frontend >> - jobs: - - secrets-check - - test-frontend: - requires: - - secrets-check + # build-and-test-frontend: + # when: << pipeline.parameters.build_and_test_frontend >> + # jobs: + # - secrets-check + # - test-frontend: + # requires: + # - secrets-check diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index f7836ff6f..58b1f4fa5 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,9 +6,12 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - deploy-cloud-dot-gov: + - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> + # - deploy-cloud-dot-gov: + # backend-appname: tdp-backend-<< parameters.target_env >> + # frontend-appname: tdp-frontend-<< parameters.target_env >> deploy-staging: executor: docker-executor From 24df3fee5524ecb51671534c2075c79c24bd8bbd Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 13:58:04 -0400 Subject: [PATCH 40/66] - install dep - check docker version --- .circleci/deployment/commands.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 417be0b13..86bb6cd90 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -18,9 +18,10 @@ - run: name: Install Buildx command: | + docker version export DOCKER_CLI_EXPERIMENTAL=enabled sudo apt update - sudo apt install -y docker-buildx + sudo apt-get install -y docker.io docker-buildx docker buildx create --driver docker-container --use --bootstrap - run: name: Build and tag images From 51635b426b223c559a3586bbe49ca5a371bef6a9 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 14:03:49 -0400 Subject: [PATCH 41/66] - add containerd --- .circleci/deployment/commands.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 86bb6cd90..215d1457f 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -21,7 +21,7 @@ docker version export DOCKER_CLI_EXPERIMENTAL=enabled sudo apt update - sudo apt-get install -y docker.io docker-buildx + sudo apt-get install -y containerd docker.io docker-buildx docker buildx create --driver docker-container --use --bootstrap - run: name: Build and tag images From f722bde5b8e1b909f659c3447020c7be3dc5acf5 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 15:11:37 -0400 Subject: [PATCH 42/66] - trying larger resource class - tag update --- .circleci/base_config.yml | 1 + scripts/build-and-tag-images.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 634a3c29b..9c1e6c7ff 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -10,6 +10,7 @@ executors: docker: - image: cimg/python:3.10.4 user: root + resource_class: large machine-executor: machine: docker_layer_caching: false diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index b35744967..a59177fa7 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -15,7 +15,7 @@ COMMIT_HASH=$6 DOCKER_LOGIN=$7 DOCKER_USER=$8 BUILD_DATE=`date +%F` -TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" +TAG="${BUILD_DATE}_build#${BUILD_NUM}_${COMMIT_HASH}" export DOCKER_CLI_EXPERIMENTAL=enabled From 405f24ab1742ff558cc1e6a5cb7e84af9f35fbca Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 15:16:44 -0400 Subject: [PATCH 43/66] - remove hash --- scripts/build-and-tag-images.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index a59177fa7..b35744967 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -15,7 +15,7 @@ COMMIT_HASH=$6 DOCKER_LOGIN=$7 DOCKER_USER=$8 BUILD_DATE=`date +%F` -TAG="${BUILD_DATE}_build#${BUILD_NUM}_${COMMIT_HASH}" +TAG="${BUILD_DATE}_build-${BUILD_NUM}_${COMMIT_HASH}" export DOCKER_CLI_EXPERIMENTAL=enabled From c655ca771479178c424b0966029ee160020ec162 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Fri, 6 Sep 2024 15:26:21 -0400 Subject: [PATCH 44/66] - quiet --- scripts/build-and-tag-images.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index b35744967..511594321 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -21,8 +21,8 @@ export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker buildx build --push -q --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker buildx build --push -q --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" docker logout } From a83f3c87a9e6aae1682d93fe718d606d009dbfe7 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 08:40:54 -0400 Subject: [PATCH 45/66] - leave output because circi requires it --- scripts/build-and-tag-images.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index 511594321..b35744967 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -21,8 +21,8 @@ export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - docker buildx build --push -q --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker buildx build --push -q --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" docker logout } From a6c6d8c00ffcad27c7bc4c2c5d97df156398dc57 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 11:43:20 -0400 Subject: [PATCH 46/66] - test dockerd max uploads --- .circleci/deployment/commands.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 215d1457f..9ff800332 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -26,6 +26,7 @@ - run: name: Build and tag images command: | + dockerd --max-concurrent-uploads 1 ./scripts/build-and-tag-images.sh <> <> ./tdrs-backend ./tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 "$CIRCI_DOCKER_LOGIN" tdp-circi deploy-cloud-dot-gov: From ea529a18102d062821900728e28d4f2f1a327eb7 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 12:52:47 -0400 Subject: [PATCH 47/66] - try restarting daemon with max uploads --- .circleci/deployment/commands.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 9ff800332..66e76b8c0 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -26,7 +26,9 @@ - run: name: Build and tag images command: | - dockerd --max-concurrent-uploads 1 + cat /etc/docker/daemon.json + echo '{"max-concurrent-uploads": 1}' > /etc/docker/daemon.json + sudo systemctl restart docker ./scripts/build-and-tag-images.sh <> <> ./tdrs-backend ./tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 "$CIRCI_DOCKER_LOGIN" tdp-circi deploy-cloud-dot-gov: From e5115d6dd395e46d6859b038ac0204963646ecbb Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 15:57:47 -0400 Subject: [PATCH 48/66] - test individual executors - comment out buildx for now - add build and tag jobs - update workflow - update script --- .circleci/base_config.yml | 5 +++++ .circleci/deployment/commands.yml | 19 +++++++---------- .circleci/deployment/jobs.yml | 34 +++++++++++++++++++++++++++--- .circleci/deployment/workflows.yml | 22 +++++++++++++++++++ scripts/build-and-tag-images.sh | 5 +++-- 5 files changed, 69 insertions(+), 16 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 9c1e6c7ff..91dbffd88 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -20,6 +20,11 @@ executors: docker_layer_caching: false image: ubuntu-2204:2024.01.1 resource_class: large + arm-docker-executor: + docker: + - image: cimg/python:3.10.4 + user: root + resource_class: arm.large parameters: build_and_test_all: diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 66e76b8c0..62488b2d3 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -15,20 +15,17 @@ type: string steps: - setup_remote_docker - - run: - name: Install Buildx - command: | - docker version - export DOCKER_CLI_EXPERIMENTAL=enabled - sudo apt update - sudo apt-get install -y containerd docker.io docker-buildx - docker buildx create --driver docker-container --use --bootstrap + # - run: + # name: Install Buildx + # command: | + # docker version + # export DOCKER_CLI_EXPERIMENTAL=enabled + # sudo apt update + # sudo apt-get install -y containerd docker.io docker-buildx + # docker buildx create --driver docker-container --use --bootstrap - run: name: Build and tag images command: | - cat /etc/docker/daemon.json - echo '{"max-concurrent-uploads": 1}' > /etc/docker/daemon.json - sudo systemctl restart docker ./scripts/build-and-tag-images.sh <> <> ./tdrs-backend ./tdrs-frontend $CIRCLE_BUILD_NUM $CIRCLE_SHA1 "$CIRCI_DOCKER_LOGIN" tdp-circi deploy-cloud-dot-gov: diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 58b1f4fa5..c8b29dc55 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,13 +6,41 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + # - build-and-tag-images: + # backend-appname: tdp-backend-<< parameters.target_env >> + # frontend-appname: tdp-frontend-<< parameters.target_env >> # - deploy-cloud-dot-gov: # backend-appname: tdp-backend-<< parameters.target_env >> # frontend-appname: tdp-frontend-<< parameters.target_env >> + build-and-tag-arm: + parameters: + backend-appname: + type: string + frontend-appname: + type: string + executor: arm-docker-executor + working_directory: ~/tdp-deploy + steps: + - init-deploy + - build-and-tag-images: + backend-appname: << parameters.backend-appname >> + frontend-appname: << parameters.frontend-appname >> + + build-and-tag: + parameters: + backend-appname: + type: string + frontend-appname: + type: string + executor: docker-executor + working_directory: ~/tdp-deploy + steps: + - init-deploy + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.backend-appname >> + frontend-appname: tdp-frontend-<< parameters.frontend-appname >> + deploy-staging: executor: docker-executor working_directory: ~/tdp-deploy diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 8a4269c04..26d4ab146 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -93,6 +93,28 @@ - develop - main - master + - build-and-tag-arm: + backend-appname: tdp-backend-<< pipeline.parameters.target_env >> + frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> + requires: + - deploy-infrastructure-dev + filters: + branches: + ignore: + - develop + - main + - master + - build-and-tag: + backend-appname: tdp-backend-<< pipeline.parameters.target_env >> + frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> + requires: + - deploy-infrastructure-dev + filters: + branches: + ignore: + - develop + - main + - master - deploy-develop: requires: - deploy-infrastructure-staging diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index b35744967..7d5b52dd7 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -e if [ "$#" -ne 8 ]; then echo "Error, this script expects 8 parameters." @@ -21,8 +22,8 @@ export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker build --push -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker build --push -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" docker logout } From 092a0baba598e8636818608e3d9960cd3a341ed1 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:06:01 -0400 Subject: [PATCH 49/66] - deploy after build --- .circleci/deployment/workflows.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 26d4ab146..621373f20 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -86,7 +86,8 @@ - deploy-dev: target_env: << pipeline.parameters.target_env >> requires: - - deploy-infrastructure-dev + - build-and-tag-arm + - build-and-tag filters: branches: ignore: @@ -97,7 +98,7 @@ backend-appname: tdp-backend-<< pipeline.parameters.target_env >> frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> requires: - - deploy-infrastructure-dev + - enable-versioning filters: branches: ignore: @@ -108,7 +109,7 @@ backend-appname: tdp-backend-<< pipeline.parameters.target_env >> frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> requires: - - deploy-infrastructure-dev + - enable-versioning filters: branches: ignore: From 1a213e4ed8c0ba6266ccfa350b4da6d8b9141ac7 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:12:21 -0400 Subject: [PATCH 50/66] - depend on infra --- .circleci/deployment/workflows.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 621373f20..9a4954ef4 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -98,7 +98,7 @@ backend-appname: tdp-backend-<< pipeline.parameters.target_env >> frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> requires: - - enable-versioning + - deploy-infrastructure-dev filters: branches: ignore: @@ -109,7 +109,7 @@ backend-appname: tdp-backend-<< pipeline.parameters.target_env >> frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> requires: - - enable-versioning + - deploy-infrastructure-dev filters: branches: ignore: From ae515b06a49cc5c9b1abbfb80d3c1ce86d322271 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:20:12 -0400 Subject: [PATCH 51/66] - explicit push --- scripts/build-and-tag-images.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index 7d5b52dd7..0f29b8a3d 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -22,8 +22,11 @@ export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - docker build --push -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker build --push -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker build -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker push tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME --all-tags + + docker build -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker push tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME --all-tags docker logout } From 574e3f1472b289d070b172d81fa704f2795c8ab6 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:20:53 -0400 Subject: [PATCH 52/66] - one build executor at a time --- .circleci/deployment/workflows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 9a4954ef4..e27830d35 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -109,7 +109,7 @@ backend-appname: tdp-backend-<< pipeline.parameters.target_env >> frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> requires: - - deploy-infrastructure-dev + - build-and-tag-arm filters: branches: ignore: From 78379965c3a3176cbf885e36972716802d340330 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:27:33 -0400 Subject: [PATCH 53/66] - build after deploy --- .circleci/base_config.yml | 2 +- .circleci/deployment/workflows.yml | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 91dbffd88..7fdccef75 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -24,7 +24,7 @@ executors: docker: - image: cimg/python:3.10.4 user: root - resource_class: arm.large + resource_class: arm.small parameters: build_and_test_all: diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index e27830d35..4cca6c731 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -86,8 +86,7 @@ - deploy-dev: target_env: << pipeline.parameters.target_env >> requires: - - build-and-tag-arm - - build-and-tag + - deploy-infrastructure-dev filters: branches: ignore: @@ -98,7 +97,7 @@ backend-appname: tdp-backend-<< pipeline.parameters.target_env >> frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> requires: - - deploy-infrastructure-dev + - deploy-dev filters: branches: ignore: From a373eb267a597c3ea473fc1890bd344c01228510 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:34:03 -0400 Subject: [PATCH 54/66] - try arm medium --- .circleci/base_config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 7fdccef75..1201ae7d5 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -24,7 +24,7 @@ executors: docker: - image: cimg/python:3.10.4 user: root - resource_class: arm.small + resource_class: arm.medium parameters: build_and_test_all: From 16e2b72d80bd28df552f2d82c9210f32922cac00 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:46:46 -0400 Subject: [PATCH 55/66] - revert back to OG working build state --- .circleci/base_config.yml | 5 ----- .circleci/deployment/jobs.yml | 34 +++--------------------------- .circleci/deployment/workflows.yml | 22 ------------------- scripts/build-and-tag-images.sh | 8 ++----- 4 files changed, 5 insertions(+), 64 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 1201ae7d5..9c1e6c7ff 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -20,11 +20,6 @@ executors: docker_layer_caching: false image: ubuntu-2204:2024.01.1 resource_class: large - arm-docker-executor: - docker: - - image: cimg/python:3.10.4 - user: root - resource_class: arm.medium parameters: build_and_test_all: diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index c8b29dc55..58b1f4fa5 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,41 +6,13 @@ working_directory: ~/tdp-deploy steps: - init-deploy - # - build-and-tag-images: - # backend-appname: tdp-backend-<< parameters.target_env >> - # frontend-appname: tdp-frontend-<< parameters.target_env >> + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> # - deploy-cloud-dot-gov: # backend-appname: tdp-backend-<< parameters.target_env >> # frontend-appname: tdp-frontend-<< parameters.target_env >> - build-and-tag-arm: - parameters: - backend-appname: - type: string - frontend-appname: - type: string - executor: arm-docker-executor - working_directory: ~/tdp-deploy - steps: - - init-deploy - - build-and-tag-images: - backend-appname: << parameters.backend-appname >> - frontend-appname: << parameters.frontend-appname >> - - build-and-tag: - parameters: - backend-appname: - type: string - frontend-appname: - type: string - executor: docker-executor - working_directory: ~/tdp-deploy - steps: - - init-deploy - - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.backend-appname >> - frontend-appname: tdp-frontend-<< parameters.frontend-appname >> - deploy-staging: executor: docker-executor working_directory: ~/tdp-deploy diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 4cca6c731..8a4269c04 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -93,28 +93,6 @@ - develop - main - master - - build-and-tag-arm: - backend-appname: tdp-backend-<< pipeline.parameters.target_env >> - frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> - requires: - - deploy-dev - filters: - branches: - ignore: - - develop - - main - - master - - build-and-tag: - backend-appname: tdp-backend-<< pipeline.parameters.target_env >> - frontend-appname: tdp-frontend-<< pipeline.parameters.target_env >> - requires: - - build-and-tag-arm - filters: - branches: - ignore: - - develop - - main - - master - deploy-develop: requires: - deploy-infrastructure-staging diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index 0f29b8a3d..b35744967 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e if [ "$#" -ne 8 ]; then echo "Error, this script expects 8 parameters." @@ -22,11 +21,8 @@ export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - docker build -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker push tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME --all-tags - - docker build -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" - docker push tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME --all-tags + docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" docker logout } From 8ae055f491644a49fede37882c6dc1afbf6f6d8b Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Mon, 9 Sep 2024 16:58:54 -0400 Subject: [PATCH 56/66] - Test using non docker in docker --- .circleci/base_config.yml | 2 +- .circleci/deployment/commands.yml | 18 +++++++++--------- .circleci/deployment/jobs.yml | 18 +++++++++++++++--- .circleci/deployment/workflows.yml | 10 ++++++++++ 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index 9c1e6c7ff..a393fde8c 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -18,7 +18,7 @@ executors: large-machine-executor: machine: docker_layer_caching: false - image: ubuntu-2204:2024.01.1 + image: ubuntu-2204:2024.05.1 resource_class: large parameters: diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index 62488b2d3..af5795dc7 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -14,15 +14,15 @@ default: tdp-frontend type: string steps: - - setup_remote_docker - # - run: - # name: Install Buildx - # command: | - # docker version - # export DOCKER_CLI_EXPERIMENTAL=enabled - # sudo apt update - # sudo apt-get install -y containerd docker.io docker-buildx - # docker buildx create --driver docker-container --use --bootstrap + # - setup_remote_docker + - run: + name: Install Buildx + command: | + docker version + export DOCKER_CLI_EXPERIMENTAL=enabled + sudo apt update + sudo apt-get install -y containerd docker.io docker-buildx + docker buildx create --driver docker-container --use --bootstrap - run: name: Build and tag images command: | diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 58b1f4fa5..992e29d95 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -6,13 +6,25 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + # - build-and-tag-images: + # backend-appname: tdp-backend-<< parameters.target_env >> + # frontend-appname: tdp-frontend-<< parameters.target_env >> # - deploy-cloud-dot-gov: # backend-appname: tdp-backend-<< parameters.target_env >> # frontend-appname: tdp-frontend-<< parameters.target_env >> + build-and-tag: + parameters: + target_env: + type: string + executor: large-machine-executor + working_directory: ~/tdp-deploy + steps: + - init-deploy + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> + deploy-staging: executor: docker-executor working_directory: ~/tdp-deploy diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 8a4269c04..3da55bdf7 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -93,6 +93,16 @@ - develop - main - master + - build-and-tag: + target_env: << pipeline.parameters.target_env >> + requires: + - deploy-dev + filters: + branches: + ignore: + - develop + - main + - master - deploy-develop: requires: - deploy-infrastructure-staging From 89e3319391d7770cf4bc5562d26f3ac70b83a192 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 07:48:54 -0400 Subject: [PATCH 57/66] - Update docker daemon config - Create new builder --- .circleci/deployment/commands.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.circleci/deployment/commands.yml b/.circleci/deployment/commands.yml index af5795dc7..d1aa82b7d 100644 --- a/.circleci/deployment/commands.yml +++ b/.circleci/deployment/commands.yml @@ -14,15 +14,15 @@ default: tdp-frontend type: string steps: - # - setup_remote_docker - run: - name: Install Buildx + name: Update Docker daemon command: | - docker version - export DOCKER_CLI_EXPERIMENTAL=enabled - sudo apt update - sudo apt-get install -y containerd docker.io docker-buildx - docker buildx create --driver docker-container --use --bootstrap + sudo echo '{"max-concurrent-uploads": 1}' | sudo tee /etc/docker/daemon.json + sudo service docker restart + - run: + name: Create builder + command: | + docker buildx create --name container-builder --driver docker-container --use --bootstrap - run: name: Build and tag images command: | From 4a18c63cb71e3ffe1a7b11276bfc6a5067fc5eee Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 07:55:45 -0400 Subject: [PATCH 58/66] - Don't do entire init-deploy routine --- .circleci/deployment/jobs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 992e29d95..95095df80 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -20,7 +20,8 @@ executor: large-machine-executor working_directory: ~/tdp-deploy steps: - - init-deploy + - checkout + - sudo-check - build-and-tag-images: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> From fed52ad5115d5da6bc3812fb0ed728a281eeb34d Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 08:59:46 -0400 Subject: [PATCH 59/66] - Don't push from build ctx since it doesnt obey daemon config single layer push --- scripts/build-and-tag-images.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/build-and-tag-images.sh b/scripts/build-and-tag-images.sh index b35744967..679485d79 100755 --- a/scripts/build-and-tag-images.sh +++ b/scripts/build-and-tag-images.sh @@ -21,8 +21,12 @@ export DOCKER_CLI_EXPERIMENTAL=enabled build_and_tag() { echo "$DOCKER_LOGIN" | docker login https://tdp-docker.dev.raftlabs.tech -u $DOCKER_USER --password-stdin - docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" - docker buildx build --push --platform linux/amd64,linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker buildx build --load --platform linux/amd64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker buildx build --load --platform linux/arm64 -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME:latest "$BACKEND_PATH" + docker push --all-tags tdp-docker.dev.raftlabs.tech/$BACKEND_APP_NAME + docker buildx build --load --platform linux/amd64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker buildx build --load --platform linux/arm64 -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:$TAG -t tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME:latest "$FRONTEND_PATH" + docker push --all-tags tdp-docker.dev.raftlabs.tech/$FRONTEND_APP_NAME docker logout } From ed4b58705499f39aae865bdafc85aa06496a52f8 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 09:03:31 -0400 Subject: [PATCH 60/66] - Update OS image - Remove resource class --- .circleci/base_config.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.circleci/base_config.yml b/.circleci/base_config.yml index a393fde8c..02d3c8f53 100644 --- a/.circleci/base_config.yml +++ b/.circleci/base_config.yml @@ -10,11 +10,10 @@ executors: docker: - image: cimg/python:3.10.4 user: root - resource_class: large machine-executor: machine: docker_layer_caching: false - image: ubuntu-2204:2024.01.1 + image: ubuntu-2204:2024.05.1 large-machine-executor: machine: docker_layer_caching: false From 08ecd6b1507d6e219df942a288aed049b39cc475 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 09:51:41 -0400 Subject: [PATCH 61/66] - Remove build and tag from dev envs - Update develop, staging, and prod to build and tag before deploying --- .circleci/build-and-test/workflows.yml | 100 ++++++++++++------------- .circleci/deployment/jobs.yml | 34 +++------ .circleci/deployment/workflows.yml | 37 ++++++--- 3 files changed, 88 insertions(+), 83 deletions(-) diff --git a/.circleci/build-and-test/workflows.yml b/.circleci/build-and-test/workflows.yml index d0a4d8ec7..b822f1cdc 100644 --- a/.circleci/build-and-test/workflows.yml +++ b/.circleci/build-and-test/workflows.yml @@ -3,15 +3,15 @@ when: << pipeline.parameters.build_and_test_all >> jobs: - secrets-check - # - test-backend: - # requires: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check - # - test-e2e: - # requires: - # - secrets-check + - test-backend: + requires: + - secrets-check + - test-frontend: + requires: + - secrets-check + - test-e2e: + requires: + - secrets-check ci-build-and-test-all: jobs: @@ -22,46 +22,46 @@ - main - master - /^release.*/ - # - test-backend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-frontend: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check - # - test-e2e: - # filters: - # branches: - # only: - # - main - # - master - # - /^release.*/ - # requires: - # - secrets-check + - test-backend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-frontend: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check + - test-e2e: + filters: + branches: + only: + - main + - master + - /^release.*/ + requires: + - secrets-check - # build-and-test-backend: - # when: << pipeline.parameters.build_and_test_backend >> - # jobs: - # - secrets-check - # - test-backend: - # requires: - # - secrets-check + build-and-test-backend: + when: << pipeline.parameters.build_and_test_backend >> + jobs: + - secrets-check + - test-backend: + requires: + - secrets-check - # build-and-test-frontend: - # when: << pipeline.parameters.build_and_test_frontend >> - # jobs: - # - secrets-check - # - test-frontend: - # requires: - # - secrets-check + build-and-test-frontend: + when: << pipeline.parameters.build_and_test_frontend >> + jobs: + - secrets-check + - test-frontend: + requires: + - secrets-check diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index 95095df80..ef8d8d6e5 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -1,28 +1,25 @@ - deploy-dev: + build-and-tag: parameters: target_env: type: string - executor: docker-executor + executor: large-machine-executor working_directory: ~/tdp-deploy steps: - - init-deploy - # - build-and-tag-images: - # backend-appname: tdp-backend-<< parameters.target_env >> - # frontend-appname: tdp-frontend-<< parameters.target_env >> - # - deploy-cloud-dot-gov: - # backend-appname: tdp-backend-<< parameters.target_env >> - # frontend-appname: tdp-frontend-<< parameters.target_env >> + - checkout + - sudo-check + - build-and-tag-images: + backend-appname: tdp-backend-<< parameters.target_env >> + frontend-appname: tdp-frontend-<< parameters.target_env >> - build-and-tag: + deploy-dev: parameters: target_env: type: string - executor: large-machine-executor + executor: docker-executor working_directory: ~/tdp-deploy steps: - - checkout - - sudo-check - - build-and-tag-images: + - init-deploy + - deploy-cloud-dot-gov: backend-appname: tdp-backend-<< parameters.target_env >> frontend-appname: tdp-frontend-<< parameters.target_env >> @@ -31,9 +28,6 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: - backend-appname: tdp-backend-staging - frontend-appname: tdp-frontend-staging - deploy-cloud-dot-gov: backend-appname: tdp-backend-staging frontend-appname: tdp-frontend-staging @@ -46,9 +40,6 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: - backend-appname: tdp-backend-develop - frontend-appname: tdp-frontend-develop - deploy-cloud-dot-gov: backend-appname: tdp-backend-develop frontend-appname: tdp-frontend-develop @@ -159,9 +150,6 @@ working_directory: ~/tdp-deploy steps: - init-deploy - - build-and-tag-images: - backend-appname: tdp-backend-prod - frontend-appname: tdp-frontend-prod - deploy-cloud-dot-gov: environment: production backend-appname: tdp-backend-prod diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 3da55bdf7..a5f7cb38c 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -93,33 +93,50 @@ - develop - main - master - - build-and-tag: - target_env: << pipeline.parameters.target_env >> + - build-and-tag-develop: + target_env: develop requires: - - deploy-dev + - deploy-infrastructure-staging filters: branches: - ignore: - - develop - - main - - master + branches: + only: + - develop - deploy-develop: requires: - - deploy-infrastructure-staging + - build-and-tag-develop filters: branches: only: - develop - - deploy-staging: + - build-and-tag-staging: + target_env: staging requires: - deploy-infrastructure-staging + filters: + branches: + branches: + only: + - main + - deploy-staging: + requires: + - build-and-tag-staging filters: branches: only: - main - - deploy-production: + - build-and-tag-production: + target_env: production requires: - deploy-infrastructure-production + filters: + branches: + branches: + only: + - master + - deploy-production: + requires: + - build-and-tag-production filters: branches: only: From 19d4ff048fb3371424ff5c40c3daaafbda896794 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 10:18:04 -0400 Subject: [PATCH 62/66] - remove extra inclusion of "branch" tag --- .circleci/deployment/workflows.yml | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index a5f7cb38c..0f99be97f 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -99,9 +99,8 @@ - deploy-infrastructure-staging filters: branches: - branches: - only: - - develop + only: + - develop - deploy-develop: requires: - build-and-tag-develop @@ -115,9 +114,8 @@ - deploy-infrastructure-staging filters: branches: - branches: - only: - - main + only: + - main - deploy-staging: requires: - build-and-tag-staging @@ -131,9 +129,8 @@ - deploy-infrastructure-production filters: branches: - branches: - only: - - master + only: + - master - deploy-production: requires: - build-and-tag-production From e3a439902ddcfd21064b5c5d4bf46edacc94cd07 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Tue, 10 Sep 2024 10:24:42 -0400 Subject: [PATCH 63/66] - remove unneeded variable - add a job for each env --- .circleci/deployment/jobs.yml | 29 +++++++++++++++++++++++------ .circleci/deployment/workflows.yml | 3 --- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/.circleci/deployment/jobs.yml b/.circleci/deployment/jobs.yml index ef8d8d6e5..ce163101f 100644 --- a/.circleci/deployment/jobs.yml +++ b/.circleci/deployment/jobs.yml @@ -1,15 +1,32 @@ - build-and-tag: - parameters: - target_env: - type: string + build-and-tag-develop: executor: large-machine-executor working_directory: ~/tdp-deploy steps: - checkout - sudo-check - build-and-tag-images: - backend-appname: tdp-backend-<< parameters.target_env >> - frontend-appname: tdp-frontend-<< parameters.target_env >> + backend-appname: tdp-backend-develop + frontend-appname: tdp-frontend-develop + + build-and-tag-staging: + executor: large-machine-executor + working_directory: ~/tdp-deploy + steps: + - checkout + - sudo-check + - build-and-tag-images: + backend-appname: tdp-backend-staging + frontend-appname: tdp-frontend-staging + + build-and-tag-production: + executor: large-machine-executor + working_directory: ~/tdp-deploy + steps: + - checkout + - sudo-check + - build-and-tag-images: + backend-appname: tdp-backend-production + frontend-appname: tdp-frontend-production deploy-dev: parameters: diff --git a/.circleci/deployment/workflows.yml b/.circleci/deployment/workflows.yml index 0f99be97f..a0de09f9e 100644 --- a/.circleci/deployment/workflows.yml +++ b/.circleci/deployment/workflows.yml @@ -94,7 +94,6 @@ - main - master - build-and-tag-develop: - target_env: develop requires: - deploy-infrastructure-staging filters: @@ -109,7 +108,6 @@ only: - develop - build-and-tag-staging: - target_env: staging requires: - deploy-infrastructure-staging filters: @@ -124,7 +122,6 @@ only: - main - build-and-tag-production: - target_env: production requires: - deploy-infrastructure-production filters: From d04a8ce49a2f25c342be0690a7420bf751a6c6e0 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Thu, 19 Sep 2024 07:37:06 -0400 Subject: [PATCH 64/66] - add docker login for owasp scan --- .circleci/owasp/jobs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.circleci/owasp/jobs.yml b/.circleci/owasp/jobs.yml index 225758ef5..fdabb0a22 100644 --- a/.circleci/owasp/jobs.yml +++ b/.circleci/owasp/jobs.yml @@ -4,6 +4,7 @@ steps: - checkout - docker-compose-check + - docker-login - docker-compose-up-backend - docker-compose-up-frontend - run: @@ -26,6 +27,7 @@ steps: - checkout - docker-compose-check + - docker-login - docker-compose-up-backend - docker-compose-up-frontend - run: @@ -66,6 +68,7 @@ - sudo-check - cf-check - docker-compose-check + - docker-login - login-cloud-dot-gov: cf-password: <> cf-space: <> From 68189ae3ec26c7d4f5a86c9a05ade31c8803e8b2 Mon Sep 17 00:00:00 2001 From: Eric Lipe Date: Wed, 2 Oct 2024 14:11:41 -0400 Subject: [PATCH 65/66] - remove debug cmd --- .circleci/build-and-test/jobs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.circleci/build-and-test/jobs.yml b/.circleci/build-and-test/jobs.yml index b45f41568..469c92250 100644 --- a/.circleci/build-and-test/jobs.yml +++ b/.circleci/build-and-test/jobs.yml @@ -9,7 +9,6 @@ name: Run Unit Tests And Create Code Coverage Report command: | cd tdrs-backend; - docker ps docker-compose run --rm web bash -c "./wait_for_services.sh && pytest --cov-report=xml" - run: name: Execute Python Linting Test From 30513b6f5fc17a5713171b162116d9ac64574d5f Mon Sep 17 00:00:00 2001 From: jtimpe <111305129+jtimpe@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:52:42 -0400 Subject: [PATCH 66/66] 2990 - stuck files notification (#3195) * stuck file templates * send stuck file notif * improve table readability * handle edge cases * lint * only send if files stuck * convert to celery task * fix test * fix test * unused import * rm stuck-file-single * insert admin link * task efficiency * datetime -> timezone * clean up tests * lint * fix test * lint * Update tdrs-backend/tdpservice/email/helpers/data_file.py Co-authored-by: Alex P. <63075587+ADPennington@users.noreply.github.com> --------- Co-authored-by: Alex P. <63075587+ADPennington@users.noreply.github.com> --- tdrs-backend/tdpservice/data_files/models.py | 5 + tdrs-backend/tdpservice/data_files/tasks.py | 48 ++++ .../data_files/test/test_stuck_files.py | 252 ++++++++++++++++++ tdrs-backend/tdpservice/email/email_enums.py | 1 + .../tdpservice/email/helpers/data_file.py | 29 ++ .../email/templates/stuck-file-list.html | 40 +++ .../tdpservice/parsers/test/factories.py | 18 ++ .../search_indexes/test/test_reparse.py | 6 +- tdrs-backend/tdpservice/settings/common.py | 4 + 9 files changed, 401 insertions(+), 2 deletions(-) create mode 100644 tdrs-backend/tdpservice/data_files/tasks.py create mode 100644 tdrs-backend/tdpservice/data_files/test/test_stuck_files.py create mode 100644 tdrs-backend/tdpservice/email/templates/stuck-file-list.html diff --git a/tdrs-backend/tdpservice/data_files/models.py b/tdrs-backend/tdpservice/data_files/models.py index c00541419..6fe5355e0 100644 --- a/tdrs-backend/tdpservice/data_files/models.py +++ b/tdrs-backend/tdpservice/data_files/models.py @@ -5,6 +5,7 @@ from io import StringIO from typing import Union +from django.conf import settings from django.contrib.admin.models import ADDITION, ContentType, LogEntry from django.core.files.base import File from django.db import models @@ -206,6 +207,10 @@ def submitted_by(self): """Return the author as a string for this data file.""" return self.user.get_full_name() + def admin_link(self): + """Return a link to the admin console for this file.""" + return f"{settings.FRONTEND_BASE_URL}/admin/data_files/datafile/?id={self.pk}" + @classmethod def create_new_version(self, data): """Create a new version of a data file with an incremented version.""" diff --git a/tdrs-backend/tdpservice/data_files/tasks.py b/tdrs-backend/tdpservice/data_files/tasks.py new file mode 100644 index 000000000..16e35de79 --- /dev/null +++ b/tdrs-backend/tdpservice/data_files/tasks.py @@ -0,0 +1,48 @@ +"""Celery shared tasks for use in scheduled jobs.""" + +from celery import shared_task +from datetime import timedelta +from django.utils import timezone +from django.contrib.auth.models import Group +from django.db.models import Q, Count +from tdpservice.users.models import AccountApprovalStatusChoices, User +from tdpservice.data_files.models import DataFile +from tdpservice.parsers.models import DataFileSummary +from tdpservice.email.helpers.data_file import send_stuck_file_email + + +def get_stuck_files(): + """Return a queryset containing files in a 'stuck' state.""" + stuck_files = DataFile.objects.annotate(reparse_count=Count('reparse_meta_models')).filter( + # non-reparse submissions over an hour old + Q( + reparse_count=0, + created_at__lte=timezone.now() - timedelta(hours=1), + ) | # OR + # reparse submissions past the timeout, where the reparse did not complete + Q( + reparse_count__gt=0, + reparse_meta_models__timeout_at__lte=timezone.now(), + reparse_meta_models__finished=False, + reparse_meta_models__success=False + ) + ).filter( + # where there is NO summary or the summary is in PENDING status + Q(summary=None) | Q(summary__status=DataFileSummary.Status.PENDING) + ) + + return stuck_files + + +@shared_task +def notify_stuck_files(): + """Find files stuck in 'Pending' and notify SysAdmins.""" + stuck_files = get_stuck_files() + + if stuck_files.count() > 0: + recipients = User.objects.filter( + account_approval_status=AccountApprovalStatusChoices.APPROVED, + groups=Group.objects.get(name='OFA System Admin') + ).values_list('username', flat=True).distinct() + + send_stuck_file_email(stuck_files, recipients) diff --git a/tdrs-backend/tdpservice/data_files/test/test_stuck_files.py b/tdrs-backend/tdpservice/data_files/test/test_stuck_files.py new file mode 100644 index 000000000..95f4f8f3a --- /dev/null +++ b/tdrs-backend/tdpservice/data_files/test/test_stuck_files.py @@ -0,0 +1,252 @@ +"""Test the get_stuck_files function.""" + + +import pytest +from datetime import timedelta +from django.utils import timezone +from tdpservice.data_files.models import DataFile +from tdpservice.parsers.models import DataFileSummary +from tdpservice.data_files.tasks import get_stuck_files +from tdpservice.parsers.test.factories import ParsingFileFactory, DataFileSummaryFactory, ReparseMetaFactory + + +def _time_ago(hours=0, minutes=0, seconds=0): + return timezone.now() - timedelta(hours=hours, minutes=minutes, seconds=seconds) + + +def make_datafile(stt_user, stt, version): + """Create a test data file with default params.""" + datafile = ParsingFileFactory.create( + quarter=DataFile.Quarter.Q1, section=DataFile.Section.ACTIVE_CASE_DATA, + year=2023, version=version, user=stt_user, stt=stt + ) + return datafile + + +def make_summary(datafile, status): + """Create a test data file summary given a file and status.""" + return DataFileSummaryFactory.create( + datafile=datafile, + status=status, + ) + + +def make_reparse_meta(finished, success): + """Create a test reparse meta model.""" + return ReparseMetaFactory.create( + timeout_at=_time_ago(hours=1), + finished=finished, + success=success + ) + + +@pytest.mark.django_db +def test_find_pending_submissions__none_stuck(stt_user, stt): + """Finds no stuck files.""" + # an accepted standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + make_summary(df1, DataFileSummary.Status.ACCEPTED) + + # an accepted reparse submission, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + make_summary(df2, DataFileSummary.Status.ACCEPTED) + rpm = make_reparse_meta(True, True) + df2.reparse_meta_models.add(rpm) + + # a pending standard submission, less than an hour old + df3 = make_datafile(stt_user, stt, 3) + df3.created_at = _time_ago(minutes=40) + df3.save() + make_summary(df3, DataFileSummary.Status.PENDING) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 0 + + +@pytest.mark.django_db +def test_find_pending_submissions__non_reparse_stuck(stt_user, stt): + """Finds standard upload/submission stuck in Pending.""" + # a pending standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + make_summary(df1, DataFileSummary.Status.PENDING) + + # an accepted reparse submission, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + make_summary(df2, DataFileSummary.Status.ACCEPTED) + rpm = make_reparse_meta(True, True) + df2.reparse_meta_models.add(rpm) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 1 + assert stuck_files.first().pk == df1.pk + + +@pytest.mark.django_db +def test_find_pending_submissions__non_reparse_stuck__no_dfs(stt_user, stt): + """Finds standard upload/submission stuck in Pending.""" + # a standard submission with no summary + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + + # an accepted reparse submission, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + make_summary(df2, DataFileSummary.Status.ACCEPTED) + rpm = make_reparse_meta(True, True) + df2.reparse_meta_models.add(rpm) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 1 + assert stuck_files.first().pk == df1.pk + + +@pytest.mark.django_db +def test_find_pending_submissions__reparse_stuck(stt_user, stt): + """Finds a reparse submission stuck in pending, past the timeout.""" + # an accepted standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + make_summary(df1, DataFileSummary.Status.ACCEPTED) + + # a pending reparse submission, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + make_summary(df2, DataFileSummary.Status.PENDING) + rpm = make_reparse_meta(False, False) + df2.reparse_meta_models.add(rpm) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 1 + assert stuck_files.first().pk == df2.pk + + +@pytest.mark.django_db +def test_find_pending_submissions__reparse_stuck__no_dfs(stt_user, stt): + """Finds a reparse submission stuck in pending, past the timeout.""" + # an accepted standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + make_summary(df1, DataFileSummary.Status.ACCEPTED) + + # a reparse submission with no summary, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + rpm = make_reparse_meta(False, False) + df2.reparse_meta_models.add(rpm) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 1 + assert stuck_files.first().pk == df2.pk + + +@pytest.mark.django_db +def test_find_pending_submissions__reparse_and_non_reparse_stuck(stt_user, stt): + """Finds stuck submissions, both reparse and standard parse.""" + # a pending standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + make_summary(df1, DataFileSummary.Status.PENDING) + + # a pending reparse submission, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + make_summary(df2, DataFileSummary.Status.PENDING) + rpm = make_reparse_meta(False, False) + df2.reparse_meta_models.add(rpm) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 2 + for f in stuck_files: + assert f.pk in (df1.pk, df2.pk) + + +@pytest.mark.django_db +def test_find_pending_submissions__reparse_and_non_reparse_stuck_no_dfs(stt_user, stt): + """Finds stuck submissions, both reparse and standard parse.""" + # a pending standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + + # a pending reparse submission, past the timeout + df2 = make_datafile(stt_user, stt, 2) + df2.created_at = _time_ago(hours=1) + df2.save() + rpm = make_reparse_meta(False, False) + df2.reparse_meta_models.add(rpm) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 2 + for f in stuck_files: + assert f.pk in (df1.pk, df2.pk) + + +@pytest.mark.django_db +def test_find_pending_submissions__old_reparse_stuck__new_not_stuck(stt_user, stt): + """Finds no stuck files, as the new parse is successful.""" + # a pending standard submission, more than an hour old + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + dfs1 = make_summary(df1, DataFileSummary.Status.PENDING) + + # reparse fails the first time + rpm1 = make_reparse_meta(False, False) + df1.reparse_meta_models.add(rpm1) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 1 + + # reparse again, succeeds this time + dfs1.delete() # reparse deletes the original dfs and creates the new one + make_summary(df1, DataFileSummary.Status.ACCEPTED) + + rpm2 = make_reparse_meta(True, True) + df1.reparse_meta_models.add(rpm2) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 0 + + +@pytest.mark.django_db +def test_find_pending_submissions__new_reparse_stuck__old_not_stuck(stt_user, stt): + """Finds files stuck from the new reparse, even though the old one was successful.""" + # file rejected on first upload + df1 = make_datafile(stt_user, stt, 1) + df1.created_at = _time_ago(hours=2) + df1.save() + dfs1 = make_summary(df1, DataFileSummary.Status.REJECTED) + + # reparse succeeds + rpm1 = make_reparse_meta(True, True) + df1.reparse_meta_models.add(rpm1) + + # reparse again, fails this time + dfs1.delete() # reparse deletes the original dfs and creates the new one + DataFileSummary.objects.create( + datafile=df1, + status=DataFileSummary.Status.PENDING, + ) + + rpm2 = make_reparse_meta(False, False) + df1.reparse_meta_models.add(rpm2) + + stuck_files = get_stuck_files() + assert stuck_files.count() == 1 + assert stuck_files.first().pk == df1.pk diff --git a/tdrs-backend/tdpservice/email/email_enums.py b/tdrs-backend/tdpservice/email/email_enums.py index 4527b6016..82e15e66d 100644 --- a/tdrs-backend/tdpservice/email/email_enums.py +++ b/tdrs-backend/tdpservice/email/email_enums.py @@ -15,3 +15,4 @@ class EmailType(Enum): ACCOUNT_DEACTIVATED = 'account-deactivated.html' ACCOUNT_DEACTIVATED_ADMIN = 'account-deactivated-admin.html' UPCOMING_SUBMISSION_DEADLINE = 'upcoming-submission-deadline.html' + STUCK_FILE_LIST = 'stuck-file-list.html' diff --git a/tdrs-backend/tdpservice/email/helpers/data_file.py b/tdrs-backend/tdpservice/email/helpers/data_file.py index 1ed966a87..3b9112b54 100644 --- a/tdrs-backend/tdpservice/email/helpers/data_file.py +++ b/tdrs-backend/tdpservice/email/helpers/data_file.py @@ -1,5 +1,6 @@ """Helper functions for sending data file submission emails.""" from django.conf import settings +from tdpservice.users.models import User from tdpservice.email.email_enums import EmailType from tdpservice.email.email import automated_email, log from tdpservice.parsers.util import get_prog_from_section @@ -69,3 +70,31 @@ def send_data_submitted_email( text_message=text_message, logger_context=logger_context ) + + +def send_stuck_file_email(stuck_files, recipients): + """Send an email to sys admins with details of files stuck in Pending.""" + logger_context = { + 'user_id': User.objects.get_or_create(username='system')[0].pk + } + + template_path = EmailType.STUCK_FILE_LIST.value + subject = 'List of submitted files with pending status after 1 hour' + text_message = 'The system has detected stuck files.' + + context = { + "subject": subject, + "url": settings.FRONTEND_BASE_URL, + "files": stuck_files, + } + + log(f'Emailing stuck files to SysAdmins: {list(recipients)}', logger_context=logger_context) + + automated_email( + email_path=template_path, + recipient_email=recipients, + subject=subject, + email_context=context, + text_message=text_message, + logger_context=logger_context + ) diff --git a/tdrs-backend/tdpservice/email/templates/stuck-file-list.html b/tdrs-backend/tdpservice/email/templates/stuck-file-list.html new file mode 100644 index 000000000..bfe5055a2 --- /dev/null +++ b/tdrs-backend/tdpservice/email/templates/stuck-file-list.html @@ -0,0 +1,40 @@ +{% extends 'base.html' %} +{% block content %} + + + + +

+

+ +

Hello,

+ +

The system has detected stuck data submissions.

+ + + + + + + + + + + + + {% for file in files %} + + + + + + + + {% endfor %} + +
SttSectionFiscal yearSubmitted onFile
{{ file.stt }}{{ file.section }}{{ file.fiscal_year }}{{ file.created_at }} {{ file.created_time_ago }} + View in Admin Console +
+ +{% endblock %} \ No newline at end of file diff --git a/tdrs-backend/tdpservice/parsers/test/factories.py b/tdrs-backend/tdpservice/parsers/test/factories.py index 5b558ef3f..c0f50e85b 100644 --- a/tdrs-backend/tdpservice/parsers/test/factories.py +++ b/tdrs-backend/tdpservice/parsers/test/factories.py @@ -1,11 +1,29 @@ """Factories for generating test data for parsers.""" import factory +from django.utils import timezone from tdpservice.parsers.models import DataFileSummary, ParserErrorCategoryChoices from faker import Faker from tdpservice.data_files.test.factories import DataFileFactory from tdpservice.users.test.factories import UserFactory from tdpservice.stts.test.factories import STTFactory + +class ReparseMetaFactory(factory.django.DjangoModelFactory): + """Generate test reparse meta model.""" + + class Meta: + """Hardcoded meta data for factory.""" + + model = "search_indexes.ReparseMeta" + + timeout_at = timezone.now() + finished = False + success = False + num_files_to_reparse = 1 + files_completed = 1 + files_failed = 0 + + class ParsingFileFactory(factory.django.DjangoModelFactory): """Generate test data for data files.""" diff --git a/tdrs-backend/tdpservice/search_indexes/test/test_reparse.py b/tdrs-backend/tdpservice/search_indexes/test/test_reparse.py index 360988224..2c8647cea 100644 --- a/tdrs-backend/tdpservice/search_indexes/test/test_reparse.py +++ b/tdrs-backend/tdpservice/search_indexes/test/test_reparse.py @@ -273,8 +273,10 @@ def test_reparse_sequential(log_context): meta = ReparseMeta.objects.create(timeout_at=None) assert False is cmd._assert_sequential_execution(log_context) timeout_entry = LogEntry.objects.latest('pk') - assert timeout_entry.change_message == ("The latest ReparseMeta model's (ID: 1) timeout_at field is None. Cannot " - "safely execute reparse, please fix manually.") + assert timeout_entry.change_message == ( + f"The latest ReparseMeta model's (ID: {meta.pk}) timeout_at field is None. Cannot " + "safely execute reparse, please fix manually." + ) meta.timeout_at = timezone.now() + timedelta(seconds=100) meta.save() diff --git a/tdrs-backend/tdpservice/settings/common.py b/tdrs-backend/tdpservice/settings/common.py index cd7b5274b..ba936b545 100644 --- a/tdrs-backend/tdpservice/settings/common.py +++ b/tdrs-backend/tdpservice/settings/common.py @@ -499,6 +499,10 @@ class Common(Configuration): 'task': 'tdpservice.email.tasks.email_admin_num_access_requests', 'schedule': crontab(minute='0', hour='1', day_of_week='*', day_of_month='*', month_of_year='*'), # Every day at 1am UTC (9pm EST) }, + 'Email Admin Number of Stuck Files' : { + 'task': 'tdpservice.data_files.tasks.notify_stuck_files', + 'schedule': crontab(minute='0', hour='1', day_of_week='*', day_of_month='*', month_of_year='*'), # Every day at 1am UTC (9pm EST) + }, 'Email Data Analyst Q1 Upcoming Submission Deadline Reminder': { 'task': 'tdpservice.email.tasks.send_data_submission_reminder', # Feb 9 at 1pm UTC (9am EST)