From 928f66f10bdf99d2f57aaba7325a0616196b5623 Mon Sep 17 00:00:00 2001 From: t Date: Thu, 20 Aug 2026 12:53:18 -0600 Subject: Prepare the 0.1.0 release Add a LICENSE file, point source.url at code.tjp.lol with a v0.1.0 tag, set version 0.1.0-1, and add homepage and labels so the rock can be published to luarocks.org. Add mise tasks for cutting a version and publishing a release. --- LICENSE | 18 ++++++++++ README.md | 2 +- mise.toml | 82 ++++++++++++++++++++++++++++++++++++++++++++++ panto-web-0.1.0-1.rockspec | 33 +++++++++++++++++++ panto-web-scm-1.rockspec | 31 ------------------ 5 files changed, 134 insertions(+), 32 deletions(-) create mode 100644 LICENSE create mode 100644 mise.toml create mode 100644 panto-web-0.1.0-1.rockspec delete mode 100644 panto-web-scm-1.rockspec diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..876f03c --- /dev/null +++ b/LICENSE @@ -0,0 +1,18 @@ +MIT License + +Copyright (c) 2026 Travis Parker + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the "Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the +following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO +EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index a0539ce..f5d2208 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ export EXA_API_KEY=... ## Install -Via the rock (once published): +Via the rock: ```toml [extensions] diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..0d1731e --- /dev/null +++ b/mise.toml @@ -0,0 +1,82 @@ +# Release plumbing. `mise run version ` rewrites the rockspec, then you +# commit it and `mise run release` tags, pushes and uploads. +# +# Why not `luarocks new_version`: it regenerates the rockspec from the parsed +# table, so it silently drops every comment and reflows the tables. Two sed +# lines keep the file intact. + +[tasks.check] +description = "Run the self-check inside panto's interpreter" +dir = "{{config_root}}" +run = "panto lua _selfcheck.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" +""" diff --git a/panto-web-0.1.0-1.rockspec b/panto-web-0.1.0-1.rockspec new file mode 100644 index 0000000..d0c6bb2 --- /dev/null +++ b/panto-web-0.1.0-1.rockspec @@ -0,0 +1,33 @@ +rockspec_format = "3.0" +package = "panto-web" +version = "0.1.0-1" + +source = { + url = "git+https://code.tjp.lol/public/panto-web.git", + tag = "v0.1.0", +} + +description = { + summary = "Lightpanda-backed web fetch and Exa search tools for pantograph", + detailed = [[ +Web access for the panto CLI: web.fetch returns JavaScript-rendered Markdown +through a Lightpanda MCP subprocess, and web.search uses Exa's keyless MCP HTTP +endpoint or its REST API when EXA_API_KEY is configured. +Lightpanda must be on PATH. +Load by adding "panto-web" to `extensions.rocks` in panto's config.toml. +]], + homepage = "https://code.tjp.lol/public/panto-web", + license = "MIT", + labels = { "ai", "llm", "agent", "panto", "pantograph", "extension", "web" }, +} + +dependencies = { + "lua >= 5.4, < 5.5", +} + +build = { + type = "builtin", + modules = { + ["panto-web"] = "panto-web/init.lua", + }, +} diff --git a/panto-web-scm-1.rockspec b/panto-web-scm-1.rockspec deleted file mode 100644 index e98cc2d..0000000 --- a/panto-web-scm-1.rockspec +++ /dev/null @@ -1,31 +0,0 @@ -rockspec_format = "3.0" -package = "panto-web" -version = "scm-1" - -source = { - -- Placeholder until the extension moves to its own repository. - url = "git+https://example.invalid/panto-web.git", -} - -description = { - summary = "Lightpanda-backed web fetch and Exa search tools for pantograph", - detailed = [[ -Web access for the panto CLI: web.fetch returns JavaScript-rendered Markdown -through a Lightpanda MCP subprocess, and web.search uses Exa's keyless MCP HTTP -endpoint or its REST API when EXA_API_KEY is configured. -Lightpanda must be on PATH. -Load by adding "panto-web" to `extensions.rocks` in panto's config.toml. -]], - license = "MIT", -} - -dependencies = { - "lua >= 5.4, < 5.5", -} - -build = { - type = "builtin", - modules = { - ["panto-web"] = "panto-web/init.lua", - }, -} -- cgit v1.3