name: Run install, format, lint, build, and test on every push on: [push] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v6 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20.x' cache: 'npm' - name: Install dependencies (root + all clients) # The root postinstall (scripts/install-clients.mjs) cascades # `npm install` into clients/web, clients/cli, clients/tui, and # clients/launcher, so this single step sets up every client. run: npm install - name: Check formatting working-directory: ./clients/web run: npm run format:check - name: Run linter working-directory: ./clients/web run: npm run lint - name: Run Build working-directory: ./clients/web run: npm run build - name: Run tests with coverage working-directory: ./clients/web run: npm run test:coverage - name: Run CLI tests working-directory: ./clients/cli run: npm run test - name: Run TUI tests working-directory: ./clients/tui run: npm run test - name: Build CLI, TUI, and launcher run: npm run build:cli && npm run build:tui && npm run build:launcher - name: Smoke test launcher run: | node clients/launcher/build/index.js --help node clients/launcher/build/index.js --cli --help node clients/launcher/build/index.js --tui --help - name: Cache Playwright browsers uses: actions/cache@v4 with: path: ~/.cache/ms-playwright key: playwright-${{ runner.os }}-${{ hashFiles('clients/web/package-lock.json') }} - name: Install Playwright browsers working-directory: ./clients/web run: npx playwright install --with-deps chromium - name: Run Storybook play-function tests working-directory: ./clients/web run: npm run test:storybook