Compare commits
6 Commits
e99527f68b
...
v1.0.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
02db91114d | ||
|
|
c27b042bb1 | ||
|
|
59ce683813 | ||
|
|
d653f632d1 | ||
|
|
8e5d05fce6 | ||
|
|
5dad65cc3b |
20
AGENTS.md
20
AGENTS.md
@@ -4,14 +4,14 @@ This guide is for agentic coding partners that need to integrate the composite a
|
||||
|
||||
## Source Of Truth
|
||||
|
||||
Pin all action references to a released tag (for example `@v0.2.0`) and keep all vociferate references on the same tag in a workflow.
|
||||
Pin all action references to a released tag (for example `@v1.0.1`) and keep all vociferate references on the same tag in a workflow.
|
||||
|
||||
Published composite actions:
|
||||
|
||||
- `git.hrafn.xyz/aether/vociferate@v0.2.0` (root action)
|
||||
- `git.hrafn.xyz/aether/vociferate/prepare@v0.2.0`
|
||||
- `git.hrafn.xyz/aether/vociferate/publish@v0.2.0`
|
||||
- `git.hrafn.xyz/aether/vociferate/coverage-badge@v0.2.0`
|
||||
- `git.hrafn.xyz/aether/vociferate@v1.0.1` (root action)
|
||||
- `git.hrafn.xyz/aether/vociferate/prepare@v1.0.1`
|
||||
- `git.hrafn.xyz/aether/vociferate/publish@v1.0.1`
|
||||
- `git.hrafn.xyz/aether/vociferate/coverage-badge@v1.0.1`
|
||||
|
||||
## Action Selection Matrix
|
||||
|
||||
@@ -91,11 +91,11 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- id: prepare
|
||||
uses: git.hrafn.xyz/aether/vociferate/prepare@v0.2.0
|
||||
uses: git.hrafn.xyz/aether/vociferate/prepare@v1.0.1
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: aether/vociferate/.gitea/workflows/do-release.yml@v0.2.0
|
||||
uses: aether/vociferate/.gitea/workflows/do-release.yml@v1.0.1
|
||||
with:
|
||||
tag: ${{ needs.prepare.outputs.version }}
|
||||
secrets: inherit
|
||||
@@ -112,7 +112,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- id: publish
|
||||
uses: git.hrafn.xyz/aether/vociferate/publish@v0.2.0
|
||||
uses: git.hrafn.xyz/aether/vociferate/publish@v1.0.1
|
||||
with:
|
||||
version: v1.2.3
|
||||
```
|
||||
@@ -133,7 +133,7 @@ jobs:
|
||||
- name: Run tests with coverage
|
||||
run: go test -covermode=atomic -coverprofile=coverage.out ./...
|
||||
- id: badge
|
||||
uses: git.hrafn.xyz/aether/vociferate/coverage-badge@v0.2.0
|
||||
uses: git.hrafn.xyz/aether/vociferate/coverage-badge@v1.0.1
|
||||
with:
|
||||
artefact-bucket-name: ${{ vars.ARTEFACT_BUCKET_NAME }}
|
||||
artefact-bucket-endpoint: ${{ vars.ARTEFACT_BUCKET_ENDPONT }}
|
||||
@@ -193,5 +193,3 @@ Use these rules to avoid common automation mistakes:
|
||||
- Do not mix action tags in one workflow update.
|
||||
- Do not assume a release workflow will run from a tag push in all environments; reusable workflow call paths are supported.
|
||||
- Do not treat `VOCIFERATE_REPOSITORY_URL` as a full repository URL; it must be a base URL.
|
||||
- Keep displayed URLs protocol-relative (`//`) when writing markdown/browser-facing outputs.
|
||||
- If a workflow environment does not support `GITHUB_STEP_SUMMARY`, append markdown to a file and print it in a final `Summary` step.
|
||||
|
||||
40
CHANGELOG.md
40
CHANGELOG.md
@@ -2,8 +2,8 @@
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](//keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](//semver.org/spec/v2.0.0.html).
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
A `### Breaking` section is used in addition to Keep a Changelog's standard sections to explicitly document changes that are backwards-incompatible but would otherwise appear under `### Changed`. Entries under `### Breaking` trigger a major version bump in automated release recommendation logic.
|
||||
|
||||
@@ -15,6 +15,32 @@ A `### Breaking` section is used in addition to Keep a Changelog's standard sect
|
||||
|
||||
### Changed
|
||||
|
||||
### Removed
|
||||
|
||||
### Fixed
|
||||
|
||||
## [1.0.1] - 2026-03-21
|
||||
|
||||
### Breaking
|
||||
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
|
||||
### Removed
|
||||
|
||||
### Fixed
|
||||
|
||||
- Enforced explicit `https://` changelog reference links in prepare output for browser-safe markdown links.
|
||||
|
||||
## [1.0.0] - 2026-03-21
|
||||
|
||||
### Breaking
|
||||
|
||||
### Added
|
||||
|
||||
### Changed
|
||||
|
||||
- Canonical changelog filename is now `CHANGELOG.md`, and action/code defaults were updated to match.
|
||||
- README now uses `Æther` stylization in prose and corrects released-tag guidance wording.
|
||||
|
||||
@@ -42,7 +68,7 @@ A `### Breaking` section is used in addition to Keep a Changelog's standard sect
|
||||
|
||||
### Fixed
|
||||
|
||||
- Browser-facing URLs emitted in generated changelog links, workflow summaries, and markdown now use protocol-relative `//` forms.
|
||||
- Browser-facing URLs emitted in generated changelog links, workflow summaries, and markdown now use explicit `https://` forms.
|
||||
- Release workflows now collect summary markdown into portable temp files and print it in explicit `Summary` steps instead of relying on unsupported `GITHUB_STEP_SUMMARY` output.
|
||||
- Prepare now recreates the standard `Unreleased` section headers after promoting notes into a tagged release entry.
|
||||
- First-release recommendation remains `v1.0.0` when no prior releases exist in the changelog.
|
||||
@@ -84,6 +110,8 @@ A `### Breaking` section is used in addition to Keep a Changelog's standard sect
|
||||
- Project/automation rename from `releaseprep` to `vociferate` (entrypoint, package paths, outputs).
|
||||
- README guidance focused on primary cross-repository reuse workflows.
|
||||
|
||||
[Unreleased]: //git.hrafn.xyz/aether/vociferate/compare/v0.2.0...main
|
||||
[0.2.0]: //git.hrafn.xyz/aether/vociferate/compare/v0.1.0...v0.2.0
|
||||
[0.1.0]: //git.hrafn.xyz/aether/vociferate/compare/2060af6...v0.1.0
|
||||
[Unreleased]: https://git.hrafn.xyz/aether/vociferate/compare/v1.0.1...main
|
||||
[1.0.1]: https://git.hrafn.xyz/aether/vociferate/compare/v1.0.0...v1.0.1
|
||||
[1.0.0]: https://git.hrafn.xyz/aether/vociferate/compare/v0.2.0...v1.0.0
|
||||
[0.2.0]: https://git.hrafn.xyz/aether/vociferate/compare/v0.1.0...v0.2.0
|
||||
[0.1.0]: https://git.hrafn.xyz/aether/vociferate/compare/2060af6...v0.1.0
|
||||
|
||||
22
README.md
22
README.md
@@ -1,9 +1,9 @@
|
||||
# vociferate
|
||||
|
||||
[](//git.hrafn.xyz/aether/vociferate/actions/runs/latest?workflow=push-validation.yml&branch=main&event=push)
|
||||
[](//git.hrafn.xyz/aether/vociferate/actions/runs/latest?workflow=prepare-release.yml)
|
||||
[](//git.hrafn.xyz/aether/vociferate/actions/runs/latest?workflow=do-release.yml)
|
||||
[](//s3.hrafn.xyz/aether-workflow-report-artefacts/vociferate/branch/main/coverage.html)
|
||||
[](https://git.hrafn.xyz/aether/vociferate/actions/runs/latest?workflow=push-validation.yml&branch=main&event=push)
|
||||
[](https://git.hrafn.xyz/aether/vociferate/actions/runs/latest?workflow=prepare-release.yml)
|
||||
[](https://git.hrafn.xyz/aether/vociferate/actions/runs/latest?workflow=do-release.yml)
|
||||
[](https://s3.hrafn.xyz/aether-workflow-report-artefacts/vociferate/branch/main/coverage.html)
|
||||
|
||||
`vociferate` is an `Æther` release orchestration tool written in Go for repositories that
|
||||
want changelog-driven versioning, automated release preparation, and repeatable
|
||||
@@ -17,7 +17,7 @@ revision.
|
||||
## Use In Other Repositories
|
||||
|
||||
Vociferate ships three composite actions covering release preparation, release publication, and coverage badge publishing.
|
||||
Release tags now exist; pin all action and reusable-workflow references to the same released tag (for example, `@v0.2.0`) instead of `@main`.
|
||||
Release tags now exist; pin all action and reusable-workflow references to the same released tag (for example, `@v1.0.1`) instead of `@main`.
|
||||
|
||||
For agentic coding partners, see [`AGENTS.md`](AGENTS.md) for a direct integration playbook, selection matrix, and copy-paste workflow patterns.
|
||||
|
||||
@@ -41,13 +41,13 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: git.hrafn.xyz/aether/vociferate/prepare@v0.2.0
|
||||
- uses: git.hrafn.xyz/aether/vociferate/prepare@v1.0.1
|
||||
with:
|
||||
version: ${{ inputs.version }}
|
||||
|
||||
publish:
|
||||
needs: prepare
|
||||
uses: aether/vociferate/.gitea/workflows/do-release.yml@v0.2.0
|
||||
uses: aether/vociferate/.gitea/workflows/do-release.yml@v1.0.1
|
||||
with:
|
||||
tag: ${{ needs.prepare.outputs.version }}
|
||||
secrets: inherit
|
||||
@@ -61,7 +61,7 @@ For repositories that embed the version inside source code, pass `version-file`
|
||||
and `version-pattern`:
|
||||
|
||||
```yaml
|
||||
- uses: git.hrafn.xyz/aether/vociferate/prepare@v0.2.0
|
||||
- uses: git.hrafn.xyz/aether/vociferate/prepare@v1.0.1
|
||||
with:
|
||||
version-file: internal/myapp/version/version.go
|
||||
version-pattern: 'const Version = "([^"]+)"'
|
||||
@@ -85,7 +85,7 @@ on:
|
||||
|
||||
jobs:
|
||||
release:
|
||||
uses: aether/vociferate/.gitea/workflows/do-release.yml@v0.2.0
|
||||
uses: aether/vociferate/.gitea/workflows/do-release.yml@v1.0.1
|
||||
with:
|
||||
tag: ${{ inputs.tag }}
|
||||
secrets: inherit
|
||||
@@ -100,7 +100,7 @@ assets after it runs:
|
||||
|
||||
```yaml
|
||||
- id: publish
|
||||
uses: git.hrafn.xyz/aether/vociferate/publish@v0.2.0
|
||||
uses: git.hrafn.xyz/aether/vociferate/publish@v1.0.1
|
||||
|
||||
- name: Upload my binary
|
||||
run: |
|
||||
@@ -120,7 +120,7 @@ Run your coverage tests first, then call the action to generate `coverage.html`,
|
||||
run: go test -covermode=atomic -coverprofile=coverage.out ./...
|
||||
|
||||
- id: coverage
|
||||
uses: git.hrafn.xyz/aether/vociferate/coverage-badge@v0.2.0
|
||||
uses: git.hrafn.xyz/aether/vociferate/coverage-badge@v1.0.1
|
||||
with:
|
||||
artefact-bucket-name: ${{ vars.ARTEFACT_BUCKET_NAME }}
|
||||
artefact-bucket-endpoint: ${{ vars.ARTEFACT_BUCKET_ENDPONT }}
|
||||
|
||||
@@ -138,8 +138,8 @@ runs:
|
||||
|
||||
display_endpoint="${ARTEFACT_BUCKET_ENDPONT#https://}"
|
||||
display_endpoint="${display_endpoint#http://}"
|
||||
report_url="//${display_endpoint%/}/${ARTEFACT_BUCKET_NAME}/${prefix}/coverage.html"
|
||||
badge_url="//${display_endpoint%/}/${ARTEFACT_BUCKET_NAME}/${prefix}/coverage-badge.svg"
|
||||
report_url="https://${display_endpoint%/}/${ARTEFACT_BUCKET_NAME}/${prefix}/coverage.html"
|
||||
badge_url="https://${display_endpoint%/}/${ARTEFACT_BUCKET_NAME}/${prefix}/coverage-badge.svg"
|
||||
|
||||
aws --endpoint-url "${ARTEFACT_BUCKET_ENDPONT}" s3 cp "$COVERAGE_HTML" "s3://${ARTEFACT_BUCKET_NAME}/${prefix}/coverage.html" --content-type text/html
|
||||
aws --endpoint-url "${ARTEFACT_BUCKET_ENDPONT}" s3 cp "$COVERAGE_BADGE" "s3://${ARTEFACT_BUCKET_NAME}/${prefix}/coverage-badge.svg" --content-type image/svg+xml
|
||||
|
||||
@@ -541,10 +541,10 @@ func addChangelogLinks(text, repoURL, rootDir string) string {
|
||||
func displayURL(url string) string {
|
||||
trimmed := strings.TrimSpace(url)
|
||||
if strings.HasPrefix(trimmed, "https://") {
|
||||
return "//" + strings.TrimPrefix(trimmed, "https://")
|
||||
return trimmed
|
||||
}
|
||||
if strings.HasPrefix(trimmed, "http://") {
|
||||
return "//" + strings.TrimPrefix(trimmed, "http://")
|
||||
return "https://" + strings.TrimPrefix(trimmed, "http://")
|
||||
}
|
||||
return trimmed
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ func (s *PrepareSuite) TestPrepare_UpdatesVersionAndPromotesUnreleasedNotes() {
|
||||
changelogBytes, err := os.ReadFile(filepath.Join(s.rootDir, "CHANGELOG.md"))
|
||||
require.NoError(s.T(), err)
|
||||
firstCommit := firstCommitShortHash(s.T(), s.rootDir)
|
||||
require.Equal(s.T(), "# Changelog\n\n## [Unreleased]\n\n### Breaking\n\n### Added\n\n### Changed\n\n### Removed\n\n### Fixed\n\n## [1.1.7] - 2026-03-20\n\n### Breaking\n\n### Added\n\n- New thing.\n\n### Fixed\n\n- Old thing.\n\n## [1.1.6] - 2017-12-20\n\n### Fixed\n\n- Historical note.\n\n[Unreleased]: //git.hrafn.xyz/aether/vociferate/compare/v1.1.7...main\n[1.1.7]: //git.hrafn.xyz/aether/vociferate/compare/v1.1.6...v1.1.7\n[1.1.6]: //git.hrafn.xyz/aether/vociferate/compare/"+firstCommit+"...v1.1.6\n", string(changelogBytes))
|
||||
require.Equal(s.T(), "# Changelog\n\n## [Unreleased]\n\n### Breaking\n\n### Added\n\n### Changed\n\n### Removed\n\n### Fixed\n\n## [1.1.7] - 2026-03-20\n\n### Breaking\n\n### Added\n\n- New thing.\n\n### Fixed\n\n- Old thing.\n\n## [1.1.6] - 2017-12-20\n\n### Fixed\n\n- Historical note.\n\n[Unreleased]: https://git.hrafn.xyz/aether/vociferate/compare/v1.1.7...main\n[1.1.7]: https://git.hrafn.xyz/aether/vociferate/compare/v1.1.6...v1.1.7\n[1.1.6]: https://git.hrafn.xyz/aether/vociferate/compare/"+firstCommit+"...v1.1.6\n", string(changelogBytes))
|
||||
}
|
||||
|
||||
func (s *PrepareSuite) TestPrepare_ReturnsErrorWhenUnreleasedSectionMissing() {
|
||||
@@ -283,9 +283,9 @@ func (s *PrepareSuite) TestPrepare_UsesGitHrafnXYZEnvironmentForChangelogLinks()
|
||||
require.Contains(s.T(), changelog, "### Removed\n")
|
||||
require.Contains(s.T(), changelog, "## [1.1.7] - 2026-03-20")
|
||||
require.Contains(s.T(), changelog, "## [1.1.6] - 2017-12-20")
|
||||
require.Contains(s.T(), changelog, "[Unreleased]: //git.hrafn.xyz/aether/vociferate/compare/v1.1.7...main")
|
||||
require.Contains(s.T(), changelog, "[1.1.7]: //git.hrafn.xyz/aether/vociferate/compare/v1.1.6...v1.1.7")
|
||||
require.Contains(s.T(), changelog, "[1.1.6]: //git.hrafn.xyz/aether/vociferate/compare/"+firstCommit+"...v1.1.6")
|
||||
require.Contains(s.T(), changelog, "[Unreleased]: https://git.hrafn.xyz/aether/vociferate/compare/v1.1.7...main")
|
||||
require.Contains(s.T(), changelog, "[1.1.7]: https://git.hrafn.xyz/aether/vociferate/compare/v1.1.6...v1.1.7")
|
||||
require.Contains(s.T(), changelog, "[1.1.6]: https://git.hrafn.xyz/aether/vociferate/compare/"+firstCommit+"...v1.1.6")
|
||||
}
|
||||
|
||||
func (s *PrepareSuite) TestPrepare_UsesGitHubEnvironmentForChangelogLinks() {
|
||||
@@ -305,7 +305,7 @@ func (s *PrepareSuite) TestPrepare_UsesGitHubEnvironmentForChangelogLinks() {
|
||||
require.Contains(s.T(), changelog, "### Removed\n")
|
||||
require.Contains(s.T(), changelog, "## [1.1.7] - 2026-03-20")
|
||||
require.Contains(s.T(), changelog, "## [1.1.6] - 2017-12-20")
|
||||
require.Contains(s.T(), changelog, "[Unreleased]: //github.com/aether/vociferate/compare/v1.1.7...main")
|
||||
require.Contains(s.T(), changelog, "[1.1.7]: //github.com/aether/vociferate/compare/v1.1.6...v1.1.7")
|
||||
require.Contains(s.T(), changelog, "[1.1.6]: //github.com/aether/vociferate/compare/"+firstCommit+"...v1.1.6")
|
||||
require.Contains(s.T(), changelog, "[Unreleased]: https://github.com/aether/vociferate/compare/v1.1.7...main")
|
||||
require.Contains(s.T(), changelog, "[1.1.7]: https://github.com/aether/vociferate/compare/v1.1.6...v1.1.7")
|
||||
require.Contains(s.T(), changelog, "[1.1.6]: https://github.com/aether/vociferate/compare/"+firstCommit+"...v1.1.6")
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
0.2.0
|
||||
1.0.1
|
||||
|
||||
Reference in New Issue
Block a user