feat: Add `sparse-checkout-aggregate` action
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
Research direction
Start with the sources.yml format, the example GitHub Actions usage, and the listed sparse-checkout commands. Define how full and incremental aggregation, caching, private-repository access, and the JSON outputs should behave, then verify the action against the documented examples and output shapes.
Written by the indexing model from the issue text.
Description
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
- Dominant language
- Shell
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from aRustyDev/gh
-
dependencies github-actions
Difficulty 1/5 Under an hour Newbie friendliness 10/100
-
dependencies github-actions
Difficulty 1/5 Under an hour Newbie friendliness 15/100
-
dependencies github-actions
Difficulty 1/5 Under an hour Newbie friendliness 50/100
-
dependencies github-actions
Difficulty 2/5 1-3 hours Newbie friendliness 20/100
-
dependencies github-actions
Difficulty 2/5 1-3 hours Newbie friendliness 10/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
astral-sh/python-build-standalone#1293 ·
-
package-update
Difficulty 1/5 Under an hour Newbie friendliness 90/100
oSoWoSo/vOid_Community_repOsitory#185 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
carbon-language/carbon-lang#7821 ·