[client/ui-wails] Switch release pipelines from Fyne to Wails UI

Repoint goreleaser configs and the release workflow at client/ui-wails so
the published Linux deb/rpm, Windows binaries and macOS UI binaries are
built from the Wails source. Linux nfpm deps swap libappindicator/Fyne
GL stack for libgtk-3, libwebkit2gtk-4.1 and libayatana-appindicator3,
and the packaged .desktop file launches the binary with
WEBKIT_DISABLE_DMABUF_RENDERER=1 so RDP/VM sessions render correctly.
Frontend bindings are now committed; the release jobs add Node 20 and
pnpm 9 and run the frontend build via the goreleaser before-hook.
This commit is contained in:
Zoltán Papp
2026-05-04 13:00:13 +02:00
parent 88a2bf582d
commit f9771de3f5
19 changed files with 1662 additions and 14 deletions

View File

@@ -0,0 +1,40 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Connection groups the daemon RPCs that drive login / connect / disconnect.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function Down(): $CancellablePromise<void> {
return $Call.ByID(1062334452);
}
export function Login(p: $models.LoginParams): $CancellablePromise<$models.LoginResult> {
return $Call.ByID(782816741, p).then(($result: any) => {
return $$createType0($result);
});
}
export function Logout(p: $models.LogoutParams): $CancellablePromise<void> {
return $Call.ByID(4028053230, p);
}
export function Up(p: $models.UpParams): $CancellablePromise<void> {
return $Call.ByID(1178388469, p);
}
export function WaitSSOLogin(p: $models.WaitSSOParams): $CancellablePromise<string> {
return $Call.ByID(3487329509, p);
}
// Private type creation functions
const $$createType0 = $models.LoginResult.createFrom;

View File

@@ -0,0 +1,35 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Debug groups debug / log-level / packet-trace RPCs.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function Bundle(p: $models.DebugBundleParams): $CancellablePromise<$models.DebugBundleResult> {
return $Call.ByID(1875836985, p).then(($result: any) => {
return $$createType0($result);
});
}
export function GetLogLevel(): $CancellablePromise<$models.LogLevel> {
return $Call.ByID(2713455331).then(($result: any) => {
return $$createType1($result);
});
}
export function SetLogLevel(lvl: $models.LogLevel): $CancellablePromise<void> {
return $Call.ByID(2627038775, lvl);
}
// Private type creation functions
const $$createType0 = $models.DebugBundleResult.createFrom;
const $$createType1 = $models.LogLevel.createFrom;

View File

@@ -0,0 +1,47 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import * as Connection from "./connection.js";
import * as Debug from "./debug.js";
import * as Networks from "./networks.js";
import * as Peers from "./peers.js";
import * as Profiles from "./profiles.js";
import * as Settings from "./settings.js";
import * as Update from "./update.js";
export {
Connection,
Debug,
Networks,
Peers,
Profiles,
Settings,
Update
};
export {
ActiveProfile,
Config,
ConfigParams,
DebugBundleParams,
DebugBundleResult,
Features,
LocalPeer,
LogLevel,
LoginParams,
LoginResult,
LogoutParams,
Network,
PeerLink,
PeerStatus,
Profile,
ProfileRef,
SelectNetworksParams,
SetConfigParams,
Status,
SystemEvent,
UpParams,
UpdateAvailable,
UpdateProgress,
UpdateResult,
WaitSSOParams
} from "./models.js";

View File

@@ -0,0 +1,33 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Networks groups the daemon RPCs that read and toggle routed networks.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function Deselect(p: $models.SelectNetworksParams): $CancellablePromise<void> {
return $Call.ByID(2335193802, p);
}
export function List(): $CancellablePromise<$models.Network[]> {
return $Call.ByID(719769457).then(($result: any) => {
return $$createType1($result);
});
}
export function Select(p: $models.SelectNetworksParams): $CancellablePromise<void> {
return $Call.ByID(3714393053, p);
}
// Private type creation functions
const $$createType0 = $models.Network.createFrom;
const $$createType1 = $Create.Array($$createType0);

View File

@@ -0,0 +1,39 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Peers serves the dashboard data: one polled Status RPC and a long-running
* SubscribeEvents stream that re-emits every event over the Wails event bus.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
/**
* Get returns the current daemon status snapshot.
*/
export function Get(): $CancellablePromise<$models.Status> {
return $Call.ByID(196038193).then(($result: any) => {
return $$createType0($result);
});
}
/**
* Watch starts the background loops that feed the frontend: a status
* stream (push-driven on connection-state change) and an event stream
* (DNS / network / auth / connectivity / update notifications).
* Safe to call once at boot; both loops self-restart on stream errors
* via exponential backoff.
*/
export function Watch(): $CancellablePromise<void> {
return $Call.ByID(741320382);
}
// Private type creation functions
const $$createType0 = $models.Status.createFrom;

View File

@@ -0,0 +1,52 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Profiles groups the daemon RPCs that manage named profiles.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function Add(p: $models.ProfileRef): $CancellablePromise<void> {
return $Call.ByID(701512397, p);
}
export function GetActive(): $CancellablePromise<$models.ActiveProfile> {
return $Call.ByID(2605259596).then(($result: any) => {
return $$createType0($result);
});
}
export function List(username: string): $CancellablePromise<$models.Profile[]> {
return $Call.ByID(1745269178, username).then(($result: any) => {
return $$createType2($result);
});
}
export function Remove(p: $models.ProfileRef): $CancellablePromise<void> {
return $Call.ByID(2506403914, p);
}
export function Switch(p: $models.ProfileRef): $CancellablePromise<void> {
return $Call.ByID(3405248534, p);
}
/**
* Username returns the OS username the daemon expects for profile lookups.
* The frontend calls this once at boot and reuses the result.
*/
export function Username(): $CancellablePromise<string> {
return $Call.ByID(1939223418);
}
// Private type creation functions
const $$createType0 = $models.ActiveProfile.createFrom;
const $$createType1 = $models.Profile.createFrom;
const $$createType2 = $Create.Array($$createType1);

View File

@@ -0,0 +1,35 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Settings groups the daemon RPCs that read and write the daemon config.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function GetConfig(p: $models.ConfigParams): $CancellablePromise<$models.Config> {
return $Call.ByID(2849966711, p).then(($result: any) => {
return $$createType0($result);
});
}
export function GetFeatures(): $CancellablePromise<$models.Features> {
return $Call.ByID(376812026).then(($result: any) => {
return $$createType1($result);
});
}
export function SetConfig(p: $models.SetConfigParams): $CancellablePromise<void> {
return $Call.ByID(565510651, p);
}
// Private type creation functions
const $$createType0 = $models.Config.createFrom;
const $$createType1 = $models.Features.createFrom;

View File

@@ -0,0 +1,30 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Update groups the RPCs that drive the enforced-update install flow.
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function GetInstallerResult(): $CancellablePromise<$models.UpdateResult> {
return $Call.ByID(2190725314).then(($result: any) => {
return $$createType0($result);
});
}
export function Trigger(): $CancellablePromise<$models.UpdateResult> {
return $Call.ByID(2415339649).then(($result: any) => {
return $$createType0($result);
});
}
// Private type creation functions
const $$createType0 = $models.UpdateResult.createFrom;

View File

@@ -0,0 +1,28 @@
//@ts-check
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as services$0 from "../../../../netbirdio/netbird/client/ui-wails/services/models.js";
function configure() {
Object.freeze(Object.assign($Create.Events, {
"netbird:event": $$createType0,
"netbird:status": $$createType1,
"netbird:update:available": $$createType2,
"netbird:update:progress": $$createType3,
}));
}
// Private type creation functions
const $$createType0 = services$0.SystemEvent.createFrom;
const $$createType1 = services$0.Status.createFrom;
const $$createType2 = services$0.UpdateAvailable.createFrom;
const $$createType3 = services$0.UpdateProgress.createFrom;
configure();

View File

@@ -0,0 +1,21 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import type { Events } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import type * as services$0 from "../../../../netbirdio/netbird/client/ui-wails/services/models.js";
declare module "@wailsio/runtime" {
namespace Events {
interface CustomEvents {
"netbird:event": services$0.SystemEvent;
"netbird:status": services$0.Status;
"netbird:update:available": services$0.UpdateAvailable;
"netbird:update:progress": services$0.UpdateProgress;
}
}
}

View File

@@ -0,0 +1,13 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
import * as NotificationService from "./notificationservice.js";
export {
NotificationService
};
export {
NotificationAction,
NotificationCategory,
NotificationOptions
} from "./models.js";

View File

@@ -0,0 +1,107 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Create as $Create } from "@wailsio/runtime";
/**
* NotificationAction represents an action button for a notification.
*/
export class NotificationAction {
"id"?: string;
"title"?: string;
/**
* (macOS-specific)
*/
"destructive"?: boolean;
/** Creates a new NotificationAction instance. */
constructor($$source: Partial<NotificationAction> = {}) {
Object.assign(this, $$source);
}
/**
* Creates a new NotificationAction instance from a string or object.
*/
static createFrom($$source: any = {}): NotificationAction {
let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
return new NotificationAction($$parsedSource as Partial<NotificationAction>);
}
}
/**
* NotificationCategory groups actions for notifications.
*/
export class NotificationCategory {
"id"?: string;
"actions"?: NotificationAction[];
"hasReplyField"?: boolean;
"replyPlaceholder"?: string;
"replyButtonTitle"?: string;
/** Creates a new NotificationCategory instance. */
constructor($$source: Partial<NotificationCategory> = {}) {
Object.assign(this, $$source);
}
/**
* Creates a new NotificationCategory instance from a string or object.
*/
static createFrom($$source: any = {}): NotificationCategory {
const $$createField1_0 = $$createType1;
let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
if ("actions" in $$parsedSource) {
$$parsedSource["actions"] = $$createField1_0($$parsedSource["actions"]);
}
return new NotificationCategory($$parsedSource as Partial<NotificationCategory>);
}
}
/**
* NotificationOptions contains configuration for a notification
*/
export class NotificationOptions {
"id": string;
"title": string;
/**
* (macOS and Linux only)
*/
"subtitle"?: string;
"body"?: string;
"categoryId"?: string;
"data"?: { [_ in string]?: any };
/** Creates a new NotificationOptions instance. */
constructor($$source: Partial<NotificationOptions> = {}) {
if (!("id" in $$source)) {
this["id"] = "";
}
if (!("title" in $$source)) {
this["title"] = "";
}
Object.assign(this, $$source);
}
/**
* Creates a new NotificationOptions instance from a string or object.
*/
static createFrom($$source: any = {}): NotificationOptions {
const $$createField5_0 = $$createType2;
let $$parsedSource = typeof $$source === 'string' ? JSON.parse($$source) : $$source;
if ("data" in $$parsedSource) {
$$parsedSource["data"] = $$createField5_0($$parsedSource["data"]);
}
return new NotificationOptions($$parsedSource as Partial<NotificationOptions>);
}
}
// Private type creation functions
const $$createType0 = NotificationAction.createFrom;
const $$createType1 = $Create.Array($$createType0);
const $$createType2 = $Create.Map($Create.Any, $Create.Any);

View File

@@ -0,0 +1,62 @@
// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL
// This file is automatically generated. DO NOT EDIT
/**
* Service represents the notifications service
* @module
*/
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import { Call as $Call, CancellablePromise as $CancellablePromise, Create as $Create } from "@wailsio/runtime";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore: Unused imports
import * as $models from "./models.js";
export function CheckNotificationAuthorization(): $CancellablePromise<boolean> {
return $Call.ByID(2216952893);
}
export function RegisterNotificationCategory(category: $models.NotificationCategory): $CancellablePromise<void> {
return $Call.ByID(2917562919, category);
}
export function RemoveAllDeliveredNotifications(): $CancellablePromise<void> {
return $Call.ByID(3956282340);
}
export function RemoveAllPendingNotifications(): $CancellablePromise<void> {
return $Call.ByID(108821341);
}
export function RemoveDeliveredNotification(identifier: string): $CancellablePromise<void> {
return $Call.ByID(975691940, identifier);
}
export function RemoveNotification(identifier: string): $CancellablePromise<void> {
return $Call.ByID(3966653866, identifier);
}
export function RemoveNotificationCategory(categoryID: string): $CancellablePromise<void> {
return $Call.ByID(2032615554, categoryID);
}
export function RemovePendingNotification(identifier: string): $CancellablePromise<void> {
return $Call.ByID(3729049703, identifier);
}
/**
* Public methods that delegate to the implementation.
*/
export function RequestNotificationAuthorization(): $CancellablePromise<boolean> {
return $Call.ByID(3933442950);
}
export function SendNotification(options: $models.NotificationOptions): $CancellablePromise<void> {
return $Call.ByID(3968228732, options);
}
export function SendNotificationWithActions(options: $models.NotificationOptions): $CancellablePromise<void> {
return $Call.ByID(1886542847, options);
}