Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
162 commits
Select commit Hold shift + click to select a range
1b4c4b8
fix(settings): keep experimental state consistent
Aug 16, 2026
62a3d86
[cask] openless 1.3.18 (manual after release) [skip ci]
H-Chris233 Aug 21, 2026
5ba0fa7
feat(coding-agent): Less Computer 接入 Codex,语音使唤电脑不再只能用 Claude (#974)
bigsongeth Aug 21, 2026
c61e3dc
fix(asr): validate Bailian endpoints by channel scope
H-Chris233 Aug 21, 2026
b7ac91f
feat(coding-agent): Less Computer 接入 dsh(DeepSeek Harness),自带事件插件补齐流式…
bigsongeth Aug 21, 2026
aa0acf8
chore(dsh): 跟上游插件改名 dsh-events,并删掉一条会随机变红的联机验收 (#980)
bigsongeth Aug 21, 2026
2b796d0
fix(macos): Fn 键可被录制为听写触发键 (#979) (#981)
MarkShawn2020 Aug 21, 2026
2770c74
fix(local-asr): hide redundant model dashboard on Windows
H-Chris233 Aug 22, 2026
a19830d
Ignore local Reasonix and Codex files
H-Chris233 Aug 22, 2026
ec33bd5
fix(android): 修复小屏大字号下的设置与风格页面排版 (#960) (#983)
HKLHaoBin Aug 22, 2026
1abc7f5
feat(translation): inherit active style pack (#984)
H-Chris233 Aug 22, 2026
3f59b13
fix(asr): clarify Volcengine API Key source
H-Chris233 Aug 23, 2026
6efc839
feat(macos): auto-select newline mode for terminal apps (#988)
H-Chris233 Aug 23, 2026
2981bf2
fix(macos): 避免 Keychain 授权弹窗重复出现 (#990)
MarkShawn2020 Aug 23, 2026
5d379f2
chore(release): 1.3.18-Beta.7
H-Chris233 Aug 24, 2026
58c0ade
fix(windows-ime): make TSF shutdown fully cancelable (#991)
H-Chris233 Aug 25, 2026
3cc6a59
feat(selection-voice): Windows 选区语音编辑 MVP,划词提问面板预览与意图分流 (#987) (#995)
HKLHaoBin Aug 25, 2026
2cf5069
fix(asr): 修复 macOS MLX 后端闪退与发布资源缺失 (#999)
jimersylee Aug 26, 2026
18e1aaf
fix(polish): 润色流式请求让取消检测和网络等待赛跑,不再悬挂到 budget 结束 (#1001)
MurphyLo Aug 26, 2026
fc9824e
fix(remote-input): 开关已开时启动也要拉起局域网服务 (#1002)
zhou-zhichao Aug 27, 2026
fc38edd
refactor: consolidate Core 2.0 and restore cross-platform behavior (#…
H-Chris233 Sep 6, 2026
fd632c2
fix(windows): 粘贴模式下也可隐藏键盘列表中的 OpenLess (#1015) (#1017)
HKLHaoBin Sep 6, 2026
4c45a93
fix(floating-windows): 浮窗跟随鼠标所在的屏,多显示器下不再被钉死在主屏 (#1028)
bigsongeth Sep 6, 2026
823a6a1
fix(windows): 修复剪贴板 sentinel 竞争导致划词追问与划词编辑无法抓取选区 (#1024) (#1025)
HKLHaoBin Sep 7, 2026
82aa33f
fix(windows-ime): 避免 TSF 预检导致文本重复插入 (#1021)
tonyzaca7755963 Sep 7, 2026
30e580f
feat(ui): Core 2.0 入口、设置与布局整理,Linux 引导与视觉改进
Sep 7, 2026
11d9aa4
merge: Core 2.0 前端 UI 整理(feat/core-2-ux-linux → beta)
Sep 7, 2026
be1118b
style(src-tauri): 应用 rustfmt 默认风格统一格式
Sep 7, 2026
92da4fb
docs: 清理已了结的规划过程文档并同步引用
Sep 7, 2026
6608f66
chore: 将 .mimosa 运行状态目录移出版本库并加入 .gitignore
Sep 7, 2026
639c2fb
chore: 删除未使用死文件与零引用依赖
Sep 7, 2026
34cab16
docs: 以源码为准重写 1-app 文档系统(19 篇)
Sep 7, 2026
b1370b5
chore(docs): 删除已无引用的火山控制台截图
Sep 7, 2026
9d03bae
test(linux-egui): host_contract 按有效目标语义更新 Windows 键盘断言
Sep 7, 2026
6a7cd5f
fix(macos): 避免 Fn 长按与功能键误触发听写 (#1008)
MarkShawn2020 Sep 7, 2026
69f454b
feat(ui): integrate 2.0 interface and agent work
Sep 8, 2026
af9eaa3
fix(asr): 百炼 WebSocket 优先走 IPv4,避开本机 IPv6 黑洞 (#1036)
HKLHaoBin Sep 8, 2026
a6ed77c
feat(ui): 完善设置子页与自定义风格图标
Sep 8, 2026
7ae366e
Merge remote-tracking branch 'origin/beta' into codex/ui-2.0-details
Sep 8, 2026
d686406
refactor(app): 清理废弃代码并明确模块注释
Sep 8, 2026
4519f19
style(app): 统一前端与平台源码格式
Sep 8, 2026
ee002a1
test(core): 限定沙箱权限段的路径断言
Sep 8, 2026
a9ee22f
fix(updater): Beta 构建默认跟随 Beta 渠道 (#1041)
H-Chris233 Sep 8, 2026
2b7c9d1
feat(llm): 支持渠道级 Chat Completions、Responses 和 Messages (#1042)
H-Chris233 Sep 8, 2026
a3fc717
feat(llm): add OpenCode Zen polish provider, default deepseek-v4-flas…
zhou-zhichao Sep 8, 2026
6691540
feat(providers): add OrcaRouter model catalog, LLM, and ASR support (…
akf66 Sep 8, 2026
9a88bee
feat(app): polish desktop UI, expand languages and prepare cloud sync
Sep 8, 2026
1d29f8a
feat(app): finalize 2.0 channel settings UI, 8-language alignment and…
Sep 9, 2026
0fa21da
Merge origin/beta into codex/ui-2.0-details(汇入 #1022/#1023/#1041/#104…
Sep 9, 2026
cd18fe7
Merge fix/settings-experimental-consistency into codex/ui-2.0-details…
Sep 9, 2026
e9185e4
fix(i18n): 补齐 de/es/fr 的 OrcaRouter 与实验性徽标键,统一实验性措辞
Sep 9, 2026
68f94b7
fix(tauri): 重建 settings.rs 合并——保留 2.0 effect-plan 架构并应用 set_settings …
Sep 9, 2026
5113eaf
feat(providers): 统一模型字段、搜索与异步保存隔离 (#1044)
H-Chris233 Sep 9, 2026
bf1237c
feat(provider): 增加腾讯云实时语音处理链路 (#1020)
kevin1sMe Sep 9, 2026
417ad38
fix(macos): 四项修复——typeless 胶囊 1/7 缩放贴底、红绿灯对齐、ASR 误报、Keychain 节流
Sep 9, 2026
ce43e1b
build(macos): DMG 兜底(hdiutil + Applications 替身)并按第一性原则收紧注释
Sep 9, 2026
7584091
fix(hotkeys): support F13–F20 and the native Mac Dictation key (#1040)
Eclock2000 Sep 9, 2026
882fac6
fix(remote-input): preserve phone trust across restarts and IP change…
zhou-zhichao Sep 9, 2026
e3f63e9
build(macos): 兜底校验加新鲜度——打包失败时旧 bundle 不允许再通过校验
Sep 10, 2026
105fb99
fix(core): volcengine 配置判定不再要求 resource id——运行时留空会回落默认资源
Sep 10, 2026
7204c28
feat(capsule): typeless 放大到原版 1/5 面积、黑底白波纹;Siri 预览改用真实光效舞台
Sep 10, 2026
bd5656b
build(macos): 构建前清理重复的 qwen3-asr-rs 目录;新鲜度基准改为构建开始时间
Sep 10, 2026
b72ec96
远程输入:补充首次信任前的根证书指纹核验 (#1048)
zhou-zhichao Sep 10, 2026
f39a68a
修复远程录音息屏丢失并默认保持亮屏 (#1049)
zhou-zhichao Sep 10, 2026
786e4b4
feat(local-asr): 模型状态透出目录元数据、新增中断下载清理命令与 Zipformer 目录项
Sep 10, 2026
0ac0fbd
merge: 汇入 origin/beta(#1037 远程输入持久 CA、#1040 F13-F20/Mac 听写键、#1020 腾讯云…
Sep 10, 2026
3ff3df1
fix(merge): 落实合并后的契约与目录对齐
Sep 10, 2026
576592f
style(app): 合并后统一 prettier 格式(i18n/设置页/热键录制/凭据草稿等 22 处)
Sep 10, 2026
4ec44b2
merge: 汇入 origin/beta 第二轮(#1048 根证书指纹核验、#1049 录音保亮屏)
Sep 10, 2026
fe95354
Merge pull request #1050 from Open-Less/feat/ui-2.0-model-settings
appergb Sep 10, 2026
3b93d74
feat(models): 2.0 模型设置页与使用页——目录元数据、使用中模型选择与残留清理
Sep 10, 2026
d3aa3c5
Merge pull request #1051 from Open-Less/feat/ui-2.0-model-settings-page
appergb Sep 10, 2026
00914ce
style(settings): 云同步操作按钮间距由 8px 放宽到 12px
Sep 10, 2026
110f1f6
feat(sync): 云同步指向专用端口 apic.openless.top:9443 并补充服务端交接文档
Sep 10, 2026
7e2e48b
Merge pull request #1053 from Open-Less/feat/cloud-sync-backend
appergb Sep 10, 2026
cb5438a
feat(docs): 更新 README 和 README.zh.md 中的贡献者信息
H-Chris233 Sep 10, 2026
04719aa
方->圆
H-Chris233 Sep 10, 2026
615d6ac
fix(core): accept legacy Sherpa Qwen tokenizer layout (#1056)
H-Chris233 Sep 10, 2026
2c760b4
fix(settings): 多模态总开关打开即在 AI 服务与模型展示 Omni 视图
Sep 11, 2026
b25678c
fix(providers): Apple 语音渠道验证走原生引擎真实探针
Sep 11, 2026
867a0d8
Merge pull request #1059 from Open-Less/fix/omni-view-apple-speech-va…
appergb Sep 11, 2026
7971df2
fix/cannot-use-local-mlx-qwen3-asr: 修复不能使用本地qwen3-asr模型的问题 (#1058)
jimersylee Sep 12, 2026
82357e8
fix(android): 对齐应用内更新 minisign 并修复凭据 vault (#1061)
HKLHaoBin Sep 12, 2026
c4e8e88
fix(providers): 支持火山 Agent Plan / Coding Plan,并修正 temperature 参数序列化 (…
MikuHello Sep 12, 2026
c8bd7aa
fix(foundry): keep local ASR warm and stream transcripts (#1052)
H-Chris233 Sep 13, 2026
4d011df
fix(model-store): 接受 HF tree API 返回的裸 LFS oid,修复本地模型下载失败 (#1072)
Longado Sep 13, 2026
83be689
fix(less-computer): 升级 @shadcn/react 到 0.2.1,修复聊天框不自动滚到底 (#1070)
Longado Sep 13, 2026
ef78a09
fix(llm): 通过 LM Studio preset 控制思考 (#1009)
lededev Sep 13, 2026
9b55ae1
fix(selection-voice): 修复 EditPlan 解析失败并支持格式/提示词配置 (#1077)
HKLHaoBin Sep 15, 2026
cbde1fc
fix(history): 支持已完成条目重新转录 (#1079)
HKLHaoBin Sep 16, 2026
a8ebcf6
feat(dictation): 恢复录音优先并增加稳定模式 (#1082)
H-Chris233 Sep 18, 2026
16c3f84
chore(release): prepare 2.0.0-Beta.2 build 20260924
Sep 24, 2026
d78b359
fix(release): stage Beta packages until verification completes
Sep 24, 2026
a473268
fix(release): keep dated build metadata compatible with NSIS
Sep 24, 2026
e24ddf0
fix(tests): initialize QA handoff state in Windows coordinator fixture
Sep 24, 2026
d9113e0
fix(tests): include runtime in the local model wire contract
Sep 24, 2026
b268dcf
perf(macos): 加速 Rust CI 与桌面打包
Sep 25, 2026
f89b767
perf(macos): 保留 MLX 原生构建缓存
Sep 25, 2026
06e7e63
fix(macos): 将 Metal 编译器版本纳入缓存键
Sep 25, 2026
06db7d2
chore(release): integrate reviewed changes for Beta 3 build 20260925
Sep 25, 2026
6ebf1f1
fix(omni): 为百炼多模态音频添加 data URL 并限定主机匹配
Sep 25, 2026
9731a7f
feat(beta3): integrate encrypted sync and macOS experience updates
Sep 26, 2026
62e09f1
fix(beta3): correct installer layout and refine agent progress feedback
Sep 26, 2026
fa1cf01
test(windows): initialize hotkey resume state in coordinator fixture
Sep 26, 2026
b38fc8a
fix(sync): recover legacy empty Omni provider slot without losing cre…
Sep 26, 2026
51f6f4c
feat(ui): integrate desktop panel refresh and session-safe voice cont…
Sep 26, 2026
60b43e2
chore(release): prepare 2.0.0-Beta.3 build 20260926
Sep 26, 2026
913279c
feat(linux-egui): native EGUI parity host (#1060)
aeoform Sep 27, 2026
820d7ac
fix(hotkey): Support Space and Mouse4/5 as dictation shortcuts (#1113)
HKLHaoBin Sep 27, 2026
5b39599
fix(llm): omit temperature for OpenAI GPT-6 family (#1101) (#1115)
HKLHaoBin Sep 27, 2026
6f9af89
release: OpenLess 2.0.0-Beta.4+build.20260930 (#1126)
appergb Sep 30, 2026
3ce107e
fix(linux-egui): restore settings and QA panel actions
Oct 2, 2026
23c4f79
fix(linux-egui): scope popup shutdown and delayed QA results
Oct 2, 2026
b5f5c02
fix(linux-egui): reject queued events from replaced QA processes
Oct 2, 2026
4fa9599
fix(macos): prevent input-source switch crashes in the event tap
Oct 3, 2026
edc142e
feat(settings): gate unfinished features behind a local Beta switch
Oct 3, 2026
f7ea093
fix(settings): await Beta opt-in before mounting testing tools
Oct 3, 2026
24a0d30
test(linux): cover console opt-in before unavailable CLI detection
Oct 3, 2026
bc12343
test(linux): opt in before recording testing-feature shortcuts
Oct 3, 2026
d17c338
fix(ui): serialize testing-feature window visibility with opt-out
Oct 3, 2026
3cbf9a6
test(linux): resolve Beta title through the localization catalog
Oct 3, 2026
f12d495
feat(app): 整合流式原文轨道与 Ark 低延迟服务档位 (#1158)
H-Chris233 Oct 7, 2026
03e5b17
fix(selection): 拒绝用截断选区覆盖原文 (#1151)
cursor[bot] Oct 7, 2026
60f8609
fix(windows-ime): stay active as a speech TIP instead of switching IM…
DepengWang Oct 7, 2026
24a9a44
feat(asr): support long Hunyuan dictation through session rotation (#…
kevin1sMe Oct 7, 2026
d51006c
fix(audio): 优先麦克风原生格式并拦截空录音 (#1135)
cassieliang6709 Oct 7, 2026
3fce65f
fix(llm): send reasoning effort for OpenAI GPT-6
HKLHaoBin Oct 7, 2026
a1b42f8
fix(llm): disable reasoning for supported OpenAI models
HKLHaoBin Oct 7, 2026
e99eaf7
feat(voice-edit): 实现多轮语音编辑会话 (#1152)
HKLHaoBin Oct 9, 2026
dc4445b
fix(less-computer): prevent Windows panel open deadlock (#1168)
H-Chris233 Oct 9, 2026
050dbdb
feat(windows): UIA cursor context; pace SendInput keystrokes (#1137)
DepengWang Oct 12, 2026
ba711c7
feat(asr): 支持 Gemini 3.5 逐字与智能转写 (#1175)
CXwudi Oct 12, 2026
107faf3
feat: self-hosted token sync with Android support; Android IME polish…
DepengWang Oct 12, 2026
7e50891
feat(dictation): add low-latency microphone pre-roll (#1176)
HKLHaoBin Oct 12, 2026
dfce250
fix(android): make Pinyin/English toggle label clickable (#1177)
HKLHaoBin Oct 12, 2026
1ff361a
fix(qa): expand selection polish preview window (#1178)
HKLHaoBin Oct 12, 2026
d292924
fix(android): keep the app files dir resolvable without a foreground …
DepengWang Oct 12, 2026
e472769
fix(sync): stop treating list position and hit counts as conflicts (#…
DepengWang Oct 13, 2026
cf2ddc3
fix(windows): show recording capsule on every monitor (#1057) (#1183)
HKLHaoBin Oct 14, 2026
56b7f9f
fix(dictation): skip polish when LLM is unavailable or input is short…
HKLHaoBin Oct 14, 2026
25ad991
fix(android): 听写撤销前确认原文仍在光标处 (#1131)
cursor[bot] Oct 14, 2026
49f26c4
fix(selection): 拒绝用截断提示替换超长选区 (#1139)
cursor[bot] Oct 14, 2026
7880023
fix(android): 听写编辑失败后不再误删下一次上屏 (#1146)
cursor[bot] Oct 14, 2026
4497201
feat(audio): add lightweight microphone noise suppression (#1194)
HKLHaoBin Oct 14, 2026
0454dc5
fix(polish): diagnose adjacent near-duplicate output (#1191)
HKLHaoBin Oct 14, 2026
8c32db9
feat(desktop): integrate UI, startup and interaction refinements
appergb Oct 15, 2026
16a73b9
feat(asr): retire legacy macOS engines and add opt-in local experiments
appergb Oct 15, 2026
1a29a62
Merge branch 'integration/snapshot-desktop-ui-20261015' into integrat…
appergb Oct 15, 2026
25f30d8
Merge remote-tracking branch 'origin/fix/macos-input-switch-crash' in…
appergb Oct 15, 2026
adea6ba
Merge remote-tracking branch 'origin/fix/linux-egui-ui' into integrat…
appergb Oct 15, 2026
caab1c1
Merge remote-tracking branch 'origin/feature/testing-features-gate' i…
appergb Oct 15, 2026
5637abe
chore(desktop): prepare beta-a.beta.5 build 20261015-bd
appergb Oct 15, 2026
c039192
docs(desktop): record beta.5 merge scope and local acceptance
appergb Oct 15, 2026
edff891
fix(ci): preserve desktop boundaries and portable UI oracles
appergb Oct 15, 2026
e82d9c3
docs(desktop): record green cross-platform CI and final artifact hashes
appergb Oct 15, 2026
0947c05
test(ui): observe natural entrance completion without rewinding its c…
appergb Oct 15, 2026
b420346
fix(desktop): repair beta6 recording lifecycle and prepare verified r…
appergb Oct 15, 2026
20beadb
test(ui): refresh reviewed Linux shortcut references and retain full …
appergb Oct 15, 2026
b8f6a65
test(ui): align reviewed Linux typography references with shared cont…
appergb Oct 15, 2026
dbd76a4
chore(release): prepare 2.0.0 build 20261016 after verified beta6
appergb Oct 15, 2026
532c87c
merge(release): integrate main history without regressing reviewed 2.…
appergb Oct 15, 2026
de1a693
docs(release): record 1.x-to-2.0 integration decisions and tree proof
appergb Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 10 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
*.sh text eol=lf
*.rs text eol=lf
*.cpp text eol=lf
*.hpp text eol=lf
*.mjs text eol=lf
*.yml text eol=lf
*.desktop text eol=lf
*.xml text eol=lf
openless-all/app/linux-egui/packaging/AppRun text eol=lf
openless-all/app/linux-egui/packaging/openless-desktop-integration text eol=lf
443 changes: 269 additions & 174 deletions .github/workflows/android-apk.yml

Large diffs are not rendered by default.

41 changes: 41 additions & 0 deletions .github/workflows/cache-maintenance.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Cache maintenance

# GitHub keeps 10 GB of Actions caches per repository. The platform dependency
# trees are large (the Windows Tauri tree alone is ~1.6 GB), so unused scopes
# evict the caches the CI jobs restore - which silently turns every run into a
# cold build. This job keeps the budget visible and drops the scopes that can
# never be restored again: pull requests that are already closed or merged.
#
# It runs weekly and on demand. It never touches branch or tag scopes, so the
# caches the release path depends on are safe.
on:
schedule:
# Monday 03:17 UTC: after the weekend, before the working week.
- cron: '17 3 * * 1'
workflow_dispatch:

permissions:
actions: write # required to delete caches
contents: read

concurrency:
group: cache-maintenance
cancel-in-progress: false

jobs:
report:
name: Report and prune caches
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
with:
submodules: false

- name: Report cache usage and prune dead pull request scopes
env:
GH_TOKEN: ${{ github.token }}
REPO: ${{ github.repository }}
LIMIT_GB: '8'
working-directory: openless-all/app
run: bash scripts/ci-cache-usage.sh --prune --repo "$REPO" --limit-gb "$LIMIT_GB"
168 changes: 168 additions & 0 deletions .github/workflows/check-linux-egui.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
name: Linux egui build and backend checks

# CI and independent manual Linux builds share this deb/rpm verification path.
# No standalone push trigger: a Linux PR must show one combined Linux check.
on:
workflow_call:
inputs:
# 'none' skips a change set that is only prose (see
# scripts/ci-changed-areas.sh): the callers that must always build the
# packages, including accepted tag builds, leave the default in place.
scope:
required: false
type: string
default: full

permissions:
contents: read

concurrency:
group: linux-egui-build-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
build-linux-egui:
# PipeWire/libspa in this host needs 24.04. Packages target glibc >= 2.39.
runs-on: ubuntu-24.04
# A cold dependency tree costs ~18 minutes; anything past this is a hang.
timeout-minutes: 90
env:
RELEASE_TAG: ${{ github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/v') && endsWith(github.ref, '-tauri') && github.ref_name || '' }}
# Debug info dominates both compile time and cache size for this host, and
# the gate below never reads it. The Linux job keeps its own cache so a
# red run still starts warm.
CARGO_PROFILE_DEV_DEBUG: 0
CARGO_PROFILE_TEST_DEBUG: 0
steps:
- uses: actions/checkout@v6
with:
submodules: false

- name: Install native build and packaging dependencies
if: inputs.scope != 'none'
run: |
sudo add-apt-repository -y universe || true
sudo apt-get update
sudo apt-get install -y \
appstream build-essential cmake cpio desktop-file-utils \
fcitx5-modules-dev file libasound2-dev libdbus-1-dev \
libfcitx5config-dev libfcitx5core-dev libfcitx5utils-dev \
liblzma-dev libpipewire-0.3-dev libpulse-dev libssl-dev \
libwayland-dev libx11-dev libxkbcommon-dev pkg-config ripgrep rpm

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
if: inputs.scope != 'none'

- uses: actions/setup-node@v4
with:
node-version: '22'
if: inputs.scope != 'none'

- name: Resolve package version and validate release tag
id: version
working-directory: openless-all/app
env:
VERSION_TAG: ${{ env.RELEASE_TAG }}
run: |
set -euo pipefail
VERSION=$(node -p "require('./package.json').version")
if [ -n "$VERSION_TAG" ]; then
TAG_VERSION=${VERSION_TAG#v}
TAG_VERSION=${TAG_VERSION%-tauri}
if [ "${VERSION%%+*}" != "$TAG_VERSION" ]; then
echo "::error::tag $VERSION_TAG does not match package.json version $VERSION"
exit 1
fi
fi
# Linux packages use the same explicitly incremented -N revision as
# earlier Beta.2-78/-79 builds. Keep it separate from the Tauri tag.
REVISION=$(< linux-egui/package-revision)
[[ "$REVISION" =~ ^[1-9][0-9]*$ ]]
echo "version=${VERSION%%+*}-$REVISION" >> "$GITHUB_OUTPUT"

- uses: swatinem/rust-cache@v2
if: inputs.scope != 'none'
with:
workspaces: 'openless-all/app -> target'
# Saving after a failed test step keeps the next push incremental
# instead of repeating a cold build of the whole dependency tree.
cache-on-failure: true

- name: Build and test fcitx5 plugin
if: inputs.scope != 'none'
working-directory: openless-all/scripts/linux-fcitx5-plugin
run: |
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr
cmake --build build --parallel
ctest --test-dir build --output-on-failure
test -s build/libopenless.so
test -s build/openless.conf

- name: Test Core, Linux host, and platform boundaries
if: inputs.scope != 'none'
working-directory: openless-all/app
run: |
cargo test --locked -p openless-core
cargo clippy --locked -p openless-core --all-targets -- -D warnings
cargo test --locked -p openless-linux-egui --all-targets
cargo clippy --locked -p openless-linux-egui --all-targets -- -D warnings
cargo check --locked -p openless-linux-egui --all-targets
node scripts/linux-egui-tauri-free-contract.test.mjs
node scripts/linux-egui-release-contract.test.mjs
node scripts/ci-changed-areas.test.mjs
node scripts/tauri-linux-free-contract.test.mjs
pwsh -NoProfile -File ./scripts/check-core-deps.ps1
pwsh -NoProfile -File ./scripts/check-core-deps.ps1 openless-linux-egui
pwsh -NoProfile -File ./scripts/check-core-secret-surface.ps1
pwsh -NoProfile -File ./scripts/check-core-test-isolation.ps1
pwsh -NoProfile -File ./scripts/check-core-runtime-seam.ps1
pwsh -NoProfile -File ./scripts/check-linux-public-surface.ps1

- name: Test remote input TLS identity and Unix key permissions
if: inputs.scope != 'none'
working-directory: openless-all/app
run: cargo test --locked --manifest-path src-tauri/backend-tests/Cargo.toml --test remote_tls

- name: Validate Linux desktop metadata
if: inputs.scope != 'none'
run: |
desktop-file-validate openless-all/app/linux-egui/packaging/openless.desktop
appstreamcli validate --no-net openless-all/app/linux-egui/packaging/top.openless.OpenLess.metainfo.xml

- name: Build Linux egui host
if: inputs.scope != 'none'
working-directory: openless-all/app
run: cargo build --locked --release -p openless-linux-egui

- name: Package deb and rpm without Tauri
if: inputs.scope != 'none'
working-directory: openless-all/app
env:
OPENLESS_LINUX_VERSION: ${{ steps.version.outputs.version }}
OPENLESS_LINUX_ARCH: x86_64
run: |
# CI runners are disposable. Ignore old outputs restored by a cache.
rm -f target/linux-egui-packages/*.deb target/linux-egui-packages/*.rpm \
target/linux-egui-packages/SHA256SUMS
bash scripts/package-linux-egui.sh

- name: Generate checksums and verify distributable packages
if: inputs.scope != 'none'
working-directory: openless-all/app
run: |
set -euo pipefail
OUTPUT=target/linux-egui-packages
( cd "$OUTPUT" && sha256sum ./*.deb ./*.rpm > SHA256SUMS )
bash scripts/verify-linux-egui-packages.sh

- name: Upload verified Linux packages as workflow artifacts
# Push builds keep the release path warm but do not publish artifacts;
# the tag release and pull request runs are the consumers.
if: inputs.scope != 'none' && (github.event_name != 'push' || env.RELEASE_TAG != '')
uses: actions/upload-artifact@v7
with:
name: openless-linux-egui-x86_64
path: openless-all/app/target/linux-egui-packages/*
if-no-files-found: error
Loading
Loading