krz/orgo

Lightning fast org-mode static site generator. fast go org-mode static-site-generator

Commit c8b514e1a0

c8b514e1a0324d0af4db0fe528d76e829f9fe106

parent: f072e4aaa7

Verified · cmc

cmc <hello@cleberg.net> · 2026-08-30 07:14 UTC

Describe the release process the repository actually has

`RELEASING.org` described a GitHub-native repository. `origin` is gitbay, and the
release only works because gitbay push-mirrors to `github.com/krazywarez/orgo`,
tags included — a fact the document did not mention and the whole process
depends on. It now says where the repository lives, that `gh` talks to the
mirror, and that neither forge runs the tests, since `ci.yml` was removed and
there is no `.gitbay/ci.yml`.

Two steps were missing: the tag-vs-Cargo.toml check the build performs, and
releasing on gitbay, which has no automation and needs the notes and binaries by
hand.

`Cargo.toml`'s `repository` pointed at the mirror rather than at the repository,
as did the `git clone` line in the README and the install guide.

Two comments claimed CI checks the MSRV on every change. Nothing checks it now.

Layout: unified · split

Cargo.toml +4 −5
@@ -8,13 +8,12 @@ readme = "README.md"
88# crates.io caps a keyword at 20 characters, which "static-site-generator" is not.
99keywords = ["org-mode", "static-site", "ssg", "emacs", "blog"]
1010categories = ["command-line-utilities", "text-processing"]
11repository = "https://github.com/krazywarez/orgo"
11repository = "https://gitbay.org/krz/orgo"
1212homepage = "https://krazywarez.github.io/orgo/"
1313
14# The compiler floor, checked in CI rather than assumed. orgo's own code needs 1.82
15# (`Option::is_none_or`); the floor is 1.88 because dependencies in Cargo.lock declare it
16# — `plist` and `time`, both by way of syntect. Raising this is a minor-version change,
17# never a patch.
14# The compiler floor. orgo's own code needs 1.82 (`Option::is_none_or`); the floor is
15# 1.88 because dependencies in Cargo.lock declare it — `plist` and `time`, both by way of
16# syntect. Raising this is a minor-version change, never a patch.
1817rust-version = "1.88"
1918
2019# Published crates carry the source, the fixtures the tests need, and nothing else. The
README.md +1 −1
@@ -29,7 +29,7 @@ cargo install orgo
2929Or from a checkout, if you want to build the version you can read:
3030
3131```sh
32git clone https://github.com/krazywarez/orgo
32git clone https://gitbay.org/krz/orgo
3333cd orgo
3434cargo install --path .
3535```
RELEASING.org +38 −10
@@ -2,13 +2,27 @@
22
33Read the content below for the release process.
44
5** Where the repository lives
6=origin= is gitbay (=ssh://git@gitbay.org/krz/orgo.git=), which is where the issues and
7merge requests are. It push-mirrors to =https://github.com/krazywarez/orgo=, tags
8included.
9
10That mirror is what makes a release work. The automation is GitHub Actions and nothing
11triggers it directly: a tag pushed to gitbay reaches GitHub within a minute, and
12=.github/workflows/release.yml= runs there. =docs.yml= deploys the documentation site to
13Pages the same way, on a push to =main= that touches =docs/=, =src/=, =Cargo.toml= or
14=Cargo.lock=.
15
16Neither forge runs the tests. =ci.yml= is gone and there is no =.gitbay/ci.yml=, so the
17checks in step 2 are the only gate a release passes.
18
519** Before the first publish
620Nothing to install and no token to store. The release workflow mints a short-lived
7crates.io token with OIDC, configured on crates.io against this repository, the
21crates.io token with OIDC, configured on crates.io against the GitHub repository, the
822=release.yml= workflow file and the =crates-io= environment that job runs in.
923
10=repository= and =homepage= in =Cargo.toml= point at GitHub and at the documentation site
11on Pages.
24=repository= in =Cargo.toml= points at gitbay; =homepage= points at the documentation
25site on Pages.
1226
1327** Every release
14281. Bump the version in =Cargo.toml=, and build once so =Cargo.lock= follows.
@@ -31,20 +45,34 @@ on Pages.
3145 git push && git push --tags
3246 #+end_src
3347
345. The tag push is the release. It builds binaries for macOS (arm64 and x86_64) and
35 Linux (gnu and musl), opens a /draft/ GitHub release with them attached, and runs
36 =cargo publish --locked= — there is nothing to publish by hand, and running
37 =cargo publish= locally now only fails on a version crates.io already has.
485. The tag push is the release, by way of the mirror. It builds binaries for macOS
49 (arm64 and x86_64) and Linux (gnu and musl), opens a /draft/ GitHub release with them
50 attached, and runs =cargo publish --locked= — there is nothing to publish by hand, and
51 running =cargo publish= locally now only fails on a version crates.io already has. The
52 build checks the tag against =Cargo.toml= rather than trusting the two to match.
53
54 =gh= talks to the mirror, so it is how you watch the run:
55
56 #+begin_src sh
57 gh run list -R krazywarez/orgo --limit 3
58 #+end_src
3859
3960 Publishing is the one step that cannot be undone: a version can be yanked but never
4061 replaced. The publish job runs in the =crates-io= environment so it can be held —
41 add a required reviewer to that environment in the repository settings and a tag
42 push waits for a human before it reaches crates.io.
62 add a required reviewer to that environment in the GitHub repository settings and a
63 tag push waits for a human before it reaches crates.io.
4364
4465 A release that fails halfway is re-run from the Actions tab: the workflow takes the
4566 tag to build as an input, so it does not need a second tag.
4667
476. Write the release notes and publish the draft.
686. Write the release notes and publish the draft GitHub release.
697. Release on gitbay, which has no automation of its own. Same notes, same binaries.
70
71 #+begin_src sh
72 gitbay release create v0.18.0 --title 0.18.0 --file - < notes.md
73 gh release download v0.18.0 -R krazywarez/orgo -D dist
74 for f in dist/*; do gitbay release asset add v0.18.0 "$(basename "$f")" < "$f"; done
75 #+end_src
4876
4977** If a release goes wrong
5078Yank rather than delete, and ship a fix as a new version:
docs/guide/11-versioning.org +4 −4
@@ -56,10 +56,10 @@ exists to serve the binary, and its types move as the tool does.
5656
5757* The compiler floor
5858
59The MSRV is *1.88*, checked in CI on every change rather than assumed — which is how it
60came to be 1.88 rather than the 1.82 orgo's own code needs. The floor is set by
61dependencies, and a dependency raising its own is invisible until someone on an older
62compiler tries to build.
59The MSRV is *1.88*, measured rather than assumed — which is how it came to be 1.88
60rather than the 1.82 orgo's own code needs. The floor is set by dependencies, and a
61dependency raising its own is invisible until someone on an older compiler tries to
62build.
6363
6464Raising it is a minor version, never a patch.
6565
docs/install.org +1 −1
@@ -21,7 +21,7 @@ That is the whole thing: cargo builds it and puts =orgo= in =~/.cargo/bin=.
2121* From source
2222
2323#+BEGIN_SRC sh
24git clone https://github.com/krazywarez/orgo
24git clone https://gitbay.org/krz/orgo
2525cd orgo
2626cargo build --release
2727#+END_SRC