feat(ci): Vivado in GitHub Actions Docker — Closes #604#622
Merged
Conversation
Pure GH Actions setup, no self-hosted runner, no Railway: - infra/vivado-docker/Dockerfile: multi-stage Ubuntu 22.04 + Vivado 2025.2 ML Standard silent-installed Artix-7-only (~35 GB final image). License-free WebPACK mode. - infra/vivado-docker/install_config.txt: minimal install config (Vivado=1, Artix-7=1, all other families=0, DocNav=0). - infra/vivado-docker/README.md: architecture, 2-step setup runbook, troubleshooting. - .github/workflows/build-vivado-image.yml: manual workflow that fetches the Vivado installer from a private GitHub Release asset (tag vivado-installer-2025.2), builds the image, pushes ghcr.io/<owner>/t27-vivado:2025.2 with GHA layer cache. - .github/workflows/vivado-synth.yml: per-PR synth pipeline using container: ghcr.io/<owner>/t27-vivado:2025.2; builds t27c, runs fpga-build --smoke for Verilog gen, runs Vivado synth/P&R/bitstream, extracts utilization/timing via inline awk, uploads bit + log artifacts. Triggers on fpga/ specs/fpga/ bootstrap/src/ changes + workflow_dispatch. - Removed obsolete .github/workflows/vivado-bitstream.yml (used kkrizka/vivado:2019.2 which is dead and exceeded GH-hosted disk). Easimon/maximize-build-space frees ~45 GB on ubuntu-latest before image pull. GH-hosted 4 vCPU/16 GB sufficient for gf16_top synth+P&R (~25-40 min). Refs #604 Refs #620
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
This was referenced May 14, 2026
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
vivado-synth.yml job fails on every PR because the container image ghcr.io/<owner>/t27-vivado:2025.2 does not yet exist on the registry. Disable the pull_request trigger until build-vivado-image.yml is run once manually; workflow_dispatch remains available for first-build testing. Comment-only block makes re-enabling a one-line edit after image exists. Refs #604
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Replaces the Railway self-hosted runner approach (PR #621) with a pure GitHub Actions Docker setup. No self-hosted runner, no Railway costs, no external infra.
Architecture
Files
infra/vivado-docker/Dockerfile— multi-stage Ubuntu 22.04 + Vivado 2025.2 install. Strips all non-Artix-7 device families and discards installer stage.infra/vivado-docker/install_config.txt— silent-install config (Modules=Vivado:1, Artix-7:1, others:0, DocNav:0, EnableDiskUsageOptimization=1).infra/vivado-docker/README.md— operator runbook (2-step setup: release upload + workflow click) and troubleshooting..github/workflows/build-vivado-image.yml— manual image-build workflow witheasimon/maximize-build-spaceto free ~45 GB before install. Pushes to GHCR with GHA layer cache..github/workflows/vivado-synth.yml— synth pipeline usingcontainer:directive. Triggers on PRs touchingfpga/,specs/fpga/,bootstrap/src/, and on manual dispatch with design selection (blinky / gf16 / phi_heartbeat) and UART toggle..github/workflows/vivado-bitstream.yml(used deadkkrizka/vivado:2019.2image).Operator steps after merge
fpga/**auto-triggervivado-synth.ymland produce bitstream artifacts.Why this beats Railway
Hardware-in-the-loop tok/s still requires DLC-10 JTAG attached to a real host. That stays the trios-bridge → Tailscale path on the Mac (
gaia-macbook-air.tail2c3a29.ts.net): synth in GHA → bridge endpoint flashes the FPGA →uart-smokebinary streams telemetry back.Policy compliance
Supersedes
Refs #604
Refs #620