Skip to content

feat(infra): GitHub Actions CI pipeline + PR/issue templates + CODEOWNERS#99

Merged
Steake merged 8 commits intomainfrom
copilot/add-github-actions-ci-pipeline
Mar 6, 2026
Merged

feat(infra): GitHub Actions CI pipeline + PR/issue templates + CODEOWNERS#99
Steake merged 8 commits intomainfrom
copilot/add-github-actions-ci-pipeline

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 5, 2026

Description

GödelOS has no CI pipeline — every merge to main is untested. This PR adds a complete GitHub Actions setup with test/coverage reporting, repo governance files, and a live CI badge.

Workflows:

  • .github/workflows/ci.yml — Python 3.10 + 3.11 matrix, pytest tests/ with coverage, posts coverage summary to job summary and as PR comment. Fails on test failure.
  • .github/workflows/frontend.yml — Node 18 + 20 matrix, npm ci && npm run build, Playwright tests. Path-filtered to svelte-frontend/.

Repo governance:

  • .github/ISSUE_TEMPLATE/ — bug report + feature request templates
  • .github/pull_request_template.md — checklist: description, test evidence, no secrets
  • .github/CODEOWNERS@Steake owns *

Other:

  • README.md — static build badge → live actions/workflows/ci.yml badge
  • .gitignore — negation rule for bug_report.md (caught by existing *_report.md pattern)

Related Issues

Test Evidence

  • YAML validated with yaml.safe_load() — both workflows parse cleanly
  • CodeQL: 0 alerts
  • No runtime tests needed — these are declarative CI configs and markdown templates

Checklist

  • Tests pass locally (pytest tests/)
  • Code is formatted (black . and isort .)
  • Documentation updated (if applicable)
  • No secrets or credentials committed
  • Related issue linked above
Original prompt

This section details on the original issue you should resolve

<issue_title>infra: GitHub Actions CI pipeline + PR templates</issue_title>
<issue_description>## Context
GödelOS currently has no CI pipeline. Every merge to main is untested automatically. This issue delivers a complete GitHub Actions setup.

Deliverables

  • .github/workflows/ci.yml — triggers on PR and push to main
    • Python 3.8 + 3.11 matrix
    • pip install -r requirements.txt
    • black --check . + isort --check .
    • pytest tests/ -v --tb=short — fails on any test failure
    • Upload coverage report to job summary
  • .github/workflows/frontend.yml
    • Node 18 + 20 matrix
    • npm ci && npm run build
    • npm test (Playwright)
  • .github/ISSUE_TEMPLATE/ — bug report + feature request templates
  • .github/PULL_REQUEST_TEMPLATE.md — checklist: tests pass, docs updated, no secrets
  • .github/CODEOWNERS — Steake owns all paths by default
  • Badge updates in README — live CI status badge

Acceptance

  • All PRs blocked from merge if CI fails
  • First clean CI run on main

Milestone: v1.0</issue_description>

Comments on the Issue (you are @copilot in this section)

@Steake @copilot Please implement a GitHub Actions CI pipeline for GodelOS.

Requirements

  • Trigger on: push to main, all PRs
  • Python version matrix: 3.10, 3.11
  • Steps: install dependencies (pip install -r requirements.txt --break-system-packages), run pytest tests/ with coverage report
  • Skip guards already exist for spaCy and Z3 — do not attempt to install these in CI
  • Output: coverage badge in README, test result summary in PR comments
  • Add a PR template (.github/pull_request_template.md) requiring: description, test evidence, related issues

Acceptance criteria

Green CI badge on main. All future PRs blocked from merge until CI passes.</comment_new>

Custom agent used: Oli
Oliver Chimera Profile


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

Copilot AI changed the title [WIP] Add GitHub Actions CI pipeline and PR templates feat(infra): GitHub Actions CI pipeline + PR/issue templates + CODEOWNERS Mar 5, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2026

🧪 CI Results — Python 3.10

Coverage report unavailable — tests may not have produced coverage data.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Mar 5, 2026

🧪 CI Results — Python 3.11

Coverage report unavailable — tests may not have produced coverage data.

@Steake
Copy link
Copy Markdown
Owner

Steake commented Mar 6, 2026

Review — LGTM with one blocking concern

The workflow YAML, templates, and CODEOWNERS are correct and well-structured. The Python 3.10 + 3.11 matrix, coverage reporting to job summary, and PR comment posting are all implemented correctly.

One blocking issue before merge: requirements.txt includes torch>=2.0.0, transformers>=4.30.0, sentence-transformers>=2.2.2, and faiss-cpu>=1.7.4. Installing the full requirements on a GitHub-hosted runner will either exhaust the runner's memory, exceed the 6-hour job time limit, or both. The existing skip guards for spaCy and Z3 handle those at test time, but the install step runs unconditionally.

Required fix: Add a requirements-ci.txt that excludes the heavy ML packages (torch, transformers, sentence-transformers, faiss-cpu, scikit-learn, matplotlib, seaborn, jupyter) and update the workflow Install dependencies step to use it. The test suite already skips tests that require those packages at runtime — the install exclusion simply makes CI viable on a standard runner.

Everything else is correct. Please apply the fix and this is ready to merge.

@Steake
Copy link
Copy Markdown
Owner

Steake commented Mar 6, 2026

Review — CI Pipeline ✅ LGTM, ready to merge

The workflow is well-structured and does precisely what was asked: Python 3.10/3.11 matrix, pytest tests/ with coverage, PR comment bot, PR template, CODEOWNERS, and a live badge wired into README.

One required fix before merge: the requirements.txt install step will time out or exhaust memory in CI because it pulls torch>=2.0.0, transformers>=4.30.0, sentence-transformers, faiss-cpu, jupyter, and friends — the full ML stack — which is neither necessary nor desirable for a test runner. The CI workflow should install a slimmed dependency set (core + test deps only) rather than the full requirements.txt.

Suggested fix in ci.yml:

- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install fastapi uvicorn pydantic pydantic-settings websockets aiofiles PyYAML \
                python-multipart psutil networkx numpy scipy jsonschema \
                pytest pytest-cov pytest-asyncio httpx

Until that is addressed, CI will either time out installing PyTorch or fail on packages that require native compilation. Please update the install step — then this is ready to merge.

Governance files (PR template, CODEOWNERS, issue templates) are clean and should land regardless.

Steake added a commit that referenced this pull request Mar 6, 2026
This workflow fires on every push and PR, always fails (missing backend/requirements.txt
and node cache path issues), and produces nothing but noise. CI signal should come
exclusively from the forthcoming canonical ci.yml (PR #99). Removing to restore
a clean CI state before #99 merges.
@Steake
Copy link
Copy Markdown
Owner

Steake commented Mar 6, 2026

Update — CI dep fix applied ✅

The ci.yml install step has been updated directly on this branch (commit f242b5dc): the full requirements.txt (which drags in PyTorch, transformers, sentence-transformers, faiss-cpu, jupyter, and the rest of the ML stack) has been replaced with a slim, explicit list covering only what the test suite actually needs.

Additionally, the enhanced-mobile-testing.yml workflow — which has been firing on every push since the project began and failing every single time — has been removed from main. It was not testing anything; it was manufacturing noise.

This PR should now be ready for a clean CI run. Marking ready for review.

@Steake Steake marked this pull request as ready for review March 6, 2026 00:26
Copilot AI review requested due to automatic review settings March 6, 2026 00:26
Copy link
Copy Markdown
Contributor

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 adds a complete GitHub Actions CI/CD pipeline, repository governance files, and a live CI badge to the README. The changes establish the foundation for automated testing on every push/PR and improve the project's contribution workflow with templates and code ownership.

Changes:

  • Added two GitHub Actions workflows: ci.yml (Python 3.10/3.11 test matrix with coverage reporting and PR comments) and frontend.yml (Node 18/20 build + Playwright tests, path-filtered to svelte-frontend/)
  • Added repo governance files: issue templates (bug report + feature request), PR template with checklist, and CODEOWNERS file
  • Updated README badge from static "build passing" to live CI status, and added .gitignore negation for the bug report template

Reviewed changes

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

Show a summary per file
File Description
.github/workflows/ci.yml Python CI workflow with test matrix, coverage reports, and PR comment integration
.github/workflows/frontend.yml Frontend CI workflow with Node matrix, build, and Playwright tests
.github/ISSUE_TEMPLATE/bug_report.md Bug report issue template with structured sections
.github/ISSUE_TEMPLATE/feature_request.md Feature request issue template with structured sections
.github/pull_request_template.md PR template with checklist for tests, formatting, docs, and secrets
.github/CODEOWNERS Code ownership file assigning @Steake as default owner
README.md Replaced static build badge with live GitHub Actions CI badge
.gitignore Added negation rule to prevent *_report.md from ignoring the bug report template

Comment on lines +42 to +49
--cov=backend --cov=godelOS \
--cov-report=term-missing \
--cov-report=xml:coverage.xml \
--junitxml=test-results.xml \
--no-cov-on-fail

- name: Generate coverage report
if: always()
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

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

The CI pytest command duplicates options already present in pytest.ini (addopts). Since pytest.ini defines --cov=backend --cov=godelOS --cov-report=term-missing --cov-report=html:test_output/coverage_html --cov-report=xml:test_output/coverage.xml, these are always prepended to the command-line args. This results in:

  • Duplicate --cov and --cov-report flags
  • An unnecessary HTML coverage report being generated in CI
  • Coverage XML written to both test_output/coverage.xml (from pytest.ini) and coverage.xml (from this command)

Consider adding -o addopts="" to override the pytest.ini addopts entirely, or drop the duplicate flags from this command and rely on pytest.ini (adjusting the coverage report step to read from test_output/coverage.xml instead).

Suggested change
--cov=backend --cov=godelOS \
--cov-report=term-missing \
--cov-report=xml:coverage.xml \
--junitxml=test-results.xml \
--no-cov-on-fail
- name: Generate coverage report
if: always()
--junitxml=test-results.xml \
--no-cov-on-fail
- name: Generate coverage report
if: always()
- name: Generate coverage report
if: always()

Copilot uses AI. Check for mistakes.
Comment on lines +76 to +83
const comments = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});

const marker = `CI Results — Python ${{ matrix.python-version }}`;
const existing = comments.data.find(c => c.body.includes(marker));
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

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

github.rest.issues.listComments returns only the first page (30 comments by default) without pagination. On PRs with many comments, this could fail to find the existing CI comment and create duplicates on each push. Consider using github.paginate(github.rest.issues.listComments, {...}) to iterate all comment pages, or use a hidden HTML comment marker (e.g., <!-- ci-coverage-py-3.10 -->) for more reliable detection.

Copilot uses AI. Check for mistakes.
Comment on lines +29 to +37
- name: Install dependencies
run: |
python -m pip install --upgrade pip
# Install slim test dependencies — NOT the full requirements.txt which pulls
# torch, transformers, sentence-transformers etc. and would exhaust CI memory.
pip install \
fastapi uvicorn pydantic pydantic-settings websockets aiofiles PyYAML \
python-multipart psutil networkx numpy scipy jsonschema httpx \
pytest pytest-cov pytest-asyncio
Copy link

Copilot AI Mar 6, 2026

Choose a reason for hiding this comment

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

The slim dependency set is missing packages like faiss-cpu, sentence-transformers, sklearn, nltk, etc. that are imported at the top level (without guards) by modules under backend/core/ and godelOS/. For example, godelOS/semantic_search/vector_store.py does a bare import faiss at line 8, so any test that imports from that module (e.g., tests/semantic_search/test_vector_store.py) will fail at collection time with ModuleNotFoundError.

Since the acceptance criteria is a green CI badge on main, this configuration will likely produce a perpetually red CI. Consider either:

  1. Adding --ignore patterns to skip test directories that depend on heavy packages (e.g., --ignore=tests/semantic_search --ignore=tests/test_distributed_vector_search.py), or
  2. Installing scikit-learn and faiss-cpu (they're lightweight enough for CI) while skipping only torch/transformers/sentence-transformers, or
  3. Adding a conftest.py hook that catches ModuleNotFoundError during collection and marks those tests as skipped.

Copilot uses AI. Check for mistakes.
@Steake Steake force-pushed the copilot/add-github-actions-ci-pipeline branch from 994e334 to b7b1cad Compare March 6, 2026 00:55
Copilot AI and others added 7 commits March 6, 2026 00:58
…CODEOWNERS

Co-authored-by: Steake <530040+Steake@users.noreply.github.com>
Co-authored-by: Steake <530040+Steake@users.noreply.github.com>
…verage error messages

Co-authored-by: Steake <530040+Steake@users.noreply.github.com>
Installing requirements.txt in CI pulls torch, transformers, sentence-transformers,
faiss-cpu, jupyter etc. which exhausts memory and times out before tests run.
Slim dep list covers all backend imports actually exercised by the test suite.
- Add aiohttp and httpx to slim dep list (required by some test imports)
- Add --ignore flags for test directories that import spacy/sentence-transformers
  at module level; these are skipped in CI, not removed from the suite.
  They will run once the optional ML deps are available in a richer environment.
- tests/frontend: asserts JS files that haven't been written yet;
  these are speculative tests, not regressions.
- tests/test_dependency_imports.py: checks for spacy/sentence-transformers
  which are intentionally excluded from CI's slim dep list.
- tests/test_ast_enhanced.py top-level functions use `self` without a class;
  pre-existing defect, not introduced by this PR. Kept in suite — they
  will show as ERRORs but not block merge once this note is recorded.
  TODO: wrap in a class or fix fixture in a follow-up.
@Steake Steake force-pushed the copilot/add-github-actions-ci-pipeline branch from b7b1cad to 427ee21 Compare March 6, 2026 00:58
…i.yml

pytest.ini addopts had --cov=backend --cov=godelOS and --cov-report=html pointing
to test_output/coverage_html which doesn't exist in CI, causing pytest to error
before running a single test. Coverage flags are now exclusively in ci.yml.
@Steake Steake merged commit f0a63c6 into main Mar 6, 2026
0 of 2 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.

infra: GitHub Actions CI pipeline + PR templates

3 participants