feat: Add `sparse-checkout-aggregate` action
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 35/100
调研方向
从 sources.yml 格式、GitHub Actions 使用示例以及列出的 sparse-checkout 命令开始。定义完整聚合和增量聚合、缓存、私有仓库访问以及 JSON 输出应如何运行,然后根据文档中的示例和输出形状验证 action。
由索引模型根据 Issue 内容生成。
描述
Summary
Create a reusable GitHub Action that clones/updates multiple repositories using git sparse checkout based on a mapping file (sources.yml).
Use Case
Aggregate documentation from multiple repositories into a single build. Supports both full re-aggregation and incremental single-repo updates with caching.
Specification
Inputs
| Input | Required | Default | Description |
|---|---|---|---|
sources_file |
Yes | — | Path to sources.yml mapping file |
output_dir |
No | .sources |
Directory for cloned repos |
only |
No | — | Single repo to update (incremental mode) |
token |
No | ${{ github.token }} |
For private repos |
Outputs
| Output | Description |
|---|---|
sources |
JSON array of { key, repo, path, local_path, sha } |
symlinks |
JSON array of { source, target } for symlink-map action |
source_shas |
Hash of all repo SHAs for cache key |
Example Output
// sources
[
{ "key": "ai", "repo": "arustydev/ai", "path": "docs/src", "local_path": ".sources/ai/docs/src", "sha": "abc123" },
{ "key": "just", "repo": "arustydev/just", "path": "docs/src", "local_path": ".sources/just/docs/src", "sha": "def456" }
]
// symlinks
[
{ "source": ".sources/ai/docs/src", "target": "books/ai" },
{ "source": ".sources/just/docs/src", "target": "books/just" }
]
Sources File Format (sources.yml)
books:
ai:
repo: arustydev/ai
path: docs/src
ref: main
title: "AI Configuration"
just:
repo: arustydev/just
path: docs/src
ref: main
title: "Justfile Library"
Example Usage
- uses: arustydev/gha/sparse-checkout-aggregate@v1
id: aggregate
with:
sources_file: sources.yml
only: ${{ github.event.client_payload.source_repo }}
Implementation Notes
Sparse Checkout Commands
# New clone
git clone --filter=blob:none --sparse --depth=1 \
"https://github.com/$repo.git" ".sources/$key"
git -C ".sources/$key" sparse-checkout set "$path"
# Update existing
git -C ".sources/$key" fetch origin "$ref"
git -C ".sources/$key" checkout "origin/$ref" -- "$path"
Key Features
- Use
--filter=blob:nonefor minimal data transfer - Support incremental updates via
onlyinput - Output structured JSON for downstream actions
- Calculate SHA hash for each repo for cache invalidation
- Handle private repos via token input
Related
- Part of docs aggregation workflow extraction
- Outputs consumed by
symlink-mapaction - Triggered by
trigger-remote-workflowaction
- 主要语言
- Shell
- 星标
- 0
- 派生
- 0
- PR 合并指标
- 30 天内没有已合并 PR
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aRustyDev/gh 的其他 Issue
-
dependencies github-actions
难度 1/5 1 小时以内 新手友好度 10/100
-
dependencies github-actions
难度 1/5 1 小时以内 新手友好度 15/100
-
dependencies github-actions
难度 1/5 1 小时以内 新手友好度 50/100
-
dependencies github-actions
难度 2/5 1-3 小时 新手友好度 20/100
-
dependencies github-actions
难度 2/5 1-3 小时 新手友好度 10/100
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
astral-sh/python-build-standalone#1293 ·
-
package-update
难度 1/5 1 小时以内 新手友好度 90/100
oSoWoSo/vOid_Community_repOsitory#185 · 1 条评论 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
carbon-language/carbon-lang#7821 ·