Goal
Provision a managed x86_64 Linux runner with Vivado 2025.2 installed, registered as a self-hosted GitHub Actions runner against this repo. Unblocks PR #604 (Vivado-CI with UART telemetry) and tok/s measurement on silicon.
Constraints (verified)
- M4 MacBook Pro (228 GB SSD, ~11 GB free, ARM64) cannot host Vivado: needs ~110 GB and x86_64 Linux.
- Vivado_2025.2_Lin64.bin (347 MB installer) already in ~/Downloads on Mac.
- Project policy: no .sh / .py anywhere — Rust only (inline awk in YAML is OK).
Solution shipped in this branch
infra/railway-vivado-runner/:
Dockerfile — Ubuntu 22.04 + Vivado deps + GH Actions runner v2.319.1
src/main.rs — Rust entrypoint that registers the runner and exec's run.sh (project-supplied GH binary)
Cargo.toml — entrypoint crate
railway.toml — service definition with 3 persistent volumes (130 GB Xilinx, 1 GB installer, 20 GB work)
README.md — step-by-step Railway deploy (volumes, env vars, Vivado silent install)
.github/workflows/vivado-self-hosted.yml:
runs-on: [self-hosted, vivado, x86_64, linux]
- Builds t27c, generates Verilog from .t27 specs, runs Vivado synth, optionally runs UART smoke if DLC-10 attached
- Triggers on PR + manual dispatch with design selection (blinky / gf16 / phi_heartbeat) and UART toggle
Cost estimate
Railway Pro, 8 vCPU / 32 GB / 150 GB volume: ~$35–55/month active.
Next actions for operator
railway login && railway init from infra/railway-vivado-runner/
- Provision 3 volumes per README
railway volume push ~/Downloads/Vivado_2025.2_Lin64.bin /opt/installer/
- Get fresh runner registration token from repo Settings → Actions → Runners
- Set 4 env vars,
railway up
- One-time Vivado silent install via
railway run
- Verify runner shows Idle / Online in repo settings
Verification path
- Trigger Vivado workflow with
design=blinky, expect bitstream + utilization summary in artifacts
- If DLC-10 attached, expect tok_s.txt with measured tokens/sec
Refs #604
Goal
Provision a managed x86_64 Linux runner with Vivado 2025.2 installed, registered as a self-hosted GitHub Actions runner against this repo. Unblocks PR #604 (Vivado-CI with UART telemetry) and tok/s measurement on silicon.
Constraints (verified)
Solution shipped in this branch
infra/railway-vivado-runner/:Dockerfile— Ubuntu 22.04 + Vivado deps + GH Actions runner v2.319.1src/main.rs— Rust entrypoint that registers the runner and exec's run.sh (project-supplied GH binary)Cargo.toml— entrypoint craterailway.toml— service definition with 3 persistent volumes (130 GB Xilinx, 1 GB installer, 20 GB work)README.md— step-by-step Railway deploy (volumes, env vars, Vivado silent install).github/workflows/vivado-self-hosted.yml:runs-on: [self-hosted, vivado, x86_64, linux]Cost estimate
Railway Pro, 8 vCPU / 32 GB / 150 GB volume: ~$35–55/month active.
Next actions for operator
railway login && railway initfrominfra/railway-vivado-runner/railway volume push ~/Downloads/Vivado_2025.2_Lin64.bin /opt/installer/railway uprailway runVerification path
design=blinky, expect bitstream + utilization summary in artifactsRefs #604