Commit e34cbb8d66

e34cbb8d66871c25b3700b6d488a82d498366a68

parent: 49c030d83f

Verified · cmc ci/build: success ci/lint: success

cmc <hello@cleberg.net> · 2026-08-31 04:59 UTC

Pin where CI installs orgo

The runner's cargo home is not $HOME, so `cargo install` put the binary
outside the path the steps named, and then declined to reinstall it.

Layout: unified · split

.gitbay/ci.yml +16 −8
@@ -45,13 +45,20 @@ jobs:
45 # orgo is installed from crates.io and takes minutes to compile, so it is 45 # orgo is installed from crates.io and takes minutes to compile, so it is
46 # rebuilt only when this version changes. Nothing bumps it automatically: 46 # rebuilt only when this version changes. Nothing bumps it automatically:
47 # raise it by hand, which is also how you find out orgo broke the site. 47 # raise it by hand, which is also how you find out orgo broke the site.
48 #
49 # --root pins where it lands, like ruff and lychee below. Without it cargo
50 # installs under whatever cargo home the runner sets, which is not $HOME:
51 # the binary goes somewhere this file does not name, and the next run's
52 # `cargo install` declines to repeat itself because its metadata already
53 # records the version as installed.
48 - | 54 - |
49 set -eu 55 set -eu
50 v=0.22.0 56 v=0.22.0
51 if ! "$HOME/.cargo/bin/orgo" --version 2>/dev/null | grep -qx "orgo $v"; then 57 if ! "$HOME/tools/orgo/bin/orgo" --version 2>/dev/null | grep -qx "orgo $v"; then
52 "$HOME/.cargo/bin/cargo" install orgo --version "$v" --locked 58 "$HOME/.cargo/bin/cargo" install orgo --version "$v" --locked \
59 --root "$HOME/tools/orgo"
53 fi 60 fi
54 "$HOME/.cargo/bin/orgo" --version 61 "$HOME/tools/orgo/bin/orgo" --version
55 python3 --version 62 python3 --version
56 63
57 # build.py deploys with rsync when DEPLOY=true and ENV=prod. This build 64 # build.py deploys with rsync when DEPLOY=true and ENV=prod. This build
@@ -74,7 +81,7 @@ jobs:
74 exit 1 81 exit 1
75 EOF 82 EOF
76 chmod +x .ci-bin/rsync 83 chmod +x .ci-bin/rsync
77 PATH="$PWD/.ci-bin:$HOME/.cargo/bin:$PATH" ENV=prod BUILD=true python3 build.py 84 PATH="$PWD/.ci-bin:$HOME/tools/orgo/bin:$PATH" ENV=prod BUILD=true python3 build.py
78 85
79 - | 86 - |
80 set -eu 87 set -eu
@@ -99,10 +106,11 @@ jobs:
99 | sh -s -- -y --no-modify-path --profile minimal 106 | sh -s -- -y --no-modify-path --profile minimal
100 fi 107 fi
101 v=0.22.0 108 v=0.22.0
102 if ! "$HOME/.cargo/bin/orgo" --version 2>/dev/null | grep -qx "orgo $v"; then 109 if ! "$HOME/tools/orgo/bin/orgo" --version 2>/dev/null | grep -qx "orgo $v"; then
103 "$HOME/.cargo/bin/cargo" install orgo --version "$v" --locked 110 "$HOME/.cargo/bin/cargo" install orgo --version "$v" --locked \
111 --root "$HOME/tools/orgo"
104 fi 112 fi
105 "$HOME/.cargo/bin/orgo" --version 113 "$HOME/tools/orgo/bin/orgo" --version
106 114
107 # Prebuilt release binary, checksum-verified, kept in $HOME between runs. 115 # Prebuilt release binary, checksum-verified, kept in $HOME between runs.
108 - | 116 - |
@@ -125,7 +133,7 @@ jobs:
125 # URLs to /img/, which is served from a different docroot and would look 133 # URLs to /img/, which is served from a different docroot and would look
126 # like 198 broken links here. The development output keeps them absolute, 134 # like 198 broken links here. The development output keeps them absolute,
127 # so the image host gets checked for real. 135 # so the image host gets checked for real.
128 - $HOME/.cargo/bin/orgo build content -o .build-dev --strict 136 - $HOME/tools/orgo/bin/orgo build content -o .build-dev --strict
129 137
130 # Internal links are the half worth gating on: they are entirely within 138 # Internal links are the half worth gating on: they are entirely within
131 # this repo, so a failure is always a real defect and always fixable here. 139 # this repo, so a failure is always a real defect and always fixable here.