ci: do not build core in e2e test (#3882)

This commit is contained in:
Alex Yang
2023-08-21 18:36:39 -05:00
committed by GitHub
parent fc9981335b
commit bf00299bc7
8 changed files with 219 additions and 165 deletions

View File

@@ -121,3 +121,7 @@ runs:
- name: Build Infra - name: Build Infra
shell: bash shell: bash
run: yarn run build:infra run: yarn run build:infra
- name: Build Plugins
shell: bash
run: yarn run build:plugins

View File

@@ -134,26 +134,6 @@ jobs:
path: ./apps/storybook/storybook-static path: ./apps/storybook/storybook-static
if-no-files-found: error if-no-files-found: error
build-core:
name: Build @affine/core
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Build Plugins
run: yarn run build:plugins
- name: Build Core
run: yarn nx build @affine/core
- name: Upload core artifact
uses: actions/upload-artifact@v3
with:
name: core
path: ./apps/core/dist
if-no-files-found: error
build-storage: build-storage:
name: Build Storage name: Build Storage
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -240,7 +220,6 @@ jobs:
name: E2E Plugin Test name: E2E Plugin Test
runs-on: ubuntu-latest runs-on: ubuntu-latest
environment: development environment: development
needs: build-core
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Setup Node.js - name: Setup Node.js
@@ -248,11 +227,6 @@ jobs:
with: with:
playwright-install: true playwright-install: true
electron-install: false electron-install: false
- name: Download core artifact
uses: actions/download-artifact@v3
with:
name: core
path: ./apps/core/dist
- name: Run playwright tests - name: Run playwright tests
run: yarn e2e --forbid-only run: yarn e2e --forbid-only
working-directory: tests/affine-plugin working-directory: tests/affine-plugin
@@ -329,8 +303,6 @@ jobs:
matrix: matrix:
shard: [1, 2, 3, 4, 5] shard: [1, 2, 3, 4, 5]
environment: development environment: development
needs: build-core
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Setup Node.js - name: Setup Node.js
@@ -338,11 +310,6 @@ jobs:
with: with:
playwright-install: true playwright-install: true
electron-install: false electron-install: false
- name: Download core artifact
uses: actions/download-artifact@v3
with:
name: core
path: ./apps/core/dist
- name: Run playwright tests - name: Run playwright tests
run: yarn e2e --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }} run: yarn e2e --forbid-only --shard=${{ matrix.shard }}/${{ strategy.job-total }}
@@ -374,7 +341,6 @@ jobs:
name: E2E Migration Test name: E2E Migration Test
runs-on: ubuntu-latest runs-on: ubuntu-latest
environment: development environment: development
needs: build-core
strategy: strategy:
matrix: matrix:
spec: spec:
@@ -388,12 +354,6 @@ jobs:
playwright-install: true playwright-install: true
electron-install: false electron-install: false
- name: Download core artifact
uses: actions/download-artifact@v3
with:
name: core
path: ./apps/core/dist
- name: Unzip - name: Unzip
run: yarn unzip run: yarn unzip
working-directory: ./tests/affine-legacy/${{ matrix.spec.package }} working-directory: ./tests/affine-legacy/${{ matrix.spec.package }}
@@ -432,79 +392,3 @@ jobs:
flags: unittest flags: unittest
name: affine name: affine
fail_ci_if_error: false fail_ci_if_error: false
build-docker:
if: github.ref == 'refs/heads/master'
name: Build Docker
runs-on: ubuntu-latest
needs:
- build-server
- build-core
- build-storage
steps:
- uses: actions/checkout@v3
- name: Download core artifact
uses: actions/download-artifact@v3
with:
name: core
path: ./apps/core/dist
- name: Download server dist
uses: actions/download-artifact@v3
with:
name: server-dist
path: ./apps/server/dist
- name: Download storage.node
uses: actions/download-artifact@v3
with:
name: storage.node
path: ./apps/server
- name: Setup Git short hash
run: |
echo "GIT_SHORT_HASH=$(git rev-parse --short HEAD)" >> "$GITHUB_ENV"
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
logout: false
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build front Dockerfile
uses: docker/build-push-action@v4
with:
context: .
push: true
pull: true
platforms: linux/amd64,linux/arm64
provenance: true
file: .github/deployment/front/Dockerfile
tags: ghcr.io/toeverything/affine-front:${{ env.GIT_SHORT_HASH }},ghcr.io/toeverything/affine-front:latest
# setup node without cache configuration
# Prisma cache is not compatible with docker build cache
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
registry-url: https://npm.pkg.github.com
scope: '@toeverything'
- name: Install Node.js dependencies
run: yarn workspaces focus @affine/server --production
- name: Generate Prisma client
run: yarn workspace @affine/server prisma generate
- name: Build graphql Dockerfile
uses: docker/build-push-action@v4
with:
context: .
push: true
pull: true
platforms: linux/amd64,linux/arm64
provenance: true
file: .github/deployment/node/Dockerfile
tags: ghcr.io/toeverything/affine-graphql:${{ env.GIT_SHORT_HASH }},ghcr.io/toeverything/affine-graphql:latest

View File

@@ -5,6 +5,13 @@ on:
branches: branches:
- master - master
env:
BUILD_TYPE: stable
APP_NAME: affine
COVERAGE: false
DISTRIBUTION: browser
NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }}
jobs: jobs:
release: release:
name: Try publishing npm@latest release name: Try publishing npm@latest release
@@ -17,3 +24,142 @@ jobs:
run: ./scripts/publish.sh run: ./scripts/publish.sh
env: env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
build-core:
name: Build @affine/core
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: ./.github/actions/setup-node
- name: Build Plugins
run: yarn run build:plugins
- name: Build Core
run: yarn nx build @affine/core
- name: Upload core artifact
uses: actions/upload-artifact@v3
with:
name: core
path: ./apps/core/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-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/setup-rust
with:
target: 'x86_64-unknown-linux-gnu'
- name: Build Storage
run: yarn build:storage
- name: Upload storage.node
uses: actions/upload-artifact@v3
with:
name: storage.node
path: ./packages/storage/storage.node
if-no-files-found: error
build-docker:
if: github.ref == 'refs/heads/master'
name: Build Docker
runs-on: ubuntu-latest
needs:
- build-server
- build-core
- build-storage
steps:
- uses: actions/checkout@v3
- name: Download core artifact
uses: actions/download-artifact@v3
with:
name: core
path: ./apps/core/dist
- name: Download server dist
uses: actions/download-artifact@v3
with:
name: server-dist
path: ./apps/server/dist
- name: Download storage.node
uses: actions/download-artifact@v3
with:
name: storage.node
path: ./apps/server
- name: Setup Git short hash
run: |
echo "GIT_SHORT_HASH=$(git rev-parse --short HEAD)" >> "$GITHUB_ENV"
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
logout: false
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build front Dockerfile
uses: docker/build-push-action@v4
with:
context: .
push: true
pull: true
platforms: linux/amd64,linux/arm64
provenance: true
file: .github/deployment/front/Dockerfile
tags: ghcr.io/toeverything/affine-front:${{ env.GIT_SHORT_HASH }},ghcr.io/toeverything/affine-front:latest
# setup node without cache configuration
# Prisma cache is not compatible with docker build cache
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
registry-url: https://npm.pkg.github.com
scope: '@toeverything'
- name: Install Node.js dependencies
run: yarn workspaces focus @affine/server --production
- name: Generate Prisma client
run: yarn workspace @affine/server prisma generate
- name: Build graphql Dockerfile
uses: docker/build-push-action@v4
with:
context: .
push: true
pull: true
platforms: linux/amd64,linux/arm64
provenance: true
file: .github/deployment/node/Dockerfile
tags: ghcr.io/toeverything/affine-graphql:${{ env.GIT_SHORT_HASH }},ghcr.io/toeverything/affine-graphql:latest

View File

@@ -6,7 +6,7 @@
"scripts": { "scripts": {
"build": "yarn -T run build-core", "build": "yarn -T run build-core",
"dev": "yarn -T run dev-core", "dev": "yarn -T run dev-core",
"static-server": "ts-node-esm ./server.mts" "static-server": "yarn -T run dev-core --static"
}, },
"exports": { "exports": {
"./app": "./src/app.tsx", "./app": "./src/app.tsx",
@@ -84,7 +84,6 @@
"swc-loader": "^0.2.3", "swc-loader": "^0.2.3",
"swc-plugin-coverage-instrument": "^0.0.20", "swc-plugin-coverage-instrument": "^0.0.20",
"thread-loader": "^4.0.2", "thread-loader": "^4.0.2",
"ts-node": "^10.9.1",
"webpack": "^5.88.2", "webpack": "^5.88.2",
"webpack-cli": "^5.1.4", "webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1", "webpack-dev-server": "^4.15.1",

View File

@@ -1,18 +0,0 @@
// static server for web app
import express from 'express';
const app = express();
const PORT = process.env.PORT || 8080;
app.use('/', express.static('dist'));
app.get('/*', (req, res) => {
if (req.url.startsWith('/plugins')) {
res.sendFile(req.url, { root: 'dist' });
}
res.sendFile('index.html', { root: 'dist' });
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});

View File

@@ -9,6 +9,41 @@ import { config } from 'dotenv';
import { type BuildFlags, projectRoot } from '../config/index.js'; import { type BuildFlags, projectRoot } from '../config/index.js';
import { watchI18N } from '../util/i18n.js'; import { watchI18N } from '../util/i18n.js';
const cwd = path.resolve(projectRoot, 'apps', 'core');
const flags: BuildFlags = {
distribution: 'browser',
mode: 'development',
channel: 'canary',
coverage: false,
localBlockSuite: undefined,
};
if (process.argv.includes('--static')) {
await awaitChildProcess(
spawn(
'node',
[
'--loader',
'ts-node/esm/transpile-only',
'../../node_modules/webpack/bin/webpack.js',
'serve',
'--mode',
'development',
'--env',
'flags=' + Buffer.from(JSON.stringify(flags), 'utf-8').toString('hex'),
].filter((v): v is string => !!v),
{
cwd,
stdio: 'inherit',
shell: true,
env: process.env,
}
)
);
process.exit(0);
}
const files = ['.env', '.env.local']; const files = ['.env', '.env.local'];
for (const file of files) { for (const file of files) {
@@ -21,16 +56,6 @@ for (const file of files) {
} }
} }
const cwd = path.resolve(projectRoot, 'apps', 'core');
const flags: BuildFlags = {
distribution: 'browser',
mode: 'development',
channel: 'canary',
coverage: false,
localBlockSuite: undefined,
};
const buildFlags = await p.group( const buildFlags = await p.group(
{ {
distribution: () => distribution: () =>

View File

@@ -1,7 +1,11 @@
import { test } from '@affine-test/kit/playwright'; import { test } from '@affine-test/kit/playwright';
import { withCtrlOrMeta } from '@affine-test/kit/utils/keyboard'; import { withCtrlOrMeta } from '@affine-test/kit/utils/keyboard';
import { openHomePage } from '@affine-test/kit/utils/load-page'; import { openHomePage } from '@affine-test/kit/utils/load-page';
import { newPage, waitEditorLoad } from '@affine-test/kit/utils/page-logic'; import {
getBlockSuiteEditorTitle,
newPage,
waitEditorLoad,
} from '@affine-test/kit/utils/page-logic';
import { expect, type Page } from '@playwright/test'; import { expect, type Page } from '@playwright/test';
const openQuickSearchByShortcut = async (page: Page) => const openQuickSearchByShortcut = async (page: Page) =>
@@ -184,40 +188,51 @@ test('Assert the recent browse pages are on the recent list', async ({
// create first page // create first page
await newPage(page); await newPage(page);
await page.keyboard.insertText('sgtokidoki'); await page.keyboard.insertText('sgtokidoki');
await page.waitForTimeout(300); await page.waitForTimeout(200);
// create second page // create second page
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
const addNewPage = page.getByTestId('quick-search-add-new-page'); const addNewPage = page.getByTestId('quick-search-add-new-page');
await addNewPage.click(); await addNewPage.click();
await page.keyboard.insertText('theliquidhorse'); await page.keyboard.insertText('theliquidhorse');
await page.waitForTimeout(300); await page.waitForTimeout(200);
// create thrid page // create thrid page
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await addNewPage.click(); await addNewPage.click();
await page.keyboard.insertText('battlekot'); await page.keyboard.insertText('battlekot');
await page.waitForTimeout(300); await page.waitForTimeout(200);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
// check does all 3 pages exists on recent page list await page.waitForTimeout(200);
await expect(page.getByRole('button', { name: 'battlekot' })).toHaveCount(1); {
await expect( // check does all 3 pages exists on recent page list
page.getByRole('button', { name: 'theliquidhorse' }) const quickSearchItems = page.locator('[cmdk-item]');
).toHaveCount(1); expect(await quickSearchItems.nth(0).textContent()).toBe('battlekot');
await expect(page.getByRole('button', { name: 'sgtokidoki' })).toHaveCount(1); expect(await quickSearchItems.nth(1).textContent()).toBe('theliquidhorse');
expect(await quickSearchItems.nth(2).textContent()).toBe('sgtokidoki');
}
// create forth page, and check does the recent page list only contains 3 pages // create forth page, and check does the recent page list only contains three pages
await openHomePage(page); await openHomePage(page);
await page.waitForTimeout(1000); await page.waitForTimeout(1000);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await addNewPage.click(); await addNewPage.click();
await page.waitForTimeout(300); await page.waitForTimeout(200);
await page.keyboard.insertText('affine is the best'); {
await page.waitForTimeout(300); const title = getBlockSuiteEditorTitle(page);
await title.type('affine is the best', {
delay: 50,
});
}
await page.waitForTimeout(1000);
await openQuickSearchByShortcut(page); await openQuickSearchByShortcut(page);
await expect( {
page.getByRole('button', { name: 'affine is the best' }) const quickSearchItems = page.locator('[cmdk-item]');
).toHaveCount(1); expect(await quickSearchItems.nth(0).textContent()).toBe(
await expect(page.getByRole('button', { name: 'sgtokidoki' })).toHaveCount(0); 'affine is the best'
);
expect(await quickSearchItems.nth(1).textContent()).toBe('battlekot');
expect(await quickSearchItems.nth(2).textContent()).toBe('theliquidhorse');
}
}); });

View File

@@ -281,7 +281,6 @@ __metadata:
swc-plugin-coverage-instrument: ^0.0.20 swc-plugin-coverage-instrument: ^0.0.20
swr: 2.2.1 swr: 2.2.1
thread-loader: ^4.0.2 thread-loader: ^4.0.2
ts-node: ^10.9.1
webpack: ^5.88.2 webpack: ^5.88.2
webpack-cli: ^5.1.4 webpack-cli: ^5.1.4
webpack-dev-server: ^4.15.1 webpack-dev-server: ^4.15.1