ci: make the Tests workflow actually run, and gate the deploy-blockers - #120
Conversation
CI has never run the test suite on this repo. The Tests workflow has exactly one run in its history — a manual workflow_dispatch in May — and that run has zero jobs. Dependency Audit and Update Lockfile have never produced a run at all. Cause: all three target `databrickslabs-protected-runner-group`. That group is granted per-repo across the org (ucx, dqx, dlt-meta and others use it successfully) and this repo was never granted it, so jobs targeting it are never scheduled — silently, with no failure anywhere to notice. Consequences already observed: - #84 bumped pydantic-core to 2.47.0 while pydantic==2.13.4 pins pydantic-core==2.46.4 exactly. requirements.txt became unsatisfiable, so every Databricks Apps deploy from main failed until #110 repaired it. GitHub reported the PR MERGEABLE; nothing installed requirements.txt. - #115 and #116 were the same failure and were caught only by resolving them by hand. - requirements.lock had drifted from requirements.txt, because Update Lockfile never ran. Regenerated here. ## Runners test.yml, dependency-audit.yml and update-lockfile.yml move to ubuntu-latest. None of them need org secrets — the first two are read-only, and the third uses only the repo-scoped GITHUB_TOKEN. GitHub-hosted runners are free for public repos. release.yml is left on the protected group: it signs release artifacts, so it deserves a deliberate decision rather than a drive-by change (it also means releases stay blocked until the repo is granted the group — noted in the PR). ## New gates, each tied to a failure that actually happened 1. requirements.txt must be installable — catches the #84/#115/#116 class. 2. requirements.lock must match requirements.txt — catches the drift above. 3. App modules must import — 13 modules whose failure takes the app down at boot, most with no direct unit test. 4. A floor on tests that actually ran — a suite reporting "all skipped" passes vacuously, which is exactly what #106 fixed (465 skipped). ## Two bugs found while verifying the workflow locally - tests/e2e/conftest.py raised an uncaught FileNotFoundError when the databricks CLI is absent. That surfaces as a pytest INTERNALERROR which kills the entire session — so this workflow would have failed on its first run on a hosted runner, where the CLI isn't installed. A missing CLI is now treated as "prerequisite absent" and skips. - tests/integration is excluded from the PR gate. It gates on Docker, and Docker *is* present on ubuntu-latest, so it would really run: building an apps-like image and executing the full setup pipeline. Confirmed locally that including it produces failures. It stays runnable on demand. ## Verification Every step was run locally, including with PATH stripped of the databricks CLI to simulate a hosted runner: 535 passed, 3 skipped. Each of the four gates was then confirmed to fail when its bug is reintroduced — the #84 pin, a truncated lockfile, and the #106 whole-session skip.
Correction: the runner group was not the (only) causeI claimed this PR would be the first thing here whose CI goes green. It isn't, and the diagnosis in the description is incomplete. Evidence after pushing: So a run is created but no job is ever scheduled, and switching to It is not that hosted runners are unavailable to the repo. A GitHub-managed workflow in this very repo runs jobs on {"name": "update-pip-graph", "conclusion": "success",
"labels": ["ubuntu-latest"], "runner_group_name": "GitHub Actions"}The difference is that those runs have What this PR is and isn'tStill worth merging as-is — it's necessary but not sufficient:
It does not make CI run. Nobody should read a merge here as "CI is fixed". Needed from someone with admin
Note |
….17.0) Closes #118, #120, #121, #122 - Session creation prompt: ask users to reuse existing sessions before creating new - MAX_CONCURRENT_SESSIONS backend cap (env var, default 5) with TOCTOU-safe check - Session count label in tab bar with updates on all create/close/exit paths - xterm.js ClipboardAddon for OSC 52 (copy-paste inside Claude Code) - Write batching with requestAnimationFrame to prevent escape sequence fragmentation - Alternate screen exit detection (auto-clear after Claude Code no-flicker/vim) - SIGWINCH-based reattach (force redraw by toggling terminal size) - 429 error message with hint to increase MAX_CONCURRENT_SESSIONS - Replaced mlflow-tracing with mlflow-skinny 3.10.1 - PTY read chunk 4096→65536 bytes - Fixed repo name in deployment docs - Version bump to 0.17.0
#120) CI has never run the test suite on this repo. The Tests workflow has exactly one run in its history — a manual workflow_dispatch in May — and that run has zero jobs. Dependency Audit and Update Lockfile have never produced a run at all. Cause: all three target `databrickslabs-protected-runner-group`. That group is granted per-repo across the org (ucx, dqx, dlt-meta and others use it successfully) and this repo was never granted it, so jobs targeting it are never scheduled — silently, with no failure anywhere to notice. Consequences already observed: - #84 bumped pydantic-core to 2.47.0 while pydantic==2.13.4 pins pydantic-core==2.46.4 exactly. requirements.txt became unsatisfiable, so every Databricks Apps deploy from main failed until #110 repaired it. GitHub reported the PR MERGEABLE; nothing installed requirements.txt. - #115 and #116 were the same failure and were caught only by resolving them by hand. - requirements.lock had drifted from requirements.txt, because Update Lockfile never ran. Regenerated here. ## Runners test.yml, dependency-audit.yml and update-lockfile.yml move to ubuntu-latest. None of them need org secrets — the first two are read-only, and the third uses only the repo-scoped GITHUB_TOKEN. GitHub-hosted runners are free for public repos. release.yml is left on the protected group: it signs release artifacts, so it deserves a deliberate decision rather than a drive-by change (it also means releases stay blocked until the repo is granted the group — noted in the PR). ## New gates, each tied to a failure that actually happened 1. requirements.txt must be installable — catches the #84/#115/#116 class. 2. requirements.lock must match requirements.txt — catches the drift above. 3. App modules must import — 13 modules whose failure takes the app down at boot, most with no direct unit test. 4. A floor on tests that actually ran — a suite reporting "all skipped" passes vacuously, which is exactly what #106 fixed (465 skipped). ## Two bugs found while verifying the workflow locally - tests/e2e/conftest.py raised an uncaught FileNotFoundError when the databricks CLI is absent. That surfaces as a pytest INTERNALERROR which kills the entire session — so this workflow would have failed on its first run on a hosted runner, where the CLI isn't installed. A missing CLI is now treated as "prerequisite absent" and skips. - tests/integration is excluded from the PR gate. It gates on Docker, and Docker *is* present on ubuntu-latest, so it would really run: building an apps-like image and executing the full setup pipeline. Confirmed locally that including it produces failures. It stays runnable on demand. ## Verification Every step was run locally, including with PATH stripped of the databricks CLI to simulate a hosted runner: 535 passed, 3 skipped. Each of the four gates was then confirmed to fail when its bug is reintroduced — the #84 pin, a truncated lockfile, and the #106 whole-session skip.
CI has never run the test suite on this repo
The
Testsworkflow has exactly one run in its history — a manualworkflow_dispatchin May — and that run has zero jobs.Dependency AuditandUpdate Lockfilehave never produced a run at all.Cause: all three target
databrickslabs-protected-runner-group. That group is granted per-repo across the org (ucx, dqx, dlt-meta use it successfully) and this repo was never granted it, so jobs targeting it are never scheduled — silently, with nothing anywhere to notice.What that already cost
pydantic-coreto 2.47.0 whilepydantic==2.13.4pinspydantic-core==2.46.4exactly.requirements.txtbecame unsatisfiable, so every deploy from main failed until fix(deps): repair unsatisfiable requirements.txt + clear 19 of 20 Dependabot alerts #110 repaired it. GitHub reported it MERGEABLE; nothing installed requirements.txt.requirements.lockhad drifted from requirements.txt, because Update Lockfile never ran. Regenerated here.Runners
test.yml,dependency-audit.yml,update-lockfile.yml→ubuntu-latest. None need org secrets (first two read-only; the third uses only the repo-scopedGITHUB_TOKEN), and hosted runners are free for public repos.release.ymlis left on the protected group — it signs release artifacts, so it deserves a deliberate decision rather than a drive-by change.New gates, each tied to a failure that actually happened
requirements.txtmust be installablerequirements.lockmust matchrequirements.txtTwo bugs found while verifying this locally
tests/e2e/conftest.pyraised an uncaughtFileNotFoundErrorwhen thedatabricksCLI is absent — surfacing as a pytestINTERNALERRORthat kills the entire session. This workflow would have failed on its first run, since hosted runners don't have the CLI. Now treated as "prerequisite absent" → skip.tests/integrationis excluded from the PR gate. It gates on Docker — and Docker is present on ubuntu-latest, so it would really run: building an apps-like image and executing the full setup pipeline (npm installs, CLI downloads). Confirmed locally that including it produces failures. Still runnable on demand.Verification
Every step run locally, including with
PATHstripped of the databricks CLI to simulate a hosted runner: 535 passed, 3 skipped.Then each gate was confirmed to fail when its bug is reintroduced — the #84 pin, a truncated lockfile, and the #106 whole-session skip:
This PR should be the first thing on this repo whose CI actually goes green — which is itself the test.