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"
8# crates.io caps a keyword at 20 characters, which "static-site-generator" is not. 8# crates.io caps a keyword at 20 characters, which "static-site-generator" is not.
9keywords = ["org-mode", "static-site", "ssg", "emacs", "blog"] 9keywords = ["org-mode", "static-site", "ssg", "emacs", "blog"]
10categories = ["command-line-utilities", "text-processing"] 10categories = ["command-line-utilities", "text-processing"]
11repository = "https://github.com/krazywarez/orgo" 11repository = "https://gitbay.org/krz/orgo"
12homepage = "https://krazywarez.github.io/orgo/" 12homepage = "https://krazywarez.github.io/orgo/"
13 13
14# The compiler floor, checked in CI rather than assumed. orgo's own code needs 1.82 14# The compiler floor. orgo's own code needs 1.82 (`Option::is_none_or`); the floor is
15# (`Option::is_none_or`); the floor is 1.88 because dependencies in Cargo.lock declare it 15# 1.88 because dependencies in Cargo.lock declare it — `plist` and `time`, both by way of
16# — `plist` and `time`, both by way of syntect. Raising this is a minor-version change, 16# syntect. Raising this is a minor-version change, never a patch.
17# never a patch.
18rust-version = "1.88" 17rust-version = "1.88"
19 18
20# Published crates carry the source, the fixtures the tests need, and nothing else. The 19# 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
29Or from a checkout, if you want to build the version you can read: 29Or from a checkout, if you want to build the version you can read:
30 30
31```sh 31```sh
32git clone https://github.com/krazywarez/orgo 32git clone https://gitbay.org/krz/orgo
33cd orgo 33cd orgo
34cargo install --path . 34cargo install --path .
35``` 35```
RELEASING.org +38 −10
@@ -2,13 +2,27 @@
2 2
3Read the content below for the release process. 3Read the content below for the release process.
4 4
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
5** Before the first publish 19** Before the first publish
6Nothing to install and no token to store. The release workflow mints a short-lived 20Nothing 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
8=release.yml= workflow file and the =crates-io= environment that job runs in. 22=release.yml= workflow file and the =crates-io= environment that job runs in.
9 23
10=repository= and =homepage= in =Cargo.toml= point at GitHub and at the documentation site 24=repository= in =Cargo.toml= points at gitbay; =homepage= points at the documentation
11on Pages. 25site on Pages.
12 26
13** Every release 27** Every release
141. Bump the version in =Cargo.toml=, and build once so =Cargo.lock= follows. 281. Bump the version in =Cargo.toml=, and build once so =Cargo.lock= follows.
@@ -31,20 +45,34 @@ on Pages.
31 git push && git push --tags 45 git push && git push --tags
32 #+end_src 46 #+end_src
33 47
345. The tag push is the release. It builds binaries for macOS (arm64 and x86_64) and 485. The tag push is the release, by way of the mirror. It builds binaries for macOS
35 Linux (gnu and musl), opens a /draft/ GitHub release with them attached, and runs 49 (arm64 and x86_64) and Linux (gnu and musl), opens a /draft/ GitHub release with them
36 =cargo publish --locked= — there is nothing to publish by hand, and running 50 attached, and runs =cargo publish --locked= — there is nothing to publish by hand, and
37 =cargo publish= locally now only fails on a version crates.io already has. 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
38 59
39 Publishing is the one step that cannot be undone: a version can be yanked but never 60 Publishing is the one step that cannot be undone: a version can be yanked but never
40 replaced. The publish job runs in the =crates-io= environment so it can be held — 61 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 62 add a required reviewer to that environment in the GitHub repository settings and a
42 push waits for a human before it reaches crates.io. 63 tag push waits for a human before it reaches crates.io.
43 64
44 A release that fails halfway is re-run from the Actions tab: the workflow takes the 65 A release that fails halfway is re-run from the Actions tab: the workflow takes the
45 tag to build as an input, so it does not need a second tag. 66 tag to build as an input, so it does not need a second tag.
46 67
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
48 76
49** If a release goes wrong 77** If a release goes wrong
50Yank rather than delete, and ship a fix as a new version: 78Yank 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.
56 56
57* The compiler floor 57* The compiler floor
58 58
59The MSRV is *1.88*, checked in CI on every change rather than assumed — which is how it 59The MSRV is *1.88*, measured rather than assumed — which is how it came to be 1.88
60came to be 1.88 rather than the 1.82 orgo's own code needs. The floor is set by 60rather than the 1.82 orgo's own code needs. The floor is set by dependencies, and a
61dependencies, and a dependency raising its own is invisible until someone on an older 61dependency raising its own is invisible until someone on an older compiler tries to
62compiler tries to build. 62build.
63 63
64Raising it is a minor version, never a patch. 64Raising it is a minor version, never a patch.
65 65
docs/install.org +1 −1
@@ -21,7 +21,7 @@ That is the whole thing: cargo builds it and puts =orgo= in =~/.cargo/bin=.
21* From source 21* From source
22 22
23#+BEGIN_SRC sh 23#+BEGIN_SRC sh
24git clone https://github.com/krazywarez/orgo 24git clone https://gitbay.org/krz/orgo
25cd orgo 25cd orgo
26cargo build --release 26cargo build --release
27#+END_SRC 27#+END_SRC