Modularize nightly and pull-request workflows #91
This file contains hidden or 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
| # Run tests on a pull request after it has been labeled 'safe to test' | |
| name: test-pull-request | |
| # Controls when the workflow will run | |
| on: | |
| # Triggers the workflow on pull requests that contain the label 'safe to test' | |
| pull_request: | |
| types: [ labeled ] | |
| permissions: {} | |
| jobs: | |
| build-linux: | |
| name: build-linux | |
| runs-on: ubuntu-latest | |
| if: contains(github.event.pull_request.labels.*.name, 'safe to test') | |
| steps: | |
| - &checkout | |
| name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| ref: "refs/pull/${{ github.event.number }}/merge" | |
| persist-credentials: false | |
| - &verify-head | |
| name: Verify Head | |
| shell: bash | |
| run: | | |
| if [ "$(git ls-remote origin ${{ github.event.number }}/head | awk '{print $1}')" != "${{ github.event.pull_request.head.sha }}" ]; then | |
| echo "HEAD does not match github.event.pull_request.head.sha" | |
| exit 1 | |
| fi | |
| - &setup-node | |
| name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 18.x | |
| - &install-dependencies | |
| name: Install dependencies | |
| run: npm run project-install-clean | |
| - &package | |
| name: Package vsix | |
| run: npm run package | |
| - *install-dependencies | |
| - &setup-test | |
| name: Setup tests | |
| run: npm run test-setup | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: build-linux | |
| path: | | |
| *.vsix | |
| out | |
| build-windows: | |
| name: build-windows | |
| runs-on: windows-latest | |
| if: contains(github.event.pull_request.labels.*.name, 'safe to test') | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - *setup-node | |
| - *install-dependencies | |
| - *package | |
| - *install-dependencies | |
| - *setup-test | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: build-windows | |
| path: | | |
| *.vsix | |
| out | |
| build-macos: | |
| name: build-macos | |
| runs-on: macos-14 | |
| if: contains(github.event.pull_request.labels.*.name, 'safe to test') | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - *setup-node | |
| - *install-dependencies | |
| - *package | |
| - *install-dependencies | |
| - *setup-test | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: build-macos | |
| path: | | |
| *.vsix | |
| out | |
| # SMOKE TESTS | |
| test-smoke-linux: | |
| name: Smoke Test ${{ matrix.version }}-linux | |
| needs: build-linux | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: [R2021b, R2022a, R2022b, latest] | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - &download-linux-build-artifacts | |
| name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: build-linux | |
| - &setup-MATLAB | |
| name: Set up MATLAB | |
| uses: matlab-actions/setup-matlab@v2 | |
| with: | |
| release: ${{ matrix.version }} | |
| - *setup-node | |
| - *install-dependencies | |
| - name: Start Xvfb | |
| run: /usr/bin/Xvfb :17 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb" | |
| shell: bash | |
| - &run-smoke-tests | |
| name: Run Smoke tests | |
| run: npm run test-smoke | |
| env: | |
| MLM_WEB_LICENSE: true | |
| MLM_WEB_ID: ${{ secrets.MLM_WEB_ID }} | |
| MLM_WEB_USER_CRED: ${{ secrets.MLM_WEB_USER_CRED }} | |
| DISPLAY: ":17.0" | |
| test-smoke-windows: | |
| name: Smoke Test ${{ matrix.version }}-windows | |
| needs: build-windows | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: [R2021b, R2022a, R2022b, latest] | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - &download-windows-build-artifacts | |
| name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: build-windows | |
| - *setup-MATLAB | |
| - *setup-node | |
| - *install-dependencies | |
| - *run-smoke-tests | |
| test-smoke-macos: | |
| name: Smoke Test ${{ matrix.version }}-macos | |
| needs: build-macos | |
| runs-on: macos-14 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: [R2021b, R2022a, R2022b, latest] | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - &download-macos-build-artifacts | |
| name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: build-macos | |
| - *setup-MATLAB | |
| - *setup-node | |
| - *install-dependencies | |
| - *run-smoke-tests | |
| # UI TESTS | |
| test-ui-linux: | |
| if: False | |
| name: UI Test ${{ matrix.version }}-linux | |
| needs: build-linux | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: [R2021b, R2022a, R2022b, latest] | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - *download-linux-build-artifacts | |
| - *setup-MATLAB | |
| - *setup-node | |
| - *install-dependencies | |
| - &run-ui-tests | |
| name: Run UI tests | |
| run: npm run test-ui | |
| env: | |
| MLM_WEB_LICENSE: true | |
| MLM_WEB_ID: ${{ secrets.MLM_WEB_ID }} | |
| MLM_WEB_USER_CRED: ${{ secrets.MLM_WEB_USER_CRED }} | |
| - name: Upload Screenshots | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: screenshots-linux-${{ matrix.version }} | |
| path: ${{ github.workspace }}/.s/screenshots | |
| if-no-files-found: ignore | |
| test-ui-windows: | |
| name: UI Test ${{ matrix.version }}-windows | |
| needs: build-windows | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: [R2021b, R2022a, R2022b, latest] | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - *download-windows-build-artifacts | |
| - *setup-MATLAB | |
| - *setup-node | |
| - *install-dependencies | |
| - *run-ui-tests | |
| - name: Upload Screenshots | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: screenshots-windows-${{ matrix.version }} | |
| path: ${{ github.workspace }}/.s/screenshots | |
| if-no-files-found: ignore | |
| test-ui-macos: | |
| name: UI Test ${{ matrix.version }}-macos | |
| needs: build-macos | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| version: [R2021b, R2022a, R2022b, latest] | |
| steps: | |
| - *checkout | |
| - *verify-head | |
| - *download-macos-build-artifacts | |
| - *setup-MATLAB | |
| - *setup-node | |
| - *install-dependencies | |
| - *run-ui-tests | |
| - name: Upload Screenshots | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: screenshots-macos-${{ matrix.version }} | |
| path: ${{ github.workspace }}/.s/screenshots | |
| if-no-files-found: ignore |