Skip to content

ci: Set up GitHub Actions pipeline (lint, build, test) #2

Description

@notyorch

Overview

There is currently no CI/CD pipeline in the repository. Every change goes to main without automated validation, which makes the project harder to trust for potential collaborators or clients.

Problem

  • No automated linting or type checking on PRs
  • Docker images are never tested before merge
  • No signal that the stack actually builds end-to-end
  • Reduces perceived technical credibility of the project

Proposed Solution

Add a GitHub Actions workflow that runs on every PR and push to main.

Suggested Workflow File

.github/workflows/ci.yml

name: CI
on:
  push:
    branches: [main]
  pull_request:

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Lint Python (tup-manager)
        run: |
          pip install ruff
          ruff check tup-manager/
      - name: Lint TypeScript (tup-dashboard)
        run: |
          cd tup-dashboard && npm ci && npm run lint

  build:
    runs-on: ubuntu-latest
    needs: lint
    steps:
      - uses: actions/checkout@v4
      - name: Build all images
        run: docker compose build --no-cache

  integration:
    runs-on: ubuntu-latest
    needs: build
    steps:
      - uses: actions/checkout@v4
      - name: Smoke test (stack up + healthcheck)
        run: |
          cp .env.example .env
          docker compose up -d --wait
          curl -f http://localhost/api/v1/health
          docker compose down

Changes Required

  • Create .github/workflows/ci.yml
  • Add lint script to tup-dashboard/package.json if not present
  • Add ruff or flake8 config to tup-manager/
  • Ensure .env.example has safe defaults for CI (no real secrets needed)
  • Add CI badge to root README.md

Acceptance Criteria

  • PR checks pass green before merge is allowed
  • CI badge visible on README
  • Build failure on broken Dockerfile or lint error

Priority

🔴 High — essential for open-source credibility and safe collaboration

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions