Files
pezkuwi-subquery/.github/workflows/ci.yml
T
Satoshi Qazi Muhammed 01a4903337 Keep the light client out of the bot images
@pezkuwi/rpc-provider lists @bizinikiwi/connect as an optional dependency,
so npm installed it, with smoldot, into both images. Both are GPL-3.0, and
the bots never load them: they reach the chains over WsProvider. The images
now install with --omit=optional; with that install both bots load and read
the relay, Asset Hub and People chains.

The lockfiles still list the packages, so Dependency Review, which denies
GPL-3.0, flagged them on the new payout-bot lockfile (the noter's had them
before). It allows exactly those three packages, and the bots job fails if
an image contains @bizinikiwi or smoldot, so the allowance cannot outlive
the reason for it.
2026-10-08 22:45:54 +04:00

81 lines
2.5 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Enable Corepack
run: corepack enable
- name: Install dependencies
run: yarn install --immutable
- name: Generate types
run: ./node_modules/.bin/subql codegen pezkuwi.yaml
- name: Build
run: ./node_modules/.bin/subql build pezkuwi.yaml
# The noter and payout bots ship as their own images (docker-compose.prod.yml)
# and nothing else here builds or runs them. Build each image as production
# does, then run inside it: the crypto stack must be the locked one and sign
# with every key type, and the bot must load its whole module graph and stop
# only where it reads the mnemonic that CI does not have.
bots:
name: bots (${{ matrix.bot }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- bot: noter
mode: esm
expect: 'No noter mnemonic found'
- bot: payout-bot
mode: cjs
expect: "ENOENT: no such file or directory, open '/run/secrets/payout_mnemonic'"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build the image
run: docker build -t bot ${{ matrix.bot }}
# Dependency Review allows these GPL-3.0 packages in the lockfiles only
# because no image installs them; this is the check that keeps it true.
- name: No light client in the image
run: |
docker run --rm bot sh -c '! [ -e node_modules/@bizinikiwi ] && ! [ -e node_modules/smoldot ]' || {
echo "the image installs the light client; it must be built with --omit=optional"; exit 1; }
- name: Crypto stack
run: docker run --rm -v "$PWD/scripts/bot-smoke.mjs:/app/bot-smoke.mjs:ro" bot node bot-smoke.mjs ${{ matrix.mode }}
- name: The bot loads and stops at its missing mnemonic
env:
EXPECT: ${{ matrix.expect }}
run: |
set +e
out=$(timeout 60 docker run --rm bot 2>&1)
code=$?
set -e
echo "$out"
[ "$code" -ne 0 ] && [ "$code" -ne 124 ] || { echo "expected the bot to exit with an error, got $code"; exit 1; }
grep -qF "$EXPECT" <<<"$out" || { echo "expected: $EXPECT"; exit 1; }