summaryrefslogtreecommitdiff
path: root/mise.toml
diff options
context:
space:
mode:
Diffstat (limited to 'mise.toml')
-rw-r--r--mise.toml83
1 files changed, 74 insertions, 9 deletions
diff --git a/mise.toml b/mise.toml
index 97d78c5..97b5223 100644
--- a/mise.toml
+++ b/mise.toml
@@ -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"
+"""
+