~ knotless Search/
↑↓ move↵ open⇧↵ all results

chadtmiller.com/knotless

git that lives in your Atmosphere account

7
96 lines · 5.3 KB Raw History
# The tests, under `just cov`'s gate: every test binary against the
# spaces alpha, and those that reach what a PDS without spaces does
# against the npm reference PDS too, failing under 100% of lines or
# functions, a pull's run as the merge queue's batch. Then that every
# XRPC answer they received is as its lexicon says.
#
# Node, the harness's packages, the alpha's build, cargo-llvm-cov and the
# build are kept between runs; each is made again only when what it is
# made from changes. So are the test runs that passed, in /opt/testcache:
# a test binary the same byte for byte as one that passed, against the
# same harness, is not run again, and its profile counts (harness/cov.mjs).
image: rust:1.98
# A pre-flight, as check is: the merge queue takes a pull into a batch only
# once this has passed at its head, so one whose tests fail on their own,
# or that misses a line, costs no batch and no halving. The runner host's
# run of the pull counts; with none, the runner landing the queue runs it.
queue: first
# Pushes to main, and pulls into it or a feature/ branch, at their heads
# merged with their base.
on:
  push: {refs: [refs/heads/main]}
  pull: {base: [refs/heads/main, refs/heads/feature/*]}
cache: [target, /usr/local/cargo/registry, /usr/local/rustup, /opt/node, /opt/tools, /opt/atproto, harness/node_modules, /opt/testcache]
env:
  # The spaces alpha the tests run against, as KNOTLESS_DEV_ENV names a
  # checkout of it locally.
  ATPROTO_COMMIT: 11c5d98cd50261c5e1201fedc5c6c05a7b8d1ccf
  # Bumped when the steps that build the alpha change, to build it again.
  ALPHA_BUILD: "2"
steps:
  # Node into /opt/node, the harness's packages when their lockfile
  # changes, and cargo-llvm-cov into /opt/tools, each kept in the cache.
  - uses: chadtmiller.com/steps/node@1
    with: {version: 24.22.1}
  - uses: chadtmiller.com/steps/npm-ci@1
    name: harness
    with: {dir: harness, omit: dev}
  - uses: chadtmiller.com/steps/cargo-llvm-cov@1
    with: {version: 0.9.1}
  - name: spaces alpha
    run: |
      [ "$(cat /opt/atproto/.built 2>/dev/null)" = "$ATPROTO_COMMIT $ALPHA_BUILD" ] && exit 0
      export PATH=/opt/node/bin:$PATH COREPACK_ENABLE_DOWNLOAD_PROMPT=0 COREPACK_HOME=/opt/atproto/.corepack
      find /opt/atproto -mindepth 1 -delete
      cd /opt/atproto
      git init -q . && git fetch -q --depth 1 https://github.com/bluesky-social/atproto.git "$ATPROTO_COMMIT" && git checkout -q FETCH_HEAD
      mkdir .bin && corepack enable --install-directory /opt/atproto/.bin
      export PATH=/opt/atproto/.bin:$PATH
      pnpm install --frozen-lockfile --ignore-scripts
      pnpm run build:tooling --force
      pnpm --filter '@atproto/dev-env^...' --filter @atproto/dev-env run --if-present prebuild
      pnpm exec tsc --build packages/dev-env/tsconfig.build.json
      # The PDS serves the OAuth sign-in pages from this bundle.
      pnpm --filter @atproto/oauth-provider-ui run build:ui
      echo "$ATPROTO_COMMIT $ALPHA_BUILD" > /opt/atproto/.built
  - name: sqlite
    run: |
      # The one install script the PDS needs, which the install above
      # skips: SQLite's native module, as better-sqlite3's own script builds
      # it (a prebuilt one where there is one).
      export PATH=/opt/node/bin:$PATH
      cd "$(dirname "$(node -p "require.resolve('better-sqlite3/package.json', { paths: ['/opt/atproto/packages/pds'] })")")"
      [ -f build/Release/better_sqlite3.node ] && exit 0
      npm run install
  - name: test
    run: |
      export PATH=/opt/node/bin:/opt/tools:$PATH
      # Every branch shares this target, but the report reads only the
      # binaries this build made, so another branch's never count as code
      # never run, and nothing need be cleaned first.
      # Half the host's cores, as two test runs go side by side, over two
      # PDSes of each net, as one PDS is one node process.
      # A pull's run, its pre-flight, goes against both nets at once, as
      # the batch's does: one against the stock PDS first fell short of the
      # gate in every pull that changed a test binary, then ran the alpha
      # after it, which cost a minute more than running both side by side.
      # The alpha is the stock PDS with spaces added: against the stock PDS
      # too go only the binaries whose tests reach knotless's handling of
      # a PDS without spaces, which the alpha never answers as. Every
      # binary against both took 40% longer and reached nothing more; a
      # line that falls short of the gate without one names it.
      COV_STOCK=gateway,pages,cli,spaces,oauth COV_STORE=/opt/testcache COV_JOBS=$(( $(nproc) / 2 )) COV_HARNESSES=2 COV_TOOLCHAIN=$(rustup show active-toolchain | cut -d' ' -f1) \
        node harness/cov.mjs /opt/atproto/packages/dev-env
  - name: answers
    run: |
      # Every XRPC answer knotless-serve's tests received, fresh or kept
      # with a stored run, as its lexicon says: the pages' types are made
      # from the lexicons, so this is what holds the server to them.
      export PATH=/opt/node/bin:$PATH
      node harness/answers.mjs target/llvm-cov-target/cov-report/answers
  - name: plans
    run: |
      # No query the tests ran scans a table that grows with the network,
      # as SQLite would plan it at prod's size, unless its SQL says so.
      export PATH=/opt/node/bin:$PATH
      node harness/plans.mjs target/llvm-cov-target/cov-report/plans