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@v4 - name: Setup Node.js uses: ./.github/actions/setup-node with: extra-flags: workspaces focus @affine/storage electron-install: false build-infra: false build-plugins: false - name: Build 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/backend/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 mailer: image: mailhog/mailhog ports: - 1025:1025 - 8025:8025 steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: ./.github/actions/setup-node with: electron-install: false - 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 workspace @affine/server exec prisma generate yarn workspace @affine/server exec prisma db push env: DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - name: Run init-db script run: yarn workspace @affine/server exec ts-node ./scripts/init-db.ts env: DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - name: Download storage.node uses: actions/download-artifact@v3 with: name: storage.node path: ./packages/backend/server - name: Run server tests run: yarn workspace @affine/server test:coverage 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: ./packages/backend/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 mailer: image: mailhog/mailhog ports: - 1025:1025 - 8025:8025 steps: - uses: actions/checkout@v4 - 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 workspace @affine/server exec prisma generate yarn workspace @affine/server exec prisma db push env: DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - name: Run init-db script run: yarn workspace @affine/server exec ts-node ./scripts/init-db.ts env: DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - name: Download storage.node uses: actions/download-artifact@v3 with: name: storage.node path: ./packages/backend/server - name: Run playwright tests run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn workspace @affine-test/affine-cloud e2e --forbid-only 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 server-desktop-e2e-test: name: Server Desktop 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 mailer: image: mailhog/mailhog ports: - 1025:1025 - 8025:8025 steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: ./.github/actions/setup-node with: playwright-install: true hard-link-nm: false - name: Build AFFiNE native uses: ./.github/actions/build-rust with: target: x86_64-unknown-linux-gnu package: '@affine/native' nx_token: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} - 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 workspace @affine/server exec prisma generate yarn workspace @affine/server prisma db push env: DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - name: Run init-db script run: yarn workspace @affine/server exec ts-node ./scripts/init-db.ts env: DATABASE_URL: postgresql://affine:affine@localhost:5432/affine - name: Download storage.node uses: actions/download-artifact@v3 with: name: storage.node path: ./packages/backend/server - name: Build Plugins run: yarn run build:plugins - name: Build Desktop Layers run: yarn workspace @affine/electron build:dev - name: Run playwright tests run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" yarn workspace @affine-test/affine-desktop-cloud e2e env: COVERAGE: true DEV_SERVER_URL: http://localhost:8080 DATABASE_URL: postgresql://affine:affine@localhost:5432/affine ENABLE_LOCAL_EMAIL: true - 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