Shared reusable GitHub Actions workflows, release-please setup and community health files for every bamr87 repo.
This is the owner-level .github repository for every bamr87 repository. It hosts the reusable release and publish workflows, a composite action, a starter workflow template, and the default community-health files that every repo inherits.
It is consumed by the bamr87 dash — the monorepo that vendors all the projects as submodules.
Under the fleet's decision D3, shared workflows are moving to the hub: the CI gate is already the hub's standard-ci.yml, and the hub now carries its own release-please.yml. See Reusable workflows for what that means for each file here.
- Inherited defaults:
CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md, issue forms and a pull request template apply to every bamr87 repo that has no copy of its own. - Reusable release workflow:
release-please.ymlturns Conventional Commits into a release PR, a version bump,CHANGELOG.mdand a GitHub Release. - Ecosystem-aware publishing:
publish.ymldetects the stack with thedetect-stackaction and publishes to RubyGems, npm, PyPI or GHCR. - Starter workflow:
workflow-templates/release.ymlappears in the Actions tab of every bamr87 repo.
Nothing to install: a repo picks up the community-health defaults automatically. The block lints this repo's workflows, then adopts the release and CI standard in another repo from a bamr87/bamr87 checkout:
# This repo's only check: lint the reusable workflows (no install, build or test step) bash <(curl -sSfL https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash) latest /tmp /tmp/actionlint # Adopt the standard in a repo, from a bamr87/bamr87 checkout (dry run; add --apply to open the PR) tools/fanout.sh --kit sdlc --target <repo> tools/fanout.sh --kit standardize --target <repo> --artifacts ci
Conventional Commits ──► CI gate (standard-ci.yml) ──► merge to main
│
▼
release-please opens a "release PR"
(bumps version file + CHANGELOG.md)
│
reviewer merges the release PR
│
▼
tag vX.Y.Z + GitHub Release ──► publish.yml
(gem / npm / PyPI / GHCR)
- Versioning & changelog are automated by release-please: commit messages drive the semver bump and the
CHANGELOG.md. No manual version edits. - Releases are reviewable — every release is a PR you can inspect before it ships.
- Publishing is ecosystem-aware — one
publish.ymldetects the stack and pushes to the right registry. - Quality is gated by the shared CI gate, which lives in the dash:
bamr87/bamr87/.github/workflows/standard-ci.yml(stack-detected lint, test and build).
| Workflow | Purpose | Call it with |
|---|---|---|
release-please.yml |
Version bump + CHANGELOG + GitHub Release | uses: bamr87/.github/.github/workflows/release-please.yml@main |
publish.yml |
Publish to gem / npm / PyPI / GHCR + attach assets | uses: bamr87/.github/.github/workflows/publish.yml@main |
Composite action: detect-stack — emits node/ruby/gem/python/jekyll/mkdocs/docker booleans + the primary registry.
Status under decision D3. The hub carries its own copy of the release logic, bamr87/bamr87/.github/workflows/release-please.yml, which the SDLC kit pins at @v2. The copy here keeps existing callers working until it is retired or shimmed, and the fleet standard reports a release caller of it as a UPS-REPO-21 warning during the rollout. publish.yml and detect-stack have no hub counterpart yet: a repo that publishes chains publish.yml off the release job's release_created, tag_name and version outputs.
This repo used to host a six-job reusable gate, ci.yml (detect → test/lint/build/docs/commitlint/CodeQL), plus a workflow-templates/ci.yml caller for it. Nothing called it: on 2026-10-03 the workflow files of all bamr87, year-of-ai and ai-world-view repos were listed and none referenced it, while 19 repos call the dash's standard-ci.yml. It was removed to leave one shared gate. Recover it from git history if a fuller gate is wanted again.
The hub's older rollout tool, tools/adopt-release.sh <repo> (or the /adopt-release Claude command), scaffolds callers of this repo's release-please.yml and publish.yml. To do it by hand, copy the release caller from workflow-templates/ and the CI caller from the dash's templates/standard-ci/ci.yml into .github/workflows/, and add a release-please config:
.github/workflows/ci.yml # → bamr87/bamr87 standard-ci.yml
.github/workflows/release.yml # → release-please.yml@main, then publish.yml@main
release-please-config.json # release-type: ruby | node | python | simple
.release-please-manifest.json # {".": "<current version>"}
| Ecosystem | release-type |
Version source release-please maintains |
|---|---|---|
| Ruby gem | ruby |
version-file (e.g. lib/<gem>/version.rb); other files via extra-files |
| Node / TS | node |
package.json |
| Python | python |
pyproject.toml (+ __init__.py via extra-files) |
| Jekyll / bash / docs (no package) | simple |
a VERSION file → GitHub Release only |
Publishing only runs when the ecosystem is detected and its credential exists; otherwise the version bump, changelog, and GitHub Release still succeed.
| Registry | Credential | Notes |
|---|---|---|
| RubyGems | RUBYGEMS_API_KEY (repo secret) |
|
| npm | NPM_TOKEN (repo secret) |
published with provenance |
| PyPI | none | trusted publishing (OIDC) — configure the publisher on PyPI |
| GHCR | none | uses the built-in GITHUB_TOKEN |
| CI on the release PR | RELEASE_PLEASE_TOKEN (optional PAT) |
so the release PR triggers CI; falls back to GITHUB_TOKEN |
Branch protection (require the CI checks before merge) is opt-in via the monorepo's tools/protect-branch.sh.
See docs/RELEASES.md in the monorepo for the full guide.
| Path | What it is |
|---|---|
.github/workflows/ |
Reusable workflows called by other repos: release-please.yml and publish.yml |
.github/actions/detect-stack/ |
Composite action publish.yml uses to pick the registry |
.github/ISSUE_TEMPLATE/, .github/PULL_REQUEST_TEMPLATE.md |
Default issue forms and pull request template |
workflow-templates/ |
Starter release.yml offered in the Actions tab of every bamr87 repo |
CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md |
Default community health files inherited by repos that do not define their own |
There is no build step or test suite here; actionlint (in Quick start) is the only check. A change to a reusable workflow affects every repo that calls it at @main, so try it from one consumer repo before merging. Conventions and the rules for changing inherited files live in AGENTS.md.
Contributions are welcome via pull request. Use Conventional Commits and keep actionlint clean. See CONTRIBUTING.md for the workflow; AI agents start with AGENTS.md.
Notable changes are recorded in CHANGELOG.md; the full record is in the commit history. Tagged versions are on the releases page.
Released under the MIT License.
Part of the bamr87 portfolio — browse every project on Amr's GitHub profile.