feat: integrate RealtimeManager into constructive preset and cache lifecycle #4455
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI tests | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - v1 | |
| pull_request: | |
| branches: | |
| - main | |
| - v1 | |
| workflow_dispatch: | |
| workflow_call: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }}-tests | |
| cancel-in-progress: true | |
| # --------------------------------------------------------------------------- | |
| # Build-once, test-many architecture with tiered service containers. | |
| # | |
| # Phase 1 – build: single job installs deps + builds the monorepo once. | |
| # Phase 2 – fan-out: test jobs download the build artifact and run tests. | |
| # | |
| # The build artifact is a tar archive to preserve symlinks and all files. | |
| # Test jobs extract the tar and run pnpm install to restore node_modules. | |
| # | |
| # Service tiers (avoids spinning up unneeded containers): | |
| # unit-tests → no services (pure JS/TS) | |
| # pg-tests → PostgreSQL only | |
| # integration-tests → PostgreSQL + MinIO | |
| # --------------------------------------------------------------------------- | |
| jobs: | |
| # ========================================================================= | |
| # BUILD (single job – runs once, shared by all test jobs) | |
| # ========================================================================= | |
| build: | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| steps: | |
| - name: Configure Git (for tests) | |
| run: | | |
| git config --global user.name "CI Test User" | |
| git config --global user.email "ci@example.com" | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: 10 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install | |
| - name: Build | |
| run: pnpm run build | |
| - name: Create build archive | |
| run: tar -czf /tmp/workspace.tar.gz --exclude='.git' --exclude='node_modules' . | |
| - name: Upload workspace | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: workspace-build | |
| path: /tmp/workspace.tar.gz | |
| retention-days: 1 | |
| # ========================================================================= | |
| # TIER 1 – Unit tests (no services needed) | |
| # ========================================================================= | |
| unit-tests: | |
| needs: build | |
| runs-on: blacksmith-2vcpu-ubuntu-2404 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - package: uploads/mime-bytes | |
| env: {} | |
| - package: uploads/uuid-hash | |
| env: {} | |
| - package: uploads/uuid-stream | |
| env: {} | |
| - package: uploads/etag-hash | |
| env: {} | |
| - package: uploads/etag-stream | |
| env: {} | |
| - package: uploads/stream-to-etag | |
| env: {} | |
| - package: uploads/content-type-stream | |
| env: {} | |
| - package: uploads/upload-names | |
| env: {} | |
| - package: packages/url-domains | |
| env: {} | |
| - package: packages/query-builder | |
| env: {} | |
| - package: packages/csrf | |
| env: {} | |
| - package: packages/oauth | |
| env: {} | |
| - package: packages/12factor-env | |
| env: {} | |
| - package: packages/orm | |
| env: {} | |
| - package: packages/postmaster | |
| env: {} | |
| - package: packages/smtppostmaster | |
| env: {} | |
| - package: packages/csv-to-pg | |
| env: {} | |
| - package: postgres/pgsql-client | |
| env: {} | |
| - package: postgres/pg-ast | |
| env: {} | |
| - package: graphql/query | |
| env: {} | |
| - package: graphql/codegen | |
| env: {} | |
| - package: packages/cli | |
| env: {} | |
| steps: | |
| - name: Download workspace | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: workspace-build | |
| - name: Extract workspace | |
| run: tar -xzf workspace.tar.gz && rm workspace.tar.gz | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: 10 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Test ${{ matrix.package }} | |
| run: cd ./${{ matrix.package }} && pnpm test | |
| env: ${{ matrix.env }} | |
| # ========================================================================= | |
| # TIER 2 – PostgreSQL-only tests | |
| # ========================================================================= | |
| pg-tests: | |
| needs: build | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - package: pgpm/core | |
| env: {} | |
| - package: pgpm/cli | |
| env: {} | |
| - package: packages/client | |
| env: | |
| TEST_DATABASE_URL: postgres://postgres:password@localhost:5432/postgres | |
| - package: packages/safegres | |
| env: {} | |
| - package: postgres/pg-codegen | |
| env: {} | |
| - package: postgres/pgsql-test | |
| env: {} | |
| - package: postgres/drizzle-orm-test | |
| env: {} | |
| - package: postgres/introspectron | |
| env: {} | |
| - package: graphile/graphile-test | |
| env: {} | |
| - package: graphile/graphile-connection-filter | |
| env: {} | |
| - package: graphile/graphile-postgis | |
| env: {} | |
| - package: graphile/graphile-search | |
| env: {} | |
| - package: graphile/graphile-ltree | |
| env: {} | |
| - package: graphql/orm-test | |
| env: {} | |
| - package: graphql/test | |
| env: {} | |
| - package: graphql/playwright-test | |
| env: {} | |
| - package: jobs/knative-job-service | |
| env: {} | |
| env: | |
| PGHOST: localhost | |
| PGPORT: 5432 | |
| PGUSER: postgres | |
| PGPASSWORD: password | |
| services: | |
| pg_db: | |
| image: ghcr.io/constructive-io/docker/postgres-plus:18 | |
| env: | |
| POSTGRES_USER: postgres | |
| POSTGRES_PASSWORD: password | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| ports: | |
| - 5432:5432 | |
| steps: | |
| - name: Download workspace | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: workspace-build | |
| - name: Extract workspace | |
| run: tar -xzf workspace.tar.gz && rm workspace.tar.gz | |
| - name: Configure Git (for tests) | |
| run: | | |
| git config --global user.name "CI Test User" | |
| git config --global user.email "ci@example.com" | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: 10 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Seed app_user | |
| run: | | |
| pnpm --filter pgpm exec node dist/index.js admin-users bootstrap --yes | |
| pnpm --filter pgpm exec node dist/index.js admin-users add --test --yes | |
| - name: Test ${{ matrix.package }} | |
| run: cd ./${{ matrix.package }} && pnpm test | |
| env: ${{ matrix.env }} | |
| # ========================================================================= | |
| # TIER 3 – Integration tests (PostgreSQL + MinIO) | |
| # ========================================================================= | |
| integration-tests: | |
| needs: build | |
| runs-on: blacksmith-4vcpu-ubuntu-2404 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - package: pgpm/env | |
| env: {} | |
| - package: uploads/s3-streamer | |
| env: | |
| BUCKET_NAME: test-bucket | |
| - package: packages/upload-client | |
| env: {} | |
| - package: packages/bucket-provisioner | |
| env: {} | |
| - package: graphile/graphile-settings | |
| env: {} | |
| - package: graphile/graphile-presigned-url-plugin | |
| env: {} | |
| - package: graphile/graphile-bucket-provisioner-plugin | |
| env: {} | |
| - package: graphql/server-test | |
| env: {} | |
| - package: graphql/env | |
| env: {} | |
| - package: graphql/server | |
| env: {} | |
| env: | |
| PGHOST: localhost | |
| PGPORT: 5432 | |
| PGUSER: postgres | |
| PGPASSWORD: password | |
| CDN_ENDPOINT: http://localhost:9000 | |
| AWS_ACCESS_KEY: minioadmin | |
| AWS_SECRET_KEY: minioadmin | |
| AWS_REGION: us-east-1 | |
| services: | |
| pg_db: | |
| image: ghcr.io/constructive-io/docker/postgres-plus:18 | |
| env: | |
| POSTGRES_USER: postgres | |
| POSTGRES_PASSWORD: password | |
| options: >- | |
| --health-cmd pg_isready | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| ports: | |
| - 5432:5432 | |
| minio_cdn: | |
| image: minio/minio:edge-cicd | |
| env: | |
| MINIO_ROOT_USER: minioadmin | |
| MINIO_ROOT_PASSWORD: minioadmin | |
| ports: | |
| - 9000:9000 | |
| - 9001:9001 | |
| options: >- | |
| --health-cmd "curl -f http://localhost:9000/minio/health/live || exit 1" | |
| --health-interval 10s | |
| --health-timeout 5s | |
| --health-retries 5 | |
| steps: | |
| - name: Download workspace | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: workspace-build | |
| - name: Extract workspace | |
| run: tar -xzf workspace.tar.gz && rm workspace.tar.gz | |
| - name: Configure Git (for tests) | |
| run: | | |
| git config --global user.name "CI Test User" | |
| git config --global user.email "ci@example.com" | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v2 | |
| with: | |
| version: 10 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| cache: 'pnpm' | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Seed app_user | |
| run: | | |
| pnpm --filter pgpm exec node dist/index.js admin-users bootstrap --yes | |
| pnpm --filter pgpm exec node dist/index.js admin-users add --test --yes | |
| - name: Test ${{ matrix.package }} | |
| run: cd ./${{ matrix.package }} && pnpm test | |
| env: ${{ matrix.env }} |