ci: remove deprecated ClawHub publish workflow
This commit is contained in:
127
.github/workflows/publish-clawhub.yml
vendored
127
.github/workflows/publish-clawhub.yml
vendored
@@ -1,127 +0,0 @@
|
|||||||
name: Publish to ClawHub
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- "v*"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
env:
|
|
||||||
CLAWHUB_SLUG: twitter-cli
|
|
||||||
CLAWHUB_NAME: twitter-cli
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: "20"
|
|
||||||
|
|
||||||
- name: Install ClawHub CLI
|
|
||||||
run: npm install -g clawhub@0.7.0
|
|
||||||
|
|
||||||
- name: Publish to ClawHub
|
|
||||||
env:
|
|
||||||
CLAWHUB_TOKEN: ${{ secrets.CLAWHUB_TOKEN }}
|
|
||||||
run: |
|
|
||||||
if [ -z "${CLAWHUB_TOKEN:-}" ]; then
|
|
||||||
echo "Missing required secret: CLAWHUB_TOKEN"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "${GITHUB_REF_TYPE:-}" = "tag" ] && [ -n "${GITHUB_REF_NAME:-}" ]; then
|
|
||||||
VERSION="${GITHUB_REF_NAME#v}"
|
|
||||||
else
|
|
||||||
VERSION="$(sed -n 's/^version = \"\([^\"]*\)\"/\1/p' pyproject.toml | head -n 1)"
|
|
||||||
fi
|
|
||||||
if [ -z "${VERSION:-}" ]; then
|
|
||||||
echo "Unable to resolve version"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Publishing ${CLAWHUB_SLUG}@${VERSION}"
|
|
||||||
|
|
||||||
if clawhub --no-input inspect "${CLAWHUB_SLUG}" --version "${VERSION}" >/dev/null 2>&1; then
|
|
||||||
echo "Version ${VERSION} already exists on ClawHub, skipping publish."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
clawhub --no-input login --token "${CLAWHUB_TOKEN}" --no-browser
|
|
||||||
export VERSION
|
|
||||||
|
|
||||||
# Workaround: clawhub@0.7.0 publish doesn't send acceptLicenseTerms,
|
|
||||||
# which the server now requires. Use a Node.js script to publish with
|
|
||||||
# the corrected payload.
|
|
||||||
# Note: NODE_TLS_REJECT_UNAUTHORIZED=0 is needed because api.clawhub.io
|
|
||||||
# has an expired SSL certificate. Remove once ClawHub renews their cert.
|
|
||||||
NODE_TLS_REJECT_UNAUTHORIZED=0 node - <<'PUBLISH_SCRIPT'
|
|
||||||
const { resolve } = require("path");
|
|
||||||
const { readFileSync, statSync, readdirSync } = require("fs");
|
|
||||||
const folder = resolve(".");
|
|
||||||
const slug = process.env.CLAWHUB_SLUG;
|
|
||||||
const version = process.env.VERSION;
|
|
||||||
|
|
||||||
// Collect text files (same logic as clawhub CLI)
|
|
||||||
function walk(dir, base = "") {
|
|
||||||
let files = [];
|
|
||||||
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
||||||
const rel = base ? base + "/" + entry.name : entry.name;
|
|
||||||
if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
|
|
||||||
if (entry.isDirectory()) { files.push(...walk(dir + "/" + entry.name, rel)); }
|
|
||||||
else { files.push({ rel, abs: dir + "/" + entry.name }); }
|
|
||||||
}
|
|
||||||
return files;
|
|
||||||
}
|
|
||||||
const files = walk(folder).filter(f => {
|
|
||||||
const ext = f.rel.split(".").pop().toLowerCase();
|
|
||||||
return ["md","txt","py","toml","yml","yaml","json","cfg","ini","sh","bat"].includes(ext);
|
|
||||||
});
|
|
||||||
|
|
||||||
const payload = JSON.stringify({
|
|
||||||
slug,
|
|
||||||
displayName: slug,
|
|
||||||
version,
|
|
||||||
changelog: "Release " + version,
|
|
||||||
tags: ["latest"],
|
|
||||||
acceptLicenseTerms: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
const form = new FormData();
|
|
||||||
form.set("payload", payload);
|
|
||||||
for (const file of files) {
|
|
||||||
const bytes = readFileSync(file.abs);
|
|
||||||
const blob = new Blob([bytes], { type: "text/plain" });
|
|
||||||
form.append("files", blob, file.rel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read registry and token from clawhub config
|
|
||||||
const os = require("os");
|
|
||||||
const configPath = resolve(os.homedir(), ".config", "clawhub", "config.json");
|
|
||||||
let token = "";
|
|
||||||
try {
|
|
||||||
const cfg = JSON.parse(readFileSync(configPath, "utf8"));
|
|
||||||
token = cfg.token || "";
|
|
||||||
} catch {}
|
|
||||||
if (!token) { console.error("No token found"); process.exit(1); }
|
|
||||||
|
|
||||||
const registry = "https://clawhub.ai";
|
|
||||||
fetch(registry + "/api/v1/skills", {
|
|
||||||
method: "POST",
|
|
||||||
headers: { Authorization: "Bearer " + token },
|
|
||||||
body: form,
|
|
||||||
}).then(async (r) => {
|
|
||||||
const text = await r.text();
|
|
||||||
if (!r.ok) {
|
|
||||||
console.error("Publish failed:", r.status, text);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
console.log("✔ Published", slug + "@" + version);
|
|
||||||
}).catch((e) => {
|
|
||||||
console.error(e);
|
|
||||||
process.exit(1);
|
|
||||||
});
|
|
||||||
PUBLISH_SCRIPT
|
|
||||||
Reference in New Issue
Block a user