AFFiNE/.github/workflows/build.yml

390 lines
11 KiB
YAML
Raw Normal View History

2023-02-14 21:52:45 +03:00
name: Build & Test
on:
2023-04-25 03:26:07 +03:00
push:
branches:
- master
2023-05-10 04:27:07 +03:00
- v[0-9]+.[0-9]+.x-staging
- v[0-9]+.[0-9]+.x
2023-05-10 07:03:22 +03:00
paths-ignore:
- README.md
- .github/**
- '!.github/workflows/build.yml'
2023-06-17 12:49:07 +03:00
- '!.github/actions/build-rust/action.yml'
- '!.github/actions/setup-node/action.yml'
pull_request:
branches:
- master
2023-05-10 04:27:07 +03:00
- v[0-9]+.[0-9]+.x-staging
- v[0-9]+.[0-9]+.x
paths-ignore:
- README.md
- .github/**
- '!.github/workflows/build.yml'
2023-06-17 12:49:07 +03:00
- '!.github/actions/build-rust/action.yml'
- '!.github/actions/setup-node/action.yml'
2023-05-10 13:38:23 +03:00
env:
DEBUG: napi:*
APP_NAME: affine
COVERAGE: true
2023-05-10 13:38:23 +03:00
MACOSX_DEPLOYMENT_TARGET: '10.13'
jobs:
2023-03-28 20:48:40 +03:00
lint:
name: Lint
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Run checks
run: |
yarn i18n-codegen gen
yarn typecheck
yarn lint --max-warnings=0
yarn circular
2023-03-28 20:48:40 +03:00
2023-03-28 21:55:35 +03:00
build-storybook:
name: Build Storybook
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: ./.github/actions/setup-node
- run: yarn nx build @affine/storybook
env:
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
2023-03-28 21:55:35 +03:00
- name: Upload storybook artifact
uses: actions/upload-artifact@v3
with:
name: storybook
2023-06-07 11:55:06 +03:00
path: ./packages/storybook/storybook-static
2023-03-28 21:55:35 +03:00
if-no-files-found: error
build-web:
2023-03-28 21:55:35 +03:00
name: Build @affine/web
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v3
2023-03-24 18:44:14 +03:00
- name: Setup Node.js
uses: ./.github/actions/setup-node
2023-03-28 20:48:40 +03:00
- name: Cache Next.js
uses: actions/cache@v3
with:
path: |
${{ github.workspace }}/apps/web/.next/cache
key: ${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
restore-keys: |
${{ runner.os }}-nextjs-${{ hashFiles('**/yarn.lock') }}-
2023-06-12 08:06:23 +03:00
- name: Build Web
run: yarn nx build @affine/web
env:
API_SERVER_PROFILE: local
2023-05-30 13:02:49 +03:00
ENABLE_DEBUG_PAGE: 1
ENABLE_PLUGIN: true
ENABLE_ALL_PAGE_FILTER: true
ENABLE_LEGACY_PROVIDER: true
ENABLE_PRELOADING: false
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
2023-03-28 21:55:35 +03:00
name: next-js
2023-02-10 15:41:01 +03:00
path: ./apps/web/.next
2023-03-28 21:55:35 +03:00
if-no-files-found: error
2023-01-03 07:09:37 +03:00
2023-06-12 08:06:23 +03:00
- name: Build Web (Desktop)
run: yarn nx build @affine/web
env:
API_SERVER_PROFILE: affine
2023-05-30 13:02:49 +03:00
ENABLE_DEBUG_PAGE: 1
ENABLE_PLUGIN: true
ENABLE_ALL_PAGE_FILTER: true
ENABLE_LEGACY_PROVIDER: false
ENABLE_PRELOADING: false
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
- name: Export static resources
run: yarn workspace @affine/web export
- name: Upload static resources artifact
uses: actions/upload-artifact@v3
with:
name: next-js-static
path: ./apps/web/out
if-no-files-found: error
server-test:
name: Server Test
runs-on: ubuntu-latest
environment: development
2023-04-19 02:14:25 +03:00
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
2023-04-19 02:14:25 +03:00
- 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: Run server tests
run: yarn nx test:coverage @affine/server
2023-04-19 02:14:25 +03:00
env:
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: true
storybook-test:
name: Storybook Test
runs-on: ubuntu-latest
environment: development
needs: [build-storybook]
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: ./.github/actions/setup-node
2023-04-04 21:09:15 +03:00
with:
playwright-install: true
- name: Download storybook artifact
uses: actions/download-artifact@v3
with:
name: storybook
2023-06-07 11:55:06 +03:00
path: ./packages/storybook/storybook-static
- name: Run storybook tests
2023-06-07 11:55:06 +03:00
working-directory: ./packages/storybook
run: |
yarn exec concurrently -k -s first -n "SB,TEST" -c "magenta,blue" "yarn exec serve ./storybook-static -l 6006" "yarn exec wait-on tcp:6006 && yarn test"
e2e-test:
name: E2E Test
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: [1, 2, 3, 4]
environment: development
needs: [build-web, build-storybook]
services:
octobase:
image: ghcr.io/toeverything/cloud-self-hosted:nightly-latest
ports:
- 3000:3000
env:
SIGN_KEY: 'test123'
RUST_LOG: 'debug'
JWST_DEV: '1'
steps:
2023-02-06 18:21:23 +03:00
- uses: actions/checkout@v3
2023-03-24 18:44:14 +03:00
- name: Setup Node.js
uses: ./.github/actions/setup-node
with:
playwright-install: true
- name: Download artifact
uses: actions/download-artifact@v3
with:
2023-03-28 21:55:35 +03:00
name: next-js
path: ./apps/web/.next
2023-03-28 21:55:35 +03:00
- name: Download storybook artifact
uses: actions/download-artifact@v3
with:
name: storybook
2023-06-07 11:55:06 +03:00
path: ./packages/storybook/storybook-static
2023-03-28 21:55:35 +03:00
2023-04-14 23:03:16 +03:00
- name: Wait for Octobase Ready
run: |
node ./scripts/wait-3000-healthz.mjs
- name: Run playwright tests
run: yarn e2e --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }}
env:
COVERAGE: true
2023-02-06 18:21:23 +03:00
- name: Collect code coverage report
2023-03-20 10:05:02 +03:00
run: yarn exec nyc report -t .nyc_output --report-dir .coverage --reporter=lcov
2023-02-06 18:21:23 +03:00
- 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: true
- name: Upload test results
if: ${{ failure() }}
2023-05-10 13:38:23 +03:00
uses: actions/upload-artifact@v3
2023-02-06 18:21:23 +03:00
with:
name: test-results-e2e-${{ matrix.shard }}
path: ./test-results
if-no-files-found: ignore
2023-06-12 08:06:23 +03:00
desktop-test:
2023-04-25 02:53:36 +03:00
name: Desktop Test
2023-05-10 13:38:23 +03:00
runs-on: ${{ matrix.spec.os }}
2023-04-25 02:53:36 +03:00
environment: development
strategy:
2023-05-10 05:13:33 +03:00
fail-fast: false
# all combinations: macos-latest x64, macos-latest arm64, windows-latest x64, ubuntu-latest x64
matrix:
spec:
2023-05-10 13:38:23 +03:00
- {
os: macos-latest,
platform: macos,
arch: x64,
target: x86_64-apple-darwin,
test: true,
}
- {
os: macos-latest,
platform: macos,
arch: arm64,
target: aarch64-apple-darwin,
test: false,
}
- {
os: ubuntu-latest,
platform: linux,
arch: x64,
target: x86_64-unknown-linux-gnu,
test: true,
}
- {
os: windows-latest,
platform: windows,
arch: x64,
target: x86_64-pc-windows-msvc,
test: true,
}
2023-06-12 08:06:23 +03:00
needs: [build-web]
2023-04-25 02:53:36 +03:00
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: ./.github/actions/setup-node
with:
playwright-install: true
2023-05-10 13:38:23 +03:00
- name: Build AFFiNE native
uses: ./.github/actions/build-rust
with:
target: ${{ matrix.spec.target }}
nx_token: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
- name: Run unit tests
if: ${{ matrix.spec.test }}
shell: bash
run: yarn nx test @affine/monorepo
env:
NATIVE_TEST: 'true'
- name: Build layers
run: yarn workspace @affine/electron build
- name: Download static resource artifact
2023-04-25 02:53:36 +03:00
uses: actions/download-artifact@v3
with:
name: next-js-static
path: ./apps/electron/resources/web-static
2023-04-25 02:53:36 +03:00
- name: Run desktop tests
2023-05-10 13:38:23 +03:00
if: ${{ matrix.spec.test && matrix.spec.os == 'ubuntu-latest' }}
run: xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn workspace @affine/electron test
env:
COVERAGE: true
2023-04-25 02:53:36 +03:00
2023-05-10 13:38:23 +03:00
- name: Run desktop tests
if: ${{ matrix.spec.test && matrix.spec.os != 'ubuntu-latest' }}
run: yarn workspace @affine/electron test
env:
COVERAGE: true
- name: Collect code coverage report
if: ${{ matrix.spec.test }}
run: yarn exec nyc report -t .nyc_output --report-dir .coverage --reporter=lcov
- name: Upload e2e test coverage results
if: ${{ matrix.spec.test }}
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./.coverage/lcov.info
flags: e2etest-${{ matrix.spec.os }}-${{ matrix.spec.arch }}
name: affine
fail_ci_if_error: true
2023-05-10 13:38:23 +03:00
2023-04-25 02:53:36 +03:00
- name: Upload test results
if: ${{ failure() }}
2023-05-10 13:38:23 +03:00
uses: actions/upload-artifact@v3
2023-04-25 02:53:36 +03:00
with:
name: test-results-e2e-${{ matrix.spec.os }}-${{ matrix.spec.arch }}
2023-04-25 02:53:36 +03:00
path: ./test-results
if-no-files-found: ignore
unit-test:
name: Unit Test
runs-on: ubuntu-latest
environment: development
services:
octobase:
image: ghcr.io/toeverything/cloud-self-hosted:nightly-latest
ports:
- 3000:3000
env:
SIGN_KEY: 'test123'
RUST_LOG: 'debug'
JWST_DEV: '1'
steps:
- uses: actions/checkout@v3
2023-03-24 18:44:14 +03:00
- name: Setup Node.js
uses: ./.github/actions/setup-node
- 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: true