feat(release): ship the Windows build as 3x-ui.exe with version info and icon

Kaspersky (Trojan.Win64.Agent.sb / .smhqgz) and Defender flag the
Windows build heuristically. A stripped, unsigned Go binary with no
VERSIONINFO, icon or manifest scores high on those heuristics, so the
release job now generates a resource .syso with go-winres from
winres/winres.json, stamped with internal/config/version, before
go build. The .syso is a build artifact and is gitignored.

The Windows zip now carries 3x-ui.exe instead of x-ui.exe, matching the
project name, and the executable embeds the 3X logo as its icon. The
icon is a square 256px crop of media/3x-ui-dark.png, since the source
logo is 400x200 and Windows icons must be square.
This commit is contained in:
MHSanaei
2026-10-14 14:16:49 +02:00
parent a66b360c09
commit db8b01b8ed
4 changed files with 61 additions and 1 deletions
+6 -1
View File
@@ -261,6 +261,11 @@ jobs:
go version go version
gcc --version gcc --version
# Version info + manifest resource: a bare stripped Go exe scores high on AV heuristics.
PANEL_VERSION=$(tr -d '[:space:]' < internal/config/version)
go run github.com/tc-hib/go-winres@v0.3.3 make --arch amd64 \
--product-version "$PANEL_VERSION" --file-version "$PANEL_VERSION"
# Stamp the commit into per-commit (dev channel) builds only. # Stamp the commit into per-commit (dev channel) builds only.
LDFLAGS="-w -s" LDFLAGS="-w -s"
if [[ "$GITHUB_REF" != refs/tags/* ]]; then if [[ "$GITHUB_REF" != refs/tags/* ]]; then
@@ -273,7 +278,7 @@ jobs:
run: | run: |
$retry = @{ MaximumRetryCount = 5; RetryIntervalSec = 10 } $retry = @{ MaximumRetryCount = 5; RetryIntervalSec = 10 }
mkdir x-ui mkdir x-ui
Copy-Item xui-release.exe x-ui\x-ui.exe Copy-Item xui-release.exe x-ui\3x-ui.exe
mkdir x-ui\bin mkdir x-ui\bin
cd x-ui\bin cd x-ui\bin
+1
View File
@@ -32,6 +32,7 @@ Thumbs.db
# Ignore Go build files # Ignore Go build files
*.exe *.exe
*.syso
x-ui.db x-ui.db
x-ui.db-shm x-ui.db-shm
x-ui.db-wal x-ui.db-wal
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

+54
View File
@@ -0,0 +1,54 @@
{
"RT_GROUP_ICON": {
"APP": {
"0000": "icon.png"
}
},
"RT_MANIFEST": {
"#1": {
"0409": {
"identity": {
"name": "3x-ui",
"version": ""
},
"description": "3X-UI web panel for Xray-core",
"minimum-os": "win7",
"execution-level": "as invoker",
"ui-access": false,
"auto-elevate": false,
"dpi-awareness": "system",
"disable-theming": false,
"disable-window-filtering": false,
"high-resolution-scrolling-aware": false,
"ultra-high-resolution-scrolling-aware": false,
"long-path-aware": false,
"printer-driver-isolation": false,
"gdi-scaling": false,
"segment-heap": false,
"use-common-controls-v6": false
}
}
},
"RT_VERSION": {
"#1": {
"0000": {
"fixed": {
"file_version": "0.0.0.0",
"product_version": "0.0.0.0"
},
"info": {
"0409": {
"CompanyName": "MHSanaei",
"FileDescription": "3X-UI web panel for Xray-core",
"FileVersion": "",
"InternalName": "3x-ui",
"LegalCopyright": "3X-UI contributors, licensed under GPL-3.0",
"OriginalFilename": "3x-ui.exe",
"ProductName": "3X-UI",
"ProductVersion": ""
}
}
}
}
}
}