Performance #554
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Performance | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: "0 5 * * *" # Runs every day at 5am: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#scheduled-events-schedule | |
jobs: | |
prepare: | |
name: Performance benchmark on ubuntu-22.04 with Node.js 20.x | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 | |
- name: Use Node.js 20.x | |
uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3.8.2 | |
with: | |
node-version: 20.x | |
registry-url: 'https://registry.npmjs.org' | |
- name: Use Python 3.11 | |
uses: actions/setup-python@b64ffcaf5b410884ad320a9cfac8866006a109aa # v4.8.0 | |
with: | |
python-version: '3.11' | |
- name: Build | |
shell: bash | |
run: yarn | |
- name: Checkout Theia | |
uses: actions/checkout@v3 | |
with: | |
repository: eclipse-theia/theia | |
path: ./theia | |
- name: Patch Theia to disable splash screen | |
shell: bash | |
working-directory: ./theia | |
run: | | |
sed -i '/"splashScreenOptions": {/,/}/c\ "splashScreenOptions": {}' examples/electron/package.json | |
- name: Copy webpack config | |
shell: bash | |
run: | | |
cp -f ./configs/theia.production.webpack.config.js ./theia/examples/browser/webpack.config.js | |
cp -f ./configs/theia.production.webpack.config.js ./theia/examples/electron/webpack.config.js | |
- name: Build Theia | |
shell: bash | |
working-directory: ./theia | |
run: | | |
yarn --skip-integrity-check --network-timeout 100000 | |
yarn download:plugins --rate-limit 1 | |
env: | |
NODE_OPTIONS: --max_old_space_size=4096 | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # https://github.com/microsoft/vscode-ripgrep/issues/9 | |
- name: Build Browser App (Production) | |
shell: bash | |
working-directory: ./theia/examples/browser | |
run: | | |
yarn -s compile && yarn rebuild && yarn theia build --mode=production | |
env: | |
NODE_OPTIONS: --max_old_space_size=4096 | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # https://github.com/microsoft/vscode-ripgrep/issues/9 | |
- name: Build Electron App (Production) | |
shell: bash | |
working-directory: ./theia/examples/electron | |
run: | | |
yarn -s compile && yarn rebuild && yarn theia build --mode=production | |
env: | |
NODE_OPTIONS: --max_old_space_size=4096 | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # https://github.com/microsoft/vscode-ripgrep/issues/9 | |
- name: Cache Build Result | |
uses: actions/cache@v3 | |
id: build-result | |
with: | |
path: ./* | |
key: ${{ github.run_number }} | |
run-browser-tests: | |
name: Performance browser benchmark on ubuntu-22.04 with Node.js 20.x | |
runs-on: ubuntu-22.04 | |
needs: [prepare] | |
strategy: | |
matrix: | |
run: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | |
timeout-minutes: 40 | |
steps: | |
- name: Restore Build Result (#${{ matrix.run }}) | |
uses: actions/cache/restore@v3 | |
id: build-result | |
with: | |
path: ./* | |
key: ${{ github.run_number }} | |
fail-on-cache-miss: true | |
- name: Use Node.js 20.x | |
uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3.8.2 | |
with: | |
node-version: 20.x | |
registry-url: 'https://registry.npmjs.org' | |
- name: Use Python 3.11 | |
uses: actions/setup-python@b64ffcaf5b410884ad320a9cfac8866006a109aa # v4.8.0 | |
with: | |
python-version: '3.11' | |
- name: Get History | |
uses: actions/checkout@v4 | |
with: | |
ref: gh-pages | |
path: gh-pages | |
- name: Run Theia browser backend (#${{ matrix.run }}) | |
shell: bash | |
working-directory: ./theia | |
run: yarn browser start:debug & | |
- name: Run Performance Measurement / browser (#${{ matrix.run }}) | |
shell: bash | |
run: yarn performance | |
env: | |
RUN_NO: ${{ matrix.run }} | |
- name: Upload performance measurement / browser (#${{ matrix.run }}) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: performance-measurement-browser-${{ github.run_number }}-${{ matrix.run }} | |
path: performance-metrics/* | |
run-electron-tests: | |
name: Performance electron benchmark on ubuntu-22.04 with Node.js 20.x | |
runs-on: ubuntu-22.04 | |
needs: [prepare] | |
strategy: | |
matrix: | |
run: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | |
timeout-minutes: 40 | |
steps: | |
- name: Restore Build Result (#${{ matrix.run }}) | |
uses: actions/cache/restore@v3 | |
id: build-result | |
with: | |
path: ./* | |
key: ${{ github.run_number }} | |
fail-on-cache-miss: true | |
- name: Use Node.js 20.x | |
uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3.8.2 | |
with: | |
node-version: 20.x | |
registry-url: 'https://registry.npmjs.org' | |
- name: Use Python 3.11 | |
uses: actions/setup-python@b64ffcaf5b410884ad320a9cfac8866006a109aa # v4.8.0 | |
with: | |
python-version: '3.11' | |
- name: Get History | |
uses: actions/checkout@v4 | |
with: | |
ref: gh-pages | |
path: gh-pages | |
- name: Run Performance Measurement / electron (#${{ matrix.run }}) | |
shell: bash | |
run: xvfb-run yarn performance-on-electron | |
env: | |
RUN_NO: ${{ matrix.run }} | |
- name: Upload performance measurement / electron (#${{ matrix.run }}) | |
uses: actions/upload-artifact@v4 | |
with: | |
name: performance-measurement-electron-${{ github.run_number }}-${{ matrix.run }} | |
path: performance-metrics/* | |
generate-report: | |
name: Create Performance Report | |
runs-on: ubuntu-22.04 | |
needs: [run-browser-tests, run-electron-tests] | |
steps: | |
- name: Restore Build Result | |
uses: actions/cache/restore@v3 | |
id: build-result | |
with: | |
path: ./* | |
key: ${{ github.run_number }} | |
fail-on-cache-miss: true | |
- name: Get History | |
uses: actions/checkout@v4 | |
if: always() && github.ref == 'refs/heads/main' | |
continue-on-error: true | |
with: | |
ref: gh-pages | |
path: gh-pages | |
- name: Download Performance Measurements | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: performance-measurement-*-${{ github.run_number }}-* | |
path: performance-metrics | |
merge-multiple: true | |
- name: Prepare Browser Report | |
if: always() && github.ref == 'refs/heads/main' | |
shell: bash | |
run: yarn performance-report | |
- name: Prepare Electron Report | |
if: always() && github.ref == 'refs/heads/main' | |
shell: bash | |
run: yarn performance-report-electron | |
- name: Publish Report | |
if: always() && github.ref == 'refs/heads/main' | |
uses: peaceiris/actions-gh-pages@v2 | |
env: | |
PERSONAL_TOKEN: ${{ secrets.TOKEN }} | |
PUBLISH_BRANCH: gh-pages | |
PUBLISH_DIR: public |