Skip to content

add ci and e2e suites#18

Merged
benny-n merged 5 commits intomainfrom
benny-n/add-ci
Feb 12, 2026
Merged

add ci and e2e suites#18
benny-n merged 5 commits intomainfrom
benny-n/add-ci

Conversation

@benny-n
Copy link
Collaborator

@benny-n benny-n commented Feb 11, 2026

Note

Medium Risk
Adds CI that can provision/destroy real cloud infrastructure and changes teardown behavior; misconfiguration or workflow logic issues could lead to leaked resources or failed cleanups.

Overview
Introduces GitHub Actions automation: a new CI workflow runs ruff formatting/linting and ty type checks, and a new E2E workflow conditionally runs reusable AWS/GCP E2E pipelines based on touched paths.

Adds reusable aws.yaml/gcp.yaml workflows that generate an e2e Pulumi project via the setup wizard in headless mode, override package deps to use the PR’s local source, apply CI-specific Pulumi config, run pulumi up, and always clean up with pulumi destroy + stack removal.

Updates the setup wizard to support --headless, --stack-name, and --skip-install, emitting stack config files without interactive prompts, and adjusts cluster teardown to pass a cloud hint so the uninstaller only injects gcloud tokens for GCP. Also adds dev tooling deps/config (ruff, ty) and minor type/format cleanups across modules.

Written by Cursor Bugbot for commit f621f25. This will update automatically on new commits. Configure here.

steps:
- uses: actions/checkout@v4

- uses: astral-sh/setup-uv@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'CI' step [Uses Step](1) uses 'astral-sh/setup-uv' with ref 'v5', not a pinned commit hash
fetch-depth: 0

- name: Configure AWS credentials (OIDC)
uses: aws-actions/configure-aws-credentials@v4

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E AWS' step [Uses Step](1) uses 'aws-actions/configure-aws-credentials' with ref 'v4', not a pinned commit hash
role-to-assume: ${{ secrets.AWS_E2E_ROLE_ARN }}
aws-region: us-east-1

- uses: astral-sh/setup-uv@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E AWS' step [Uses Step](1) uses 'astral-sh/setup-uv' with ref 'v5', not a pinned commit hash

- name: Authenticate to GCP
id: auth
uses: google-github-actions/auth@v2

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E GCP' step [Uses Step: auth](1) uses 'google-github-actions/auth' with ref 'v2', not a pinned commit hash
service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}

- name: Set up gcloud CLI
uses: google-github-actions/setup-gcloud@v2

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E GCP' step [Uses Step](1) uses 'google-github-actions/setup-gcloud' with ref 'v2', not a pinned commit hash
- name: Set up gcloud CLI
uses: google-github-actions/setup-gcloud@v2

- uses: astral-sh/setup-uv@v5

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E GCP' step [Uses Step](1) uses 'astral-sh/setup-uv' with ref 'v5', not a pinned commit hash
should_run: ${{ steps.filter.outputs.aws }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E AWS' step [Uses Step: filter](1) uses 'dorny/paths-filter' with ref 'v3', not a pinned commit hash
python-version: "3.12"

- name: Install Pulumi CLI
uses: pulumi/actions@v6

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E AWS' step [Uses Step](1) uses 'pulumi/actions' with ref 'v6', not a pinned commit hash
uses: pulumi/actions@v6

- name: Install kubectl
uses: azure/setup-kubectl@v4

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E AWS' step [Uses Step](1) uses 'azure/setup-kubectl' with ref 'v4', not a pinned commit hash
should_run: ${{ steps.filter.outputs.gcp }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E GCP' step [Uses Step: filter](1) uses 'dorny/paths-filter' with ref 'v3', not a pinned commit hash
python-version: "3.12"

- name: Install Pulumi CLI
uses: pulumi/actions@v6

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E GCP' step [Uses Step](1) uses 'pulumi/actions' with ref 'v6', not a pinned commit hash
uses: pulumi/actions@v6

- name: Install kubectl
uses: azure/setup-kubectl@v4

Check warning

Code scanning / CodeQL

Unpinned tag for a non-immutable Action in workflow

Unpinned 3rd party Action 'E2E GCP' step [Uses Step](1) uses 'azure/setup-kubectl' with ref 'v4', not a pinned commit hash
@benny-n benny-n force-pushed the benny-n/add-ci branch 2 times, most recently from cc2cc49 to 2ca1dff Compare February 11, 2026 11:22
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

fi
if [ "${{ needs.aws.result }}" = "cancelled" ] || [ "${{ needs.gcp.result }}" = "cancelled" ]; then
echo "E2E cancelled"
exit 1
Copy link

Choose a reason for hiding this comment

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

Result job ignores changes job failures

Medium Severity

result only fails on needs.aws.result and needs.gcp.result, but never checks needs.changes.result. If changes fails, both cloud jobs are skipped and result still prints OK, so .github/workflows/e2e.yaml can report a successful E2E run after an internal workflow failure.

Additional Locations (1)

Fix in Cursor Fix in Web

- 'config/base.py'
- 'config/__init__.py'
- 'setup/wizard.py'
- 'setup/gcp_wizard.py'
Copy link

Choose a reason for hiding this comment

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

E2E path filter misses dependency changes

Medium Severity

The dorny/paths-filter rules in .github/workflows/e2e.yaml exclude root build files like pyproject.toml. Changes to dependencies or packaging can break both cloud deployments, but aws/gcp jobs stay skipped because only selected source paths are watched.

Fix in Cursor Fix in Web

@benny-n benny-n merged commit 79509e3 into main Feb 12, 2026
13 of 15 checks passed
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.

1 participant