From 5c0f73c535fa529a3cf2fc25d30ccda0c092ea21 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Tue, 29 Aug 2023 15:57:09 -0500 Subject: [PATCH] ci: split server test (#4023) --- .github/workflows/build-server.yml | 206 +++++++++++++++++++++++++++++ .github/workflows/build.yml | 178 ------------------------- 2 files changed, 206 insertions(+), 178 deletions(-) create mode 100644 .github/workflows/build-server.yml diff --git a/.github/workflows/build-server.yml b/.github/workflows/build-server.yml new file mode 100644 index 0000000000..e7a948fa2a --- /dev/null +++ b/.github/workflows/build-server.yml @@ -0,0 +1,206 @@ +name: Build(Server) & Test + +on: + push: + branches: + - master + - v[0-9]+.[0-9]+.x-staging + - v[0-9]+.[0-9]+.x + paths-ignore: + - README.md + - .github/** + - '!.github/workflows/build-server.yml' + - '!.github/actions/build-rust/action.yml' + - '!.github/actions/setup-node/action.yml' + pull_request: + merge_group: + branches: + - master + - v[0-9]+.[0-9]+.x-staging + - v[0-9]+.[0-9]+.x + paths-ignore: + - README.md + - .github/** + - '!.github/workflows/build-server.yml' + - '!.github/actions/build-rust/action.yml' + - '!.github/actions/setup-node/action.yml' + +env: + DEBUG: napi:* + BUILD_TYPE: canary + APP_NAME: affine + COVERAGE: true + DISTRIBUTION: browser + NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + +jobs: + build-storage: + name: Build Storage + runs-on: ubuntu-latest + env: + RUSTFLAGS: '-C debuginfo=1' + environment: development + + steps: + - uses: actions/checkout@v3 + - name: Setup Node.js + uses: ./.github/actions/setup-node + - name: Setup Rust + uses: ./.github/actions/build-rust + with: + target: 'x86_64-unknown-linux-gnu' + package: '@affine/storage' + nx_token: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + - name: Upload storage.node + uses: actions/upload-artifact@v3 + with: + name: storage.node + path: ./packages/storage/storage.node + if-no-files-found: error + + server-test: + name: Server Test + runs-on: ubuntu-latest + environment: development + needs: build-storage + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: affine + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v3 + + - name: Setup Node.js + uses: ./.github/actions/setup-node + + - name: Initialize database + run: | + psql -h localhost -U postgres -c "CREATE DATABASE affine;" + psql -h localhost -U postgres -c "CREATE USER affine WITH PASSWORD 'affine';" + psql -h localhost -U postgres -c "ALTER USER affine WITH SUPERUSER;" + env: + PGPASSWORD: affine + + - name: Generate prisma client + run: | + yarn exec prisma generate + yarn exec prisma db push + working-directory: apps/server + env: + DATABASE_URL: postgresql://affine:affine@localhost:5432/affine + + - name: Run init-db script + run: yarn exec ts-node-esm ./scripts/init-db.ts + working-directory: apps/server + env: + DATABASE_URL: postgresql://affine:affine@localhost:5432/affine + + - name: Download storage.node + uses: actions/download-artifact@v3 + with: + name: storage.node + path: ./apps/server + + - name: Run server tests + run: yarn test:coverage + working-directory: apps/server + env: + CARGO_TARGET_DIR: '${{ github.workspace }}/target' + DATABASE_URL: postgresql://affine:affine@localhost:5432/affine + + - name: Upload server test coverage results + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./apps/server/.coverage/lcov.info + flags: server-test + name: affine + fail_ci_if_error: false + + server-e2e-test: + name: Server E2E Test + runs-on: ubuntu-latest + environment: development + needs: build-storage + services: + postgres: + image: postgres + env: + POSTGRES_PASSWORD: affine + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 5432:5432 + steps: + - uses: actions/checkout@v3 + + - name: Setup Node.js + uses: ./.github/actions/setup-node + with: + playwright-install: true + + - name: Initialize database + run: | + psql -h localhost -U postgres -c "CREATE DATABASE affine;" + psql -h localhost -U postgres -c "CREATE USER affine WITH PASSWORD 'affine';" + psql -h localhost -U postgres -c "ALTER USER affine WITH SUPERUSER;" + env: + PGPASSWORD: affine + + - name: Generate prisma client + run: | + yarn exec prisma generate + yarn exec prisma db push + working-directory: apps/server + env: + DATABASE_URL: postgresql://affine:affine@localhost:5432/affine + + - name: Run init-db script + run: yarn exec ts-node-esm ./scripts/init-db.ts + working-directory: apps/server + env: + DATABASE_URL: postgresql://affine:affine@localhost:5432/affine + + - name: Download storage.node + uses: actions/download-artifact@v3 + with: + name: storage.node + path: ./apps/server + + - name: Run playwright tests + run: yarn e2e --forbid-only + working-directory: tests/affine-cloud + env: + COVERAGE: true + DATABASE_URL: postgresql://affine:affine@localhost:5432/affine + + - name: Collect code coverage report + run: yarn exec nyc report -t .nyc_output --report-dir .coverage --reporter=lcov + + - name: Upload e2e test coverage results + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./.coverage/lcov.info + flags: server-e2etest + name: affine + fail_ci_if_error: false + + - name: Upload test results + if: ${{ failure() }} + uses: actions/upload-artifact@v3 + with: + name: test-results-e2e-server + path: ./tests/affine-cloud/test-results + if-no-files-found: ignore diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dbbfc68795..873a94c64b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -80,25 +80,6 @@ jobs: path: ./apps/prototype/dist if-no-files-found: error - build-server: - name: Build Server - runs-on: ubuntu-latest - environment: development - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: ./.github/actions/setup-node - with: - electron-install: false - - name: Build Server - run: yarn nx build @affine/server - - name: Upload server dist - uses: actions/upload-artifact@v3 - with: - name: server-dist - path: ./apps/server/dist - if-no-files-found: error - build-docs: name: Build Docs runs-on: ubuntu-latest @@ -114,165 +95,6 @@ jobs: env: NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} - build-storage: - name: Build Storage - runs-on: ubuntu-latest - env: - RUSTFLAGS: '-C debuginfo=1' - environment: development - - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Setup Rust - uses: ./.github/actions/build-rust - with: - target: 'x86_64-unknown-linux-gnu' - package: '@affine/storage' - nx_token: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} - - name: Upload storage.node - uses: actions/upload-artifact@v3 - with: - name: storage.node - path: ./packages/storage/storage.node - if-no-files-found: error - - server-test: - name: Server Test - runs-on: ubuntu-latest - environment: development - needs: build-storage - services: - postgres: - image: postgres - env: - POSTGRES_PASSWORD: affine - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Initialize database - run: | - psql -h localhost -U postgres -c "CREATE DATABASE affine;" - psql -h localhost -U postgres -c "CREATE USER affine WITH PASSWORD 'affine';" - psql -h localhost -U postgres -c "ALTER USER affine WITH SUPERUSER;" - env: - PGPASSWORD: affine - - name: Generate prisma client - run: | - yarn exec prisma generate - yarn exec prisma db push - working-directory: apps/server - env: - DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - - name: Run init-db script - run: yarn exec ts-node-esm ./scripts/init-db.ts - working-directory: apps/server - env: - DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - - name: Download storage.node - uses: actions/download-artifact@v3 - with: - name: storage.node - path: ./apps/server - - name: Run server tests - run: yarn test:coverage - working-directory: apps/server - env: - CARGO_TARGET_DIR: '${{ github.workspace }}/target' - DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - - name: Upload server test coverage results - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: ./apps/server/.coverage/lcov.info - flags: server-test - name: affine - fail_ci_if_error: false - - server-e2e-test: - name: Server E2E Test - runs-on: ubuntu-latest - environment: development - needs: build-storage - services: - postgres: - image: postgres - env: - POSTGRES_PASSWORD: affine - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - - 5432:5432 - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: ./.github/actions/setup-node - with: - playwright-install: true - - name: Initialize database - run: | - psql -h localhost -U postgres -c "CREATE DATABASE affine;" - psql -h localhost -U postgres -c "CREATE USER affine WITH PASSWORD 'affine';" - psql -h localhost -U postgres -c "ALTER USER affine WITH SUPERUSER;" - env: - PGPASSWORD: affine - - name: Generate prisma client - run: | - yarn exec prisma generate - yarn exec prisma db push - working-directory: apps/server - env: - DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - - name: Run init-db script - run: yarn exec ts-node-esm ./scripts/init-db.ts - working-directory: apps/server - env: - DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - - name: Download storage.node - uses: actions/download-artifact@v3 - with: - name: storage.node - path: ./apps/server - - - name: Run playwright tests - run: yarn e2e --forbid-only - working-directory: tests/affine-cloud - env: - COVERAGE: true - DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - - - name: Collect code coverage report - run: yarn exec nyc report -t .nyc_output --report-dir .coverage --reporter=lcov - - - name: Upload e2e test coverage results - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: ./.coverage/lcov.info - flags: server-e2etest - name: affine - fail_ci_if_error: false - - - name: Upload test results - if: ${{ failure() }} - uses: actions/upload-artifact@v3 - with: - name: test-results-e2e-server - path: ./tests/affine-cloud/test-results - if-no-files-found: ignore - e2e-plugin-test: name: E2E Plugin Test runs-on: ubuntu-latest