5.3 KiB
dependency-graph
Map of the oblachno ecosystem. Knows which repo produces what, which repos depend on which, and the correct order for cross-repo changes.
When to Invoke
Invoke this skill when:
- Changes span multiple repos
- A change in one repo requires version bumps in downstream repos
- Deploying infrastructure that depends on published packages/images
- Verifying the ecosystem is in a consistent state before deployment
- Determining which repos to update and in what order
Prerequisites
- All repos cloned under
/home/emo/dev/ideas/oblachno/ .envwithDEVELOPER_GITEA_API_TOKENin each repo
Ecosystem Map
devx (PyPI package)
/ | \
/ | \
grm sso-bridge infra
(PyPI) (PyPI+Docker) (deploys all)
| | |
v v v
infra bump infra bump staging
(auto PR) (auto PR) production
|
mattermost-oidc (Docker image)
(infra pulls :latest at deploy)
Repositories
| Repo | Produces | Consumers | Release Trigger |
|---|---|---|---|
devx |
PyPI package devx |
grm, sso-bridge, infra | User-facing changes to src/devx/** |
grm |
PyPI package grm |
infra | User-facing changes to src/grm/** or ansible/** |
sso-bridge |
PyPI package sso_bridge + Docker image |
infra | User-facing changes to src/sso_bridge/** or ansible/** |
infra |
Staging/production deployment | (end users) | User-facing changes + nightly gate |
mattermost-oidc |
Docker image mattermost-oidc |
infra (pulls at deploy) | Dockerfile or build.yml changes |
Dependency Chain
devx → all repos
devx publishes to the Gitea PyPI registry. grm, sso-bridge, and infra
pin devx in pyproject.toml:
"devx @ git+https://git.oblachno.oblachno.fyi/oblachno-oss/devx.git@vX.Y.Z"
When devx publishes a new version:
- grm, sso-bridge, and infra must bump their pinned devx version
- This is currently manual — no auto-dependency-PR from devx
- Each repo must
make setupto pick up the new version
grm → infra
grm publishes to PyPI. Its post-merge workflow auto-creates an infra
dependency PR via devx.ci.create_dependency_pr --repo oblachno/infra --package grm. The PR bumps the pinned grm version in infra's
pyproject.toml.
sso-bridge → infra
sso-bridge publishes to PyPI AND builds a Docker image. Its post-merge
workflow auto-creates an infra dependency PR via
devx.ci.create_dependency_pr --repo oblachno/infra --package sso_bridge. The PR bumps the pinned sso_bridge version.
The Docker image is pulled by infra at deploy time (sso-bridge:latest).
mattermost-oidc → infra
mattermost-oidc builds a Docker image tagged :latest and :MM_VERSION.
infra pulls mattermost-oidc:latest at deploy time. There is no
auto-dependency-PR — infra simply pulls the latest image.
infra → staging/production
infra deploys to staging and production. The deployment:
- Provisions VMs from golden images
- Runs Ansible roles (including grm and sso-bridge roles)
- Pulls Docker images (sso-bridge, mattermost-oidc)
- Configures services
Correct Order for Cross-Repo Changes
When a change spans multiple repos, follow this order:
- devx first — if the change starts in devx, merge and publish devx first. Wait for the PyPI publish job to complete.
- Bump devx in consumers — in grm/sso-bridge/infra, bump the pinned
devx version, run
make setup, verify tests pass, merge. - grm/sso-bridge second — merge and publish grm/sso-bridge. Wait for the PyPI publish + Docker image build to complete.
- Auto-dependency-PRs — grm/sso-bridge post-merge auto-creates infra PRs to bump pinned versions. Wait for these PRs to appear.
- Merge infra dependency PRs — review and merge the auto-created infra PRs.
- infra last — deploy to staging, validate, promote to production.
State Verification Before Deployment
Before deploying infra, verify:
- devx version consistent — all repos pin the same devx version
- grm published — latest grm tag exists in PyPI
- sso-bridge published — latest sso_bridge tag exists in PyPI
- sso-bridge image built — latest sso-bridge Docker image exists
- mattermost-oidc image built — latest mattermost-oidc image exists
- infra pins match published versions — no stale pins
- Nightly gate green —
NIGHTLY_STATUSis notfailed
Quick Check Commands
# Check latest devx version
curl -sS https://git.oblachno.oblachno.fyi/api/v1/repos/oblachno-oss/devx/releases/latest | python3 -c "import json,sys; print(json.load(sys.stdin).get('tag_name','?'))"
# Check pinned devx version in each repo
for repo in grm sso-bridge infra; do
echo -n "$repo: "; grep 'devx @' /home/emo/dev/ideas/oblachno/$repo/pyproject.toml | grep -oP 'v[\d.]+'
done
# Check latest sso-bridge image build
curl -sS -H "Authorization: token $DEVELOPER_GITEA_API_TOKEN" \
"https://git.oblachno.oblachno.fyi/api/v1/repos/oblachno/sso-bridge/actions/runs?per_page=5" \
| python3 -c "import json,sys; [print(r['id'],r['status'],r['conclusion']) for r in json.load(sys.stdin).get('workflow_runs',[]) if r.get('event')=='push']"