open-standards/.github/workflows/joule-moq-remote.yml
Transaction Science 1b29f5dc92
Some checks failed
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 3m51s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 1m40s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Has been cancelled
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
ci: a push to main runs the room service and the remote desktop host agent workflows
Work now lands as direct commits to main. joule-moq-room and joule-moq-remote ran
only on pull requests and have no schedule, so a direct commit touching the room
service, the host agent, the relay, joule-moq, jwp, wai-rs or wai-ops built and
tested none of them. Each now also runs on a push to main, on its pull-request
paths. The gate job has no pull request to read on a push and answers true, so the
push's own path filter decides. Both test the whole tree, so the per-ref group's
cancel-in-progress stays as the other main-push workflows have it: a newer push's
tree contains the older push's commits.

Changelog: none
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-06 14:32:28 -05:00

106 lines
4.7 KiB
YAML

name: joule-moq-remote host agent
# The remote desktop host agent (joule-code/joule-code-rs/crates/joule-moq-remote), a workspace
# of its own with its own lock file (WAI extensions/remote-desktop.md): its room files, the
# pure-function H.264 encoder (every macroblock I_PCM), the pattern source and the recorder, and
# tests/loopback.rs, a session over a relay on loopback: three viewers verify every frame against
# its receipt, a click under the floor applied, a viewer with no control power and a controller
# off the floor refused, the floor handed over, a paused screen refused, latency records signed,
# and the session's chains verified whole by wai-rs; and the gate's order, a participant's records
# taken in its chain's order as a room service's clock takes them; alice's typing sealed to the
# host's sealing key, injected as typed and absent from what a viewer receives, and the session
# verified at the opened level too; and tests/tls.rs, the clients of the room service over
# https:// and of the relay over wss:// through a TLS front, every certificate verified. The same
# host in a room the room service keeps is joule-moq-room's tests/remote_room.rs. On Linux arm64 the Linux adapters (X11
# capture, the kernel's input device) compile and the session runs with the pure-function
# encoder; on macOS it runs again with the platform's hardware encoder, whose units are checked
# for the Annex B the capability carries.
#
# It builds on wai-rs's room and remote desktop records, on the relay and on joule-moq, so a
# change to any of them runs it. Push filters match the push's delta, so every path the job
# reads is listed.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
# A push to main runs it too: work lands as direct commits to main, and this workflow has
# no schedule, so without this a direct commit would build and test none of it.
push:
branches: [main]
paths:
- 'joule-code/joule-code-rs/crates/joule-moq-remote/**'
- 'joule-code/joule-code-rs/crates/joule-moq/**'
- 'joule-code/joule-code-rs/crates/joule-moq-relay/**'
- 'joule-code/joule-code-rs/crates/jwp/**'
- 'joule-code/joule-code-rs/vendor/**'
- 'wai/wai-rs/**'
- 'wai/wai-ops/**'
- '.github/workflows/joule-moq-remote.yml'
pull_request:
paths:
- 'joule-code/joule-code-rs/crates/joule-moq-remote/**'
- 'joule-code/joule-code-rs/crates/joule-moq/**'
- 'joule-code/joule-code-rs/crates/joule-moq-relay/**'
- 'joule-code/joule-code-rs/crates/jwp/**'
- 'joule-code/joule-code-rs/vendor/**'
- 'wai/wai-rs/**'
- 'wai/wai-ops/**'
- '.github/workflows/joule-moq-remote.yml'
jobs:
# Forgejo matches `paths:` against the push delta, so a rebase fires this workflow
# whatever the pull request changes. This job reads the pull request's own diff against
# the paths above (scripts/pr-touches-paths.py, which fails open).
relevant:
name: joule-moq-remote · does this change touch it
runs-on: gate
outputs:
run: ${{ steps.gate.outputs.run }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
- id: gate
run: |
set -euo pipefail
r=$(python3 scripts/pr-touches-paths.py .github/workflows/joule-moq-remote.yml \
"${{ github.event.pull_request.base.sha }}" \
"${{ github.event.pull_request.head.sha }}")
echo "this change touches the host agent: $r"
echo "run=$r" >> "$GITHUB_OUTPUT"
test:
name: joule-moq-remote, every target (${{ matrix.os }})
needs: relevant
if: needs.relevant.outputs.run == 'true'
strategy:
fail-fast: false
matrix:
os: [linux-arm64, macos]
runs-on: ${{ matrix.os }}
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Rust 1.99.1
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.99.1
rustup toolchain install 1.99.1 --profile minimal --component clippy
rustup default 1.99.1
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# One test at a time: the sessions share the host with other jobs, and each takes a lock.
- name: joule-moq-remote, every target, and clippy
working-directory: joule-code/joule-code-rs/crates/joule-moq-remote
shell: bash
run: |
set -euo pipefail
export PATH="$HOME/.cargo/bin:$PATH"
cargo test --locked --all-targets -- --test-threads=1
cargo clippy --locked --all-targets --no-deps -- -D warnings