shibosoftwaredev/f1c100s-linux-nema17-stepper-controller

A four-layer NEMA 17 motor-controller PCB combining an Allwinner F1C100S Linux computer, USB‑PD/buck power system, W5500 Ethernet, STM32 real-time motion control, DRV8825 stepper driver, protection/temperature/current telemetry, USB interfaces, and local LED/buzzer diagnostics.

Version
0.4.56
License
unset
Stars
0

scripts/promote-current-sensing.mjs

import fs from "node:fs"
import path from "node:path"
import os from "node:os"
import assert from "node:assert/strict"

const base = "https://registry-api.tscircuit.com/"
const name = "shibosoftwaredev/f1c100s-linux-nema17-stepper-controller"
const version = "0.4.46-checkpoint-20261019-current-sense"
const targetId = "6497458e-86d0-4a55-90f8-6585015e25f3"
const originalId = "5a6faf8f-deb0-4d7c-a7d2-b0208ff4f985"
async function request(endpoint, { body, token } = {}) {
  const response = await fetch(base + endpoint, { method: "POST",
    headers: { "content-type": "application/json", ...(token ? { authorization: `Bearer ${token}` } : {}) },
    body: JSON.stringify(body), signal: AbortSignal.timeout(30000) })
  if (!response.ok) throw new Error(`${endpoint}: HTTP ${response.status}`)
  return response.json()
}
const before = (await request("packages/get", { body: { name } })).package
assert.ok([originalId, targetId].includes(before.latest_package_release_id),
  "stop if another release has superseded the versions the user approved")
const target = (await request("package_releases/get", { body: {
  package_name_with_version: `${name}@${version}`,
} })).package_release
assert.equal(target.package_release_id, targetId)
assert.ok(target.user_code_job_completed_at, "checkpoint website build completed")
assert.ok(!target.user_code_job_error && !target.circuit_json_build_error, "checkpoint build has no reported error")
if (before.latest_package_release_id !== targetId) {
  const config = process.env.TSCIRCUIT_TOKEN ? null : JSON.parse(fs.readFileSync(
    path.join(os.homedir(), "Library/Preferences/tscircuit-nodejs/config.json"), "utf8"))
  const token = process.env.TSCIRCUIT_TOKEN ?? config.sessionToken
  assert.ok(token, "existing tscircuit authentication required")
  await request("package_releases/update", { body: { package_release_id: targetId, is_latest: true }, token })
}
const after = (await request("packages/get", { body: { name } })).package
const original = (await request("package_releases/get", { body: {
  package_name_with_version: `${name}@0.4.46`,
} })).package_release
assert.equal(after.latest_package_release_id, targetId)
assert.equal(after.latest_version, version)
assert.equal(original.package_release_id, originalId, "previous stable release retained")
const result = { checkedAt: new Date().toISOString(), packageName: name, version,
  releaseId: targetId, previousVersion: before.latest_version, previousReleaseRetained: true,
  latestVerified: true, purpose: "User-approved development latest; NOT fabrication approval",
  fabricationReady: false, url: `https://tscircuit.com/${name}#3d`,
  pinnedUrl: `https://tscircuit.com/${name}?version=${version}#3d`,
  websiteBuildCompletedAt: target.user_code_job_completed_at }
fs.writeFileSync("reports/current-sensing-promotion.json", JSON.stringify(result, null, 2) + "\n")
console.log(JSON.stringify(result, null, 2))