Skip to content

chore(devcontainer): install uv and the spec-kit CLI on create (#31) #51

chore(devcontainer): install uv and the spec-kit CLI on create (#31)

chore(devcontainer): install uv and the spec-kit CLI on create (#31) #51

Workflow file for this run

name: CI
on:
pull_request:
branches: [main]
push:
branches: [main]
# A new push to the same PR cancels the previous run.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
backend:
name: backend (build + test)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-dotnet@v6
with:
global-json-file: global.json
- name: Cache NuGet
uses: actions/cache@v6
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('backend/**/*.csproj') }}
restore-keys: nuget-${{ runner.os }}-
- run: dotnet restore backend/VoxLib.slnx
- name: Verify C# formatting
run: dotnet format backend/VoxLib.slnx --verify-no-changes --no-restore
- run: dotnet build backend/VoxLib.slnx --configuration Release --no-restore
- name: Test
run: >
dotnet test backend/VoxLib.slnx
--configuration Release
--no-build
--logger "trx;LogFileName=test-results.trx"
--results-directory ./TestResults
- name: Upload test results
if: always()
uses: actions/upload-artifact@v7
with:
name: test-results
path: ./TestResults
if-no-files-found: ignore
frontend:
name: frontend (lint + build)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v7
with:
node-version: '24'
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Check formatting
run: pnpm format:check
- name: Lint
run: pnpm lint
# Runs tsc -b, then vite build. The bundle is discarded; the point is that
# both steps succeed. vite build catches what tsc cannot: imports that do
# not resolve at bundle time, missing referenced assets, plugin failures.
- name: Typecheck and build
run: pnpm --filter frontend build