Release
- Comparing
- v3 to v4
- Current
- Read the document
Tagged versions build with goreleaser for linux, darwin and windows on amd64 and arm64. Archives are tar.gz, or zip for windows, named archdoc_<version>_<os>_<arch> with the binary archdoc at the archive root and LICENSE and README.md beside it. A checksums.txt of SHA-256 digests is published with them. A tag carrying a prerelease identifier publishes as a prerelease.
archdoc --version prints the tag. The version resolves in order: the ldflag goreleaser sets at build time; the module version from runtime/debug.ReadBuildInfo, which go install ...@version and @latest populate; dev.
init records the resolved version in the generated workflow as the version input of archdochq/lint. A version that is not a release tag, including dev and a pseudo-version in any of the three shapes Go produces, is written as latest with a warning that the workflow is unpinned. archdochq/setup downloads the archive for the runner's platform and checksums.txt from the release into a temporary directory, verifies the archive against the checksums, and puts the binary on PATH. With latest, the tag is read from the redirect of the releases page's latest URL.
Asset names are fixed by .goreleaser.yaml and reconstructed by archdochq/setup, which the scaffolded workflow reaches through archdochq/lint. A test renders the archive name, the archive format, the checksum filename and the binary name from that file and compares them against the names the action expects. The action's own repository checks the other side, by downloading a real release on every run.
.pre-commit-hooks.yaml at the repository root defines three hooks for the pre-commit framework. archdoc-lint runs lint, and archdoc-index and archdoc-glossary regenerate INDEX.md and GLOSSARY.md, which stops the commit when either file changes. Each builds archdoc from source at the revision the user's configuration names, and runs from the repository root on every commit, whichever files it touches.
A stable release also writes archdochq/skills, which publishes the guides as skills. A job in the release workflow, run once the release is published and skipped for a tag carrying a prerelease identifier, checks out the tag and archdochq/skills, the second through the SKILLS_DEPLOY_KEY deploy key, and runs go run ./plugin/build.go against the second with the tag less its leading v. The generator refuses a directory holding the working directory, empties the one it is given except for .git, copies the skeleton under plugin/ without build.go, writes each guide to skills/<name>/SKILL.md and LICENSE beside them, and sets version in .claude-plugin/plugin.json, .cursor-plugin/plugin.json, plugin.json and gemini-extension.json. The job commits the result as github-actions[bot], tags the commit with a lightweight tag named for the release, and pushes the branch and the tag atomically.
The repository's own continuous integration runs gofmt, go vet, go test ./... and goreleaser check on push to main and on every pull request, and the release workflow runs the test suite before publishing, with the tag in ARCHDOC_RELEASE_TAG. Under it, a test refuses any rule entry whose since, or a change, names a release later than the tag, comparing by semantic version precedence, which orders a pre-release before the release it precedes. A refusal stops the workflow before goreleaser runs. Without the variable the test is skipped, and a test checks that the release workflow sets it.
The specification under spec/ is checked by a second workflow, which builds archdoc from the commit under test rather than downloading a release. It lints through archdochq/lint with no version input, which leaves the binary just built on PATH in place and annotates each finding on the line that caused it, then runs archdoc index --check against the same binary. It carries no version pin.
The module path is archdoc.dev, which is not where the code is hosted. archdoc.dev serves a go-import meta tag naming the GitHub repository, and the Go tool reads it to find the source: it asks for the full package path first and then shorter prefixes, so a tag at the site's root answers for archdoc.dev/cmd/archdoc too. Releases made before the path changed declare github.com/archdochq/archdoc and are installable only under that path.
ArchDoc is published from the archdochq organisation. The repository and the Homebrew tap were published under ollieread before that, and neither of those names is reused.
The licence is the GNU Affero General Public License, version 3 or later, and its text ships in every archive.
Source spec/release.md · commit 24ca467 · published