# J621 CI — runs on every push (and pull request): Django checks + the full # backend test suite against MariaDB/Redis, and the frontend type-check, # lint and production build. # # Runner: the "nitro-ci" act_runner with the custom `ubuntu-latest` label. name: CI # Tests and builds only need to read the repository; the automatic job token # stays read-only. permissions: contents: read on: push: branches: ["**"] tags-ignore: ["**"] pull_request: workflow_dispatch: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: backend: name: Backend tests runs-on: ubuntu-latest services: mariadb: image: mariadb:11.4 env: MARIADB_ROOT_PASSWORD: root MARIADB_DATABASE: j621 MARIADB_USER: j621 MARIADB_PASSWORD: j621 options: >- --health-cmd="healthcheck.sh --connect --innodb_initialized" --health-interval=5s --health-timeout=5s --health-retries=12 redis: image: redis:7-alpine options: >- --health-cmd="redis-cli ping" --health-interval=5s --health-timeout=5s --health-retries=12 env: # Connect as root so Django can create the test database itself; # everything else mirrors the development defaults. DB_HOST: mariadb DB_PORT: "3306" DB_NAME: j621 DB_USER: root DB_PASSWORD: root REDIS_URL: redis://redis:6379/1 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.14" - name: Install backend dependencies run: pip install -r backend/requirements.txt - name: Django system checks working-directory: backend run: python manage.py check - name: Backend tests working-directory: backend run: >- python manage.py test apps.core.tests apps.library.tests apps.follows.tests apps.accounts.tests frontend: name: Frontend build & lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "22" - name: Install frontend dependencies working-directory: frontend run: npm ci - name: Lint working-directory: frontend run: npm run lint - name: Type-check & build working-directory: frontend run: npm run build