diff --git a/.gitea/workflows/release-draft.yml b/.gitea/workflows/release-draft.yml index fd37392..8cc66b3 100644 --- a/.gitea/workflows/release-draft.yml +++ b/.gitea/workflows/release-draft.yml @@ -6,21 +6,19 @@ on: workflow_dispatch: jobs: - release: - runs-on: windows + prepare: + runs-on: ubuntu-latest - defaults: - run: - shell: powershell + outputs: + release_tag: ${{ steps.version.outputs.release_tag }} + release_name: ${{ steps.version.outputs.release_name }} + release_version: ${{ steps.version.outputs.release_version }} + release_id: ${{ steps.release.outputs.release_id }} + release_download_url: ${{ steps.release.outputs.release_download_url }} steps: - name: Checkout uses: https://github.com/actions/checkout@v4 - - - name: Install dependencies - run: | - npm ci --include=dev - npm --prefix server ci --include=dev - name: Resolve release version id: version @@ -40,16 +38,111 @@ jobs: --body "Automated draft release from ${{ github.ref_name }} @ ${{ github.sha }}" --write-output + build-linux: + needs: prepare + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: https://github.com/actions/checkout@v4 + + - name: Install dependencies + env: + NODE_ENV: development + run: | + npm install + npm install --prefix server + - name: Set CI release version run: > node tools/set-release-version.js - --version "${{ steps.version.outputs.release_version }}" + --version "${{ needs.prepare.outputs.release_version }}" + + - name: Build application + run: | + npx esbuild node_modules/@timephy/rnnoise-wasm/dist/NoiseSuppressorWorklet.js --bundle --format=esm --outfile=public/rnnoise-worklet.js + npx ng build --configuration production --base-href='./' + npx --package typescript tsc -p tsconfig.electron.json + cd server + node ../tools/sync-server-build-version.js + npx --package typescript tsc - name: Build Linux assets - run: npm run release:build:linux + run: | + npx electron-builder --linux --publish never + node tools/package-server-executable.js --target node18-linux-x64 --output metoyou-server-linux-x64 + + - name: Upload Linux assets + env: + GITEA_RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} + run: > + node tools/gitea-release.js upload-built-assets + --server-url "${{ github.server_url }}" + --repository "${{ github.repository }}" + --release-id "${{ needs.prepare.outputs.release_id }}" + --dist-electron dist-electron + --dist-server dist-server + + build-windows: + needs: prepare + runs-on: windows + + defaults: + run: + shell: powershell + + steps: + - name: Checkout + uses: https://github.com/actions/checkout@v4 + + - name: Install dependencies + env: + NODE_ENV: development + run: | + npm install + npm install --prefix server + + - name: Set CI release version + run: > + node tools/set-release-version.js + --version "${{ needs.prepare.outputs.release_version }}" + + - name: Build application + run: | + npx esbuild node_modules/@timephy/rnnoise-wasm/dist/NoiseSuppressorWorklet.js --bundle --format=esm --outfile=public/rnnoise-worklet.js + npx ng build --configuration production --base-href='./' + npx --package typescript tsc -p tsconfig.electron.json + Push-Location server + node ../tools/sync-server-build-version.js + npx --package typescript tsc + Pop-Location - name: Build Windows assets - run: npm run release:build:win + run: | + npx electron-builder --win --publish never + node tools/package-server-executable.js --target node18-win-x64 --output metoyou-server-win-x64.exe + + - name: Upload Windows assets + env: + GITEA_RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} + run: > + node tools/gitea-release.js upload-built-assets + --server-url "${{ github.server_url }}" + --repository "${{ github.repository }}" + --release-id "${{ needs.prepare.outputs.release_id }}" + --dist-electron dist-electron + --dist-server dist-server + + finalize: + needs: [prepare, build-linux, build-windows] + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: https://github.com/actions/checkout@v4 + + - name: Install dependencies + run: npm install --omit=dev - name: Download previous manifest env: @@ -66,16 +159,16 @@ jobs: node tools/generate-release-manifest.js --existing dist-electron/release-manifest.previous.json --manifest dist-electron/release-manifest.json - --feed-url "${{ steps.release.outputs.release_download_url }}" - --version "${{ steps.version.outputs.release_version }}" + --feed-url "${{ needs.prepare.outputs.release_download_url }}" + --version "${{ needs.prepare.outputs.release_version }}" - - name: Upload assets + - name: Upload release manifest env: GITEA_RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} run: > node tools/gitea-release.js upload-built-assets --server-url "${{ github.server_url }}" --repository "${{ github.repository }}" - --release-id "${{ steps.release.outputs.release_id }}" + --release-id "${{ needs.prepare.outputs.release_id }}" --dist-electron dist-electron - --dist-server dist-server \ No newline at end of file + --dist-server dist-server diff --git a/package.json b/package.json index 629a14d..4a19989 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,11 @@ "prebuild": "npm run bundle:rnnoise", "prestart": "npm run bundle:rnnoise", "bundle:rnnoise": "esbuild node_modules/@timephy/rnnoise-wasm/dist/NoiseSuppressorWorklet.js --bundle --format=esm --outfile=public/rnnoise-worklet.js", - "start": "ng serve", - "build": "ng build", + "start": "npm run ng serve", + "build": "npm run ng build", "build:electron": "tsc -p tsconfig.electron.json", "build:all": "npm run build && npm run build:electron && cd server && npm run build", - "build:prod": "ng build --configuration production --base-href='./'", + "build:prod": "npm run ng build --configuration production --base-href='./'", "watch": "ng build --watch --configuration development", "test": "ng test", "server:build": "cd server && npm run build", diff --git a/server/src/index.ts b/server/src/index.ts index e933c70..0b2b611 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -4,10 +4,7 @@ import path from 'path'; import fs from 'fs'; import { createServer as createHttpServer } from 'http'; import { createServer as createHttpsServer } from 'https'; -import { - resolveCertificateDirectory, - resolveEnvFilePath -} from './runtime-paths'; +import { resolveCertificateDirectory, resolveEnvFilePath } from './runtime-paths'; // Load .env from project root (one level up from server/) dotenv.config({ path: resolveEnvFilePath() });