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