feat: releases

This commit is contained in:
Gab
2026-03-24 22:12:30 +11:00
parent d716f9a6d6
commit 2ae12f8d6b
10 changed files with 217 additions and 53 deletions

View File

@@ -6,22 +6,34 @@ import os from "os"
import { spawnSync } from "child_process"
const GITEA_HOST = process.env.TFCODE_GITEA_HOST || "gitea.toothfairyai.com"
const GITEA_REPO = process.env.TFCODE_GITEA_REPO || "ToothFairyAI/tfcode"
const GITEA_REPO = process.env.TFCODE_GITEA_REPO || "ToothFairyAI/tf_code"
function detectPlatform() {
let platform
switch (os.platform()) {
case "darwin": platform = "darwin"; break
case "linux": platform = "linux"; break
case "win32": platform = "windows"; break
default: platform = os.platform()
case "darwin":
platform = "darwin"
break
case "linux":
platform = "linux"
break
case "win32":
platform = "windows"
break
default:
platform = os.platform()
}
let arch
switch (os.arch()) {
case "x64": arch = "x64"; break
case "arm64": arch = "arm64"; break
default: arch = os.arch()
case "x64":
arch = "x64"
break
case "arm64":
arch = "arm64"
break
default:
arch = os.arch()
}
// Check for AVX2 on x64
@@ -94,7 +106,7 @@ async function downloadBinary() {
if (curlResult.status !== 0) {
console.error(`Failed to download from ${url}`)
console.error("Trying npm package fallback...")
// Fallback to npm optionalDependencies
try {
const pkgName = `@toothfairyai/${target}`
@@ -102,13 +114,13 @@ async function downloadBinary() {
const pkgDir = path.dirname(pkgPath)
const binaryName = platform === "windows" ? "tfcode.exe" : "tfcode"
const binaryPath = path.join(pkgDir, "bin", binaryName)
if (fs.existsSync(binaryPath)) {
setupBinary(binaryPath, platform)
return
}
} catch {}
process.exit(1)
}
@@ -167,13 +179,17 @@ async function main() {
const result = spawnSync("python3", ["--version"], { encoding: "utf8" })
if (result.status === 0) {
console.log(`✓ Found ${result.stdout.trim()}`)
// Install Python SDK
console.log("Installing ToothFairyAI Python SDK...")
const pipResult = spawnSync("python3", ["-m", "pip", "install", "--user", "--break-system-packages", "toothfairyai", "pydantic", "httpx", "rich"], {
stdio: "inherit"
})
const pipResult = spawnSync(
"python3",
["-m", "pip", "install", "--user", "--break-system-packages", "toothfairyai", "pydantic", "httpx", "rich"],
{
stdio: "inherit",
},
)
if (pipResult.status === 0) {
console.log("✓ Python SDK installed")
} else {
@@ -197,8 +213,8 @@ async function main() {
console.log("Quick Start:")
console.log("")
console.log(" 1. Set credentials:")
console.log(" export TF_WORKSPACE_ID=\"your-workspace-id\"")
console.log(" export TF_API_KEY=\"your-api-key\"")
console.log(' export TF_WORKSPACE_ID="your-workspace-id"')
console.log(' export TF_API_KEY="your-api-key"')
console.log("")
console.log(" 2. Validate:")
console.log(" tfcode validate")
@@ -213,4 +229,4 @@ async function main() {
console.log("")
}
main().catch(console.error)
main().catch(console.error)

View File

@@ -105,20 +105,45 @@ async function uploadToGitea() {
// Create main npm package
async function createMainPackage() {
await $`mkdir -p ./dist/tfcode`
await $`cp -r ./bin ./dist/tfcode/bin`
await $`mkdir -p ./dist/tfcode/bin`
await Bun.file(`./dist/tfcode/postinstall.mjs`).write(await Bun.file("./script/postinstall-tfcode.mjs").text())
await Bun.file(`./dist/tfcode/LICENSE`).write(await Bun.file("../../LICENSE").text())
// Create a simple wrapper script that runs the installed binary
const wrapper = `#!/usr/bin/env node
const { spawn } = require('child_process')
const path = require('path')
const fs = require('fs')
const binDir = path.join(__dirname, 'bin')
const binary = process.platform === 'win32' ? 'tfcode.exe' : 'tfcode'
const binaryPath = path.join(binDir, binary)
if (!fs.existsSync(binaryPath)) {
console.error('tfcode binary not found. Run: npm install @toothfairyai/tfcode')
process.exit(1)
}
const child = spawn(binaryPath, process.argv.slice(2), {
stdio: 'inherit',
env: process.env
})
child.on('exit', (code) => process.exit(code || 0))
`
await Bun.file(`./dist/tfcode/bin/tfcode.js`).write(wrapper)
// Create package.json
await Bun.file(`./dist/tfcode/package.json`).write(
JSON.stringify(
{
name: "@toothfairyai/tfcode",
version: TFCODE_VERSION,
bin: { tfcode: "./bin/tfcode" },
bin: { tfcode: "./bin/tfcode.js" },
scripts: { postinstall: "node ./postinstall.mjs" },
license: pkg.license,
optionalDependencies: binaries,
engines: { node: ">=18" },
homepage: "https://toothfairyai.com/developers/tfcode",
repository: {
type: "git",