Merge pull request #5446 from Tyriar/tyriar/npm #1240
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
| name: CI | |
| on: | |
| push: | |
| branches: [ "master" ] | |
| pull_request: | |
| branches: [ "master" ] | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Use Node.js 22.x | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 22.x | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Setup and run tsc | |
| run: npm run setup | |
| - name: Esbuild | |
| run: npm run esbuild | |
| - name: Zip artifacts | |
| run: | | |
| zip -r compressed-build \ | |
| ./lib/* \ | |
| ./out/* \ | |
| ./out-*/* \ | |
| ./addons/addon-attach/lib/* \ | |
| ./addons/addon-attach/out/* \ | |
| ./addons/addon-attach/out-*/* \ | |
| ./addons/addon-clipboard/lib/* \ | |
| ./addons/addon-clipboard/out/* \ | |
| ./addons/addon-clipboard/out-*/* \ | |
| ./addons/addon-fit/lib/* \ | |
| ./addons/addon-fit/out/* \ | |
| ./addons/addon-fit/out-*/* \ | |
| ./addons/addon-image/lib/* \ | |
| ./addons/addon-image/out/* \ | |
| ./addons/addon-image/out-*/* \ | |
| ./addons/addon-ligatures/lib/* \ | |
| ./addons/addon-ligatures/out/* \ | |
| ./addons/addon-ligatures/out-*/* \ | |
| ./addons/addon-progress/lib/* \ | |
| ./addons/addon-progress/out/* \ | |
| ./addons/addon-progress/out-*/* \ | |
| ./addons/addon-search/lib/* \ | |
| ./addons/addon-search/out/* \ | |
| ./addons/addon-search/out-*/* \ | |
| ./addons/addon-serialize/lib/* \ | |
| ./addons/addon-serialize/out/* \ | |
| ./addons/addon-serialize/out-*/* \ | |
| ./addons/addon-unicode11/lib/* \ | |
| ./addons/addon-unicode11/out/* \ | |
| ./addons/addon-unicode11/out-*/* \ | |
| ./addons/addon-unicode-graphemes/lib/* \ | |
| ./addons/addon-unicode-graphemes/out/* \ | |
| ./addons/addon-unicode-graphemes/out-*/* \ | |
| ./addons/addon-web-links/lib/* \ | |
| ./addons/addon-web-links/out/* \ | |
| ./addons/addon-web-links/out-*/* \ | |
| ./addons/addon-webgl/lib/* \ | |
| ./addons/addon-webgl/out/* \ | |
| ./addons/addon-webgl/out-*st/* | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| path: compressed-build.zip | |
| if-no-files-found: error | |
| lint: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Use Node.js 22.x | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 22.x | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| npm ci | |
| - name: Lint code | |
| env: | |
| NODE_OPTIONS: --max_old_space_size=4096 | |
| run: npm run lint | |
| - name: Lint API | |
| run: npm run lint-api | |
| test-unit-coverage: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 10 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Use Node.js 22.x | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: 22.x | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| npm ci | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| - name: Unzip artifacts | |
| shell: bash | |
| run: | | |
| if [ "$RUNNER_OS" == "Windows" ]; then | |
| pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}" | |
| else | |
| unzip -o compressed-build.zip | |
| fi | |
| ls -R | |
| - name: Unit test coverage | |
| run: | | |
| npm run test-unit-coverage --forbid-only | |
| EXIT_CODE=$? | |
| ./node_modules/.bin/nyc report --reporter=cobertura | |
| exit $EXIT_CODE | |
| test-unit: | |
| timeout-minutes: 20 | |
| strategy: | |
| matrix: | |
| node-version: [22] | |
| runs-on: [ubuntu, macos, windows] | |
| runs-on: ${{ matrix.runs-on }}-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Use Node.js ${{ matrix.node-version }}.x | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: ${{ matrix.node-version }}.x | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| npm ci | |
| - name: Wait for build job | |
| uses: NathanFirmo/[email protected] | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| job: build | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| - name: Unzip artifacts | |
| shell: bash | |
| run: | | |
| if [ "$RUNNER_OS" == "Windows" ]; then | |
| pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}" | |
| else | |
| unzip -o compressed-build.zip | |
| fi | |
| ls -R | |
| - name: Unit tests | |
| run: npm run test-unit --forbid-only | |
| test-integration: | |
| timeout-minutes: 20 | |
| strategy: | |
| matrix: | |
| node-version: [22] # just one as integration tests are about testing in browser | |
| runs-on: [ubuntu-22.04] # macos is flaky | |
| browser: [chromium, firefox, webkit] | |
| runs-on: ${{ matrix.runs-on }} | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Use Node.js ${{ matrix.node-version }}.x | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: ${{ matrix.node-version }}.x | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| npm ci | |
| - name: Install playwright | |
| run: npx playwright install --with-deps ${{ matrix.browser }} | |
| - name: Wait for build job | |
| uses: NathanFirmo/[email protected] | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| job: build | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| - name: Unzip artifacts | |
| shell: bash | |
| run: | | |
| if [ "$RUNNER_OS" == "Windows" ]; then | |
| pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}" | |
| else | |
| unzip -o compressed-build.zip | |
| fi | |
| ls -R | |
| - name: Build demo | |
| run: npm run esbuild-demo | |
| - name: Integration tests (core) # Tests use 50% workers to reduce flakiness | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=core | |
| - name: Integration tests (addon-attach) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-attach | |
| - name: Integration tests (addon-clipboard) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-clipboard | |
| - name: Integration tests (addon-fit) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-fit | |
| - name: Integration tests (addon-image) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-image | |
| - name: Integration tests (addon-progress) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-progress | |
| - name: Integration tests (addon-search) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-search | |
| - name: Integration tests (addon-serialize) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-serialize | |
| - name: Integration tests (addon-unicode-graphemes) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-unicode-graphemes | |
| - name: Integration tests (addon-unicode11) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-unicode11 | |
| - name: Integration tests (addon-web-links) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-web-links | |
| - name: Integration tests (addon-webgl) | |
| run: npm run test-integration-${{ matrix.browser }} --workers=50% --forbid-only --suite=addon-webgl | |
| release-dry-run: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [22] | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Use Node.js ${{ matrix.node-version }}.x | |
| uses: actions/setup-node@v3 | |
| with: | |
| node-version: ${{ matrix.node-version }}.x | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: | | |
| npm ci | |
| - name: Install playwright | |
| run: npx playwright install | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: build-artifacts | |
| - name: Unzip artifacts | |
| shell: bash | |
| run: | | |
| if [ "$RUNNER_OS" == "Windows" ]; then | |
| pwsh -Command "7z x compressed-build.zip -aoa -o${{ github.workspace }}" | |
| else | |
| unzip -o compressed-build.zip | |
| fi | |
| ls -R | |
| - name: Package headless | |
| run: | | |
| npm run package-headless | |
| node ./bin/package_headless.js | |
| - name: Publish to npm (dry run) | |
| run: node ./bin/publish.js --dry |