Pytxo

Land in GitHub Actions

Run pytxo land in shadow mode on pull requests and post the result as a summary.

pytxo land --markdown prints a pull-request-ready summary. The Pytxo repository includes a composite action, actions/land, that installs the CLI and runs the gate in shadow mode: it never pushes, merges or changes branches.

Check agent pull requests together

This workflow runs when a pull request labelled agent opens or changes. It checks every open agent pull request against the base branch as one combined change.

name: Pytxo land (shadow)
on:
  pull_request:
    types: [opened, synchronize, labeled]

permissions:
  contents: read
  pull-requests: read

# Opening a pull request with the label already on sends both "opened" and
# "labeled"; keep only the newest run per pull request.
concurrency:
  group: pytxo-land-${{ github.event.pull_request.number }}
  cancel-in-progress: true

jobs:
  land:
    if: contains(github.event.pull_request.labels.*.name, 'agent')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - name: Fetch open agent pull requests
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          for n in $(gh pr list --label agent --state open --json number --jq '.[].number'); do
            git fetch origin "pull/$n/head:agent/pr-$n"
          done
      - uses: Pytxo-dev/pytxo/actions/land@v1.3.6
        with:
          inputs: "agent/*"
          checks: "npm ci && npm test"
          per-input: "true"

The step summary shows the decision, the inputs, shared files, checks and reasons. The job fails when the decision is blocked or stale, so you can make it a required check.

Action inputs

InputRequiredDescription
inputsyesSpace-separated branches, commits or patterns (label:ref allowed)
checksnoOne check command. For several, chain them with &&
per-inputno"true" to also run checks on each branch alone
basenoCommit to check against. Default: origin/<base branch> of the pull request
versionnoPytxo version to install (default: the action's release)

The action never uses --apply. Landing stays a human or merge-queue decision; the receipt records what the gate saw.