From 0131d5ad8c62affffee91134bcf0d3c3a2ca08bb Mon Sep 17 00:00:00 2001 From: an-lee Date: Sun, 18 Feb 2024 15:24:01 +0800 Subject: [PATCH] Test: fix e2e tests (#318) * fix whisper check test * ifx test action * update test action * fix test in ubuntu * update test-enjoy-app.yml * update workflows * update test trigger * add sdl2 dependencies for macos * update workflows --- .github/workflows/build-enjoy-app.yml | 18 ----------- .github/workflows/release-enjoy-app.yml | 7 +---- .github/workflows/test-enjoy-app.yml | 41 +++++++++++++++++-------- README.md | 10 ++++-- enjoy/e2e/main.spec.ts | 10 ++++++ enjoy/src/main/settings.ts | 10 +++++- enjoy/src/main/whisper.ts | 20 ++++++++---- 7 files changed, 70 insertions(+), 46 deletions(-) delete mode 100644 .github/workflows/build-enjoy-app.yml diff --git a/.github/workflows/build-enjoy-app.yml b/.github/workflows/build-enjoy-app.yml deleted file mode 100644 index 0e8cee603..000000000 --- a/.github/workflows/build-enjoy-app.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Build Enjoy App -on: workflow_dispatch - -jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [macos-11, macos-13, macos-latest, windows-latest, ubuntu-latest] - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: install dependencies - run: yarn install - - name: build - run: yarn make:enjoy diff --git a/.github/workflows/release-enjoy-app.yml b/.github/workflows/release-enjoy-app.yml index 87720d50f..7e5e279ad 100644 --- a/.github/workflows/release-enjoy-app.yml +++ b/.github/workflows/release-enjoy-app.yml @@ -6,7 +6,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macos-latest, windows-latest, ubuntu-latest] + os: [macos-latest, macos-13-xlarge, windows-latest, ubuntu-latest] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -18,8 +18,3 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} run: yarn publish:enjoy - - if: matrix.os == 'macos-latest' - env: - GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} - PACKAGE_OS_ARCH: arm64 - run: yarn run publish:enjoy --arch=arm64 diff --git a/.github/workflows/test-enjoy-app.yml b/.github/workflows/test-enjoy-app.yml index bf765c5a2..c8bc4f67e 100644 --- a/.github/workflows/test-enjoy-app.yml +++ b/.github/workflows/test-enjoy-app.yml @@ -1,34 +1,51 @@ name: Test Enjoy App -on: workflow_dispatch +on: + workflow_dispatch: + pull_request_target: + branches: + - main + paths: + - "enjoy/**/*.ts" + - "enjoy/**/*.tsx" + - "enjoy/**/*.js" + - "enjoy/**/*.mjs" jobs: test: timeout-minutes: 60 runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: os: [ - macos-11, - macos-12, - macos-13, macos-latest, + macos-13, + macos-13-xlarge, + windows-2019, windows-latest, + ubuntu-20.04, ubuntu-latest, ] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: node-version: 20 - name: Install dependencies run: npm install -g yarn && yarn - - name: Install Playwright Browsers - run: yarn workspace enjoy playwright install --with-deps - - name: Package - run: yarn package:enjoy - - name: Run Playwright tests + - if: matrix.os == 'macos-latest' + name: Install sdl2 for macos + run: | + brew update + brew install sdl2 + - if: matrix.os == 'ubuntu-latest' + name: Run tests with xvfb-run on ubuntu + run: | + xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:enjoy + - if: matrix.os != 'ubuntu-latest' + name: Run tests run: yarn test:enjoy - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 if: always() with: name: playwright-report diff --git a/README.md b/README.md index 263d9db0d..6aa4d0304 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,9 @@ # Enjoy App +[![Test](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/test-enjoy-app.yml/badge.svg)](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/test-enjoy-app.yml) +[![Release](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/release-enjoy-app.yml/badge.svg)](https://github.com/xiaolai/everyone-can-use-english/actions/workflows/release-enjoy-app.yml) + ## \* 开发者 ### 本地启动 @@ -79,7 +82,7 @@ yarn make:enjoy yarn start:enjoy ``` -6. 以后重新启动用 Terminal +6. 以后重新启动用 Terminal ```bash cd ~/github/everyone-can-use-english @@ -205,6 +208,7 @@ yarn make:enjoy **Q: 很多解决不了的问题,怎么办?** -其实,可能还有很多其它问题,比如,本软件安装、OpenAI(注册、支付)、美国线路…… +其实,可能还有很多其它问题,比如,本软件安装、OpenAI(注册、支付)、美国线路…… + +> A: 1)文本生成,可以暂时用各种翻译工具,比如 Google Translate,或者其它的替代方案;2)语音生成,可以暂时用开源免费的 [Edge-TTS-record](https://github.com/LuckyHookin/edge-TTS-record) -> A: 1)文本生成,可以暂时用各种翻译工具,比如 Google Translate,或者其它的替代方案;2)语音生成,可以暂时用开源免费的 [Edge-TTS-record](https://github.com/LuckyHookin/edge-TTS-record) \ No newline at end of file diff --git a/enjoy/e2e/main.spec.ts b/enjoy/e2e/main.spec.ts index a74fc266e..eb81cc28d 100644 --- a/enjoy/e2e/main.spec.ts +++ b/enjoy/e2e/main.spec.ts @@ -9,6 +9,8 @@ import { ipcRendererInvoke, } from "electron-playwright-helpers"; import { ElectronApplication, Page, _electron as electron } from "playwright"; +import path from "path"; +import fs from "fs-extra"; declare global { interface Window { @@ -25,6 +27,13 @@ test.beforeAll(async () => { const appInfo = parseElectronApp(latestBuild); // set the CI environment variable to true process.env.CI = "e2e"; + + const resultDir = path.join(process.cwd(), "test-results"); + + fs.ensureDirSync(resultDir); + process.env.SETTINGS_PATH = resultDir; + process.env.LIBRARY_PATH = resultDir; + electronApp = await electron.launch({ args: [appInfo.main], executablePath: appInfo.executable, @@ -61,6 +70,7 @@ test("validate whisper command", async () => { const res = await page.evaluate(() => { return window.__ENJOY_APP__.whisper.check(); }); + console.info(res.log); expect(res.success).toBeTruthy(); }); diff --git a/enjoy/src/main/settings.ts b/enjoy/src/main/settings.ts index fb698f931..c6de2f4b8 100644 --- a/enjoy/src/main/settings.ts +++ b/enjoy/src/main/settings.ts @@ -6,6 +6,13 @@ import fs from "fs-extra"; import log from "electron-log"; import * as i18n from "i18next"; +if (process.env.SETTINGS_PATH) { + settings.configure({ + dir: process.env.SETTINGS_PATH, + prettify: true, + }); +} + const logger = log.scope("settings"); const language = () => { const _language = settings.getSync("language"); @@ -28,7 +35,8 @@ const libraryPath = () => { if (!_library || typeof _library !== "string") { settings.setSync( "library", - path.join(app.getPath("documents"), LIBRARY_PATH_SUFFIX) + process.env.LIBRARY_PATH || + path.join(app.getPath("documents"), LIBRARY_PATH_SUFFIX) ); } else if (path.parse(_library).base !== LIBRARY_PATH_SUFFIX) { settings.setSync("library", path.join(_library, LIBRARY_PATH_SUFFIX)); diff --git a/enjoy/src/main/whisper.ts b/enjoy/src/main/whisper.ts index c3e5acfcc..c282ea492 100644 --- a/enjoy/src/main/whisper.ts +++ b/enjoy/src/main/whisper.ts @@ -46,16 +46,23 @@ class Whipser { } async initialize() { - const bundleModels = fs.readdirSync(this.bundledModelsDir); + const models = []; + + const bundledModels = fs.readdirSync(this.bundledModelsDir); + for (const file of bundledModels) { + const model = WHISPER_MODELS_OPTIONS.find((m) => m.name == file); + if (!model) continue; + + models.push({ + ...model, + savePath: path.join(this.bundledModelsDir, file), + }); + } const dir = path.join(settings.libraryPath(), "whisper", "models"); fs.ensureDirSync(dir); const files = fs.readdirSync(dir); - - const availableModelFiles = bundleModels.concat(files); - - const models = []; - for (const file of availableModelFiles) { + for (const file of files) { const model = WHISPER_MODELS_OPTIONS.find((m) => m.name == file); if (!model) continue; @@ -106,6 +113,7 @@ class Whipser { await this.initialize(); const model = this.currentModel(); + logger.debug(`Checking whisper model: ${model}`); const sampleFile = path.join(__dirname, "samples", "jfk.wav"); const tmpDir = settings.cachePath();