feat: add source-dir and repo-url inputs for external repo support

Allow changelog generation from upstream repositories instead of only
the current working directory. Supports packaging repos that contain
only rpm spec files while the source lives in an external git repo.

- source-dir: point at an existing local checkout
- repo-url: action clones a bare copy automatically
- source-dir takes precedence if both are set

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-27 10:36:00 +03:00
parent 22e2e34724
commit 328101f247
3 changed files with 109 additions and 3 deletions

View File

@@ -24,7 +24,8 @@ since the last release.
## Requirements
The consumer workflow must check out the repo with full git history:
When collecting commits from the current repo (default), the consumer
workflow must check out with full git history:
```yaml
- uses: actions/checkout@v4
@@ -35,6 +36,10 @@ The consumer workflow must check out the repo with full git history:
Without this, `git describe` can't see prior tags and the entry will
default to "No user-visible changes" on every release.
When using `repo-url`, the action handles cloning automatically.
When using `source-dir`, ensure the checkout at that path has full
history (`fetch-depth: 0`).
## Inputs
| Input | Required | Default | Description |
@@ -45,6 +50,8 @@ default to "No user-visible changes" on every release.
| `author` | no | `Gitea Actions <actions@git.lair.cafe>` | Name and email for the entry. |
| `tag-pattern` | no | `v*` | Glob pattern for release tags, used to locate the previous release. |
| `exclude-patterns` | no | (see below) | Newline-separated `grep -E` patterns to drop from the generated log. |
| `source-dir` | no | — | Path to a local git checkout to collect commits from instead of `$PWD`. |
| `repo-url` | no | — | URL of an external repo to clone (bare) for commit history. |
Default `exclude-patterns`:
@@ -86,6 +93,52 @@ Note the fully-qualified URL in `uses:` — the Gitea instance's
`DEFAULT_ACTIONS_URL` points at github.com, so internal actions must
be referenced by absolute URL.
### Packaging repo that tracks an upstream source
When your internal repo only contains rpm packaging (spec file, patches,
etc.) and the actual source lives in an external git repository, use
`repo-url` to pull commit history from upstream:
```yaml
jobs:
srpm:
runs-on: fedora
if: startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v4
- name: Determine version
id: version
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> "$GITHUB_OUTPUT"
- name: Update changelog from upstream
uses: https://git.lair.cafe/actions/rpm-changelog@v1
with:
spec: mypackage.spec
version: ${{ steps.version.outputs.VERSION }}
repo-url: https://github.com/upstream-org/upstream-repo.git
```
Alternatively, if your workflow already clones the upstream source (e.g.
to build a tarball), point `source-dir` at the existing checkout to
avoid cloning twice:
```yaml
- name: Clone upstream source
run: git clone https://github.com/upstream-org/upstream-repo.git /tmp/upstream
- name: Update changelog from local clone
uses: https://git.lair.cafe/actions/rpm-changelog@v1
with:
spec: mypackage.spec
version: ${{ steps.version.outputs.VERSION }}
source-dir: /tmp/upstream
```
If both `source-dir` and `repo-url` are set, `source-dir` wins.
`repo-url` clones are bare with `--filter=blob:none` to minimise
bandwidth — only commit/tag metadata is fetched.
## Versioning
Pin to a major version tag (`@v1`) for automatic patch/minor updates.