From a7be989b4f806b6f7e1cc5b01b730f050d716252 Mon Sep 17 00:00:00 2001 From: Blake Matthes Date: Sat, 20 Dec 2025 08:20:49 -0600 Subject: [PATCH] ci(build): working more on the build stuff --- package-lock.json | 136 +++++++++++++++++++++++++++++++++++++- package.json | 17 ++--- scripts/create-release.js | 44 ++++++++++++ 3 files changed, 187 insertions(+), 10 deletions(-) create mode 100644 scripts/create-release.js diff --git a/package-lock.json b/package-lock.json index c027d80..8e3c5d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,17 @@ { "name": "lst_v3", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lst_v3", - "version": "1.0.0", + "version": "1.0.1", "license": "ISC", "dependencies": { "@dotenvx/dotenvx": "^1.51.2", "@scalar/express-api-reference": "^0.8.28", + "axios": "^1.13.2", "better-auth": "^1.4.6", "express": "^5.2.1", "npm-check-updates": "^19.1.2" @@ -1951,6 +1952,12 @@ "node": ">=0.10.0" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", @@ -1961,6 +1968,17 @@ "node": ">= 4.0.0" } }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2429,6 +2447,18 @@ "dev": true, "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", @@ -2917,6 +2947,15 @@ "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "license": "MIT" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3149,6 +3188,21 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.27.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.1.tgz", @@ -3513,6 +3567,63 @@ "node": ">= 8" } }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3900,6 +4011,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -5259,6 +5385,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/qs": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", diff --git a/package.json b/package.json index 2553896..ced7e79 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "commit": "cz", "changeset": "changeset", "version": "changeset version", - "release": "changeset publish" + "release": "dotenvx run -f .env -- npm run version && git push --follow-tags && node scripts/create-release.js" }, "repository": { "type": "git", @@ -27,25 +27,26 @@ "type": "module", "devDependencies": { "@biomejs/biome": "2.3.8", + "@changesets/cli": "^2.27.0", + "@commitlint/cli": "^18.4.0", + "@commitlint/config-conventional": "^18.4.0", "@types/express": "^5.0.6", "@types/node": "^24.10.1", "@types/swagger-jsdoc": "^6.0.4", "@types/swagger-ui-express": "^4.1.8", "@vercel/ncc": "^0.38.4", + "commitizen": "^4.3.0", + "cz-conventional-changelog": "^3.3.0", + "husky": "^8.0.3", "openapi-types": "^12.1.3", "ts-node-dev": "^2.0.0", "tsx": "^4.21.0", - "typescript": "^5.9.3", - "@changesets/cli": "^2.27.0", - "@commitlint/cli": "^18.4.0", - "@commitlint/config-conventional": "^18.4.0", - "commitizen": "^4.3.0", - "cz-conventional-changelog": "^3.3.0", - "husky": "^8.0.3" + "typescript": "^5.9.3" }, "dependencies": { "@dotenvx/dotenvx": "^1.51.2", "@scalar/express-api-reference": "^0.8.28", + "axios": "^1.13.2", "better-auth": "^1.4.6", "express": "^5.2.1", "npm-check-updates": "^19.1.2" diff --git a/scripts/create-release.js b/scripts/create-release.js new file mode 100644 index 0000000..bdef648 --- /dev/null +++ b/scripts/create-release.js @@ -0,0 +1,44 @@ +import axios from "axios"; +import { readFileSync } from "fs"; +import { dirname, join } from "path"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Get version and changelog +const pkg = JSON.parse( + readFileSync(join(__dirname, "../package.json"), "utf8"), +); +const version = `v${pkg.version}`; +const changelog = readFileSync(join(__dirname, "../CHANGELOG.md"), "utf8"); + +// Extract latest release notes (between first two headings) +const latestNotes = + changelog.split("\n## ")[1]?.split("\n").slice(1).join("\n") || + "No changes documented"; + +try { + const response = await axios.post( + "https://git.tuffraid.net/api/v1/repos/cowch/lst_v3/releases", + { + tag_name: version, + name: version, + body: latestNotes, + draft: false, + prerelease: false, + }, + { + headers: { + Authorization: `token ${process.env.GITEA_TOKEN}`, + "Content-Type": "application/json", + }, + }, + ); + + console.log(`✅ Release ${version} created!`); + console.log(`🔗 ${response.data.html_url}`); +} catch (error) { + console.error(`❌ Error: ${error.response?.data?.message || error.message}`); + process.exit(1); +}