Skip to content

Add GitHub Actions CI/CD workflows#18

Merged
rajivsinclair merged 14 commits intomainfrom
github-actions-migration
Dec 5, 2025
Merged

Add GitHub Actions CI/CD workflows#18
rajivsinclair merged 14 commits intomainfrom
github-actions-migration

Conversation

@rajivsinclair
Copy link
Copy Markdown
Contributor

@rajivsinclair rajivsinclair commented Dec 5, 2025

Summary

  • Migrates CI/CD from CircleCI to GitHub Actions
  • Adds test.yml workflow for running tests and linting on feature branches and PRs
  • Adds deploy.yml workflow for building, pushing Docker images, running migrations, and deploying to GKE on main/staging branches

Environment Variables

All required secrets have been configured in the repository settings:

  • GCLOUD_SERVICE_KEY_BASE64
  • DJANGO_SECRET_KEY
  • IPNO_API_KEY
  • CLOUD_SQL_STAGING
  • CLOUD_SQL_PRODUCTION
  • STAGING_DAILY_TIME
  • PROD_DAILY_TIME

Test plan

  • Merge to staging branch and verify deploy workflow runs successfully
  • Check that Docker image is built and pushed to GCR
  • Verify migrations run
  • Verify deployment to GKE completes
  • Test production deployment after staging validation

🤖 Generated with Claude Code


Missive conversation: https://mail.missiveapp.com/#inbox/conversations/9a4b95f6-2b94-4a35-a249-d17dc7923f87


Important

Migrates CI/CD from CircleCI to GitHub Actions, adds workflows for testing and deployment, updates Docker configurations, and handles officer timeline associations in code.

  • CI/CD Migration:
    • Migrates from CircleCI to GitHub Actions.
    • Adds test.yml for tests and linting on feature branches and PRs.
    • Adds deploy.yml for building, pushing Docker images, running migrations, and deploying to GKE on main/staging branches.
  • Environment Variables:
    • Configures secrets in repository settings: GCLOUD_SERVICE_KEY_BASE64, DJANGO_SECRET_KEY, IPNO_API_KEY, CLOUD_SQL_STAGING, CLOUD_SQL_PRODUCTION, STAGING_DAILY_TIME, PROD_DAILY_TIME.
  • Docker and Dependencies:
    • Updates Dockerfile to use Debian archive for Buster and installs specific packages.
    • Limits pip version to <24.1 in Dockerfile and workflows.
  • Scripts:
    • Adds deploy_staging.sh for manual staging deployment.
    • Adds staging_helper.sh for common staging operations.
  • Code Changes:
    • Handles officers without person association in OfficerTimelineQuery in officer_timeline_query.py.
    • Updates OfficerTimelineSerializer in officer_timeline_serializers.py to handle missing person associations.

This description was created by Ellipsis for b3531c1. You can customize this summary. It will automatically update as commits are pushed.


Summary by CodeRabbit

  • Chores
    • Added a dedicated CI workflow for testing in a multi-service environment (Postgres, Elasticsearch, Redis), including test artifact and JUnit report uploads.
    • Added a deploy workflow to build/push container images and perform staged Kubernetes deployments with migration and static-asset steps.
    • Integrated coverage reporting and CI test reporting.
    • Upgraded CI runner images for improved stability.
    • Disabled interactive Cloud SDK prompts in CI.

✏️ Tip: You can customize this high-level summary in your review settings.

esmel200 and others added 7 commits December 4, 2025 16:16
Add default empty string for IPNO_API_KEY to allow tests to run in CI
without requiring the environment variable to be set.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- test.yml: Run tests, lint on feature branches and PRs
- deploy.yml: Build, push, migrate, and deploy on main/staging

Migrating from CircleCI to GitHub Actions for CI/CD pipeline.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
The ubuntu-2004:202010-01 image is deprecated and no longer available.
Copilot AI review requested due to automatic review settings December 5, 2025 17:56
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @rajivsinclair, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request, titled "Add GitHub Actions CI/CD workflows," aims to transition the project's continuous integration and deployment processes from CircleCI to GitHub Actions. The description outlines the introduction of test.yml for testing and linting, and deploy.yml for building Docker images, running migrations, and deploying to GKE. However, the actual changes in the provided patch exclusively modify the existing .circleci/config.yml file, specifically updating the base Ubuntu image for the django_migrate, django_collect_static, and deploy jobs from ubuntu-2004 to ubuntu-2204. This suggests that the GitHub Actions migration described in the PR body is not yet reflected in the current patch.

Highlights

  • CircleCI Image Update: The base Ubuntu image used for the django_migrate, django_collect_static, and deploy jobs within the existing CircleCI configuration has been updated from ubuntu-2004:202010-01 to ubuntu-2204:current.
  • Discrepancy with PR Description: The pull request title and description indicate a migration of CI/CD from CircleCI to GitHub Actions and the addition of new GitHub Actions workflows (test.yml, deploy.yml). However, the provided patch only contains modifications to the existing .circleci/config.yml file, specifically updating the Ubuntu image version, and does not include any GitHub Actions workflow files.
Ignored Files
  • Ignored by pattern: .github/workflows/** (2)
    • .github/workflows/deploy.yml
    • .github/workflows/test.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 5, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Upgraded CircleCI job images to Ubuntu 22.04 and added two GitHub Actions workflows: a test workflow (PostgreSQL, Elasticsearch, Redis, lint, pytest, coverage) and a deploy workflow that builds/pushes Docker images, runs migrations, collects static, and deploys to GKE with environment-aware behavior.

Changes

Cohort / File(s) Summary
CircleCI configuration
.circleci/config.yml
Upgraded machine image from ubuntu-2004:202010-01 to ubuntu-2204:current for jobs django_migrate, django_collect_static, and deploy. No step or logic changes.
GitHub Actions — Test workflow
.github/workflows/test.yml
Added a CI workflow to run on pushes (excluding main/staging/develop) and PRs to main/staging/develop. Starts PostgreSQL, Elasticsearch, and Redis services; installs system and Python deps; runs lint and pytest with coverage; creates test-results/junit.xml, uploads artifacts, and posts coverage to Coveralls.
GitHub Actions — Deploy workflow
.github/workflows/deploy.yml
Added a multi-stage deploy pipeline triggered on pushes to main and staging. Jobs: test (services), build-and-push (gcloud auth, Docker build, push to GCR with branch/latest/observability tags), migrate, collect-static, and deploy (kubectl apply, cronjobs, rollout checks). Passes outputs (image-tag, namespace, deploy-env, etc.) between jobs and adapts behavior for production vs staging.

Sequence Diagram(s)

sequenceDiagram
    participant Dev as Developer (git push)
    participant GH as GitHub Actions
    participant GCloud as Google Cloud (gcloud)
    participant GCR as GCR (Container Registry)
    participant Kube as GKE / Kubernetes
    participant DB as Cloud SQL / Postgres

    Dev->>GH: push to main or staging
    GH->>GH: run test job (Postgres, ES, Redis, pytest)
    alt tests pass
        GH->>GCloud: authenticate & configure gcloud/docker
        GH->>GCR: build Docker image and push (branch/latest/obs tags)
        GCR-->>GH: return image-tag
        GH->>GH: start migrate job using image-tag & deploy-env
        GH->>DB: run migrations (containerized task against Cloud SQL)
        GH->>GH: run collect-static job using image-tag
        GH->>Kube: render manifests (envsubst) and kubectl apply to namespace
        Kube->>Kube: rollout deployments, apply cronjobs
        Kube-->>GH: report rollout status / verification
    else tests fail
        GH-->>Dev: report failed tests
    end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Inspect deploy workflow: secrets usage, gcloud auth, Docker build/push tags, outputs propagation.
  • Verify kubectl manifest rendering (envsubst), namespace selection, rollout/cronjob application.
  • Check test workflow service health checks, spaCy model download, artifact and coverage reporting.

Poem

🐰
I hopped through YAML, nibbling each line,
Upgraded the base, then stitched a new pipeline,
Images stamped, migrations set to run,
Static gathered, deployments spun,
A carrot for CI — the job's all done! 🥕

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Add GitHub Actions CI/CD workflows' directly and accurately summarizes the main change: adding new GitHub Actions workflows for CI/CD.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch github-actions-migration

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 98a57ae and b3531c1.

📒 Files selected for processing (1)
  • .github/workflows/deploy.yml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/deploy.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: test
  • GitHub Check: test
  • GitHub Check: test

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the CircleCI configuration to use a newer Ubuntu image as part of a larger migration to GitHub Actions. My review of the provided changes focuses on the CircleCI configuration. I've recommended pinning the machine image to a specific version to improve the stability and reproducibility of your builds.

Comment thread .circleci/config.yml
description: Migrate database
machine:
image: ubuntu-2004:202010-01
image: ubuntu-2204:current
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For improved build stability and reproducibility, it's best to pin the machine image to a specific version instead of using the current tag. The current tag is a moving target and can introduce unexpected breaking changes into your CI pipeline. Please use a specific version tag, for example ubuntu-2204:2024.01.1 (you may want to check for the latest available tag).

      image: ubuntu-2204:2024.01.1

Comment thread .circleci/config.yml
description: Collect static
machine:
image: ubuntu-2004:202010-01
image: ubuntu-2204:current
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For improved build stability and reproducibility, it's best to pin the machine image to a specific version instead of using the current tag. The current tag is a moving target and can introduce unexpected breaking changes into your CI pipeline. Please use a specific version tag, for example ubuntu-2204:2024.01.1 (you may want to check for the latest available tag).

      image: ubuntu-2204:2024.01.1

Comment thread .circleci/config.yml
description: Deploy application to Google Kubernetes Engine
machine:
image: ubuntu-2004:202010-01
image: ubuntu-2204:current
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For improved build stability and reproducibility, it's best to pin the machine image to a specific version instead of using the current tag. The current tag is a moving target and can introduce unexpected breaking changes into your CI pipeline. Please use a specific version tag, for example ubuntu-2204:2024.01.1 (you may want to check for the latest available tag).

      image: ubuntu-2204:2024.01.1

Use Python 3.8 instead of 3.8.5 as the specific patch version
is not available on ubuntu-latest (Ubuntu 24.04).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +117 to +120
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCLOUD_SERVICE_KEY_BASE64 }}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Decode service key before google-github-actions/auth

The deploy workflow feeds GCLOUD_SERVICE_KEY_BASE64 directly into google-github-actions/auth (credentials_json: ${{ secrets.GCLOUD_SERVICE_KEY_BASE64 }} at build step). The auth action expects the raw service-account JSON, not a base64 blob; the repository docs still instruct storing this secret base64‑encoded (docs/circleci.md, “cat <gcloud-credentials.json> | base64”). With the secret in that documented format, the action will fail to parse the credentials and every step that needs GCP (image push, migrations, deploy) will error out before running.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed everything up to 4e7ee48 in 2 minutes and 37 seconds. Click for details.
  • Reviewed 402 lines of code in 3 files
  • Skipped 0 files when reviewing.
  • Skipped posting 4 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .circleci/config.yml:148
  • Draft comment:
    Updated Ubuntu image to 22.04. Ensure that all system dependencies and gcloud CLI commands remain compatible with the new image.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
2. .github/workflows/deploy.yml:96
  • Draft comment:
    For the branch check, ensure the variable is properly quoted and consider using '=' for better POSIX compatibility.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 10% vs. threshold = 50% This is a very minor style suggestion about POSIX compatibility. GitHub Actions uses bash by default on ubuntu-latest runners, where both == and = work identically for string comparison. The code will function correctly as written. The comment doesn't identify a bug or functional issue - it's purely a style preference. According to the rules, I should not keep comments that are "obvious or unimportant" or that don't clearly require a code change. This falls into that category - it's a pedantic suggestion that doesn't fix any actual problem. The workflow will work fine with ==. While = is technically more portable, GitHub Actions explicitly uses bash, not POSIX sh, so this portability concern is theoretical rather than practical. The comment could be seen as improving code quality through better practices, even if not strictly necessary. Even if this is technically a "better practice," it doesn't meet the threshold of being clearly necessary. The rules explicitly state not to make comments that are "obvious or unimportant." A style preference about == vs = in bash when both work identically is unimportant and doesn't warrant a code change request. This comment should be deleted. It's a minor style suggestion that doesn't address any functional issue or bug. The code works correctly as written, and the suggested change provides no meaningful benefit in the GitHub Actions context.
3. .github/workflows/deploy.yml:232
  • Draft comment:
    Verify that envsubst substitutes all required variables correctly in the Kubernetes manifest for the celery deployment.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
4. .github/workflows/test.yml:4
  • Draft comment:
    Confirm that skipping tests on pushes to main, staging, and develop is intentional.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None

Workflow ID: wflow_ho9S1w7YO5pHS8nN

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed c09d619 in 37 seconds. Click for details.
  • Reviewed 26 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:51
  • Draft comment:
    Changed Python version from '3.8.5' to '3.8'. If this is intentional to pick up the latest patch releases, please verify compatibility. Otherwise, consider pinning to a specific patch for reproducibility.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50% None
2. .github/workflows/test.yml:69
  • Draft comment:
    Changed Python version from '3.8.5' to '3.8'. Ensure that this broader version spec aligns with your testing requirements, as it may pull in different patch updates.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50% None

Workflow ID: wflow_QTgmdc7wZXjkcuYs

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the CI/CD pipeline from CircleCI to GitHub Actions, introducing two new workflow files for automated testing and deployment to Google Kubernetes Engine (GKE).

Key Changes:

  • Adds test.yml workflow that runs tests, linting, and coverage reporting on feature branches and pull requests
  • Adds deploy.yml workflow that handles the complete deployment pipeline including testing, Docker image building, database migrations, static file collection, and GKE deployment for main/staging branches
  • Updates CircleCI configuration with newer Ubuntu images

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 8 comments.

File Description
.github/workflows/test.yml Implements test workflow with PostgreSQL, Elasticsearch, and Redis services for running automated tests and linting on feature branches
.github/workflows/deploy.yml Implements comprehensive deployment workflow with multiple jobs for testing, building Docker images, running migrations, and deploying to GKE on main/staging branches
.circleci/config.yml Updates machine images from Ubuntu 20.04 to Ubuntu 22.04 for CircleCI jobs

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +10 to +12
GOOGLE_PROJECT_ID: excellent-zoo-300106
GOOGLE_COMPUTE_ZONE: us-central1-a
GOOGLE_CLUSTER_NAME: ipno
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sensitive information like Google Project ID is hardcoded in the workflow file. While this may not be highly sensitive, it's a best practice to store such configuration in GitHub secrets or variables to make it easier to change without modifying the workflow file. Consider using:

GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }}

or using GitHub environments for different deployment targets.

Suggested change
GOOGLE_PROJECT_ID: excellent-zoo-300106
GOOGLE_COMPUTE_ZONE: us-central1-a
GOOGLE_CLUSTER_NAME: ipno
GOOGLE_PROJECT_ID: ${{ secrets.GOOGLE_PROJECT_ID }}
GOOGLE_COMPUTE_ZONE: ${{ secrets.GOOGLE_COMPUTE_ZONE }}
GOOGLE_CLUSTER_NAME: ${{ secrets.GOOGLE_CLUSTER_NAME }}

Copilot uses AI. Check for mistakes.
--health-retries 5

steps:
- name: Checkout
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The checkout step could benefit from having a name for better readability and consistency with other steps in the workflow:

- name: Checkout code
  uses: actions/checkout@v4
Suggested change
- name: Checkout
- name: Checkout code

Copilot uses AI. Check for mistakes.
env:
discovery.type: single-node
ports:
- 9200:9200
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The elasticsearch service in the deploy workflow is missing health check configuration, while the test.yml workflow includes it. This could cause the tests to fail intermittently if they run before Elasticsearch is fully ready.

Add the health check options:

options: >-
  --health-cmd "curl -f http://localhost:9200/_cluster/health"
  --health-interval 10s
  --health-timeout 5s
  --health-retries 10
Suggested change
- 9200:9200
- 9200:9200
options: >-
--health-cmd "curl -f http://localhost:9200/_cluster/health"
--health-interval 10s
--health-timeout 5s
--health-retries 10

Copilot uses AI. Check for mistakes.
Comment on lines +15 to +19
env:
POSTGRES_USER: ipno
POSTGRES_DB: ipno
POSTGRES_PASSWORD: password
POSTGRES_HOST: localhost
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The environment variables for PostgreSQL connection are defined at the workflow level but not used in the test step. The test step should reference these environment variables rather than having them potentially defined elsewhere or relying on defaults. Consider adding these to the "Run tests" step's env block:

env:
  IPNO_API_KEY: ${{ secrets.IPNO_API_KEY }}
  DJANGO_SECRET_KEY: ${{ secrets.DJANGO_SECRET_KEY }}
  POSTGRES_HOST: ${{ env.POSTGRES_HOST }}
  POSTGRES_USER: ${{ env.POSTGRES_USER }}
  POSTGRES_DB: ${{ env.POSTGRES_DB }}
  POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }}

Copilot uses AI. Check for mistakes.
redis:
image: redis:7.0.5
ports:
- 6379:6379
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The redis service in the deploy workflow is missing health check configuration, while the test.yml workflow includes it. This could cause the tests to fail intermittently if they run before Redis is fully ready.

Add the health check options:

options: >-
  --health-cmd "redis-cli ping"
  --health-interval 10s
  --health-timeout 5s
  --health-retries 5
Suggested change
- 6379:6379
- 6379:6379
options: >-
--health-cmd "redis-cli ping"
--health-interval 10s
--health-timeout 5s
--health-retries 5

Copilot uses AI. Check for mistakes.
Comment on lines +117 to +120
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCLOUD_SERVICE_KEY_BASE64 }}
Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The credentials_json parameter expects raw JSON content, but based on the CircleCI configuration and documentation (see docs/circleci.md and .circleci/config.yml lines 19, 122), GCLOUD_SERVICE_KEY_BASE64 contains base64-encoded credentials that need to be decoded first.

The Google GitHub Actions auth action cannot directly use base64-encoded credentials. You have two options:

  1. Recommended: Create a new secret GCLOUD_SERVICE_KEY with the decoded JSON content and use it:
credentials_json: ${{ secrets.GCLOUD_SERVICE_KEY }}
  1. Alternative: If you must keep the base64-encoded secret, decode it inline (though this is less clean):
- name: Decode GCloud credentials
  run: echo "${{ secrets.GCLOUD_SERVICE_KEY_BASE64 }}" | base64 -d > /tmp/gcloud-key.json
- name: Authenticate to Google Cloud
  uses: google-github-actions/auth@v2
  with:
    credentials_json: ${{ steps.decode.outputs.key }}

This issue affects all four auth steps in this workflow (lines 118, 152, 181, 210).

Suggested change
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ secrets.GCLOUD_SERVICE_KEY_BASE64 }}
- name: Decode GCloud credentials
run: echo "${{ secrets.GCLOUD_SERVICE_KEY_BASE64 }}" | base64 -d > /tmp/gcloud-key.json
- name: Authenticate to Google Cloud
uses: google-github-actions/auth@v2
with:
credentials_json: ${{ readFile('/tmp/gcloud-key.json') }}

Copilot uses AI. Check for mistakes.
Comment on lines +16 to +78
runs-on: ubuntu-latest

services:
postgres:
image: postgres:13.7
env:
POSTGRES_USER: ipno
POSTGRES_DB: ipno
POSTGRES_PASSWORD: password
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5

elasticsearch:
image: elasticsearch:7.10.1
env:
discovery.type: single-node
ports:
- 9200:9200

redis:
image: redis:7.0.5
ports:
- 6379:6379

steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
cache: 'pip'

- name: Install native packages
run: |
sudo apt-get update
sudo apt-get -y install ghostscript python3-wand

- name: Install dependencies
run: pip install -r requirements/dev.txt

- name: Install spacy model
run: python -m spacy download en_core_web_sm

- name: Lint
run: bin/lint.sh

- name: Run tests
env:
IPNO_API_KEY: ${{ secrets.IPNO_API_KEY }}
DJANGO_SECRET_KEY: ${{ secrets.DJANGO_SECRET_KEY }}
POSTGRES_HOST: localhost
POSTGRES_USER: ipno
POSTGRES_DB: ipno
POSTGRES_PASSWORD: password
run: |
python -m pytest --cov-report term --cov=ipno ipno

Copy link

Copilot AI Dec 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The test job in the deploy workflow duplicates the entire test configuration from test.yml. This creates maintenance overhead as changes to test configuration need to be made in two places. Consider using a reusable workflow or calling the test workflow from the deploy workflow using workflow_call trigger.

Suggested change
runs-on: ubuntu-latest
services:
postgres:
image: postgres:13.7
env:
POSTGRES_USER: ipno
POSTGRES_DB: ipno
POSTGRES_PASSWORD: password
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
elasticsearch:
image: elasticsearch:7.10.1
env:
discovery.type: single-node
ports:
- 9200:9200
redis:
image: redis:7.0.5
ports:
- 6379:6379
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.8'
cache: 'pip'
- name: Install native packages
run: |
sudo apt-get update
sudo apt-get -y install ghostscript python3-wand
- name: Install dependencies
run: pip install -r requirements/dev.txt
- name: Install spacy model
run: python -m spacy download en_core_web_sm
- name: Lint
run: bin/lint.sh
- name: Run tests
env:
IPNO_API_KEY: ${{ secrets.IPNO_API_KEY }}
DJANGO_SECRET_KEY: ${{ secrets.DJANGO_SECRET_KEY }}
POSTGRES_HOST: localhost
POSTGRES_USER: ipno
POSTGRES_DB: ipno
POSTGRES_PASSWORD: password
run: |
python -m pytest --cov-report term --cov=ipno ipno
uses: ./.github/workflows/test.yml
secrets:
IPNO_API_KEY: ${{ secrets.IPNO_API_KEY }}
DJANGO_SECRET_KEY: ${{ secrets.DJANGO_SECRET_KEY }}

Copilot uses AI. Check for mistakes.
django-elasticsearch-dsl==7.1.4 has invalid metadata that is rejected
by pip>=24.1. Downgrade pip to work around this issue.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed d62258f in 1 minute and 48 seconds. Click for details.
  • Reviewed 27 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:61
  • Draft comment:
    Why force pip to a version below 24.1? Please add a comment explaining this workaround and consider using 'python -m pip' for consistency.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 15% vs. threshold = 50% This comment has two parts. The first part asks "Why force pip to a version below 24.1? Please add a comment explaining this workaround" - this is asking the author to explain their intention and add documentation. This violates the rule "Do NOT ask the PR author to confirm their intention, to explain, to double-check things". The second part "consider using 'python -m pip' for consistency" is a suggestion but it's not clear if there's actually an inconsistency issue here or if this is just a stylistic preference. Looking at line 65, I see python -m spacy download is used, but that's a different tool. The comment seems to be asking for explanation rather than pointing out a clear bug or issue. Maybe there's a legitimate technical reason why using 'python -m pip' is better than just 'pip' in GitHub Actions workflows, such as ensuring the right Python environment is used. The pip version constraint might also indicate a real compatibility issue that should be documented for future maintainers. While documentation could be helpful, the rules explicitly state not to ask the PR author to explain or add comments. The 'python -m pip' suggestion is not clearly actionable - there's no strong evidence that using 'pip' directly is wrong here. If there were a clear bug or compatibility issue, that would be different, but this reads more as a request for explanation and a stylistic suggestion. This comment should be deleted because it primarily asks the author to explain their change and add documentation, which violates the rule against asking authors to confirm intentions or explain. The suggestion about 'python -m pip' is not backed by strong evidence of an actual issue.
2. .github/workflows/test.yml:79
  • Draft comment:
    Consider documenting why 'pip install "pip<24.1"' is needed and using 'python -m pip' for clarity.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% This comment has two parts. First, it suggests documenting why the version constraint is needed - this is asking the author to explain/document something, which violates the rule about not asking authors to confirm intentions or explain things. Second, it suggests using python -m pip instead of pip - this is a style suggestion that's not clearly wrong. The existing code on line 80 uses pip install without python -m, and line 84 uses python -m spacy, so there's inconsistency but no clear standard. The comment doesn't identify a definite bug or issue, just suggests improvements that are subjective. According to the rules, I should not keep comments that ask for explanations or are purely stylistic without strong evidence of incorrectness. The suggestion to use python -m pip could be considered a legitimate best practice in some contexts (ensures you're using the right pip for the Python version), and the version pinning without explanation could cause confusion for future maintainers. Maybe this is actionable enough to keep? While python -m pip might be a best practice, the existing code already uses pip directly (line 80), so this would be inconsistent with the current style. The request to document "why" is explicitly asking the author to explain their reasoning, which violates the rules. The comment doesn't identify a clear bug or required change, just suggestions for improvement that are subjective. This comment should be deleted. It asks the author to document/explain their reasoning (violates the rule against asking for explanations) and makes a stylistic suggestion about using python -m pip that isn't clearly necessary or consistent with the existing code style.

Workflow ID: wflow_M57loEvQvloqGrwt

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Service containers in GitHub Actions are accessible via localhost,
not their service name. Add the ELASTICSEARCH_HOST environment
variable to point tests to localhost:9200.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 41fd1bc in 43 seconds. Click for details.
  • Reviewed 24 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:78
  • Draft comment:
    Added ELASTICSEARCH_HOST env variable. Consider adding health check options for the Elasticsearch service (as in test.yml) to ensure it's ready before tests run.
  • Reason this comment was not posted:
    Confidence changes required: 50% <= threshold 50% None
2. .github/workflows/test.yml:93
  • Draft comment:
    ELASTICSEARCH_HOST is set to 'localhost:9200'. Confirm that this correctly targets the Elasticsearch container as per the service configuration.
  • Reason this comment was not posted:
    Confidence changes required: 30% <= threshold 50% None

Workflow ID: wflow_uak5tJR8z98HD6B0

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

The tests were failing because Celery defaults to redis://redis:6379 but
in GitHub Actions the Redis service is available at localhost:6379.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed ab54fb5 in 54 seconds. Click for details.
  • Reviewed 24 lines of code in 2 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:79
  • Draft comment:
    Added CELERY_BROKER_URL for Celery integration. Confirm that the hardcoded value matches your Redis service configuration.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None
2. .github/workflows/test.yml:94
  • Draft comment:
    Added CELERY_BROKER_URL for consistency with deploy.yml. Verify that this value aligns with the defined Redis service.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None

Workflow ID: wflow_DyfxJwzEe2PzTlFl

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

rajivsinclair and others added 2 commits December 5, 2025 10:17
Add CLOUDSDK_CORE_DISABLE_PROMPTS=1 to disable interactive prompts
during gcloud components installation.
The DAILY_TIME secret was being passed via job outputs which GitHub Actions
masks. Instead, access the secret directly in the deploy job using env vars.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 98a57ae in 1 minute and 20 seconds. Click for details.
  • Reviewed 38 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:87
  • Draft comment:
    Removed the 'daily-time' output from build-and-push outputs. Ensure no other steps depend on it.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
2. .github/workflows/deploy.yml:101
  • Draft comment:
    Removed DAILY_TIME assignment in the set-env step for both production and staging. Confirm that this value is now exclusively provided via the inline conditional in the cronjob step.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
3. .github/workflows/deploy.yml:248
  • Draft comment:
    The new inline conditional for DAILY_TIME is concise, but consider using a ternary operator for clarity (e.g. ${{ github.ref_name == 'main' ? secrets.PROD_DAILY_TIME : secrets.STAGING_DAILY_TIME }}).
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None

Workflow ID: wflow_644TGxCDdxPyZ28D

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed 98a57ae in 2 minutes and 22 seconds. Click for details.
  • Reviewed 38 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:87
  • Draft comment:
    Removed 'daily-time' output from job outputs. Confirm this change is intentional and that no other job depends on the output.
  • Reason this comment was not posted:
    Confidence changes required: 33% <= threshold 50% None
2. .github/workflows/deploy.yml:248
  • Draft comment:
    Consider using the ternary operator for clarity, e.g. ${{ github.ref_name == 'main' ? secrets.PROD_DAILY_TIME : secrets.STAGING_DAILY_TIME }} instead of '&&'/'||'.
  • Reason this comment was not posted:
    Decided after close inspection that this draft comment was likely wrong and/or not actionable: usefulness confidence = 20% vs. threshold = 50% The comment is about a changed line (line 248), so it passes the "is about changes" test. However, I need to consider whether this is a useful comment. The &&/|| pattern is a valid GitHub Actions syntax that works correctly for boolean conditionals. The ? : ternary operator is also valid. This is essentially a style preference comment. The rules state that code quality refactors are good if they are actionable and clear, but this is more of a stylistic preference rather than a clear improvement. Both syntaxes work correctly in GitHub Actions. The comment doesn't point out a bug or a clear problem - it's just suggesting an alternative syntax that the commenter finds clearer. This seems like a minor style preference that doesn't add significant value. The ternary operator might indeed be more familiar to developers coming from traditional programming languages, and could be considered more readable. The comment is actionable and provides a clear suggestion with a code block. This could be seen as a valid code quality improvement. While the ternary operator might be more familiar, the &&/|| pattern is commonly used in GitHub Actions and shell scripting contexts. This is a very minor stylistic preference that doesn't fix a bug or significantly improve code quality. The existing code is clear enough and works correctly. According to the rules, I should not keep comments that are obvious or unimportant, and this falls into that category. This is a minor style preference comment that doesn't point out a bug or significant code quality issue. Both syntaxes are valid and clear in the GitHub Actions context. The comment should be deleted as it's not important enough to warrant a change.

Workflow ID: wflow_LYVvSqP9udULELS3

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

The Cloud SQL Proxy sidecar was crashing because the connection string
was missing the database instance name. The CLOUD_SQL_DATABASE env var
is required by envsubst when processing ipno.yml and celery.yml templates.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed b3531c1 in 45 seconds. Click for details.
  • Reviewed 19 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 2 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:233
  • Draft comment:
    Ensure that the new CLOUD_SQL_DATABASE env variable is correctly referenced in the celery manifest (kubernetes/celery.yml).
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% This comment is asking the author to ensure that a new environment variable is correctly referenced in a specific file. It is not making a specific suggestion or pointing out a specific issue, but rather asking for a confirmation or double-check, which violates the rules.
2. .github/workflows/deploy.yml:241
  • Draft comment:
    Verify that the ipno manifest (kubernetes/ipno.yml) properly utilizes the new CLOUD_SQL_DATABASE variable.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% The comment is asking the PR author to verify something, which is against the rules. It does not provide a specific suggestion or ask for a specific test to be written. Therefore, it should be removed.

Workflow ID: wflow_dow1LgiMhwjsc7hs

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

Copy link
Copy Markdown

@ellipsis-dev ellipsis-dev Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

Looks good to me! 👍

Reviewed b3531c1 in 1 minute and 7 seconds. Click for details.
  • Reviewed 19 lines of code in 1 files
  • Skipped 0 files when reviewing.
  • Skipped posting 3 draft comments. View those below.
  • Modify your settings and rules to customize what types of comments Ellipsis leaves. And don't forget to react with 👍 or 👎 to teach Ellipsis.
1. .github/workflows/deploy.yml:235
  • Draft comment:
    Adding CLOUD_SQL_DATABASE here is fine—ensure your 'kubernetes/celery.yml' manifest uses this variable consistently.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None
2. .github/workflows/deploy.yml:242
  • Draft comment:
    Verify that CLOUD_SQL_DATABASE is expected by the application manifest in 'kubernetes/ipno.yml'.
  • Reason this comment was not posted:
    Confidence changes required: 0% <= threshold 50% None
3. .github/workflows/deploy.yml:244
  • Draft comment:
    I noticed 'ipno.yml' on this line. Could you double-check if this filename is correct? It seems like it might be a typographical error.
  • Reason this comment was not posted:
    Comment did not seem useful. Confidence is useful = 0% <= threshold 50% The comment is asking the author to double-check the filename, which violates the rule against asking the author to confirm their intention or to double-check things. The comment does not provide a specific suggestion or point out a clear issue, such as a missing test or a logic error. Therefore, it should be removed.

Workflow ID: wflow_eEjGvfHHskKjQbFE

You can customize Ellipsis by changing your verbosity settings, reacting with 👍 or 👎, replying to comments, or adding code review rules.

@rajivsinclair rajivsinclair merged commit 1b4dc39 into main Dec 5, 2025
9 of 10 checks passed
@rajivsinclair rajivsinclair deleted the github-actions-migration branch December 5, 2025 19:30
rajivsinclair added a commit that referenced this pull request Dec 5, 2025
* officer timeline fix for staging

* Fix IPNO_API_KEY missing in test environment

Add default empty string for IPNO_API_KEY to allow tests to run in CI
without requiring the environment variable to be set.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix trailing blank line in staging.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add missing newline at end of staging.py

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Format staging.py with black (line length fix)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add GitHub Actions workflows for CI/CD

- test.yml: Run tests, lint on feature branches and PRs
- deploy.yml: Build, push, migrate, and deploy on main/staging

Migrating from CircleCI to GitHub Actions for CI/CD pipeline.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update CircleCI machine image to ubuntu-2204:current

The ubuntu-2004:202010-01 image is deprecated and no longer available.

* Fix Python version for GitHub Actions

Use Python 3.8 instead of 3.8.5 as the specific patch version
is not available on ubuntu-latest (Ubuntu 24.04).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix pip version for django-elasticsearch-dsl compatibility

django-elasticsearch-dsl==7.1.4 has invalid metadata that is rejected
by pip>=24.1. Downgrade pip to work around this issue.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add ELASTICSEARCH_HOST env var for tests

Service containers in GitHub Actions are accessible via localhost,
not their service name. Add the ELASTICSEARCH_HOST environment
variable to point tests to localhost:9200.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Add CELERY_BROKER_URL env var for Redis connection in CI

The tests were failing because Celery defaults to redis://redis:6379 but
in GitHub Actions the Redis service is available at localhost:6379.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix gcloud CLI interactive prompt timeout

Add CLOUDSDK_CORE_DISABLE_PROMPTS=1 to disable interactive prompts
during gcloud components installation.

* Fix gcloud CLI interactive prompt timeout

The DAILY_TIME secret was being passed via job outputs which GitHub Actions
masks. Instead, access the secret directly in the deploy job using env vars.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix missing CLOUD_SQL_DATABASE env var in deploy steps

The Cloud SQL Proxy sidecar was crashing because the connection string
was missing the database instance name. The CLOUD_SQL_DATABASE env var
is required by envsubst when processing ipno.yml and celery.yml templates.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: esmel200 <esmel@ip-no.org>
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants