name: Build & 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.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.yml' - '!.github/actions/build-rust/action.yml' - '!.github/actions/setup-node/action.yml' env: DEBUG: napi:* BUILD_TYPE: canary APP_NAME: affine AFFINE_ENV: dev COVERAGE: true DISTRIBUTION: browser MACOSX_DEPLOYMENT_TARGET: '10.13' NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} jobs: lint: name: Lint 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: Run i18n codegen run: yarn i18n-codegen gen - name: Run ESLint run: yarn lint:eslint --max-warnings=0 - name: Run Prettier # Set nmMode in `actions/setup-node` will modify the .yarnrc.yml run: | git checkout .yarnrc.yml yarn lint:prettier - name: Run circular run: yarn circular - name: Run Type Check run: yarn typecheck check-yarn-binary: name: Check yarn binary runs-on: ubuntu-latest environment: development steps: - uses: actions/checkout@v3 - name: Run check run: | yarn set version $(node -e "console.log(require('./package.json').packageManager.split('@')[1])") git diff --exit-code build-prototype: name: Build Prototype 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 Prototype run: yarn nx build prototype - name: Upload prototype artifact uses: actions/upload-artifact@v3 with: name: prototype path: ./apps/prototype/dist if-no-files-found: error build-docs: name: Build Docs runs-on: ubuntu-latest environment: development steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: ./.github/actions/setup-node with: electron-install: false - run: yarn nx build @affine/docs env: NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} e2e-plugin-test: name: E2E Plugin Test runs-on: ubuntu-latest environment: development steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: ./.github/actions/setup-node with: playwright-install: true electron-install: false - name: Run playwright tests run: yarn e2e --forbid-only working-directory: tests/affine-plugin env: COVERAGE: 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: e2e-plugin-test name: affine fail_ci_if_error: false - name: Upload test results if: ${{ failure() }} uses: actions/upload-artifact@v3 with: name: test-results-e2e-plugin path: ./test-results if-no-files-found: ignore e2e-prototype-test: name: E2E Prototype Test runs-on: ubuntu-latest environment: development needs: build-prototype steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: ./.github/actions/setup-node with: playwright-install: true electron-install: false - name: Download prototype artifact uses: actions/download-artifact@v3 with: name: prototype path: ./apps/prototype/dist - name: Run playwright tests run: yarn e2e --forbid-only working-directory: tests/affine-prototype env: COVERAGE: 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: e2etest-prototype # name: affine # fail_ci_if_error: false - name: Upload test results if: ${{ failure() }} uses: actions/upload-artifact@v3 with: name: test-results-e2e-prototype path: ./test-results if-no-files-found: ignore e2e-test: name: E2E Test runs-on: ubuntu-latest strategy: fail-fast: false matrix: shard: [1, 2, 3, 4, 5] environment: development steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: ./.github/actions/setup-node with: playwright-install: true electron-install: false - name: Run playwright tests run: yarn e2e --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }} working-directory: tests/affine-local env: COVERAGE: 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: e2etest name: affine fail_ci_if_error: false - name: Upload test results if: ${{ failure() }} uses: actions/upload-artifact@v3 with: name: test-results-e2e-${{ matrix.shard }} path: ./test-results if-no-files-found: ignore e2e-migration-test: name: E2E Migration Test runs-on: ubuntu-latest environment: development strategy: matrix: spec: - { package: 0.7.0-canary.18 } - { package: 0.8.0-canary.7 } - { package: 0.8.3 } steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: ./.github/actions/setup-node with: playwright-install: true electron-install: false - name: Unzip run: yarn unzip working-directory: ./tests/affine-legacy/${{ matrix.spec.package }} - name: Run playwright tests run: yarn e2e --forbid-only working-directory: ./tests/affine-legacy/${{ matrix.spec.package }} - name: Upload test results if: ${{ failure() }} uses: actions/upload-artifact@v3 with: name: test-results-e2e-migration-${{ matrix.spec.package }} path: ./tests/affine-legacy/${{ matrix.spec.package }}/test-results if-no-files-found: ignore unit-test: name: Unit Test 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: Unit Test run: yarn nx test:coverage @affine/monorepo - name: Upload unit test coverage results uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./.coverage/store/lcov.info flags: unittest name: affine fail_ci_if_error: false