diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 00000000000..5aaa5b9320d --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,78 @@ + +# Copyright 2020-2021 Signal Messenger, LLC +# SPDX-License-Identifier: AGPL-3.0-only + +name: Benchmark +on: push + +jobs: + linux: + runs-on: ubuntu-latest + if: ${{ github.repository == 'signalapp/Signal-Desktop-Private' }} + + steps: + - name: Get system specs + run: lsb_release -a + - name: Get other system specs + run: uname -a + + - name: Clone Desktop repo + uses: actions/checkout@v2 + - name: Clone Mock-Server repo + uses: actions/checkout@v2 + with: + repository: 'signalapp/Mock-Signal-Server-Private' + path: 'Mock-Server' + token: ${{ secrets.AUTOMATED_GITHUB_PAT }} + + - name: Setup node.js + uses: actions/setup-node@v2 + with: + node-version: '14.16.0' + - name: Install global dependencies + run: npm install -g yarn@1.22.10 ts-node + + - name: Install xvfb + run: sudo apt-get install xvfb + + - name: Cache Desktop node_modules + id: cache-desktop-modules + uses: actions/cache@v2 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }} + + - name: Install Desktop node_modules + if: steps.cache-desktop-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + + - name: Install Mock-Server node_modules + run: npm ci + working-directory: Mock-Server + + - name: Build typescript + run: yarn grunt + - name: Bundle + run: yarn build:webpack + + - name: Copy CI configuration + run: cp -rf ./Mock-Server/config/local-development.json ./config/ + + - name: Setup hosts + run: sudo echo "127.0.0.1 mock.signal.org" | sudo tee -a /etc/hosts + + - name: Run benchmarks + run: | + xvfb-run --auto-servernum \ + ts-node Mock-Server/scripts/load-test.ts ./node_modules/.bin/electron . | tee benchmark.log || \ + (cat /home/runner/.config/Signal-mock/logs/{app,main}.log && exit 1) + timeout-minutes: 10 + env: + RUN_COUNT: 10 + ELECTRON_ENABLE_STACK_DUMPING: on + + - name: Upload benchmark log + uses: actions/upload-artifact@v2 + with: + name: benchmark.log + path: benchmark.log diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3f8ca0ef068..482d1f84d80 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,17 @@ jobs: with: node-version: '14.16.0' - run: npm install -g yarn@1.22.10 - - run: yarn install --frozen-lockfile + + - name: Cache Desktop node_modules + id: cache-desktop-modules + uses: actions/cache@v2 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }} + - name: Install Desktop node_modules + if: steps.cache-desktop-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + - run: yarn generate - run: yarn lint - run: yarn lint-deps @@ -35,7 +45,17 @@ jobs: with: node-version: '14.16.0' - run: npm install -g yarn@1.22.10 - - run: yarn install --frozen-lockfile + + - name: Cache Desktop node_modules + id: cache-desktop-modules + uses: actions/cache@v2 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }} + - name: Install Desktop node_modules + if: steps.cache-desktop-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + - run: yarn generate - run: yarn prepare-beta-build - run: yarn build @@ -58,7 +78,17 @@ jobs: node-version: '14.16.0' - run: sudo apt-get install xvfb - run: npm install -g yarn@1.22.10 - - run: yarn install --frozen-lockfile + + - name: Cache Desktop node_modules + id: cache-desktop-modules + uses: actions/cache@v2 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }} + - name: Install Desktop node_modules + if: steps.cache-desktop-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + - run: yarn generate - run: yarn prepare-beta-build - run: yarn build @@ -84,7 +114,17 @@ jobs: with: node-version: '14.16.0' - run: npm install -g yarn@1.22.10 - - run: yarn install --frozen-lockfile + + - name: Cache Desktop node_modules + id: cache-desktop-modules + uses: actions/cache@v2 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('yarn.lock') }} + - name: Install Desktop node_modules + if: steps.cache-desktop-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + - run: yarn generate - run: node build\grunt.js - run: yarn test-node