feat: 重写为 GPUI 原生桌面应用并接入 Gitea 软件包发布

- gpui-kit 0.6 原生 UI:连接管理、消息流/日志、发布预设、全局变量、
  设置、阿里云连接预设、原生 Logo
- MQTT 5.0/3.1.1 引擎(rumqttc,TCP/TLS/WS/WSS),独立 tokio runtime
  + 事件泵,真实 broker 端到端测试
- 连接表单:保存前可一键测试连接(宽松校验,自动生成临时 Client ID),
  高级属性(认证/MQTT 5 属性/遗嘱)按需折叠显示,WS 路径仅 WS/WSS 显示
- bug 修复:Hex 奇数长度显式报错、测试连接唯一 Client ID、Base64/Hex
  发布发送真实字节、v5 发布记录携带 Content-Type/用户属性、预设应用
  清除旧 Content-Type、模板时间基准统一;补 8 个单元测试
- Gitea 发布:Generic Package 上传脚本(bash/PowerShell)+ Actions
  release 工作流(tag 触发,双平台构建),README 使用说明
This commit is contained in:
2026-09-28 11:39:47 +08:00
parent 0152a10ee6
commit bf6937b776
25 changed files with 15287 additions and 120 deletions
+130
View File
@@ -0,0 +1,130 @@
# Gitea Actions:打 tag 时构建 release 产物并发布到 Gitea Package Registry。
#
# 依赖的仓库 Secrets/Variables(Settings → Actions → Secrets):
# GITEA_TOKEN — 包写权限令牌(package scope),用于上传 Generic 包
# 可选 GITEA_OWNER — 软件包所属用户/组织,缺省用仓库 owner
#
# 说明:Gitea Actions 语法与 GitHub Actions 兼容;若 runner 使用自定义
# label(如 `ubuntu`),请把 runs-on 改成你的 runner labels。
name: Release
on:
push:
tags:
- 'v*'
permissions:
contents: read
jobs:
# ─── 版本与元信息 ─────────────────────────────────────────────
meta:
name: Meta
runs-on: ubuntu-latest
outputs:
version: ${{ steps.ver.outputs.version }}
owner: ${{ steps.ver.outputs.owner }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- id: ver
run: |
version="${GITHUB_REF_NAME}"
echo "version=${version}" >> "$GITHUB_OUTPUT"
owner="${GITEA_OWNER_OVERRIDE:-${GITHUB_REPOSITORY_OWNER}}"
echo "owner=${owner}" >> "$GITHUB_OUTPUT"
# ─── 测试(不依赖系统图形库) ─────────────────────────────────
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
- name: Unit tests
run: cargo test -p mqttx-desktop --lib
# ─── 构建矩阵 ─────────────────────────────────────────────────
build:
name: Build (${{ matrix.os }})
needs: [meta, test]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
asset: mqttx.exe
target: x86_64-pc-windows-msvc
- os: ubuntu-latest
asset: mqttx
target: x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
target: ${{ matrix.target }}
- name: Install Linux system deps (GPUI)
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y \
libxcb1-dev libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev libasound2-dev libfontconfig-dev \
libx11-dev libxcursor-dev libxrandr-dev libxi-dev
- name: Build
run: cargo build --release -p mqttx-desktop --target ${{ matrix.target }}
- name: Stage artifact
shell: bash
run: |
out="dist-${{ matrix.target }}"
mkdir -p "$out"
src="target/${{ matrix.target }}/release/${{ matrix.asset }}"
ver="${{ needs.meta.outputs.version }}"
dst="$out/mqttx-${ver}-${{ matrix.target }}-${{ matrix.asset }}"
cp "$src" "$dst"
if command -v sha256sum >/dev/null; then
sha256sum "$dst" > "$dst.sha256"
else
shasum -a 256 "$dst" > "$dst.sha256"
fi
echo "ASSET_DIR=$out" >> "$GITHUB_ENV"
- uses: actions/upload-artifact@v4
with:
name: mqttx-${{ matrix.target }}
path: ${{ env.ASSET_DIR }}/*
# ─── 发布到 Gitea Package Registry ────────────────────────────
publish:
name: Publish package
needs: [meta, build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: Upload to Generic Package Registry
env:
GITEA_URL: ${{ github.server_url }}
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_OWNER: ${{ needs.meta.outputs.owner }}
GITEA_PKG: mqttx
run: |
chmod +x scripts/publish-gitea.sh
files=(artifacts/*)
# 过滤掉 .sha256 侧车文件,脚本会自行生成
upload=()
for f in "${files[@]}"; do
case "$f" in *.sha256) ;; *) upload+=("$f") ;; esac
done
./scripts/publish-gitea.sh "${upload[@]}" "${{ needs.meta.outputs.version }}"