Skip to content

Merge branch 'main' into F/dev/DocumentViewLazy #16692

Merge branch 'main' into F/dev/DocumentViewLazy

Merge branch 'main' into F/dev/DocumentViewLazy #16692

Workflow file for this run

name: CI
on: push
env:
# Creates and uploads sourcemaps to Application error telemetry, and save the built extension as an artifact
PUBLIC_RELEASE: ${{ github.ref == 'refs/heads/main' }}
# Staging URL, also directly used by webpack
SERVICE_URL: https://app-stg.pixiebrix.com/
jobs:
test:
runs-on: ubuntu-latest
# The tests currently take ~16 minutes to run. Anything longer is probably due to a flaky test.
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
- run: npm run test -- --coverage
- uses: actions/upload-artifact@v4
with:
name: extension-test-coverage
path: coverage/coverage-final.json
upload-to-codecov:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
name: extension-test-coverage
- name: Upload coverage to Codecov
uses: Wandalen/wretry.action@v1.3.0
with:
action: codecov/codecov-action@v3
with: |
fail_ci_if_error: true
verbose: true
# This upload endpoint from CodeCov is very flaky
# Retry every 15 seconds, for up to 10 minutes
attempt_delay: 15000
attempt_limit: 40
build:
runs-on: ubuntu-latest
env:
SOURCE_MAP_URL_BASE: https://pixiebrix-extension-source-maps.s3.amazonaws.com
SOURCE_MAP_PATH: sourcemaps/${{ github.job }}/${{ github.sha }}/mv${{ matrix.MV }}
strategy:
matrix:
include:
- MV: 2
PUBLIC_NAME: ""
- MV: 3
PUBLIC_NAME: "-mv3"
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
- run: npm run build:webpack
env:
MV: ${{ matrix.MV }}
ENVIRONMENT: staging
EXTERNALLY_CONNECTABLE: "${{ env.SERVICE_URL }}*"
MARKETPLACE_URL: ${{ secrets.STAGING_MARKETPLACE_URL }}
CHROME_EXTENSION_ID: kkomancachnjkdalpcokenmjlimmbaog
CHROME_MANIFEST_KEY: ${{ secrets.CHROME_MANIFEST_STAGING_PUBLIC_KEY }}
DATADOG_APPLICATION_ID: ${{ secrets.DATADOG_APPLICATION_ID }}
DATADOG_CLIENT_TOKEN: ${{ secrets.DATADOG_CLIENT_TOKEN }}
- name: Save extension
uses: actions/upload-artifact@v4
if: ${{ fromJSON(env.PUBLIC_RELEASE)}}
with:
name: build-staging${{ matrix.PUBLIC_NAME }}
path: |
dist
!dist/**/*.map
retention-days: 5
if-no-files-found: error
# The polyfill cannot be used outside the extension context
- run: "! grep 'loaded in a browser extension' dist/pageScript.js --files-with-matches"
name: Detect browser-polyfill in pageScript.js
# The messenger cannot be executed twice; only load it in contentScriptCore
# https://github.com/pixiebrix/webext-messenger/issues/88
# - contentScript.js can't have it because the file could be injected multiple times, guarding contentScriptCore
# - loadActivationEnhancements.js can't have it because it's always loaded alongside contentScript.js
- run: "! grep '__getTabData' dist/loadActivationEnhancements.js dist/contentScript.js dist/setExtensionIdInApp.js --files-with-matches"
name: Detect webext-messenger unwanted bundles
- uses: actions/upload-artifact@v4
# TODO: Eventually upload the MV3 report instead
if: matrix.MV == 2
name: Save report.html
with:
name: build-staging-bundle-dependency-report
path: report.html
retention-days: 5
if-no-files-found: error
generate-headers:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
- run: npm run generate:headers
- uses: actions/upload-artifact@v4
name: Save headers.json
with:
name: brick-headers
path: headers.json
retention-days: 5
if-no-files-found: error
types:
# Surface type errors in GitHub’s UI faster and outside webpack
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
- run: npm run build:typescript
# Prevent regressions in the files that have already been made strictNullCheck-compliant
- run: npm run build:strictNullChecks
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
- run: npm run lint:full
dead-code:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: package.json
cache: npm
- run: npm ci
# https://knip.dev/overview/getting-started#without-installation
- run: npm install -D knip@4
# Do a run without an exit code. Knip's "warn" setting is not working for files and devDependencies.
- run: npm run dead-code -- --config knip.mjs --no-exit-code
- run: npm run dead-code -- --config knip.mjs --include files,duplicates,dependencies,classMembers,binaries,enumMembers,nsTypes,exports,nsExports
# https://pre-commit.com/#usage-in-continuous-integration
prettier:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- uses: pre-commit/action@v3.0.0