Skip to content

Modularize nightly and pull-request workflows #91

Modularize nightly and pull-request workflows

Modularize nightly and pull-request workflows #91

# 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