name: CI on: push: pull_request: permissions: contents: read jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: backend/go.mod check-latest: false cache: true cache-dependency-path: backend/go.sum - name: Verify Go version run: | go version | grep -q 'go1.26.2' - name: Unit tests working-directory: backend run: make test-unit - name: Integration tests working-directory: backend run: make test-integration frontend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '20' cache: 'pnpm' cache-dependency-path: frontend/pnpm-lock.yaml - name: Install frontend dependencies working-directory: frontend run: pnpm install --frozen-lockfile - name: Frontend typecheck and critical vitest run: make test-frontend golangci-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: backend/go.mod check-latest: false cache: true cache-dependency-path: backend/go.sum - name: Verify Go version run: | go version | grep -q 'go1.26.2' - name: golangci-lint uses: golangci/golangci-lint-action@v9 with: version: v2.9 args: --timeout=30m working-directory: backend # Cross-platform smoke for the windsurf package: verify the code compiles # on macOS and Windows and run only the platform-detection/discovery/datadir # unit tests (which do not require launching a real LS binary). windsurf-platform: strategy: fail-fast: false matrix: os: [macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version-file: backend/go.mod check-latest: false cache: true cache-dependency-path: backend/go.sum - name: Build windsurf package working-directory: backend run: go build ./internal/pkg/windsurf/... - name: Platform-only unit tests working-directory: backend run: go test -race -count=1 -run 'Platform|Discovery|DataDir|Metadata|NewLSPool|LSPool|ScanLSOutput' ./internal/pkg/windsurf/...