name: CI on: push: branches: [main, develop] pull_request: branches: [main] env: NODE_VERSION: "20" PNPM_VERSION: "9.15.4" RUST_TOOLCHAIN: "1.83" jobs: # --- Lint + TypeScript Check --- lint: name: Lint & Type Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: version: ${{ env.PNPM_VERSION }} - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: pnpm - run: pnpm install --frozen-lockfile - name: TypeScript check (shared) run: pnpm --filter @source/shared build - name: TypeScript check (database) run: pnpm --filter @source/database build - name: TypeScript check (API) run: pnpm --filter @source/api build - name: TypeScript check (Web) run: pnpm --filter @source/web build - name: Lint run: pnpm lint - name: Format check run: pnpm format:check # --- Rust Daemon --- daemon: name: Daemon Build & Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install protoc run: sudo apt-get update && sudo apt-get install -y protobuf-compiler - uses: dtolnay/rust-toolchain@stable with: toolchain: ${{ env.RUST_TOOLCHAIN }} - uses: Swatinem/rust-cache@v2 with: workspaces: apps/daemon - name: Check working-directory: apps/daemon run: cargo check - name: Test working-directory: apps/daemon run: cargo test - name: Clippy working-directory: apps/daemon run: cargo clippy -- -D warnings || true # --- Docker Build Test --- docker: name: Docker Build runs-on: ubuntu-latest needs: [lint, daemon] if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - name: Build API image run: docker build -f apps/api/Dockerfile -t gamepanel-api:ci . - name: Build Web image run: docker build -f apps/web/Dockerfile -t gamepanel-web:ci . - name: Build Daemon image run: docker build -f apps/daemon/Dockerfile -t gamepanel-daemon:ci .