chore: switch to calver, bump version to 26.10.0

This commit is contained in:
LukeGus committed 2026-10-01 21:47:45 -05:00
1 parent 29719dbb87
commit d4b68ea5a2
22 files changed
+32 -25

No files matched your search

+1 -1
View File
@@ -83,7 +83,7 @@ contextBridge.exposeInMainWorld("electronAPI", {
externalBrowserLogin: (authUrl, callbackPort) =>
ipcRenderer.invoke("external-browser-login", authUrl, callbackPort),
// 2.8 name, read by older server login pages. Remove in 3.0.0.
// 2.8 name, read by older server login pages. Remove in 26.10.0.
oidcSystemBrowserAuth: (authUrl, callbackPort) =>
ipcRenderer.invoke("external-browser-login", authUrl, callbackPort),
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "termix",
"version": "2.9.0",
"version": "26.10.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "termix",
"version": "2.9.0",
"version": "26.10.0",
"hasInstallScript": true,
"workspaces": [
"packages/*",
+1 -1
View File
@@ -5,7 +5,7 @@
"packages/*",
"plugins/*"
],
"version": "2.9.0",
"version": "26.10.0",
"description": "Self-hosted SSH and remote desktop management.",
"author": "Karmaa",
"main": "electron/main.cjs",
+2 -2
View File
@@ -202,7 +202,7 @@ with a real install, a real device or a repo outside this one.
## Left for later
- 3.0.0: drop the migrated 2.8 settings rows (`guac_url`, `step_ca_url`,
- 26.10.0: drop the migrated 2.8 settings rows (`guac_url`, `step_ca_url`,
`global_metrics_interval` and the rest). The upgrade moves leave them in
place so a downgrade to 2.8 still works; nothing reads them in 2.9.
- Plugin repo split: knip still reports about 150 unused exports inside
@@ -225,4 +225,4 @@ with a real install, a real device or a repo outside this one.
SSH password for an RDP login (2.8 behaviour, behind `credentials:read`);
a remote desktop display token can be replayed within its five minute TTL
(strict single use would break the touch mode switch and reconnect, which
reuse it). Revisit with signing and the install UI in 3.0.0.
reuse it). Revisit with signing and the install UI in 26.10.0.
+1 -1
View File
@@ -277,7 +277,7 @@ export interface PluginSettingsField {
component?: string;
/**
* Deprecated and ignored: host defaults cover every host field now. Still
* accepted so an older manifest loads. Removed in 3.0.0.
* accepted so an older manifest loads. Removed in 26.10.0.
*/
defaultFrom?: string;
/**
+7
View File
@@ -15,6 +15,13 @@ describe("latestDevBranch", () => {
expect(latestDevBranch(["dev-2.10.0", "dev-2.9.0"])).toBe("dev-2.10.0");
});
it("ranks calendar versions above the old semver ones", () => {
expect(
latestDevBranch(["dev-2.9.1", "dev-26.10.0", "dev-26.9.0", "dev-3.0.0"]),
).toBe("dev-26.10.0");
expect(latestDevBranch(["dev-26.12.0", "dev-27.1.0"])).toBe("dev-27.1.0");
});
it("ignores main and non-dev branches", () => {
expect(latestDevBranch(["main", "feature/x", "dev-1.0.0"])).toBe(
"dev-1.0.0",
+1 -1
View File
@@ -1,7 +1,7 @@
/**
* Whether a user signs in through an external login (SSO, LDAP or any login
* plugin) rather than only a password. Read from the is_oidc column, which
* keeps its 2.8 name until 3.0.0 replaces it with user_external_identities.
* keeps its 2.8 name until 26.10.0 replaces it with user_external_identities.
*/
export function isExternalAccount(user: {
isOidc?: boolean | number | null;
+1 -1
View File
@@ -141,7 +141,7 @@ export async function issueSession(
username: user.username,
userId: user.id,
is_external: isExternalAccount(user),
// 2.8 name, kept until 3.0.0.
// 2.8 name, kept until 26.10.0.
is_oidc: !!user.isOidc,
// Any second factor; the name is what 2.8 clients read.
totp_enabled: await createCurrentUserAuthRepository().hasSecondFactor(
@@ -30,7 +30,7 @@ export function parseTerminalConfig(
* terminal_config is merged into what is stored rather than replaced. The
* 2.8 keys the editor no longer sends (the terminal's look, which the
* ssh-terminal plugin copies into its host settings, and a sudo password 2.8
* editors kept there) stay until 3.0.0 drops the column. A shared editor
* editors kept there) stay until 26.10.0 drops the column. A shared editor
* never changes the owner's private keys in either JSON. Returns an error
* for a terminalConfig that cannot be read.
*/
@@ -279,7 +279,7 @@ export function registerUserExternalAccountRoutes(
router.post("/link-external-to-password", authenticateJWT, link);
router.post("/unlink-external-from-password", authenticateJWT, unlink);
// 2.8 paths, kept until 3.0.0.
// 2.8 paths, kept until 26.10.0.
router.post("/link-oidc-to-password", authenticateJWT, link);
router.post("/unlink-oidc-from-password", authenticateJWT, unlink);
}
+2 -2
View File
@@ -613,7 +613,7 @@ router.get("/me", authenticateJWT, async (req: Request, res: Response) => {
username: user.username,
is_admin: !!user.isAdmin,
is_external: isExternalAccount(user),
// 2.8 name, kept until 3.0.0.
// 2.8 name, kept until 26.10.0.
is_oidc: !!user.isOidc,
is_dual_auth: isDualAuth,
// Any second factor; the name is what 2.8 clients read.
@@ -1022,7 +1022,7 @@ router.patch(
authenticateJWT,
setExternalAutoProvision,
);
// 2.8 paths, kept until 3.0.0.
// 2.8 paths, kept until 26.10.0.
router.get("/oidc-auto-provision", getExternalAutoProvision);
router.patch("/oidc-auto-provision", authenticateJWT, setExternalAutoProvision);
+1 -1
View File
@@ -66,7 +66,7 @@ const HOST_LOCAL_FIELDS = [
];
/**
* Columns kept until 3.0.0 that nothing reads any more: their values moved
* Columns kept until 26.10.0 that nothing reads any more: their values moved
* into plugin host settings, which sync with the host's pluginSettings. They
* stay off the wire so a stale local id never reaches the other side.
*/
+2 -2
View File
@@ -119,8 +119,8 @@ describe("manifest v2 validation", () => {
it("checks engine.termix against the core version", () => {
expect(isTermixCompatible(">=2.9.0", "2.9.0")).toBe(true);
expect(isTermixCompatible(">=2.9.0", "2.9.0-beta.3")).toBe(true);
expect(isTermixCompatible(">=3.0.0", "2.9.1")).toBe(false);
expect(isTermixCompatible(">=3.0.0", null)).toBe(true);
expect(isTermixCompatible(">=26.10.0", "2.9.1")).toBe(false);
expect(isTermixCompatible(">=26.10.0", null)).toBe(true);
});
it("fills in the entry point defaults", () => {
@@ -53,7 +53,7 @@ describe("desktop update check", () => {
it("stays quiet when up to date, ahead, or turned off", async () => {
version.value = "2.9.1";
await checkForDesktopUpdate();
version.value = "3.0.0";
version.value = "26.10.0";
await checkForDesktopUpdate();
version.value = "2.9.0";
disabled.value = true;
@@ -21,7 +21,7 @@
* The classify pass that follows compares those against the new levels, so
* nothing a user sees changes.
*
* The old rows stay in place for a downgrade until 3.0.0.
* The old rows stay in place for a downgrade until 26.10.0.
*/
import type { PluginManifest } from "@termix/plugin-sdk/manifest";
@@ -12,7 +12,7 @@
* login for a 2.8 key only the password unwraps. Until then the channel shows
* as needing to be saved again.
*
* The old table stays until 3.0.0, like the old columns. Idempotent.
* The old table stays until 26.10.0, like the old columns. Idempotent.
*/
import { sql } from "drizzle-orm";
@@ -3,7 +3,7 @@
* columns into host_protocol_auth, re-encrypted with the owner's data key
* under the new table's context.
*
* The columns stay in the database, unused, until 3.0.0. A user's hosts are
* The columns stay in the database, unused, until 26.10.0. A user's hosts are
* copied once their data key opens (at boot for a system-wrapped key, at the
* next password login for a 2.8 key that only the password opens), and a
* per-user marker then stops a later boot from bringing back a login the
@@ -6,7 +6,7 @@
* user_preferences.confirm_snippet_execution and folders_collapsed become the
* confirmExecution and foldersCollapsed user settings.
*
* The columns keep their values until 3.0.0 drops them.
* The columns keep their values until 26.10.0 drops them.
*
* Idempotent: a host that already has either host setting, and a user key
* already set, are skipped, so this is safe on every boot.
@@ -15,7 +15,7 @@
* Per user, user_preferences.terminal_defaults, custom_themes and
* command_autocomplete become user settings.
*
* The columns keep their values until 3.0.0 drops them.
* The columns keep their values until 26.10.0 drops them.
*
* Idempotent: a host that already has any of these rows, and a user key that
* is already set, are skipped, so this is safe on every boot.
@@ -3,7 +3,7 @@
* macros user setting. Macros a browser kept on its own (storage mode
* "local") are moved by the plugin's frontend the first time the panel opens.
*
* The column keeps its value until 3.0.0 drops it.
* The column keeps its value until 26.10.0 drops it.
*
* Idempotent: a user whose macros setting is already set is skipped.
*/
@@ -5,7 +5,7 @@
* instance keeps reporting under the same id.
*
* Idempotent: nothing is written where the plugin already has a row. The
* legacy settings rows stay in place until 3.0.0. The plugin waits a few
* legacy settings rows stay in place until 26.10.0. The plugin waits a few
* minutes before its first send, so this lands first.
*/
+1 -1
View File
@@ -11,7 +11,7 @@
* there sealed with the installation key (what ctx.secrets.seal writes),
* then the users columns are cleared.
*
* The columns stay in the database until 3.0.0, since core's drizzle
* The columns stay in the database until 26.10.0, since core's drizzle
* migrations run before this does. A user whose data key cannot be opened
* at boot is skipped and tried again on the next one. Idempotent.
*/