name: CI on: push: branches: [main, master] pull_request: branches: [main, master] jobs: build-and-test: runs-on: ubuntu-latest strategy: matrix: node-version: [20, 22] steps: - uses: actions/checkout@v4 - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: "npm" - name: Install dependencies run: npm ci - name: Type-check run: npx tsc --noEmit - name: Run tests run: npm test - name: Verify CLI loads run: node dist/index.js --help lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - name: Install dependencies run: npm ci - name: Check for hardcoded secrets run: | ! grep -rE '[A-Za-z0-9]{32,}|sk-[A-Za-z0-9]{20,}' \ --include='*.ts' --include='*.json' \ --exclude-dir=node_modules --exclude='*.test.ts' \ src/ || echo "WARNING: Possible hardcoded API keys found" - name: Check for TODO/FIXME run: | TODO_COUNT=$(grep -r 'TODO\|FIXME\|HACK\|XXX' --include='*.ts' src/ \ --exclude-dir=node_modules --exclude='*.test.ts' | wc -l) echo "TODO/FIXME count: $TODO_COUNT" if [ "$TODO_COUNT" -gt 10 ]; then exit 1; fi docker: runs-on: ubuntu-latest needs: build-and-test if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Build Docker image run: docker build -t fable-agent .