chore: prune unused apps and services for the moeka fork
CI / Lint (push) Canceled after 0s
CI / Build Test (stage-web) (push) Canceled after 0s
CI / Build Test (ui-loading-screens) (push) Canceled after 0s
CI / Build Test (ui-transitions) (push) Canceled after 0s
CI / Unit Test (push) Canceled after 0s
CI / Type Check (push) Canceled after 0s
CI / Check Provenance (push) Canceled after 0s
Sync Labels / sync-labels (push) Successful in 1m43s

- Remove stage-tamagotchi, stage-pocket, server, and engine workspaces with their workflows, addons, and docs
- Switch the toolchain from pnpm to bun, replace lockfiles with bun.lock
- Rewrite remaining product references to Moeka
This commit is contained in:
2026-09-14 16:40:49 +07:00
parent 00c6867b7f
commit dc26878386
1981 changed files with 10974 additions and 260677 deletions
+86
View File
@@ -0,0 +1,86 @@
#!/usr/bin/env bun
/**
* Publishes every public workspace package to the npm registry.
*
* Replaces the recursive publish that `pnpm publish -r` provided before the Bun
* migration. Bun's `publish` command targets the package in one directory, so
* this script enumerates the workspaces declared in the root manifest, skips
* private packages, and publishes the rest in name order.
*
* Call stack:
*
* `bun run publish:packages`
* -> {@link workspaceDirs}
* -> `bun publish` (one process per package)
*
* Usage:
*
* bun run publish:packages -- --dry-run
*/
import process from 'node:process'
import { spawnSync } from 'node:child_process'
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'
import { join, resolve } from 'node:path'
const root = resolve(import.meta.dirname, '..')
function readManifest(path) {
return JSON.parse(readFileSync(path, 'utf8'))
}
/**
* Expands the root `workspaces` patterns into candidate directories.
*
* The root manifest only uses two pattern shapes: an exact directory, and one
* trailing `/*` level. Built output such as `packages/<name>/dist` is therefore
* never enumerated.
*/
function* workspaceDirs(patterns) {
for (const pattern of patterns) {
if (!pattern.endsWith('/*')) {
yield join(root, pattern)
continue
}
const parent = join(root, pattern.slice(0, -2))
if (!existsSync(parent))
continue
for (const entry of readdirSync(parent, { withFileTypes: true })) {
if (entry.isDirectory() && !entry.name.startsWith('.'))
yield join(parent, entry.name)
}
}
}
const rootManifest = readManifest(join(root, 'package.json'))
const publishable = []
for (const dir of workspaceDirs(rootManifest.workspaces ?? [])) {
const manifestPath = join(dir, 'package.json')
if (!existsSync(manifestPath) || !statSync(manifestPath).isFile())
continue
const manifest = readManifest(manifestPath)
if (!manifest.name || manifest.private)
continue
publishable.push({ name: manifest.name, dir })
}
publishable.sort((a, b) => a.name.localeCompare(b.name))
const forwarded = process.argv.slice(2)
for (const { name, dir } of publishable) {
console.info(`publish: ${name}`)
const result = spawnSync('bun', ['publish', '--access', 'public', ...forwarded], { cwd: dir, stdio: 'inherit' })
if (result.status !== 0) {
console.error(`publish: ${name} failed with exit code ${result.status}`)
process.exit(result.status ?? 1)
}
}
console.info(`publish: ${publishable.length} package(s) processed`)
@@ -35,7 +35,7 @@ function normalizeHeaders(headers) {
/**
* @example SponsorKit sends OpenCollective personal tokens through the documented HTTP header.
*/
describe('sponsorKit OpenCollective pnpm patch', () => {
describe('sponsorKit OpenCollective patch', () => {
afterEach(() => {
vi.unstubAllGlobals()
})