# Copyright 2020 Signal Messenger, LLC # SPDX-License-Identifier: AGPL-3.0-only name: Benchmark on: push: branches: - development - main - '[0-9]+.[0-9]+.x' pull_request: schedule: - cron: '0 */12 * * *' jobs: linux: runs-on: ubuntu-latest-8-cores if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' && (!github.event.schedule || github.ref == 'refs/heads/main') }} timeout-minutes: 30 steps: - name: Get system specs run: lsb_release -a - name: Get other system specs run: uname -a - name: Clone Desktop repo uses: actions/checkout@v3 - name: Setup node.js uses: actions/setup-node@v3 with: node-version: '20.9.0' - name: Install global dependencies run: npm install -g yarn@1.22.10 npm@10.2.5 - name: Install xvfb run: sudo apt-get install xvfb - name: Cache Desktop node_modules id: cache-desktop-modules uses: actions/cache@v3 with: path: node_modules key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock', 'patches/**') }} - name: Install Desktop node_modules if: steps.cache-desktop-modules.outputs.cache-hit != 'true' run: yarn install --frozen-lockfile env: NPM_CONFIG_LOGLEVEL: verbose - name: Build typescript run: yarn generate - name: Bundle run: yarn build:esbuild:prod - name: Run startup benchmarks run: | set -o pipefail xvfb-run --auto-servernum node ts/test-mock/benchmarks/startup_bench.js | tee benchmark-startup.log timeout-minutes: 10 env: NODE_ENV: production RUN_COUNT: 10 ELECTRON_ENABLE_STACK_DUMPING: on ARTIFACTS_DIR: artifacts/startup - name: Run send benchmarks run: | set -o pipefail rm -rf /tmp/mock xvfb-run --auto-servernum node ts/test-mock/benchmarks/send_bench.js | tee benchmark-send.log timeout-minutes: 10 env: NODE_ENV: production RUN_COUNT: 100 ELECTRON_ENABLE_STACK_DUMPING: on ARTIFACTS_DIR: artifacts/send - name: Run group send benchmarks run: | set -o pipefail rm -rf /tmp/mock xvfb-run --auto-servernum node \ ts/test-mock/benchmarks/group_send_bench.js | \ tee benchmark-group-send.log timeout-minutes: 10 env: NODE_ENV: production RUN_COUNT: 100 CONVERSATION_SIZE: 500 ELECTRON_ENABLE_STACK_DUMPING: on ARTIFACTS_DIR: artifacts/group-send - name: Run large group send benchmarks with delivery receipts run: | set -o pipefail rm -rf /tmp/mock xvfb-run --auto-servernum node \ ts/test-mock/benchmarks/group_send_bench.js | \ tee benchmark-large-group-send.log timeout-minutes: 10 env: NODE_ENV: production GROUP_SIZE: 500 CONTACT_COUNT: 500 GROUP_DELIVERY_RECEIPTS: 500 DISCARD_COUNT: 2 RUN_COUNT: 20 CONVERSATION_SIZE: 50 ELECTRON_ENABLE_STACK_DUMPING: on ARTIFACTS_DIR: artifacts/large-group-send - name: Run conversation open benchmarks run: | set -o pipefail rm -rf /tmp/mock xvfb-run --auto-servernum node \ ts/test-mock/benchmarks/convo_open_bench.js | \ tee benchmark-convo-open.log timeout-minutes: 10 env: NODE_ENV: production RUN_COUNT: 100 ELECTRON_ENABLE_STACK_DUMPING: on ARTIFACTS_DIR: artifacts/convo-open - name: Upload benchmark logs on failure if: failure() uses: actions/upload-artifact@v3 with: name: logs path: artifacts - name: Clone benchmark repo uses: actions/checkout@v3 with: repository: 'signalapp/Signal-Desktop-Benchmarks-Private' path: 'benchmark-results' token: ${{ secrets.AUTOMATED_GITHUB_PAT }} - name: Build benchmark repo working-directory: benchmark-results run: | npm ci npm run build - name: Publish to DataDog working-directory: benchmark-results run: | node ./bin/publish.js ../benchmark-startup.log desktop.ci.performance.startup node ./bin/publish.js ../benchmark-send.log desktop.ci.performance.send node ./bin/publish.js ../benchmark-group-send.log desktop.ci.performance.groupSend node ./bin/publish.js ../benchmark-large-group-send.log desktop.ci.performance.largeGroupSend node ./bin/publish.js ../benchmark-convo-open.log desktop.ci.performance.convoOpen env: DD_API_KEY: ${{ secrets.DATADOG_API_KEY }}