diff options
| author | t <t@tjp.lol> | 2026-08-20 12:49:36 -0600 |
|---|---|---|
| committer | t <t@tjp.lol> | 2026-08-20 13:39:46 -0600 |
| commit | a08d854d52cf5492a7763bccc1ce475dcc057cba (patch) | |
| tree | ccc2933bba649e9cd6d0fbe0cfc2426f9ae2d886 /mise.toml | |
| parent | d1306506aa7f504b0e91c9c6ed7314afbf99978e (diff) | |
Replace lyaml with api7-lua-tinyyaml and prepare the 0.1.0 releasev0.1.0
lyaml binds the system libyaml, which luarocks does not vendor, so
installing the rock failed wherever that library was absent, taking the
whole extension down on a stock macOS machine. api7-lua-tinyyaml is pure
Lua and matches lyaml on every quoting, escaping and block-scalar form
profiles use.
What the subset costs: anchors and aliases are not resolved, and plain
multi-line scalars raise. The raise surfaces through the existing parse
warning, but an unresolved alias came back as the literal "*alias"
string and would have become a profile name, so frontmatter.parse now
detects those keys, drops them, and warns.
Point source.url at code.tjp.lol with a v0.1.0 tag, replacing a GitHub
URL that never existed. Add a LICENSE file and mise release tasks, and
fix the README dependency-install command, which called a luarocks.cmd
function that does not exist.
Diffstat (limited to 'mise.toml')
| -rw-r--r-- | mise.toml | 83 |
1 files changed, 74 insertions, 9 deletions
@@ -5,21 +5,15 @@ lua = "5.4" # puts that tree on package.path and runs the specs. Both pin --lua-version 5.4 # because a stray system luarocks may default to another Lua. # -# lyaml is a C binding over libyaml and needs the system library present: -# `brew install libyaml` on macOS, `apt install libyaml-dev` on Debian. The -# YAML_DIR below points luarocks at Homebrew's prefix when brew is available and -# otherwise lets luarocks search the usual system paths. +# Every rock below is pure Lua, so there is no system library to install first +# and nothing to point luarocks at. [tasks.deps] description = "Install the Lua rocks the extension and specs need into ./.rocks" dir = "{{config_root}}" run = """ set -e -if brew --prefix libyaml >/dev/null 2>&1; then - luarocks --lua-version 5.4 --tree .rocks install lyaml YAML_DIR="$(brew --prefix libyaml)" -else - luarocks --lua-version 5.4 --tree .rocks install lyaml -fi +luarocks --lua-version 5.4 --tree .rocks install api7-lua-tinyyaml luarocks --lua-version 5.4 --tree .rocks install toml2lua luarocks --lua-version 5.4 --tree .rocks install luv luarocks --lua-version 5.4 --tree .rocks install dkjson @@ -57,3 +51,74 @@ set -e eval "$(luarocks --lua-version 5.4 --tree .rocks path)" lua spec/run.lua """ +[tasks.version] +description = "Rewrite the rockspec for a new version (then commit it)" +dir = "{{config_root}}" +run = """ +set -eu +NEW="{{arg(name='version')}}" +SPEC="$(ls -1 ./*.rockspec)" +case "$SPEC" in *" +"*) echo "expected exactly one rockspec, found:" >&2; echo "$SPEC" >&2; exit 1;; esac + +PKG="$(sed -n 's/^package = "\\(.*\\)"/\\1/p' "$SPEC")" +NEWSPEC="./$PKG-$NEW-1.rockspec" + +# Write through a temp file: without it, a re-run at the same version would +# have the redirect truncate the file sed is still reading. +TMP="$(mktemp)" +sed -e "s/^version = \\".*\\"/version = \\"$NEW-1\\"/" \\ + -e "s/^\\( *\\)tag = \\"v[^\\"]*\\"/\\1tag = \\"v$NEW\\"/" "$SPEC" > "$TMP" +mv "$TMP" "$NEWSPEC" +[ "$SPEC" = "$NEWSPEC" ] || rm -f "$SPEC" + +luarocks lint "$NEWSPEC" +echo "wrote $NEWSPEC -- commit it, then: mise run release" +""" + +[tasks.release] +description = "Tag the committed version, push the tag, upload to luarocks.org" +depends = ["check"] +dir = "{{config_root}}" +run = """ +set -eu +SPEC="$(ls -1 ./*.rockspec)" +case "$SPEC" in *" +"*) echo "expected exactly one rockspec, found:" >&2; echo "$SPEC" >&2; exit 1;; esac + +VER="$(sed -n 's/^version = "\\(.*\\)-[0-9]*"/\\1/p' "$SPEC")" +[ -n "$VER" ] || { echo "could not read version from $SPEC" >&2; exit 1; } +TAG="v$VER" + +# jj's working copy is itself a commit, so @ is normally the empty commit a +# `jj new` just made and the release content sits in @-. Override with +# REV=@ (or any revset) when that is not the case. +REV="${REV:-@-}" + +# The tag is what `luarocks upload` clones to build the .src.rock, so the +# rockspec being published has to already be in the revision being tagged. +# Uncommitted, they diverge silently: the upload would ship a rockspec that +# says $VER over sources from a commit that never had it. +if ! jj file show -r "$REV" "$SPEC" 2>/dev/null | diff -q - "$SPEC" >/dev/null 2>&1; then + echo "$SPEC at $REV differs from the working copy -- commit it first" >&2 + exit 1 +fi + +if jj tag list | grep -q "^$TAG:"; then + echo "tag $TAG already exists -- bump the version first" >&2 + exit 1 +fi + +# jj 0.42 creates tags natively and exports them to git in a colocated repo, +# but `jj git push` only pushes bookmarks -- tags still need git. +jj tag set "$TAG" -r "$REV" +jj tag list | grep "^$TAG:" +for remote in $(git remote); do + git push "$remote" "$TAG" +done + +# Reads the API key from ~/.luarocks/upload_config.lua. Packs a .src.rock by +# cloning source.url at the tag just pushed, so the push has to come first. +luarocks upload "$SPEC" +""" + |
