Skip to content

feat(infra): Railway Vivado self-hosted GH Actions runner#621

Closed
gHashTag wants to merge 1 commit into
masterfrom
feat/railway-vivado-runner
Closed

feat(infra): Railway Vivado self-hosted GH Actions runner#621
gHashTag wants to merge 1 commit into
masterfrom
feat/railway-vivado-runner

Conversation

@gHashTag
Copy link
Copy Markdown
Owner

Summary

Provisions a managed x86_64 Linux runner with Vivado 2025.2, registered as a self-hosted GitHub Actions runner against t27. Unblocks PR #604 (Vivado-CI with UART telemetry) and tok/s measurement on silicon.

What ships

infra/railway-vivado-runner/

  • Dockerfile — Ubuntu 22.04 + Vivado deps (libtinfo5/libncurses5/libstdc++ etc.) + GH Actions runner v2.319.1 + Rust toolchain for entrypoint build.
  • src/main.rs — Rust entrypoint binary (runner-entrypoint). Registers runner with GH if no .runner config exists, sources Vivado settings64.sh into env, exec's ./run.sh (GH-supplied). No bash entrypoint.sh per project policy: запрешены .sh .py.
  • Cargo.toml — entrypoint crate (anyhow only).
  • railway.toml — 3 persistent volumes: /opt/Xilinx (130 GB Vivado install), /opt/installer (1 GB installer drop), /actions-runner/_work (20 GB cache).
  • README.md — 9-step deploy runbook: railway init → volumes → Vivado installer push → token fetch → env vars → railway up → silent Vivado install → verification.

.github/workflows/vivado-self-hosted.yml

  • runs-on: [self-hosted, vivado, x86_64, linux]
  • Builds t27c, generates Verilog from .t27 specs via fpga-build --smoke, runs Vivado synth, optionally runs UART smoke if DLC-10 JTAG attached (gated by LANES_ATTACHED=1).
  • Triggers on PR (paths fpga/, specs/fpga/, bootstrap/, the workflow itself) + manual dispatch with design selection (blinky / gf16 / phi_heartbeat) and UART toggle.
  • Extracts utilization summary (LUTs, Registers, BRAM, DSP, WNS) via inline awk from vivado.log.

Why Railway

M4 Mac (228 GB SSD, ~11 GB free, ARM64) cannot host Vivado: needs ~110 GB and x86_64. Railway provides managed x86_64 Linux containers with persistent volumes. Tailscale already configured Mac-side for any reverse access if needed.

Operator next steps

See infra/railway-vivado-runner/README.md. After merge:

  1. cd infra/railway-vivado-runner && railway init
  2. Provision 3 volumes per railway.toml
  3. railway volume push ~/Downloads/Vivado_2025.2_Lin64.bin /opt/installer/
  4. Get fresh runner registration token from repo Settings → Actions → Runners
  5. railway variables set GH_RUNNER_TOKEN=… GH_REPO_URL=https://github.com/gHashTag/t27
  6. railway up
  7. One-time railway run /opt/installer/Vivado_2025.2_Lin64.bin --batch Install …
  8. Verify runner Online; trigger vivado-self-hosted.yml with design=blinky

Cost

~$35–55/month Railway Pro (8 vCPU / 32 GB / 150 GB).

Policy compliance

Refs #620
Refs #604

- infra/railway-vivado-runner/Dockerfile: Ubuntu 22.04 + Vivado deps + GH Actions runner v2.319.1
- infra/railway-vivado-runner/src/main.rs: Rust entrypoint (no .sh per project policy)
- infra/railway-vivado-runner/railway.toml: service definition with 3 persistent volumes
- infra/railway-vivado-runner/README.md: step-by-step deploy guide
- .github/workflows/vivado-self-hosted.yml: synth pipeline targeting self-hosted runner labels

Unblocks PR #604 (Vivado CI with UART telemetry) and tok/s measurement on silicon.

Refs #620
Refs #604
@github-actions
Copy link
Copy Markdown

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
Copy link
Copy Markdown
Owner Author

Superseded by #622 — Vivado moved to GitHub Actions Docker (no Railway, no self-hosted runner, $0/month). Closing this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant