From 34726ae6a729de1029f648c24deb984f140bf289 Mon Sep 17 00:00:00 2001 From: Christopher Butler Date: Fri, 12 Sep 2025 13:27:19 -0400 Subject: [PATCH 1/6] New Version * Add an .aws-architecture file * Remove git from the apt-get install in the Dockerfile --- .aws-architecture | 1 + Dockerfile | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 .aws-architecture diff --git a/.aws-architecture b/.aws-architecture new file mode 100644 index 0000000..303dc7a --- /dev/null +++ b/.aws-architecture @@ -0,0 +1 @@ +linux/amd64 diff --git a/Dockerfile b/Dockerfile index 0022de8..0cbfeb9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM python:3.13-slim RUN apt-get update && \ - apt-get install -y --no-install-recommends git ca-certificates && \ + apt-get install -y --no-install-recommends ca-certificates && \ rm -rf /var/lib/apt/lists/* COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv From 20427e41fdcffd0f3e02914ee763491b8d2e9b8a Mon Sep 17 00:00:00 2001 From: Christopher Butler Date: Fri, 12 Sep 2025 14:41:30 -0400 Subject: [PATCH 2/6] ARM64 Build --- .aws-architecture | 2 +- Makefile | 20 +++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/.aws-architecture b/.aws-architecture index 303dc7a..a20334e 100644 --- a/.aws-architecture +++ b/.aws-architecture @@ -1 +1 @@ -linux/amd64 +linux/arm64 diff --git a/Makefile b/Makefile index f691c92..3373c1d 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ DATETIME:=$(shell date -u +%Y%m%dT%H%M%SZ) ### and review the other commented lines in the document. ### ECR_NAME_DEV := ecr-workflow-test-dev ECR_URL_DEV := 222053980223.dkr.ecr.us-east-1.amazonaws.com/ecr-workflow-test-dev -CPU_ARCH ?= $(shell cat .aws-architecture) +CPU_ARCH ?= $(shell cat .aws-architecture 2>/dev/null || echo "linux/amd64") ### End of Terraform-generated header ### help: # Preview Makefile commands @@ -81,16 +81,26 @@ my-app: # CLI without any arguments, utilizing uv script entrypoint ### Terraform-generated Developer Deploy Commands for Dev environment ### -dist-dev: ## Build docker container (intended for developer-based manual build) - docker buildx create --use && docker buildx build --platform $(CPU_ARCH) \ +check-arch: + @if [[ "$(CPU_ARCH)" != "linux/amd64" && "$(CPU_ARCH)" != "linux/arm64" ]]; then \ + echo "Invalid CPU_ARCH: $(CPU_ARCH)"; exit 1; \ + fi + +dist-dev: check-arch ## Build docker container (intended for developer-based manual build + docker buildx create --use || true; + docker buildx build --platform $(CPU_ARCH) \ + --load \ -t $(ECR_URL_DEV):latest \ -t $(ECR_URL_DEV):$(shell git describe --always) \ - -t $(ECR_NAME_DEV):latest . + -t $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) \ + -t $(ECR_NAME_DEV):latest \ + . publish-dev: dist-dev ## Build, tag and push (intended for developer-based manual publish) - docker login -u AWS -p $$(aws ecr get-login-password --region us-east-1) $(ECR_URL_DEV) + aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(ECR_URL_DEV) docker push $(ECR_URL_DEV):latest docker push $(ECR_URL_DEV):$(shell git describe --always) + docker push $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) ### Terraform-generated manual shortcuts for deploying to Stage. This requires ### From 9ffb0e884063f75681c9bb5b2c59b2ed619e28bd Mon Sep 17 00:00:00 2001 From: Christopher Butler Date: Sun, 14 Sep 2025 16:13:44 -0400 Subject: [PATCH 3/6] revert to regular app --- .aws-architecture | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .aws-architecture diff --git a/.aws-architecture b/.aws-architecture deleted file mode 100644 index a20334e..0000000 --- a/.aws-architecture +++ /dev/null @@ -1 +0,0 @@ -linux/arm64 From c91c30a1cf42ee70f119ad18663ee3e4ac4d0064 Mon Sep 17 00:00:00 2001 From: Christopher Butler Date: Mon, 15 Sep 2025 14:27:43 -0400 Subject: [PATCH 4/6] Makefile fixes for docker commands --- .gitignore | 1 + Makefile | 35 +++++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 526ebcd..e7bc153 100644 --- a/.gitignore +++ b/.gitignore @@ -155,3 +155,4 @@ cython_debug/ .DS_Store output/ .vscode/ +.arch_tag diff --git a/Makefile b/Makefile index 3373c1d..5bc3cc9 100644 --- a/Makefile +++ b/Makefile @@ -82,26 +82,45 @@ my-app: # CLI without any arguments, utilizing uv script entrypoint ### Terraform-generated Developer Deploy Commands for Dev environment ### check-arch: - @if [[ "$(CPU_ARCH)" != "linux/amd64" && "$(CPU_ARCH)" != "linux/arm64" ]]; then \ + @ARCH_FILE=".aws-architecture"; \ + if [[ "$(CPU_ARCH)" != "linux/amd64" && "$(CPU_ARCH)" != "linux/arm64" ]]; then \ echo "Invalid CPU_ARCH: $(CPU_ARCH)"; exit 1; \ - fi + fi; \ + if [[ -f $$ARCH_FILE ]]; then \ + echo "latest-$(shell echo $(CPU_ARCH) | cut -d'/' -f2)" > .arch_tag; \ + else \ + echo "latest" > .arch_tag; \ + fi dist-dev: check-arch ## Build docker container (intended for developer-based manual build - docker buildx create --use || true; + @ARCH_TAG=$$(cat .arch_tag); \ + docker buildx inspect $(ECR_NAME_DEV) >/dev/null 2>&1 || docker buildx create --name $(ECR_NAME_DEV) --use; \ + docker buildx use $(ECR_NAME_DEV); \ docker buildx build --platform $(CPU_ARCH) \ --load \ - -t $(ECR_URL_DEV):latest \ + -t $(ECR_URL_DEV):$$ARCH_TAG \ -t $(ECR_URL_DEV):$(shell git describe --always) \ -t $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) \ - -t $(ECR_NAME_DEV):latest \ + -t $(ECR_NAME_DEV):$$ARCH_TAG \ . publish-dev: dist-dev ## Build, tag and push (intended for developer-based manual publish) - aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(ECR_URL_DEV) - docker push $(ECR_URL_DEV):latest - docker push $(ECR_URL_DEV):$(shell git describe --always) + @ARCH_TAG=$$(cat .arch_tag); \ + aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(ECR_URL_DEV); \ + docker push $(ECR_URL_DEV):$$ARCH_TAG; \ + docker push $(ECR_URL_DEV):$(shell git describe --always); \ docker push $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) +docker-clean: ## Clean up Docker detritus + @ARCH_TAG=$$(cat .arch_tag); \ + echo "Cleaning up Docker leftovers (containers, images, builders)"; \ + docker rmi -f $(ECR_URL_DEV):$$ARCH_TAG; \ + docker rmi -f $(ECR_URL_DEV):$(shell git describe --always) || true; \ + docker rmi -f $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) || true; \ + docker rmi -f $(ECR_NAME_DEV):$$ARCH_TAG || true; \ + docker buildx rm $(ECR_NAME_DEV) || true + @rm -rf .arch_tag + ### Terraform-generated manual shortcuts for deploying to Stage. This requires ### ### that ECR_NAME_STAGE, ECR_URL_STAGE, and FUNCTION_STAGE environment ### From 943ed3568cb82cb172b77f9aaba90d107d90f070 Mon Sep 17 00:00:00 2001 From: Christopher Butler Date: Mon, 15 Sep 2025 15:05:11 -0400 Subject: [PATCH 5/6] more make adjustments --- Makefile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 5bc3cc9..5854687 100644 --- a/Makefile +++ b/Makefile @@ -98,25 +98,25 @@ dist-dev: check-arch ## Build docker container (intended for developer-based man docker buildx use $(ECR_NAME_DEV); \ docker buildx build --platform $(CPU_ARCH) \ --load \ - -t $(ECR_URL_DEV):$$ARCH_TAG \ - -t $(ECR_URL_DEV):$(shell git describe --always) \ - -t $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) \ + -t $(ECR_URL_DEV):make-$$ARCH_TAG \ + -t $(ECR_URL_DEV):make-$(shell git describe --always) \ + -t $(ECR_URL_DEV):make-$(shell echo $(CPU_ARCH) | cut -d'/' -f2) \ -t $(ECR_NAME_DEV):$$ARCH_TAG \ . publish-dev: dist-dev ## Build, tag and push (intended for developer-based manual publish) @ARCH_TAG=$$(cat .arch_tag); \ aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(ECR_URL_DEV); \ - docker push $(ECR_URL_DEV):$$ARCH_TAG; \ - docker push $(ECR_URL_DEV):$(shell git describe --always); \ - docker push $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) + docker push $(ECR_URL_DEV):make-$$ARCH_TAG; \ + docker push $(ECR_URL_DEV):make-$(shell git describe --always); \ + docker push $(ECR_URL_DEV):make-$(shell echo $(CPU_ARCH) | cut -d'/' -f2) docker-clean: ## Clean up Docker detritus @ARCH_TAG=$$(cat .arch_tag); \ echo "Cleaning up Docker leftovers (containers, images, builders)"; \ - docker rmi -f $(ECR_URL_DEV):$$ARCH_TAG; \ - docker rmi -f $(ECR_URL_DEV):$(shell git describe --always) || true; \ - docker rmi -f $(ECR_URL_DEV):$(shell echo $(CPU_ARCH) | cut -d'/' -f2) || true; \ + docker rmi -f $(ECR_URL_DEV):make-$$ARCH_TAG; \ + docker rmi -f $(ECR_URL_DEV):make-$(shell git describe --always) || true; \ + docker rmi -f $(ECR_URL_DEV):make-$(shell echo $(CPU_ARCH) | cut -d'/' -f2) || true; \ docker rmi -f $(ECR_NAME_DEV):$$ARCH_TAG || true; \ docker buildx rm $(ECR_NAME_DEV) || true @rm -rf .arch_tag From ea95412d393313764cf40d1f619f89b24fe3f226 Mon Sep 17 00:00:00 2001 From: Christopher Butler Date: Mon, 15 Sep 2025 15:36:49 -0400 Subject: [PATCH 6/6] minor change to dev-build --- .github/workflows/dev-build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dev-build.yml b/.github/workflows/dev-build.yml index e945eed..d8229d0 100644 --- a/.github/workflows/dev-build.yml +++ b/.github/workflows/dev-build.yml @@ -17,6 +17,7 @@ permissions: jobs: prep: + name: Prep for Build runs-on: ubuntu-latest outputs: cpuarch: ${{ steps.setarch.outputs.cpuarch }} @@ -44,7 +45,7 @@ jobs: deploy: needs: prep - name: Dev Container Deploy + name: Dev Deploy uses: mitlibraries/.github/.github/workflows/ecr-multi-arch-deploy-dev.yml@multi-arch-deploy secrets: inherit with: