OverviewFilesCommitsIssuesDocsReleasesPeers

pearbrowser-desktop / .github / workflows / desktop-ci.yml

97 lines · yaml ref:
name: Desktop CI

"on":
  pull_request:
  push:
    branches:
      - main
      - feat/**

jobs:
  desktop:
    name: Desktop tests
    runs-on: ubuntu-latest

    steps:
      - name: Checkout PearBrowser desktop
        uses: actions/checkout@v4
        with:
          path: pear-ecosystem/01-browser/pearbrowser-desktop

      - name: Checkout PearBrowser mobile source contracts
        uses: actions/checkout@v4
        with:
          repository: bigdestiny2/PearBrowser
          ref: 5c1c920b8b42ffe895f78c49c43d176d5ca93086
          path: pear-ecosystem/01-browser/PearBrowser

      - name: Checkout HiveRelay release contract
        uses: actions/checkout@v4
        with:
          repository: bigdestiny2/P2P-Hiverelay
          ref: v0.20.2
          path: pear-ecosystem/00-core/hiverelay

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
          cache-dependency-path: pear-ecosystem/01-browser/pearbrowser-desktop/package-lock.json

      - name: Guard HiveRelay 0.20.2 workspace layout
        working-directory: pear-ecosystem/01-browser/pearbrowser-desktop
        run: |
          node scripts/check-hiverelay-layout.mjs
          node - <<'NODE'
          const { readFileSync } = require('node:fs')
          const { join } = require('node:path')
          const expected = [
            ['p2p-hiverelay', '0.20.2', 'pear-ecosystem/00-core/hiverelay/packages/core/package.json'],
            ['p2p-hiverelay-client', '0.20.2', 'pear-ecosystem/00-core/hiverelay/packages/client/package.json'],
            ['p2p-hiverelay-verifier', '0.20.2', 'pear-ecosystem/00-core/hiverelay/packages/verifier/package.json']
          ]
          for (const [name, version, rel] of expected) {
            const pkg = JSON.parse(readFileSync(join(process.env.GITHUB_WORKSPACE, rel), 'utf8'))
            if (pkg.name !== name || pkg.version !== version) {
              throw new Error(`${rel} expected ${name}@${version}, found ${pkg.name || '(missing)'}@${pkg.version || '(missing)'}`)
            }
            console.log(`ok ${name}@${version}`)
          }
          NODE

      - name: Verify HiveRelay packages are published to npm
        working-directory: pear-ecosystem/01-browser/pearbrowser-desktop
        run: |
          node - <<'NODE'
          const { readFileSync } = require('node:fs')
          const { execSync } = require('node:child_process')
          const lock = JSON.parse(readFileSync('package-lock.json', 'utf8'))
          const names = ['p2p-hiverelay', 'p2p-hiverelay-client', 'p2p-hiverelay-verifier']
          for (const name of names) {
            const entry = lock.packages[`node_modules/${name}`] || {}
            const version = entry.version
            if (!version) throw new Error(`${name} is missing from package-lock.json`)
            if (!(entry.resolved || '').includes('registry.npmjs.org')) {
              throw new Error(`${name}@${version} is not registry-resolved (resolved: ${entry.resolved || 'none'}) — a standalone clone would not install it`)
            }
            const published = execSync(`npm view ${name}@${version} version`, { encoding: 'utf8' }).trim()
            if (published !== version) {
              throw new Error(`${name}@${version} is not published to npm (npm view returned: ${published || 'nothing'})`)
            }
            console.log(`ok ${name}@${version} published and registry-resolved`)
          }
          NODE

      - name: Install
        working-directory: pear-ecosystem/01-browser/pearbrowser-desktop
        run: npm ci

      - name: Test
        working-directory: pear-ecosystem/01-browser/pearbrowser-desktop
        run: npm test

      - name: Audit high severity dependencies
        working-directory: pear-ecosystem/01-browser/pearbrowser-desktop
        run: npm audit --audit-level=high