diff --git a/SOURCE_MANIFEST.txt b/SOURCE_MANIFEST.txt index 52662cd..ac6c960 100644 --- a/SOURCE_MANIFEST.txt +++ b/SOURCE_MANIFEST.txt @@ -52,7 +52,7 @@ bcb1e4daf1eeedc5b3f61d2406f1a65312dba130082528007e1629d9df99570a 153240 b6a178215dab054006aae4944b8ffcbe7f6100691c30f08e221e3a2dbff4cd42 2147 docs/STATUS_ENDPOINT.md 0adfeabb98168a7fc0b02bae8d4af436d3c59459012fb05b2216e02265190128 3139 docs/STITCH_REVIEW.md 4625a10ebd3c749f60b2a7bef6b1716cd05dbc44ccceba0491a1b46bc293c195 4883 docs/TEST_MATRIX.md -28f42ed6352a01e034c39c5a2a2f461f3f540aa37abc339e5b00afcc81e7ba7b 3273 docs/UPDATING.md +b3f317faba63d574ee83924f01b5275c118b5b04f6d9109c7cf9ed18500835d8 3389 docs/UPDATING.md c230b931abf2293d2d44b7a69b94c35f1142c093cc46b88739a0de5cbd6d1896 1532 examples/gitea-actions/deploy.yml 4c792cc9fd57ed36da291300c252a6ef75b08a249cf6f2561e23c4c22522138a 1477 examples/gitea-actions/rollback.yml 1d2cde1bef4882f56006823d2806f6105882fa098a665a303150fdf18ada2004 5705 examples/server/forgeflow-deploy @@ -64,7 +64,7 @@ c230b931abf2293d2d44b7a69b94c35f1142c093cc46b88739a0de5cbd6d1896 1532 6765015bdf27b288a250192272750b243c3cb8d1326b752d056d1e43317b6344 12935 main.cjs 91a984a89dd57a084b9a2331763cacdb061582fb590f13df379d92c1a77a2ee1 352 OVERLAY-INSTRUCTIONS.md ebb0b154137c113205351216e79dc0aad79949ea465b1734f41dd524f913cb34 134141 package-lock.json -4ad40664dd3ed8526685fc7ca75be8f8c21acbad515b375ba4f04f3e2c4dcfe1 3559 package.json +7b4d634271b7b312e8b6e7337a0c8e55eb7281803a38847f26907a5b4576517f 3684 package.json 3d2ac366a13e9418e3ec6d13ce95b611f30f0228eb3a80ef9e7a936ce9578e24 9080 preload.cjs b31c43d9355c13b5ae4efc0f3649d8cb8d509b2bb7ebb042ff546b7820fb7de8 8411 Publish-ForgeFlow-Release.ps1 a6d32a742412b7836606be00f17be0465f1b6f55d3911f6c73a14029787ba206 14037 README.md @@ -73,10 +73,11 @@ a6d32a742412b7836606be00f17be0465f1b6f55d3911f6c73a14029787ba206 14037 f8359a69d20deb2dfe10042d1bec7b12a95e76e58e36bc5f265f073c3111d056 10287 scripts/apply-source-update.ps1 6d46dd6826069d842f20f9f22a99042257db936cdea0bee8d294d2d7ea290126 3893 scripts/doctor.mjs 5e9a2a819522f6a32bbd9d3303263d5e5eaec95898ea2cd5776b221168008d75 1727 scripts/generate-source-manifest.mjs +842436680521311594e798848b050ae4e488d0595f0de57315f6ec081c049fb9 1266 scripts/prune-dist.mjs 74433d8a6b24afe368197a469e2fe0c5050c239d7250b84c2f3f598c304778b0 4736 scripts/publish-binary-release.cjs 444b397d515d65a7ee59d3088cba869cbb812d2b8cc18fc5d255105e3edb58c2 1468 scripts/serve-demo.mjs 42203f9e0fd4aae517284d387f265cf1b0b180379bc253a092b5c3c5c4caef0a 2992 scripts/validate-installed-connections.cjs -e6def656ba61e6ac705bc87e59abc607f4870702f0cbd609bc3e122bb01a9939 12150 scripts/verify.mjs +d67596aa0b4ffbd456a816ff464533e0138819f97b0f0660152b5966b9ad58bc 12178 scripts/verify.mjs 0079701b5acbfef07b71a9623613d1940805ccd20649d77e3f34c37e79df7655 735 scripts/write-release-checksums.mjs 619515f524cb89960370ffcbd3fafd3c0e178b95f69c5868b1dd44777f23ec1e 2081 setup-windows.ps1 dd613d04b366f2cd071a1685a414016a5fb008082ed1b4cb8b24b79c100f640a 2412 src/main/audit-service.cjs diff --git a/docs/UPDATING.md b/docs/UPDATING.md index 29f9dba..540361f 100644 --- a/docs/UPDATING.md +++ b/docs/UPDATING.md @@ -40,6 +40,8 @@ $env:FORGEFLOW_USER_DATA = "$env:APPDATA\forgeflow" npm run release:binary ``` +Every platform build finishes by removing ForgeFlow artifacts for older versions from `dist`. The unpacked application directory and builder diagnostics are kept. + The publisher refuses to upload when local `HEAD` differs from `origin/main`. Users on 0.8.1 or older need one manual 0.8.2 installation because those versions deliberately disabled packaged updates. ## Publishing a release from Downloads diff --git a/package.json b/package.json index 1ed44f5..64675de 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,9 @@ "demo": "node scripts/serve-demo.mjs", "test": "node --test tests/*.test.mjs", "verify": "node scripts/verify.mjs", - "dist:win": "electron-builder --win nsis portable && node scripts/write-release-checksums.mjs", - "dist:linux": "electron-builder --linux AppImage", - "dist:mac": "electron-builder --mac dmg", + "dist:win": "electron-builder --win nsis portable && node scripts/write-release-checksums.mjs && node scripts/prune-dist.mjs", + "dist:linux": "electron-builder --linux AppImage && node scripts/prune-dist.mjs", + "dist:mac": "electron-builder --mac dmg && node scripts/prune-dist.mjs", "doctor": "node scripts/doctor.mjs", "acceptance": "node scripts/acceptance.mjs", "connections:check": "electron scripts/validate-installed-connections.cjs", @@ -52,6 +52,7 @@ "docs/UPDATING.md", "scripts/apply-source-update.ps1", "scripts/apply-binary-update.ps1", + "scripts/prune-dist.mjs", "docs/RELEASE_NOTES_0.4.0.md", "docs/LUMAOPS_SERVER_AUDIT.md", "docs/SSH_UNRAID_DEPLOYMENT.md", diff --git a/scripts/prune-dist.mjs b/scripts/prune-dist.mjs new file mode 100644 index 0000000..f8a3e35 --- /dev/null +++ b/scripts/prune-dist.mjs @@ -0,0 +1,41 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const projectRoot = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + "..", +); +const distDirectory = path.join(projectRoot, "dist"); +const manifest = JSON.parse( + await fs.readFile(path.join(projectRoot, "package.json"), "utf8"), +); +const currentVersion = String(manifest.version || "").trim(); + +if (!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/.test(currentVersion)) { + throw new Error("package.json contains an invalid release version."); +} + +const entries = await fs + .readdir(distDirectory, { withFileTypes: true }) + .catch((error) => { + if (error.code === "ENOENT") return []; + throw error; + }); +const removed = []; + +for (const entry of entries) { + if (!entry.isFile() || !entry.name.startsWith("ForgeFlow-")) continue; + if (entry.name.includes(`-${currentVersion}-`)) continue; + await fs.rm(path.join(distDirectory, entry.name), { force: true }); + removed.push(entry.name); +} + +if (removed.length) { + console.log(`Removed ${removed.length} obsolete dist artifact(s):`); + for (const name of removed) console.log(`- ${name}`); +} else { + console.log( + `No ForgeFlow dist artifacts older than ${currentVersion} found.`, + ); +} diff --git a/scripts/verify.mjs b/scripts/verify.mjs index a4052d2..5086dd4 100644 --- a/scripts/verify.mjs +++ b/scripts/verify.mjs @@ -46,6 +46,7 @@ const required = [ "scripts/validate-installed-connections.cjs", "scripts/publish-binary-release.cjs", "scripts/write-release-checksums.mjs", + "scripts/prune-dist.mjs", "scripts/generate-source-manifest.mjs", "setup-windows.ps1", "START-FORGEFLOW-OVERLAY.ps1",