name: DevTools CI

# Declare default permissions as read only.
permissions: read-all

on:
  pull_request:
    types: [labeled]

concurrency:
  group: devtools-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  build-puppeteer:
    name: Build Puppeteer
    runs-on: ubuntu-latest
    if: contains(github.event.label.name, 'devtools')
    steps:
      - name: Checkout
        uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
      - name: Set up Node.js
        uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
        with:
          cache: npm
          node-version: lts/*
      - name: Install dependencies
        run: npm ci
        env:
          PUPPETEER_SKIP_DOWNLOAD: true
      - name: Build Puppeteer
        run: |
          npm run build --workspace @puppeteer/browsers
          npm run build --workspace puppeteer-core
          npm run build --workspace puppeteer
      - name: Pack Puppeteer
        run: |
          npm pack --workspace @puppeteer/browsers
          npm pack --workspace puppeteer-core
          npm pack --workspace puppeteer
      - name: Upload Puppeteer build
        uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
        with:
          name: puppeteer-build
          if-no-files-found: error
          path: puppeteer-*.tgz

  devtools-tests:
    name: DevTools tests
    needs: build-puppeteer
    runs-on: ubuntu-latest
    steps:
      - name: Download Puppeteer build
        uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
        with:
          name: puppeteer-build
      - name: Set up Node.js
        uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0
        with:
          node-version: lts/*
      - name: Checkout depot_tools
        run: git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
      - name: Add depot_tools to path
        run: echo $(realpath depot_tools) >> $GITHUB_PATH
      - name: Fetch devtools-frontend
        run: fetch devtools-frontend
      - name: Sync gclient
        working-directory: devtools-frontend
        run: gclient sync
      - name: Install Puppeteer
        working-directory: devtools-frontend
        run: |
          puppeteer_pkgs=(../puppeteer-*.tgz)
          tar -xf ${puppeteer_pkgs[0]} --strip-components 1 -C node_modules/puppeteer
          tar -xf ${puppeteer_pkgs[1]} --strip-components 1 -C node_modules/@puppeteer/browsers
          tar -xf ${puppeteer_pkgs[2]} --strip-components 1 -C node_modules/puppeteer-core
      - name: Generate targets
        working-directory: devtools-frontend
        run: gn gen out/Default --args='devtools_skip_typecheck=true'
      - name: Run tests
        working-directory: devtools-frontend
        run: npm run auto-e2etest
