Files
orca/config/scripts/release-title-timestamp.mjs
T
NeilandOrca fb27702100 feat(updater): restart hourly build numbers per version, restyle the timestamp (#12587)
The number answers "which build of 1.4.163 is this", so carrying it across
versions made it meaningless — 1.4.164 opened at 38 for no reason a reader
could see. It now counts titles matching the base version being built, so a
version bump restarts the series at 01.

Deriving it moves from workflow jq into the script, because the number depends
on the base version and only the script knows which base the published tags
resolved to.

Timestamps go from `07-31 13:54` to `Jul 31, 1:54PM`, still Pacific.

Co-authored-by: Orca <help@stably.ai>
2026-08-04 15:54:17 -07:00

33 lines
1.3 KiB
JavaScript

const RELEASE_NAME_TIME_ZONE = 'America/Los_Angeles'
/**
* `Jul 31, 8:10PM` — the timestamp segment of a dev build's release title, shown
* verbatim in both the GitHub releases list and the in-app build picker.
*
* Why Pacific while the tag's own stamp stays UTC: that stamp is a sort key, and
* a local one would repeat an hour at every DST fall-back, making two distinct
* builds compare equal. A title is only ever read, so it uses the timezone the
* people reading it are in. The two therefore disagree by the current offset.
*/
export function formatReleaseTitleTimestamp(date) {
if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
throw new Error('Release title timestamp is invalid.')
}
const parts = Object.fromEntries(
new Intl.DateTimeFormat('en-US', {
timeZone: RELEASE_NAME_TIME_ZONE,
month: 'short',
day: 'numeric',
hour: 'numeric',
minute: '2-digit',
hour12: true
})
.formatToParts(date)
.map((part) => [part.type, part.value])
)
// Assembled from parts rather than by string-editing the formatted output:
// recent ICU separates the time from AM/PM with U+202F, not a plain space, so
// a naive replace(' ', '') leaves the gap on some runtimes and not others.
return `${parts.month} ${parts.day}, ${parts.hour}:${parts.minute}${parts.dayPeriod.toUpperCase()}`
}