Skip to main content

habitat-usage

Guidance on using Habitat to manage multi-repo source and asset dependencies via .habitat/DEPS and hab sync, plus troubleshooting common sync failures.

跳到安装

来源信息

仓库
lynx-community/skills
最近来源活动
2026年6月25日 15:57
检测到的 SKILL.md 语言
英语
星标
25
分支
11

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

文件资源管理器
2 个文件

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
habitat-usage
description
Guidance on using Habitat to manage multi-repo source and asset dependencies via .habitat/DEPS and hab sync, plus troubleshooting common sync failures.
# Habitat Usage Guide Habitat is a dependency-sync tool for mono-repo-like layouts built from multiple Git repos and asset downloads. This skill provides setup guidance, copy-pastable config snippets, and a troubleshooting checklist for common sync failures. ## When to Apply - Setting up a “main repo + dependency repos/assets” workspace using `.habitat` + `DEPS` - Adding or changing dependency types: git repos, nested solutions, HTTP downloads, or custom actions - Debugging `hab sync` failures related to config, auth, network, or integrity checks ## Troubleshooting Inputs When sync fails (fetch errors, permission issues, timeouts), collect: - Habitat version and distribution (`./hab` wrapper in repo, `hab.pex`, etc.) - OS and architecture (darwin/windows/linux + arm64/x86_64) - The exact command and full error output (do not paste any secrets) - Relevant config snippets: - `.habitat` - `DEPS` (or the file pointed to by `deps_file` in `.habitat`) ## Installation and Versioning Prefer committing the Habitat wrapper (`hab`) and config files (`.habitat`, `DEPS`) into the repository so developers and CI use the same version and configuration. Avoid downloading `releases/latest` in automation, because it is not reproducible. Instead, pin to a specific release version (tag) and keep that pinned version consistent across developers and CI. ```bash HABITAT_VERSION="0.3.145" curl -L -o hab "https://github.com/lynx-family/habitat/releases/download/${HABITAT_VERSION}/hab" chmod +x hab ``` If you just want to try Habitat locally (not recommended for CI), you can download the latest release: ```bash curl -L -o hab "https://github.com/lynx-family/habitat/releases/latest/download/hab" chmod +x hab ``` If you need integrity verification, pin an expected SHA-256 for `hab` in your repo/CI and verify after download: ```bash EXPECTED_SHA256="<fill-me>" if command -v shasum >/dev/null 2>&1; then echo "${EXPECTED_SHA256} hab" | shasum -a 256 -c - else echo "${EXPECTED_SHA256} hab" | sha256sum -c - fi ``` ## Multi-Repo Setup (solutions + deps) ### 1) Generate `.habitat` (solution config) Generate the Habitat config at the main repo root: ```bash ./hab config <repo remote uri> ``` `.habitat` describes one or more solutions. Minimal example: ```python solutions = [ { "name": ".", "deps_file": "DEPS", "url": "git@github.com:namespace/repo.git", } ] ``` Fields: - `name`: solution name, typically `"."` for the main repo - `deps_file`: dependency manifest path (relative to the main repo root) - `url`: the main repo remote URL (used by the tool/CI) ### 2) Write `DEPS` (dependency manifest) In `DEPS`, define `deps = { ... }`. The key is the destination path in the main repo, and the value describes the dependency type and parameters. #### 2.1 git deps (source repositories) ```python deps = { "lib/example": { "type": "git", "url": "git@github.com:namespace/lib.git", "branch": "dev", } } ``` Notes: - Prefer stable refs (e.g., commit) for reproducibility; use branches when you want rolling updates. - If the destination directory already exists and contains local changes, decide whether overwriting is acceptable before syncing. #### 2.2 solution deps (nested solutions) If a dependency has its own dependency tree, you can bring it in as a solution and sync recursively: ```python deps = { "third_party/some_solution": { "type": "solution", "url": "git@github.com:namespace/solution_repo.git", "branch": "main", "deps_file": "DEPS", } } ``` #### 2.3 http deps (assets/archives/binaries) Use this to download archives, toolchains, model files, etc. Prefer providing integrity checks for verifiability and reproducibility: ```python deps = { "third_party/tooling": { "type": "http", "url": "https://example.com/tooling.zip", "sha256": "SHA256_HEX", } } ``` #### 2.4 action deps (custom sync actions) Use this to run extra steps during sync (generate files, copy assets, apply patches, etc.). Example: ```python def example_function(): from pathlib import Path import shutil dest_dir = Path("scripts/sync_something") dest_dir.mkdir(parents=True, exist_ok=True) src = dest_dir / "input.txt" dst = dest_dir / "output.txt" src.write_text("example\n", encoding="utf-8") shutil.copyfile(src, dst) deps = { "scripts/sync_something": { "type": "action", "function": example_function, } } ``` ## Sync Dependencies (hab sync) Run at the main repo root: ```bash ./hab sync . ``` After sync, dependencies are materialized into the paths specified by the keys in `DEPS`. ## Track Config in Version Control Commit the wrapper and config files to enable one-command bootstrapping for developers and CI: ```bash git add hab .habitat DEPS && git commit -m "Add habitat to manage dependencies." ``` ## FAQ / Common Failures ### 1) git permission/auth failures Symptoms: - Errors like `Permission denied`, `Authentication failed`, or `Could not read from remote repository` Fix: - Ensure the dependency `url` protocol matches your environment (SSH/HTTPS). - For SSH, confirm your SSH key is configured and has access to the target repo. - In CI, confirm the runner is provisioned with the right credentials. ### 2) http integrity check failures (sha256 mismatch) Symptoms: - Download succeeds but integrity verification fails Fix: - Check whether `url` content changed or redirects to different content. - Recompute sha256 for the actual artifact and update `sha256` in `DEPS`. - If the URL is rolling (e.g., “latest”), prefer an immutable, versioned URL. ### 3) Sync hangs/timeouts Fix: - Identify which dependency is slow (temporarily comment out others and bisect). - Check proxy settings, DNS, and network reachability. - For large git deps, consider pinning to a commit and reducing unnecessary history (if supported by your setup). ## Response Format (when assisting users) When a user asks for help configuring deps, fixing errors, or speeding up sync, respond in this order: 1) Conclusion first (root cause + fix) 2) Minimal copy-pastable commands/snippets (`.habitat` / `DEPS` / `./hab sync .`) 3) Call out risky operations (overwriting local dirs, rolling deps harming reproducibility, etc.) 4) If it can still fail, list the next required inputs (version, full error log, relevant config snippets)
在 GitHub 查看