mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2024-05-17 04:12:40 +00:00
3a4992633e
Sorry for the very big commit that may lead to git log issues and merge conflicts, but it's a major step forward: * Server can be faster at startup because imports() are async and we can easily lazy import big modules * Angular doesn't seem to support ES import (with .js extension), so we had to correctly organize peertube into a monorepo: * Use yarn workspace feature * Use typescript reference projects for dependencies * Shared projects have been moved into "packages", each one is now a node module (with a dedicated package.json/tsconfig.json) * server/tools have been moved into apps/ and is now a dedicated app bundled and published on NPM so users don't have to build peertube cli tools manually * server/tests have been moved into packages/ so we don't compile them every time we want to run the server * Use isolatedModule option: * Had to move from const enum to const (https://www.typescriptlang.org/docs/handbook/enums.html#objects-vs-enums) * Had to explictely specify "type" imports when used in decorators * Prefer tsx (that uses esbuild under the hood) instead of ts-node to load typescript files (tests with mocha or scripts): * To reduce test complexity as esbuild doesn't support decorator metadata, we only test server files that do not import server models * We still build tests files into js files for a faster CI * Remove unmaintained peertube CLI import script * Removed some barrels to speed up execution (less imports)
89 lines
2.4 KiB
YAML
89 lines
2.4 KiB
YAML
name: Benchmark
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- ci
|
|
schedule:
|
|
- cron: '0 */12 * * *'
|
|
|
|
jobs:
|
|
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
|
|
services:
|
|
redis:
|
|
image: redis
|
|
ports:
|
|
- 6379:6379
|
|
|
|
postgres:
|
|
image: postgres:9.6
|
|
ports:
|
|
- 5432:5432
|
|
env:
|
|
POSTGRES_USER: peertube
|
|
POSTGRES_HOST_AUTH_METHOD: trust
|
|
|
|
env:
|
|
PGUSER: peertube
|
|
PGHOST: localhost
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
|
|
- uses: './.github/actions/reusable-prepare-peertube-build'
|
|
with:
|
|
node-version: '16.x'
|
|
|
|
- uses: './.github/actions/reusable-prepare-peertube-run'
|
|
|
|
- name: Build
|
|
run: |
|
|
startClient=`date +%s`
|
|
npm run build:client
|
|
endClient=`date +%s`
|
|
clientBuildTime=$((endClient-startClient))
|
|
|
|
startServer=`date +%s`
|
|
npm run build:server
|
|
endServer=`date +%s`
|
|
serverBuildTime=$((endServer-startServer))
|
|
|
|
echo '{"clientBuildTime":'$clientBuildTime',"serverBuildTime":'$serverBuildTime'}'> build-time.json
|
|
|
|
- name: Startup
|
|
run: |
|
|
npm run clean:server:test
|
|
|
|
startCold=`date +%s%3N`
|
|
NODE_APP_INSTANCE=1 NODE_ENV=test node dist/server --benchmark-startup
|
|
endCold=`date +%s%3N`
|
|
coldStartupTime=$(echo "scale=2; ($endCold-$startCold)/1000" | bc)
|
|
|
|
startHot=`date +%s%3N`
|
|
NODE_APP_INSTANCE=1 NODE_ENV=test node dist/server --benchmark-startup
|
|
endHot=`date +%s%3N`
|
|
hotStartupTime=$(echo "scale=2; ($endHot-$startHot)/1000" | bc)
|
|
|
|
echo '{"coldStartupTime":'$coldStartupTime',"hotStartupTime":'$hotStartupTime'}'> startup-time.json
|
|
|
|
- name: Run benchmark
|
|
run: |
|
|
npm run benchmark-server -- -o benchmark.json
|
|
|
|
- name: Display result
|
|
run: |
|
|
cat benchmark.json build-time.json startup-time.json
|
|
|
|
- name: Upload benchmark result
|
|
uses: './.github/actions/reusable-deploy'
|
|
with:
|
|
source: benchmark.json build-time.json startup-time.json
|
|
destination: peertube-stats
|
|
knownHosts: ${{ secrets.STATS_DEPLOYEMENT_KNOWN_HOSTS }}
|
|
deployKey: ${{ secrets.STATS_DEPLOYEMENT_KEY }}
|
|
deployUser: ${{ secrets.STATS_DEPLOYEMENT_USER }}
|
|
deployHost: ${{ secrets.STATS_DEPLOYEMENT_HOST }}
|