# The lexicons, as `just lex` checks them: goat's lint, what it does not # see, and that they only grow from main's (harness/lexicons.mjs); and the # XRPC answers the screenshots recorded, against them (harness/ # answers.mjs). goat and @atproto/lexicon are kept between runs. image: node:24.22.1 # Every push to main, and pulls into it or a feature/ branch, at their # heads merged with their base, that change the lexicons, their checks, # the recorded answers or this file. A pull changing none passes at # once, noted as skipped. on: push: {refs: [refs/heads/main]} pull: base: [refs/heads/main, refs/heads/feature/*] paths: [lexicons/**, harness/lexicons.mjs, harness/answers.mjs, harness/shots/fixtures.json, .knotless/workflows/lexicons.yml] cache: [/opt/goat, /opt/lexicon] steps: - name: goat run: | [ -x /opt/goat/goat ] || curl -fsSL https://github.com/bluesky-social/goat/releases/download/v0.2.6/goat_Linux_x86_64.tar.gz | tar -xz -C /opt/goat goat /opt/goat/goat --version - name: lexicons run: PATH=/opt/goat:$PATH node harness/lexicons.mjs - name: answers run: | # The recorded answers against the lexicons, with the harness's # @atproto/lexicon alone rather than all of its packages. [ -d /opt/lexicon/node_modules/@atproto/lexicon ] || npm install --prefix /opt/lexicon --no-audit --no-fund @atproto/lexicon@0.7.17 NODE_PATH=/opt/lexicon/node_modules node harness/answers.mjs