Support vanity release names

This commit is contained in:
Oliver Blanthorn 2026-07-22 21:24:45 +02:00
parent 1ac287cfc8
commit db892be9bc
No known key found for this signature in database
GPG key ID: 2BB8C36BB504BFF3
4 changed files with 55 additions and 15 deletions

View file

@ -12,6 +12,22 @@ function bump_version(versionstr, component = 2) {
return versionarr.join(".")
}
function release_name(manifest) {
return (manifest.version_name || manifest.version)
.slice(manifest.version.length)
.trim()
}
function set_release_version(manifest, component, name = "") {
if (![0, 1, 2].includes(component)) throw new Error("Version component must be 0, 1 or 2")
if (component === 2 && name) throw new Error("Only major and minor releases can be named")
const nameForRelease =
component === 2 ? release_name(manifest) : name.trim()
manifest.version = bump_version(manifest.version, component)
manifest.version_name = [manifest.version, nameForRelease].filter(Boolean).join(" ")
}
async function add_beta(versionstr) {
await fs.promises.mkdir(".build_cache", {recursive: true})
try {
@ -82,17 +98,17 @@ function save_manifest(filename, manifest) {
}
async function main() {
let filename, manifest
let filename, manifest, releaseName
switch (process.argv[2]) {
case "bump": {
// Load src manifest and bump
filename = "./src/manifest.json"
manifest = require("." + filename)
manifest.version = bump_version(
manifest.version,
set_release_version(
manifest,
Number(process.argv[3]),
process.argv.slice(4).join(" "),
)
manifest.version_name = manifest.version
const changelog = fs.readFileSync("./CHANGELOG.md", "utf8")
const releaseHeading = `Release ${manifest.version} / Unreleased`
const releaseNotes = changelog
@ -131,8 +147,9 @@ async function main() {
case "beta":
filename = "./build/manifest.json"
manifest = require("." + filename)
releaseName = release_name(manifest)
manifest.version = await add_beta(manifest.version)
manifest.version_name = manifest.version + "-" + (await get_hash())
manifest.version_name = [manifest.version + "-" + (await get_hash()), releaseName].filter(Boolean).join(" ")
manifest.applications.gecko.update_url =
"https://tridactyl.cmcaine.co.uk/betas/updates.json"
@ -154,4 +171,6 @@ async function main() {
}
}
main()
if (require.main === module) main()
module.exports = { set_release_version }

18
scripts/version.test.js Normal file
View file

@ -0,0 +1,18 @@
const { set_release_version } = require("./version")
test("manages major and minor release names", () => {
const manifest = { version: "1.24.6", version_name: "1.24.6" }
set_release_version(manifest, 1, "Carpenter")
expect(manifest.version_name).toBe("1.25.0 Carpenter")
set_release_version(manifest, 2)
expect(manifest.version_name).toBe("1.25.1 Carpenter")
set_release_version(manifest, 0, "Joiner")
expect(manifest.version_name).toBe("2.0.0 Joiner")
expect(() =>
set_release_version({ version: "1.25.0" }, 2, "Carpenter"),
).toThrow()
})

View file

@ -76,7 +76,7 @@
// Shared
import * as Messaging from "@src/lib/messaging"
import { ownWinTriIndex, getTriVersion, browserBg, activeTab, activeTabOnWindow, activeTabId, activeTabContainerId, openInNewTab, openInNewWindow, openInTab, queryAndURLwrangler, goToTab, getSortedTabs, prevActiveTab } from "@src/lib/webext"
import { ownWinTriIndex, getTriVersion, getTriVersionName, browserBg, activeTab, activeTabOnWindow, activeTabId, activeTabContainerId, openInNewTab, openInNewWindow, openInTab, queryAndURLwrangler, goToTab, getSortedTabs, prevActiveTab } from "@src/lib/webext"
import * as Container from "@src/lib/containers"
import state from "@src/state"
import * as State from "@src/state"
@ -129,6 +129,7 @@ const logger = new Logging.Logger("excmd")
/** @hidden **/
const TRI_VERSION = getTriVersion()
const TRI_VERSION_NAME = getTriVersionName()
//#content_helper
// {
@ -3937,7 +3938,7 @@ export async function tgroupabort() {
//#background
export function version() {
return fillcmdline_notrail(TRI_VERSION)
return fillcmdline_notrail(TRI_VERSION_NAME)
}
/**
@ -6297,7 +6298,7 @@ export async function issue() {
template = `Firefox version: ${info.vendor} ${info.name} ${info.version}\n` + template
template = template.replace("- Tridactyl version (`:version`):\n\n", "")
template = `Tridactyl version: ${TRI_VERSION}\n` + template
template = `Tridactyl version: ${TRI_VERSION_NAME}\n` + template
textarea.value = template
}

View file

@ -28,20 +28,22 @@ export function inContentScript() {
}
export function getTriVersion() {
const manifest = browser.runtime.getManifest()
return browser.runtime.getManifest().version
}
// version_name only really exists in Chrome
// but we're using it anyway for our own purposes
return (
export function getTriVersionName() {
const manifest = browser.runtime.getManifest()
const versionName = (
manifest as browser._manifest.WebExtensionManifest & {
version_name: string
version_name?: string
}
).version_name
return versionName || manifest.version
}
export function getPrettyTriVersion() {
const manifest = browser.runtime.getManifest()
return manifest.name + " " + getTriVersion()
return manifest.name + " " + getTriVersionName()
}
export function notBackground() {