diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d8a5653..a810bcc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,7 +11,7 @@ env: PROJECT_ID: casecomp-495718 REGION: asia-south1 SERVICE: cardscrapebot - IMAGE: gcr.io/casecomp-495718/cardscrapebot + IMAGE: gcr.io/casecomp-495718/casecomp-api jobs: deploy: @@ -28,7 +28,11 @@ jobs: - name: Build and push run: | - BUILD_ID=$(gcloud builds submit --tag ${{ env.IMAGE }} --project ${{ env.PROJECT_ID }} --async --format='value(id)') + BUILD_ID=$(gcloud builds submit \ + --config=cloudbuild.yml \ + --project ${{ env.PROJECT_ID }} \ + --async \ + --format='value(id)' .) echo "Waiting for build $BUILD_ID..." while true; do STATUS=$(gcloud builds describe $BUILD_ID --project ${{ env.PROJECT_ID }} --format='value(status)' 2>/dev/null) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4316159..da8b344 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,7 @@ name: Tests on: + push: + branches: [main, dev] pull_request: branches: [main] diff --git a/Dockerfile b/Dockerfile index 14ae37c..2c12ade 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,11 +8,14 @@ RUN groupadd --system appuser && useradd --system --gid appuser appuser WORKDIR /app +# Layer 1: playwright system deps (rarely changes) +RUN npx playwright install --with-deps chromium + +# Layer 2: npm dependencies (changes when package.json changes) COPY package.json yarn.lock* package-lock.json* ./ RUN npm install --production --ignore-scripts -RUN npx playwright install --with-deps chromium - +# Layer 3: application code (changes every deploy) COPY . . RUN chown -R appuser:appuser /app diff --git a/cloudbuild.yaml b/cloudbuild.yaml deleted file mode 100644 index f31a67a..0000000 --- a/cloudbuild.yaml +++ /dev/null @@ -1,28 +0,0 @@ -steps: - - name: 'gcr.io/cloud-builders/docker' - args: ['build', '-t', 'gcr.io/$PROJECT_ID/casecomp-api', '.'] - - name: 'gcr.io/cloud-builders/docker' - args: ['push', 'gcr.io/$PROJECT_ID/casecomp-api'] - - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' - entrypoint: gcloud - args: - - 'run' - - 'deploy' - - 'cardscrapebot' - - '--image' - - 'gcr.io/$PROJECT_ID/casecomp-api' - - '--region' - - 'asia-south1' - - '--platform' - - 'managed' - - '--allow-unauthenticated' - - '--port' - - '3000' - - '--memory' - - '1Gi' - - '--max-instances' - - '3' - - '--min-instances' - - '0' -images: - - 'gcr.io/$PROJECT_ID/casecomp-api' diff --git a/cloudbuild.yml b/cloudbuild.yml new file mode 100644 index 0000000..d01edfe --- /dev/null +++ b/cloudbuild.yml @@ -0,0 +1,6 @@ +steps: + - name: gcr.io/kaniko-project/executor:latest + args: + - --destination=gcr.io/$PROJECT_ID/casecomp-api:latest + - --cache=true + - --cache-ttl=168h diff --git a/package.json b/package.json index ad10a75..1fd5eed 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "test:live": "API_URL=https://api.casecomp.xyz node test/api-test.js", "scan": "node scan.js", "psa": "node scripts/psa-report.js", - "deploy": "gcloud builds submit --tag gcr.io/casecomp-495718/cardscrapebot --project casecomp-495718 && gcloud run deploy cardscrapebot --image gcr.io/casecomp-495718/cardscrapebot --region asia-south1 --project casecomp-495718 --port 3000 --allow-unauthenticated", + "deploy": "gcloud builds submit --config=cloudbuild.yml --project casecomp-495718 && gcloud run deploy cardscrapebot --image gcr.io/casecomp-495718/casecomp-api --region asia-south1 --project casecomp-495718 --port 3000 --allow-unauthenticated", "playwright-install": "npx playwright install chromium" }, "dependencies": { diff --git a/terraform/variables.tf b/terraform/variables.tf index 5ada791..b1c7653 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -11,7 +11,7 @@ variable "domain" { } variable "container_image" { - default = "gcr.io/casecomp-495718/cardscrapebot" + default = "gcr.io/casecomp-495718/casecomp-api" } variable "alert_email" {