Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ concurrency:
env:
ORG_NAME: ${{ github.repository_owner }}
REPO_NAME: ${{ github.event.repository.name }}
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}

jobs:
# ==========================================================================
Expand Down Expand Up @@ -345,3 +347,47 @@ jobs:
else
echo "ℹ️ No documentation changes"
fi

# ==========================================================================
# Docker: Build and Push
# ==========================================================================
docker:
name: Docker Release
needs: [nodejs, python]
runs-on: ubuntu-latest
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Docker job skipped when only one language stack present

The new docker job has needs: [nodejs, python] without an if condition to handle skipped dependencies. The nodejs and python jobs have conditional execution based on detected file types. If a repo is Node.js-only (no pyproject.toml), the python job will be skipped, and GitHub Actions will automatically skip the docker job since one of its dependencies was skipped. This means Docker images will never be built for single-stack repositories.

Fix in Cursor Fix in Web

steps:
- uses: actions/checkout@v4

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
tags: |
type=ref,event=branch
type=semver,pattern={{version}}
type=raw,value=latest,enable={{github.ref == 'refs/heads/main'}}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Docker metadata tag uses invalid template syntax

The enable={{github.ref == 'refs/heads/main'}} syntax in the docker/metadata-action tags configuration is invalid. The {{...}} syntax is for metadata-action's template variables (like {{version}}, {{is_default_branch}}), not GitHub Actions context expressions. The metadata-action template engine cannot resolve github.ref as it's not a recognized template variable. This should use either enable={{is_default_branch}} or enable=${{ github.ref == 'refs/heads/main' }}. The latest tag won't be applied correctly on main branch pushes.

Fix in Cursor Fix in Web


- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
123 changes: 115 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,24 +1,116 @@
name: CI (Python)
name: CI

on:
push:
branches: [main, master]
pull_request:
workflow_dispatch:

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

env:
FORCE_COLOR: "1"
PIP_DISABLE_PIP_VERSION_CHECK: "1"
PIP_NO_PYTHON_VERSION_WARNING: "1"

permissions:
contents: read
pull-requests: write
id-token: write

jobs:
# ==========================================================================
# Node.js / TypeScript
# ==========================================================================
lint:
name: Lint & Type Check
name: Lint (Node)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
Comment thread
cursor[bot] marked this conversation as resolved.
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- run: pnpm install --no-frozen-lockfile
- run: pnpm lint
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Format checking removed from CI workflow

The old CI workflow ran pnpm run check which executes biome check . - a command that performs both linting AND format checking. The new workflow runs pnpm lint which only executes biome lint . for linting alone. This removes the format checking gate from CI, allowing improperly formatted code to be merged. The lint job should run pnpm check instead of pnpm lint to maintain the previous behavior.

Fix in Cursor Fix in Web


typecheck:
name: Typecheck (Node)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- run: pnpm install --no-frozen-lockfile
- run: pnpm typecheck

build:
name: Build (Node)
needs: [lint, typecheck]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- run: pnpm install --no-frozen-lockfile
- run: pnpm build
- name: Verify builds
run: |
ERROR=0
for pkg in packages/*/; do
if [ -d "$pkg/dist" ]; then
echo "✅ $pkg built successfully"
else
echo "❌ $pkg has no dist"
ERROR=1
fi
done
exit $ERROR
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: |
packages/*/dist
dist
retention-days: 1

test:
name: Test (Node)
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- run: pnpm install --no-frozen-lockfile
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts
- name: Run tests with coverage
run: pnpm test:coverage
- name: Upload coverage to Coveralls
uses: coverallsapp/github-action@v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
file: coverage/lcov.info

# ==========================================================================
# Python
# ==========================================================================
lint-python:
name: Lint (Python)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -35,10 +127,10 @@ jobs:
uv sync --all-extras
uv run mypy .

test:
test-python:
name: Test (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
needs: lint
needs: lint-python
strategy:
matrix:
python-version: ["3.11", "3.12", "3.13"]
Expand All @@ -53,15 +145,18 @@ jobs:
run: uv sync --all-extras
- name: Run tests
run: uv run pytest --cov --cov-report=xml
- name: Upload coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}

# ==========================================================================
# Release
# ==========================================================================
release:
name: Release
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
needs: test
needs: [test, test-python]
runs-on: ubuntu-latest
permissions:
contents: write
Expand All @@ -71,6 +166,18 @@ jobs:
with:
fetch-depth: 0
token: ${{ secrets.CI_GITHUB_TOKEN }}
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'pnpm'
- run: pnpm install
- name: Release (Node)
env:
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release

- uses: astral-sh/setup-uv@v5
- name: Python Semantic Release
env:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docs-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6

- name: Detect Project Type
id: detect
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/ecosystem-agents.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
repo: ${{ steps.select.outputs.repo }}
prompt: ${{ steps.select.outputs.prompt }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Select Agent
id: select
Expand Down Expand Up @@ -169,7 +169,7 @@ jobs:
if: needs.dispatch.outputs.agent != 'triage' && needs.dispatch.outputs.agent != 'assessment'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.CI_GITHUB_TOKEN }}
Expand Down Expand Up @@ -209,7 +209,7 @@ jobs:
if: needs.dispatch.outputs.agent == 'triage'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Triage Issues and PRs
env:
Expand Down Expand Up @@ -279,7 +279,7 @@ jobs:
if: needs.dispatch.outputs.agent == 'assessment'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ecosystem-assessment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ jobs:
branch: ${{ steps.branch.outputs.name }}
improvements: ${{ steps.parse.outputs.matrix }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.CI_GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ecosystem-connector.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ jobs:
if: github.event_name == 'pull_request' && !github.event.pull_request.draft
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- uses: actions/setup-python@v5
with:
python-version: "3.12"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ecosystem-control.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ jobs:
if: needs.route.outputs.agent == 'claude'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
token: ${{ secrets.CI_GITHUB_TOKEN }}
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/ecosystem-surveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
outputs:
orgs: ${{ steps.discover.outputs.orgs }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Discover Managed Organizations
id: discover
Expand Down Expand Up @@ -104,12 +104,12 @@ jobs:
org: ${{ fromJson(needs.survey.outputs.orgs) }}
fail-fast: false
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
path: source

- name: Checkout Target
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
repository: ${{ matrix.org }}/control-center
token: ${{ secrets.CI_GITHUB_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/jules-supervisor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:

steps:
- name: Checkout code
uses: actions/checkout@v3
uses: actions/checkout@v6

- name: Setup Node.js
uses: actions/setup-node@v3
Expand Down
Loading
Loading