chore: prepare 0.5.0 Linux and Windows release
This commit is contained in:
@@ -1,12 +1,12 @@
|
|||||||
name: Linux desktop release
|
name: Linux desktop release
|
||||||
|
|
||||||
# Manual until a native Linux runner is registered. The current 0.4.0
|
# Manual until a native Linux runner is registered. The current 0.5.0
|
||||||
# packages are built locally using the identical gates documented below.
|
# packages are built locally using the identical gates documented below.
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
tag:
|
tag:
|
||||||
description: Existing stable version tag to package (for example v0.4.0)
|
description: Existing stable version tag to package (for example v0.5.0)
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Desktop builds and releases
|
# Desktop builds and releases
|
||||||
|
|
||||||
For this fork’s Linux and Windows 0.4.0 release on Gitea, see [Gitea releases](gitea-release.md).
|
For this fork’s Linux and Windows 0.5.0 release on Gitea, see [Gitea releases](gitea-release.md).
|
||||||
The three-platform GitHub process below documents the upstream reference.
|
The three-platform GitHub process below documents the upstream reference.
|
||||||
|
|
||||||
## Platforms
|
## Platforms
|
||||||
|
|||||||
+17
-16
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
The release destination is
|
The release destination is
|
||||||
https://server2.sorokin-oleg-edu.xyz/replicated/learnharness.
|
https://server2.sorokin-oleg-edu.xyz/replicated/learnharness.
|
||||||
Version **0.4.0 targets Linux x64 and Windows x64**, with each platform built
|
Version **0.5.0 targets Linux x64 and Windows x64**, with each platform built
|
||||||
and verified on its native operating system. The upstream GitHub workflow and three-platform packaging
|
and verified on its native operating system. The upstream GitHub workflow and three-platform packaging
|
||||||
configuration remain available as reference in `.github/workflows/release.yml`
|
configuration remain available as reference in `.github/workflows/release.yml`
|
||||||
and `electron-builder.yml`.
|
and `electron-builder.yml`.
|
||||||
@@ -48,18 +48,19 @@ node scripts/smoke-provider-runtime.mjs --standalone dist/linux-unpacked/resourc
|
|||||||
xvfb-run -a node scripts/smoke-demo-runtime.mjs --standalone dist/linux-unpacked/resources/server/standalone --runtime dist/linux-unpacked/learnharness --browser
|
xvfb-run -a node scripts/smoke-demo-runtime.mjs --standalone dist/linux-unpacked/resources/server/standalone --runtime dist/linux-unpacked/learnharness --browser
|
||||||
```
|
```
|
||||||
|
|
||||||
The Linux portion of 0.4.0 has these attachments:
|
The Linux portion of 0.5.0 has these attachments:
|
||||||
|
|
||||||
- `LearnHarness-0.4.0-x86_64.AppImage`
|
- `LearnHarness-0.5.0-x86_64.AppImage`
|
||||||
- `LearnHarness-0.4.0-amd64.deb`
|
- `LearnHarness-0.5.0-amd64.deb`
|
||||||
- `latest-linux.yml`
|
- `latest-linux.yml`
|
||||||
- `SHA256SUMS`
|
- `SHA256SUMS`
|
||||||
|
|
||||||
## Preparing Windows packages
|
## Preparing Windows packages
|
||||||
|
|
||||||
Use a clean checkout of the same `v0.4.0` tag on Windows x64 with Node 26 and Git
|
Use a clean checkout of the same `v0.5.0` tag on Windows x64 with Node 26 and Git
|
||||||
for Windows. Keep build tools and logs outside the checkout. The local Windows
|
for Windows. Keep build tools and logs outside the checkout. The Windows
|
||||||
checkout used for this release is `~/Documents/Gitea/learnharness`.
|
release checkout is `~/Documents/Gitea/learnharness-release-0.5.0`, linked to the
|
||||||
|
existing repository in `~/Documents/Gitea/learnharness`.
|
||||||
|
|
||||||
In PowerShell, stop after any failed command:
|
In PowerShell, stop after any failed command:
|
||||||
|
|
||||||
@@ -84,13 +85,13 @@ node scripts/smoke-demo-runtime.mjs --standalone dist/win-unpacked/resources/ser
|
|||||||
|
|
||||||
Windows contributes three attachments:
|
Windows contributes three attachments:
|
||||||
|
|
||||||
- `LearnHarness-0.4.0-x64-setup.exe`
|
- `LearnHarness-0.5.0-x64-setup.exe`
|
||||||
- `LearnHarness-0.4.0-x64-setup.exe.blockmap`
|
- `LearnHarness-0.5.0-x64-setup.exe.blockmap`
|
||||||
- `latest.yml`
|
- `latest.yml`
|
||||||
|
|
||||||
The combined release has **seven attachments**, including one `SHA256SUMS`
|
The combined release has **seven attachments**, including one `SHA256SUMS`
|
||||||
covering all six other files. Verify that `latest.yml` names the Windows
|
covering all six other files. Verify that `latest.yml` names the Windows
|
||||||
installer exactly, reports version `0.4.0`, and matches the installer's actual
|
installer exactly, reports version `0.5.0`, and matches the installer's actual
|
||||||
size and SHA-512. Its gzip blockmap must cover the installer and match every
|
size and SHA-512. Its gzip blockmap must cover the installer and match every
|
||||||
block checksum. Confirm the packaged `resources/app-update.yml` uses the Gitea
|
block checksum. Confirm the packaged `resources/app-update.yml` uses the Gitea
|
||||||
generic provider. Windows builds follow upstream's unsigned, per-user installer
|
generic provider. Windows builds follow upstream's unsigned, per-user installer
|
||||||
@@ -101,8 +102,8 @@ configuration.
|
|||||||
Commit and push the release source, then push its exact annotated tag:
|
Commit and push the release source, then push its exact annotated tag:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
git tag -a v0.4.0 -m 'LearnHarness 0.4.0'
|
git tag -a v0.5.0 -m 'LearnHarness 0.5.0'
|
||||||
git push gitea main v0.4.0
|
git push gitea main v0.5.0
|
||||||
```
|
```
|
||||||
|
|
||||||
Supply `GITEA_TOKEN` only to the upload command. A token file may remain outside
|
Supply `GITEA_TOKEN` only to the upload command. A token file may remain outside
|
||||||
@@ -116,10 +117,10 @@ The tool requires the tag to exist in Gitea, creates or reuses one draft at that
|
|||||||
tag, uploads missing assets, and downloads every attachment to verify its actual
|
tag, uploads missing assets, and downloads every attachment to verify its actual
|
||||||
SHA-256 against the local verified build. Existing mismatched attachments and
|
SHA-256 against the local verified build. Existing mismatched attachments and
|
||||||
published releases are refused. It never publishes or changes repository
|
published releases are refused. It never publishes or changes repository
|
||||||
visibility. Release notes come from `docs/release-0.4.0.md`.
|
visibility. Release notes come from `docs/release-0.5.0.md`.
|
||||||
|
|
||||||
This uploader and its remote verifier enforce a **Linux-only** inventory. They
|
This uploader and its remote verifier enforce a **Linux-only** inventory. They
|
||||||
will refuse a combined Linux/Windows draft. For the combined 0.4.0 release, add
|
will refuse a combined Linux/Windows draft. For the combined 0.5.0 release, add
|
||||||
the verified Windows attachments to the existing draft and replace `SHA256SUMS`
|
the verified Windows attachments to the existing draft and replace `SHA256SUMS`
|
||||||
with the combined manifest. Keep the Linux installers and feed unchanged. Check
|
with the combined manifest. Keep the Linux installers and feed unchanged. Check
|
||||||
all seven attachment names, sizes, and actual downloaded hashes against the
|
all seven attachment names, sizes, and actual downloaded hashes against the
|
||||||
@@ -141,12 +142,12 @@ public `latest` feed and in-app automatic updates expose this version.
|
|||||||
workflow with an existing release tag as input. It requires a native Linux x64
|
workflow with an existing release tag as input. It requires a native Linux x64
|
||||||
runner labeled `ubuntu-24.04`, the label used by upstream's Linux release job,
|
runner labeled `ubuntu-24.04`, the label used by upstream's Linux release job,
|
||||||
plus the native Electron dependencies and `xvfb-run`. There were no runners
|
plus the native Electron dependencies and `xvfb-run`. There were no runners
|
||||||
registered when 0.4.0 was prepared, so its packages are built locally. A tag push
|
registered when 0.5.0 was prepared, so its packages are built locally. A tag push
|
||||||
does not queue a job that cannot run.
|
does not queue a job that cannot run.
|
||||||
|
|
||||||
The workflow uses the repository's ephemeral `GITEA_TOKEN` with release-write
|
The workflow uses the repository's ephemeral `GITEA_TOKEN` with release-write
|
||||||
permission only in the final upload step. It checks out the requested tag without
|
permission only in the final upload step. It checks out the requested tag without
|
||||||
persisting credentials and leaves the result as a verified draft. Public pull
|
persisting credentials and leaves the result as a verified draft. Public pull
|
||||||
requests cannot trigger this publishing workflow. This workflow remains
|
requests cannot trigger this publishing workflow. This workflow remains
|
||||||
Linux-only; the combined 0.4.0 draft was assembled from local native builds.
|
Linux-only; the combined 0.5.0 draft was assembled from local native builds.
|
||||||
Windows has its own standalone payload and smoke checks, as described above.
|
Windows has its own standalone payload and smoke checks, as described above.
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# LearnHarness 0.5.0
|
||||||
|
|
||||||
|
## English
|
||||||
|
|
||||||
|
This release adds ChatGPT Fast mode and improves the language controls and
|
||||||
|
Russian settings layout introduced in 0.4.0.
|
||||||
|
|
||||||
|
- Interface-language and speech-recognition selectors in **Settings → General**,
|
||||||
|
plus the quick selector beside the microphone, now use the app's styled menus.
|
||||||
|
The menus include selected-item checkmarks and keyboard navigation; Escape
|
||||||
|
closes the menu and restores focus to its trigger. Language preferences stay
|
||||||
|
independent, and STT selection remains locked while recording.
|
||||||
|
- **Quizzing** keeps its full Russian labels. The label and segmented control
|
||||||
|
share a row when space permits. Narrower panels stack the control beneath the
|
||||||
|
hint with matching left alignment and enough height for wrapped text.
|
||||||
|
- **Settings → Agent** now has a **⚡ Fast** toggle for each Strong, Cheap, and
|
||||||
|
Vision model tier. Fast mode is **off by default** and initially available only
|
||||||
|
for **ChatGPT** connections. It requests priority processing and may consume
|
||||||
|
more ChatGPT plan allowance; availability depends on the model and account.
|
||||||
|
- Fast preferences take effect on the **next request**, including existing
|
||||||
|
ChatGPT conversations and newly started background work in the corresponding
|
||||||
|
tier. The selected model and reasoning effort are preserved. Selecting another
|
||||||
|
provider turns Fast off for that tier; other providers show it as unavailable.
|
||||||
|
- Unsupported Fast requests produce actionable, localized errors. Connections
|
||||||
|
keep their existing account, background-consent, and no-API-key-fallback rules.
|
||||||
|
|
||||||
|
Packages: **Linux x64** AppImage and Debian, and a **Windows x64** installer.
|
||||||
|
Both platforms use this fork's public Gitea releases for automatic updates.
|
||||||
|
Windows packaging remains unsigned, matching upstream.
|
||||||
|
|
||||||
|
## Русский
|
||||||
|
|
||||||
|
В этом выпуске добавлен быстрый режим ChatGPT и улучшены языковые настройки
|
||||||
|
и их отображение на русском языке, появившиеся в версии 0.4.0.
|
||||||
|
|
||||||
|
- Выбор языка интерфейса и распознавания речи в разделе **Настройки → Общие**,
|
||||||
|
а также быстрый выбор языка рядом с микрофоном теперь используют меню в стиле
|
||||||
|
приложения. Выбранный пункт отмечен галочкой, поддерживается управление
|
||||||
|
клавиатурой. Escape закрывает меню и возвращает фокус на кнопку. Языковые
|
||||||
|
настройки остаются независимыми; язык распознавания нельзя менять во время
|
||||||
|
записи.
|
||||||
|
- В разделе **Проверка понимания** сохранены полные русские подписи. Если места
|
||||||
|
достаточно, заголовок и переключатель расположены в одной строке. В узких
|
||||||
|
панелях переключатель размещается под пояснением с выравниванием по левому
|
||||||
|
краю; высота кнопок учитывает перенос текста.
|
||||||
|
- В разделе **Настройки → Агент** появился переключатель **⚡ Быстро** для каждого
|
||||||
|
уровня моделей: основной, экономичной и с поддержкой изображений. Быстрый
|
||||||
|
режим **отключён по умолчанию** и пока доступен только для подключений
|
||||||
|
**ChatGPT**. Он запрашивает приоритетную обработку и может быстрее расходовать
|
||||||
|
лимит ChatGPT. Доступность зависит от модели и учётной записи.
|
||||||
|
- Настройка применяется к **следующему запросу**, в том числе в существующих
|
||||||
|
занятиях с ChatGPT и в новых фоновых задачах соответствующего уровня.
|
||||||
|
Выбранная модель и уровень рассуждений сохраняются. При выборе другого
|
||||||
|
провайдера быстрый режим для этого уровня отключается; для остальных
|
||||||
|
провайдеров переключатель недоступен.
|
||||||
|
- Если быстрый режим не поддерживается, приложение показывает понятную ошибку
|
||||||
|
на выбранном языке. Сохраняются выбранная учётная запись, разрешения на
|
||||||
|
фоновую работу и запрет автоматического перехода на API-ключ.
|
||||||
|
|
||||||
|
Пакеты: AppImage и Debian для **Linux x64**, установщик для **Windows x64**.
|
||||||
|
Обе версии используют публичные выпуски этого форка в Gitea для автоматических
|
||||||
|
обновлений. Установщик Windows не подписан, как и в исходном проекте.
|
||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "learnharness",
|
"name": "learnharness",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "learnharness",
|
"name": "learnharness",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@earendil-works/pi-agent-core": "1.4.0",
|
"@earendil-works/pi-agent-core": "1.4.0",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "learnharness",
|
"name": "learnharness",
|
||||||
"version": "0.4.0",
|
"version": "0.5.0",
|
||||||
"license": "AGPL-3.0-only",
|
"license": "AGPL-3.0-only",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Amos Blomqvist",
|
"name": "Amos Blomqvist",
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ export async function verifyLocal(directory, version) {
|
|||||||
/** The downloaded bytes, not only API-reported sizes, must agree with the local verified package. */
|
/** The downloaded bytes, not only API-reported sizes, must agree with the local verified package. */
|
||||||
export async function verifyRemote(release, localInventory, headers = {}, request = fetch) {
|
export async function verifyRemote(release, localInventory, headers = {}, request = fetch) {
|
||||||
assert.equal(release.draft, true, "only a draft may be prepared or verified by this tool");
|
assert.equal(release.draft, true, "only a draft may be prepared or verified by this tool");
|
||||||
assert.equal(release.prerelease, false, "0.4.0 is a stable release");
|
assert.equal(release.prerelease, false, "release must be stable");
|
||||||
assert.deepEqual(release.assets.map((asset) => asset.name).sort(), localInventory.map((asset) => asset.name).sort(), "remote draft has missing, duplicate, or unexpected assets");
|
assert.deepEqual(release.assets.map((asset) => asset.name).sort(), localInventory.map((asset) => asset.name).sort(), "remote draft has missing, duplicate, or unexpected assets");
|
||||||
const temporary = await fsp.mkdtemp(path.join(os.tmpdir(), "lh-release-verify-"));
|
const temporary = await fsp.mkdtemp(path.join(os.tmpdir(), "lh-release-verify-"));
|
||||||
try {
|
try {
|
||||||
|
|||||||
Reference in New Issue
Block a user