Skip to content

ci: prepare shared jobs for the Ubuntu 26.04 pool - #4679

Merged
vvbandeira merged 2 commits into
The-OpenROAD-Project:masterfrom
vvbandeira:runner-ubuntu26-shared-safety
Oct 15, 2026
Merged

vvbandeira merged 2 commits into
The-OpenROAD-Project:masterfrom
vvbandeira:runner-ubuntu26-shared-safety

Conversation

@vvbandeira

@vvbandeira vvbandeira commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

Move hosted and private workflow jobs to Ubuntu 26.04 together.
Shared jobs select self-hosted-ubuntu-26.04 for the private pool and ubuntu-26.04 for hosted runs.
Keep the existing public-only guards.
Drop Ubuntu 20.04 from the installer and image-publishing matrices, Docker helper, and support documentation.
Ubuntu 22.04 remains the Docker default and the retained installer case.
The helper rejects Ubuntu 20.04 before it calls Docker.

Make installer tests safe on a shared Docker host by removing daemon termination, NAT flushing, bridge removal, and Docker restart.
Give each run its own image tags and test container, and clean up only those objects.
Run the utility tests with python3 without installing unused host packages.
Retain the existing streaming-flush assertion while polling for output instead of relying on a fixed startup delay.

Restrict the image publishing pipeline to matching master pushes.
Its dependency images and registry caches keep the existing publication chain.
Run the disk-cleanup action only on GitHub-hosted runners.
Installer and utility workflows retain their PR validation.

All nine utility test files passed with Python 3.12.8 and 3.14.8: 86 tests with one optional Yosys skip per version.
The Ubuntu 22.04 installer, build, and sample flow passed on the shared Ubuntu 26.04 host using predecessor 68ab2f17f08f.
A concurrent job kept the same healthy container, network, and Docker daemon identity.
Direct inspection proved that installer-owned objects were removed.
The Ubuntu 20.04 case failed because its GCC 9 cannot build the pinned Yosys dependency.
This PR retires that OS target.

For the retirement change, CLI probes confirm that Ubuntu 20.04 is rejected and Ubuntu 22.04 still selects the same base image.
Shell syntax and workflow syntax checks pass, with no new ShellCheck findings against the predecessor.
The Ubuntu 22.04 installer path and dependency pins are unchanged by the retirement commit.
The full live installer was not rerun at this head.
Black 26.5.1 is unavailable locally, and fresh PR checks must pass at the new head.

Move hosted and private labels together and replace host-wide installer
cleanup with run-owned Docker objects. Publish images only from master
and keep the existing container OS cases.

Poll the streaming test output instead of relying on interpreter startup
timing. Run utility tests without changing host packages.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
@vvbandeira
vvbandeira requested a review from a team as a code owner October 15, 2026 11:10
@vvbandeira
vvbandeira requested review from sombraSoft and removed request for a team October 15, 2026 11:10

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request replaces a fixed sleep in test_streaming_flush with a polling loop that waits up to 1.0 second for the log file to contain 'line1', reducing flakiness due to varying interpreter start-up times. The reviewer suggested making the polling loop more robust by adding an early exit if the subprocess exits prematurely and specifying an explicit UTF-8 encoding when opening the log file.

Comment on lines +202 to +210
content = ""
deadline = time.monotonic() + 1.0
while time.monotonic() < deadline:
if os.path.exists(self.log_path):
with open(self.log_path) as f:
content = f.read()
if "line1" in content:
break
time.sleep(0.05)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

To make the polling loop more robust and efficient, we can make two improvements:

  1. Early exit on subprocess failure: If the subprocess exits prematurely (e.g., due to a crash or error), we should break out of the loop immediately instead of waiting for the full 1.0-second timeout. This prevents unnecessary delays in test failures.
  2. Explicit file encoding: Specify encoding="utf-8" when opening the log file to ensure consistent cross-platform behavior, adhering to PEP 597 best practices.
        content = ""
        deadline = time.monotonic() + 1.0
        while time.monotonic() < deadline:
            if os.path.exists(self.log_path):
                with open(self.log_path, encoding="utf-8") as f:
                    content = f.read()
                if "line1" in content:
                    break
            if proc.poll() is not None:
                break
            time.sleep(0.05)

@openroad-ci

openroad-ci commented Oct 15, 2026 •

Copy link
Copy Markdown
Member

🔍 QoR check

Metrics reflect the PR merge build — i.e. what will land on the target branch.

Commit 884be99 · Jenkins build #2 · Baseline: build · View build on dashboard

62 design(s) checked — 0 with regression(s), 0 without a comparable baseline.

BREAKING CHANGE: Ubuntu 20.04 is no longer a supported installer or
Docker build target. Use Ubuntu 22.04.

Signed-off-by: Vitor Bandeira <vvbandeira@precisioninno.com>
@vvbandeira
vvbandeira merged commit 2ea71df into The-OpenROAD-Project:master Oct 15, 2026
13 checks passed
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.

2 participants