feat: add support for headscale 0.29+

This commit is contained in:
Aarnav Tale
2026-06-20 18:03:14 -04:00
parent 846c030bc1
commit e29221e5f7
7 changed files with 21 additions and 7 deletions
-1
View File
@@ -332,7 +332,6 @@ function augmentUnstrictConfig(loaded: Partial<typeof headscaleConfig.infer>) {
tls_letsencrypt_challenge_type: loaded.tls_letsencrypt_challenge_type ?? "HTTP-01", tls_letsencrypt_challenge_type: loaded.tls_letsencrypt_challenge_type ?? "HTTP-01",
grpc_listen_addr: loaded.grpc_listen_addr ?? ":50443", grpc_listen_addr: loaded.grpc_listen_addr ?? ":50443",
grpc_allow_insecure: loaded.grpc_allow_insecure ?? false, grpc_allow_insecure: loaded.grpc_allow_insecure ?? false,
randomize_client_port: loaded.randomize_client_port ?? false,
unix_socket: loaded.unix_socket ?? "/var/run/headscale/headscale.sock", unix_socket: loaded.unix_socket ?? "/var/run/headscale/headscale.sock",
unix_socket_permission: loaded.unix_socket_permission ?? "0770", unix_socket_permission: loaded.unix_socket_permission ?? "0770",
+17 -2
View File
@@ -79,7 +79,19 @@ export const headscaleConfig = type({
}, },
disable_check_updates: goBool.default(false), disable_check_updates: goBool.default(false),
ephemeral_node_inactivity_timeout: goDuration.default("30m"), "ephemeral_node_inactivity_timeout?": goDuration,
"node?": {
expiry: goDuration.default("0"),
"ephemeral?": {
inactivity_timeout: goDuration.default("30m"),
},
"routes?": {
"ha?": {
probe_interval: goDuration.default("10s"),
probe_timeout: goDuration.default("5s"),
},
},
},
database: databaseConfig, database: databaseConfig,
acme_url: 'string = "https://acme-v02.api.letsencrypt.org/directory"', acme_url: 'string = "https://acme-v02.api.letsencrypt.org/directory"',
@@ -147,5 +159,8 @@ export const headscaleConfig = type({
enabled: goBool.default(false), enabled: goBool.default(false),
}, },
randomize_client_port: goBool.default(false), "randomize_client_port?": goBool,
"auto_update?": {
enabled: goBool.default(false),
},
}); });
+1 -1
View File
@@ -26,7 +26,7 @@ describe.for(HS_VERSIONS)("Headscale %s: Runtime Client", (version) => {
expect(bootstrapper.capabilities.nodeOwnerIsImmutable).toBe(gte(v, "0.28.0")); expect(bootstrapper.capabilities.nodeOwnerIsImmutable).toBe(gte(v, "0.28.0"));
// If a future version is added to HS_VERSIONS before this test is // If a future version is added to HS_VERSIONS before this test is
// updated, surface that explicitly rather than passing silently. // updated, surface that explicitly rather than passing silently.
const known: Version[] = ["0.27.0", "0.27.1", "0.28.0"]; const known: Version[] = ["0.27.0", "0.27.1", "0.28.0", "0.29.0", "0.29.1"];
if (!known.includes(version)) { if (!known.includes(version)) {
context.skip(); context.skip();
} }
+1
View File
@@ -10,6 +10,7 @@ import { afterAll, beforeAll, describe, expect, test } from "vitest";
// This is a little shim file that we use to execute the real proc-helper that // This is a little shim file that we use to execute the real proc-helper that
// is bundled through Vite in order to test against a real Linux /proc FS. // is bundled through Vite in order to test against a real Linux /proc FS.
const testRunner = ` const testRunner = `
process.env.NODE_ENV = "test";
const { findHeadscaleServe } = require("./proc-helper.js"); const { findHeadscaleServe } = require("./proc-helper.js");
async function main() { async function main() {
-1
View File
@@ -71,4 +71,3 @@ unix_socket: /var/run/headscale/headscale.sock
unix_socket_permission: "0770" unix_socket_permission: "0770"
logtail: logtail:
enabled: false enabled: false
randomize_client_port: false
+1 -1
View File
@@ -6,7 +6,7 @@ import { startTailscaleNode, TailscaleNodeEnv } from "./start-tailscale";
// The set of Headscale versions integration tests run against. Listed // The set of Headscale versions integration tests run against. Listed
// explicitly (rather than derived from a generated manifest) so the // explicitly (rather than derived from a generated manifest) so the
// supported version matrix lives next to the code that uses it. // supported version matrix lives next to the code that uses it.
export const HS_VERSIONS = ["0.27.0", "0.27.1", "0.28.0"] as const; export const HS_VERSIONS = ["0.27.0", "0.27.1", "0.28.0", "0.29.0", "0.29.1"] as const;
export type Version = (typeof HS_VERSIONS)[number]; export type Version = (typeof HS_VERSIONS)[number];
interface VersionStateEntry { interface VersionStateEntry {
+1 -1
View File
@@ -33,7 +33,7 @@ export default defineConfig({
name: "integration:api", name: "integration:api",
include: ["tests/integration/api/**/*.test.ts"], include: ["tests/integration/api/**/*.test.ts"],
setupFiles: ["tests/integration/setup/vitest-hook.ts"], setupFiles: ["tests/integration/setup/vitest-hook.ts"],
testTimeout: 15_000, testTimeout: 60_000,
}, },
}, },
{ {