aRustyDev / aRustyDev/gh

feat: Add `sparse-checkout-aggregate` action

Offen
#4 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
enhancement new-action
Vorherrschende Sprache
Shell
Sterne
0
Forks
0
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## 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

```json
// 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)

```yaml
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

```yaml
- 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

```bash
# 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:none` for minimal data transfer
- Support incremental updates via `only` input
- 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-map` action
- Triggered by `trigger-remote-workflow` action

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginnen Sie mit dem Format von sources.yml, der Beispielverwendung von GitHub Actions und den aufgeführten sparse-checkout-Befehlen. Legen Sie fest, wie die vollständige und inkrementelle Aggregation, das Caching, der Zugriff auf private Repositorys und die JSON-Ausgaben funktionieren sollen, und überprüfen Sie anschließend die Action anhand der dokumentierten Beispiele und Ausgabeformen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
github-actions, shell
Bereich
ci-cd, devops
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.