A release meant running the RELEASING.md checklist by hand: tag, push twice, create the GitHub release, then remember the Gitea push. The two scripts do the machine-checkable part of it, with the shared flow in scripts/lib/ so they cannot drift apart: clean worktree, not behind the remote, typecheck, tests and the install.sh syntax check, then the tag at HEAD, the branch push and the release object. Only the release object differs. GitHub creates it with gh, and publishing it is what fires the image build. Gitea gets the same notes through its API, with the token from GITEA_TOKEN or the one tea already stored, since nothing there builds images. Both accept --version (defaulting to package.json), --branch, --yes, --dry-run and --skip-checks, and a rerun finishes a release that failed half way instead of starting over: an existing tag is reused, a pushed ref is skipped and an existing release is left alone. A tag sitting on another commit is refused, since publishing would ship that commit's code.
86 lines
2.9 KiB
JSON
86 lines
2.9 KiB
JSON
{
|
|
"name": "cobble",
|
|
"version": "0.1.2",
|
|
"module": "index.ts",
|
|
"type": "module",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "bun src/server.ts",
|
|
"gen:favicon": "bun src/scripts/generate-brand-assets.ts",
|
|
"build": "bunx bunext build",
|
|
"db:schema": "bunx bun-sqlite schema -t",
|
|
"db:admin": "bunx bun-sqlite admin",
|
|
"db:backup": "bunx bun-sqlite backup",
|
|
"seed": "bun src/scripts/seed-super-admin.tsx",
|
|
"seed:bots": "bun src/scripts/seed-bots.ts",
|
|
"start": "MAIN_SERVER=1 NODE_ENV=production bun src/server.ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "bun test",
|
|
"check:bundle": "bun src/scripts/check-bundle-size.ts",
|
|
"publish:github": "bash scripts/publish-github.sh",
|
|
"publish:gitea": "bash scripts/publish-gitea.sh"
|
|
},
|
|
"devDependencies": {
|
|
"@next/mdx": "^16.3.0",
|
|
"@types/ace": "^0.0.52",
|
|
"@types/bun": "latest",
|
|
"@types/lodash": "^4.17.25",
|
|
"@types/mdx": "^2.0.14",
|
|
"@types/node": "^26.2.0",
|
|
"@types/nodemailer": "^8.0.1",
|
|
"@types/react": "^19.2.18",
|
|
"@types/react-dom": "^19.2.4",
|
|
"@types/sanitize-html": "^2.16.2",
|
|
"@types/turndown": "^5.0.6",
|
|
"@types/web-push": "^3.6.4",
|
|
"tailwindcss": "^4.3.3"
|
|
},
|
|
"peerDependencies": {
|
|
"typescript": "^7.0.2"
|
|
},
|
|
"dependencies": {
|
|
"@floating-ui/dom": "1.8.0",
|
|
"@modelcontextprotocol/sdk": "^1.32.1",
|
|
"@moduletrace/bun-sqlite": "^1.3.0",
|
|
"@moduletrace/bunext": "^1.3.3",
|
|
"@moduletrace/twui": "^0.1.6",
|
|
"@tiptap/extension-bubble-menu": "3.32.0",
|
|
"@tiptap/extension-mention": "3.32.0",
|
|
"@tiptap/extension-placeholder": "3.32.0",
|
|
"@tiptap/markdown": "3.32.0",
|
|
"@tiptap/pm": "3.32.0",
|
|
"@tiptap/react": "3.32.0",
|
|
"@tiptap/starter-kit": "3.32.0",
|
|
"ace-builds": "^1.44.0",
|
|
"dayjs": "^1.11.23",
|
|
"gray-matter": "^4.0.3",
|
|
"html-to-react": "^1.7.0",
|
|
"lodash": "^4.18.1",
|
|
"lucide-react": "^1.59.0",
|
|
"mammoth": "^1.12.1",
|
|
"mdx": "^0.3.1",
|
|
"next-mdx-remote": "^6.0.0",
|
|
"nodemailer": "^9.0.5",
|
|
"openai": "^7.4.0",
|
|
"pdf-lib": "^1.17.1",
|
|
"react-code-blocks": "^0.1.6",
|
|
"react-markdown": "^10.1.0",
|
|
"react-responsive-modal": "^7.2.0",
|
|
"rehype-prism-plus": "^2.0.2",
|
|
"remark-breaks": "4.0.0",
|
|
"remark-gfm": "^4.0.1",
|
|
"sanitize-html": "^2.18.1",
|
|
"sharp": "^0.35.3",
|
|
"tailwind-merge": "^3.6.0",
|
|
"turndown": "^7.2.4",
|
|
"unpdf": "^1.8.0",
|
|
"use-sync-external-store": "file:./packages/use-sync-external-store-esm",
|
|
"web-push": "^3.6.7",
|
|
"xlsx": "^0.18.5",
|
|
"zod": "4.1.12"
|
|
},
|
|
"overrides": {
|
|
"use-sync-external-store": "file:./packages/use-sync-external-store-esm"
|
|
}
|
|
}
|