Compare commits
8
Commits
78b9b59eca
..
v0.6.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38f905e705 | ||
|
|
7db7e0779b | ||
|
|
0be3506799 | ||
|
|
6151b973bc | ||
|
|
6c1b6ce9db | ||
|
|
5c8341c797 | ||
|
|
5ca44c9c6b | ||
|
|
e2a312d05e |
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "skills",
|
||||
"description": "Mathias's engineering skills library, plus the hooks and MCP servers that make it enforceable: TDD, clean code, debugging, specs, discovery, CI, and secret hygiene.",
|
||||
"version": "0.3.3",
|
||||
"version": "0.6.0",
|
||||
"author": {
|
||||
"name": "Mathias",
|
||||
"url": "https://git.d-ma.be/mathias"
|
||||
|
||||
@@ -30,8 +30,10 @@ jobs:
|
||||
run: |
|
||||
set -euo pipefail
|
||||
last_commit=$(git log -1 --pretty=%B)
|
||||
if printf '%s' "$last_commit" | grep -qi '\[skip-release\]'; then
|
||||
echo "skipping — commit marked [skip-release]"
|
||||
# Delegated to bin/should-skip-release so the rule is covered by
|
||||
# tests/release_skip_test.sh rather than living untested in YAML.
|
||||
if printf '%s\n' "$last_commit" | sh bin/should-skip-release; then
|
||||
echo "skipping — commit carries the Skip-Release trailer"
|
||||
echo "skip=true" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
fi
|
||||
@@ -73,8 +75,8 @@ jobs:
|
||||
if [ "$current" != "$version" ]; then
|
||||
sed -i "s/\"version\"[[:space:]]*:[[:space:]]*\"$current\"/\"version\": \"$version\"/" "$manifest"
|
||||
git add "$manifest"
|
||||
# [skip-release] stops this push from re-triggering the tagger.
|
||||
git commit -m "chore(release): plugin.json version $version [skip-release]"
|
||||
# The trailer below stops this push from re-triggering the tagger.
|
||||
git commit -m "chore(release): plugin.json version $version" -m "Skip-Release: true"
|
||||
git push origin HEAD:main
|
||||
echo "bumped $manifest to $version"
|
||||
fi
|
||||
|
||||
@@ -1,22 +1,16 @@
|
||||
{
|
||||
"_comment": "Tailscale Serve on koala, not the public d-ma.be hostnames. The public path exits to Cloudflare and NPM to reach a k3s service on the same machine most sessions run on, which imposes rate limits and message-size caps on tool results. Serve terminates TLS with a real Tailscale cert and proxies to the NodePort over loopback, so traffic reaches the service from koala itself and satisfies the default-deny-ingress NetworkPolicy with no cluster change. Clients need 'tailscale set --accept-dns=true' for the MagicDNS name to resolve; see mathias/skills#24.",
|
||||
"mcpServers": {
|
||||
"brain": {
|
||||
"type": "http",
|
||||
"url": "https://brain-mcp.d-ma.be/mcp",
|
||||
"url": "https://koala.tail30472e.ts.net:8443/mcp",
|
||||
"headers": {
|
||||
"Authorization": "Bearer ${BRAIN_MCP_TOKEN}"
|
||||
}
|
||||
},
|
||||
"gitea": {
|
||||
"type": "http",
|
||||
"url": "https://git-mcp.d-ma.be/mcp",
|
||||
"headers": {
|
||||
"Authorization": "Bearer ${GITEA_MCP_TOKEN}"
|
||||
}
|
||||
},
|
||||
"infra": {
|
||||
"type": "http",
|
||||
"url": "https://infra-mcp.d-ma.be/mcp"
|
||||
"url": "https://koala.tail30472e.ts.net:8444/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
# should-skip-release — reads a commit message on stdin. Exits 0 when the
|
||||
# release tagger should skip this commit, 1 when it should tag.
|
||||
#
|
||||
# Skipping is opt-in via a git trailer:
|
||||
#
|
||||
# Skip-Release: true
|
||||
#
|
||||
# It is a TRAILER, matched anchored to its own line, deliberately. The first
|
||||
# version searched the whole message for a bracketed marker as a substring,
|
||||
# and the very commit that introduced the manifest-bump step described that
|
||||
# marker in its body — so the tagger read its own documentation as an
|
||||
# instruction and skipped the release. Success, no tag, no bump, no error
|
||||
# (run 15, 2026-08-23). A marker you cannot mention without triggering is a
|
||||
# footgun, not a mechanism.
|
||||
|
||||
set -u
|
||||
|
||||
msg=$(cat)
|
||||
|
||||
if printf '%s\n' "$msg" | grep -qiE '^[[:space:]]*Skip-Release:[[:space:]]*true[[:space:]]*$'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exit 1
|
||||
@@ -0,0 +1,61 @@
|
||||
#!/bin/sh
|
||||
# Tests for bin/should-skip-release.
|
||||
#
|
||||
# The regression these exist for: an unanchored substring match let a commit
|
||||
# that merely *described* the skip marker skip its own release.
|
||||
|
||||
set -u
|
||||
|
||||
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
||||
SUT="$ROOT/bin/should-skip-release"
|
||||
|
||||
pass=0
|
||||
fail=0
|
||||
|
||||
if [ ! -f "$SUT" ]; then
|
||||
printf 'FAIL: %s does not exist\n' "$SUT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# expect <skip|tag> <label> <<message on stdin>>
|
||||
expect() {
|
||||
_want=$1
|
||||
_label=$2
|
||||
_msg=$3
|
||||
printf '%s\n' "$_msg" | sh "$SUT"
|
||||
_rc=$?
|
||||
if [ "$_want" = skip ]; then _wrc=0; else _wrc=1; fi
|
||||
if [ "$_rc" -eq "$_wrc" ]; then
|
||||
pass=$((pass + 1)); printf ' ok %s\n' "$_label"
|
||||
else
|
||||
fail=$((fail + 1)); printf ' FAIL %s (want %s, rc=%s)\n' "$_label" "$_want" "$_rc"
|
||||
fi
|
||||
}
|
||||
|
||||
expect skip 'trailer on its own line' 'chore(release): bump
|
||||
|
||||
Skip-Release: true'
|
||||
|
||||
expect skip 'trailer, case-insensitive' 'chore: x
|
||||
|
||||
skip-release: TRUE'
|
||||
|
||||
expect tag 'ordinary commit' 'feat: add a thing
|
||||
|
||||
Bump-Type: minor'
|
||||
|
||||
# --- the actual regression -------------------------------------------------
|
||||
expect tag 'prose MENTIONING the marker must still tag' 'docs+ci: document the release flow
|
||||
|
||||
CI commits the manifest bump with a Skip-Release: true trailer so it does
|
||||
not re-trigger the tagger. The old [skip-release] marker was a substring
|
||||
match, which is exactly why this commit would have skipped itself.
|
||||
|
||||
Bump-Type: patch'
|
||||
|
||||
expect tag 'legacy bracketed marker no longer skips' 'chore: something [skip-release]'
|
||||
|
||||
expect tag 'empty message' ''
|
||||
|
||||
printf '\nrelease_skip: %d passed, %d failed\n' "$pass" "$fail"
|
||||
[ "$fail" -eq 0 ]
|
||||
Reference in New Issue
Block a user