Skip to content

feat(ci): auto-detect and install root requirements.txt via pip - #1

Merged
mbloechli merged 15 commits into
mainfrom
feat/requirements-txt
Jul 4, 2026
Merged

feat(ci): auto-detect and install root requirements.txt via pip#1
mbloechli merged 15 commits into
mainfrom
feat/requirements-txt

Conversation

@mbloechli

@mbloechli mbloechli commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Mirrors the existing .github/ci/apt_dependencies auto-detection: an optional requirements.txt
    at the consumer repo root is now pip installed (full dependency tree, --break-system-packages)
    via AFTER_INSTALL_TARGET_DEPENDENCIES, after rosdep target deps are installed.
  • No new workflow_call input — detection only, matching the repos.list/apt_dependencies
    precedent. No-op when requirements.txt is absent, so existing @v1 consumers (e.g.
    duatic_helpers) are unaffected.
  • Motivated by duatic_skills, which needs open3d (not a resolvable rosdep key) and previously
    hardcoded the pip install per-repo in its own copy of reusable_ici.yml.

Test plan

  • python3 -c "import yaml; yaml.safe_load(open('.github/workflows/reusable_ici.yml'))"
  • Validate end-to-end via Duatic/duatic_skills#<PR>, pinned to this branch's commit SHA,
    watched with gh run watch --repo Duatic/duatic_skills --exit-status
  • Once green, cut v1.2.0 and move v1 (per this repo's CLAUDE.md release flow)

mbloechli added 7 commits July 3, 2026 15:39
Repo guidance for Claude Code covering architecture, versioning
conventions, and known GitHub Actions quirks.
Some rosdep keys aren't resolvable (e.g. python3-open3d-pip). Mirror
the existing apt_dependencies auto-detection: an optional
requirements.txt at the consumer repo root is pip installed (full
dependency tree, --break-system-packages) via
AFTER_INSTALL_TARGET_DEPENDENCIES, after rosdep target deps are in
place. No-op when the file is absent, so existing @v1 consumers are
unaffected.
duatic_skills' jazzy build hangs ~29min inside industrial_ci's
colcon_setup apt-get step on the self-hosted runner, both before and
after the requirements.txt change, so it isn't caused by this PR.
Add before/after df/free/docker snapshots plus a 15s-interval
background poller (uploaded as an artifact via if: always(), since
that survives job cancellation) to see whether disk/memory is
exhausted during the hang. Remove once root-caused.
Host resources (disk/memory) stayed completely flat for the full
~29min of the duatic_skills hang, which means colcon_setup's apt-get
is genuinely blocked, not slow. builder_setup in industrial_ci does
nothing but that single apt-get call, and debconf is already set to
noninteractive during init, so the likely culprit is a maintainer
script blocking on something like systemctl/dbus during dpkg trigger
processing (common when a container has no init system running).
Poll `docker exec <cid> ps auxf` alongside the existing resource
monitor to see which process is actually stuck next run.
vcs import still hangs identically on the same private repos'
git ls-remote after CI_PAT was added to duatic_skills, which could
mean either the secret isn't reaching this job (misconfigured scope,
wrong repo/org level) or it reaches but doesn't have access to those
repos (fails auth, falls back to the same interactive-prompt hang).
Add a boolean-only echo of secrets.CI_PAT presence, plus a count of
git global insteadOf rules configured inside the container (from
BEFORE_INIT), to tell the two cases apart without printing the token.
Root-caused: duatic_skills' hang was two separate, repo-side issues,
not a defect in this shared workflow -- a missing/misnamed CI_PAT
secret (git blocked on an unanswerable credential prompt) and a stale
repos.list pointing at two repos that had since been merged into
duatic_dynaarm. Neither needed a change here, so drop the scaffolding.
open3d's dependency tree wants a newer typing_extensions than the one
apt/debian installed on the base image. pip can't uninstall a
debian-managed package (no RECORD file), so it fails with
"Cannot uninstall typing_extensions ..., RECORD file not found".
--ignore-installed makes pip install its own copy alongside instead
of trying to uninstall the OS-managed one first -- the standard
workaround for --break-system-packages installs colliding with apt.
@mbloechli mbloechli self-assigned this Jul 4, 2026
mbloechli and others added 8 commits July 4, 2026 21:08
pre-commit was skipped whenever a single distro was chosen (manual
dispatch or targeted rebuild), so linting only ran on the default
"all" path. Lint checks aren't tied to which distro is being built,
so run them unconditionally (still skipped on draft PRs).
Match duatic_dynaarm's public-facing repo conventions: BSD-3-Clause
LICENSE and a CONTRIBUTING.md covering contribution/licensing terms.
The tooling section is adapted for this repo specifically, since it
has no pre-commit config of its own -- points at the syntax-check and
consumer-dispatch validation steps instead.
Adds a .pre-commit-config.yaml scoped to what this repo actually
contains (workflow YAML, docs) -- standard hygiene hooks, actionlint
for GitHub Actions-specific linting, and codespell. A new self-check.yml
workflow dogfoods the repo's own pre-commit.yml leaf workflow on every
PR/push to main, since previously this repo had no CI of its own.
Updated README.md for clarity and consistency.
Nested .github/ci/apt_dependencies didn't match the requirements.txt
convention (repo root). Move it to an Aptfile at the consumer repo
root, same format (one package per line, # comments allowed), so both
optional dependency files live in the same obvious place. No existing
consumer repo has the old file, so this is a clean rename.
@mbloechli
mbloechli merged commit 2fc88b5 into main Jul 4, 2026
1 check passed
@mbloechli
mbloechli deleted the feat/requirements-txt branch July 4, 2026 19:39
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