diff --git a/.github/workflows/test-nightly.yml b/.github/workflows/test-nightly.yml index b5b2de5..34a0d62 100644 --- a/.github/workflows/test-nightly.yml +++ b/.github/workflows/test-nightly.yml @@ -11,36 +11,135 @@ on: workflow_dispatch: jobs: - test-smoke: - name: smoke-${{ matrix.version }}-${{ matrix.os }} - runs-on: ${{ matrix.os }} + build-linux: + name: build-linux + runs-on: ubuntu-latest + steps: + - &checkout + name: Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + - &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 + - &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: out + + build-windows: + name: build-windows + runs-on: windows-latest + steps: + - *checkout + - *setup-node + - *install-dependencies + - *setup-test + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + if: always() + with: + name: build-windows + path: out + + build-macos: + name: build-macos + runs-on: macos-14 + steps: + - *checkout + - *setup-node + - *install-dependencies + - *setup-test + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + if: always() + with: + name: build-macos + path: 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] - os: [windows-latest, ubuntu-latest, macos-14] steps: - - name: Checkout - uses: actions/checkout@v4 + - *checkout + - &download-linux-build-artifacts + name: Download build artifacts + uses: actions/download-artifact@v4 with: - submodules: recursive - - name: Set up MATLAB + name: build-linux + - &setup-MATLAB + name: Set up MATLAB uses: matlab-actions/setup-matlab@v2 with: release: ${{ matrix.version }} - - name: Setup node - uses: actions/setup-node@v4 - - name: npm clean install - run: npm run project-install-clean - - name: Start Xvfb + - *setup-node + - *install-dependencies + - name: Start Xvfb run: /usr/bin/Xvfb :17 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb" shell: bash - if: ${{ success() && matrix.os == 'ubuntu-latest' }} - - name: Run tests + - &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}} + MLM_WEB_ID: ${{ secrets.MLM_WEB_ID }} + MLM_WEB_USER_CRED: ${{ secrets.MLM_WEB_USER_CRED }} DISPLAY: ":17.0" - VSCODE_VERSION: "insider" \ No newline at end of file + VSCODE_VERSION: "insider" + + 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 + - &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 + - &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 diff --git a/.github/workflows/test-pull-request.yml b/.github/workflows/test-pull-request.yml index cfc8be0..9ff20b2 100644 --- a/.github/workflows/test-pull-request.yml +++ b/.github/workflows/test-pull-request.yml @@ -8,67 +8,249 @@ on: pull_request_target: types: [ labeled ] -permissions: {} +permissions: {} jobs: - test-smoke: - name: smoke-${{ matrix.version }}-${{ matrix.os }} - runs-on: ${{ matrix.os }} + build-linux: + name: build-linux + runs-on: ubuntu-latest if: contains(github.event.pull_request.labels.*.name, 'safe to test') - strategy: - fail-fast: false - matrix: - version: [R2021b, R2022a, R2022b, latest] - os: [windows-latest, ubuntu-latest, macos-14] steps: - - name: Checkout + - &checkout + name: Checkout uses: actions/checkout@v4 with: submodules: recursive ref: "refs/pull/${{ github.event.number }}/merge" persist-credentials: false - - name: Verify Head + - &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 - - name: Set up MATLAB + - &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 }} - - name: Setup node - uses: actions/setup-node@v4 - - name: npm clean install - run: npm run project-install-clean - - name: Start Xvfb + - *setup-node + - *install-dependencies + - name: Start Xvfb run: /usr/bin/Xvfb :17 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb" shell: bash - if: ${{ success() && matrix.os == 'ubuntu-latest' }} - - name: Package vsix - run: npm run package - - name: npm install - run: npm run project-install - - name: Run Smoke tests + - &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}} + MLM_WEB_ID: ${{ secrets.MLM_WEB_ID }} + MLM_WEB_USER_CRED: ${{ secrets.MLM_WEB_USER_CRED }} DISPLAY: ":17.0" - - name: Run UI tests + + 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}} - DISPLAY: ":17.0" - if: ${{ success() && matrix.os != 'ubuntu-latest' }} - - name: Upload Screenshots + 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-${{ matrix.os }}-${{ matrix.version }} + name: screenshots-macos-${{ matrix.version }} path: ${{ github.workspace }}/.s/screenshots if-no-files-found: ignore