mirror of
https://github.com/Corfirean/coa-server-manager.git
synced 2026-11-11 03:51:01 +00:00
Prepare Manager 0.9.10 with reviewed notes and signing of local installers [skip ci]
This commit is contained in:
1 parent
c513649beb
commit
d63e85bb18
11 files changed
+297
-29
No files matched your search
@@ -0,0 +1,72 @@
|
||||
name: sign-local-installer
|
||||
on:
|
||||
push:
|
||||
branches: [release/20261108-manager]
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
build_run_id:
|
||||
description: Successful manager-local run in coa-server-build
|
||||
required: true
|
||||
permissions:
|
||||
contents: read
|
||||
actions: read
|
||||
jobs:
|
||||
sign:
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 22
|
||||
- name: Verify local build provenance
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
BUILD_RUN: ${{ inputs.build_run_id }}
|
||||
run: |
|
||||
python3 - <<'PY'
|
||||
import json, os, subprocess
|
||||
run = os.environ['BUILD_RUN']
|
||||
if not run.isdigit():
|
||||
raise RuntimeError('Invalid build run')
|
||||
data = json.loads(subprocess.check_output(['gh', 'api', f'repos/Corfirean/coa-server-build/actions/runs/{run}']))
|
||||
if data['conclusion'] != 'success' or data['path'] != '.github/workflows/manager-local.yml':
|
||||
raise RuntimeError('Not a successful local Manager build')
|
||||
subprocess.run(['gh', 'run', 'download', run, '-R', 'Corfirean/coa-server-build', '-n', 'unsigned-manager-windows', '-D', '_prepared-manager'], check=True)
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
root = Path('_prepared-manager')
|
||||
meta = json.loads((root / 'prepared-source.json').read_text())
|
||||
version = json.loads(Path('package.json').read_text())['version']
|
||||
name = meta['installer']
|
||||
if Path(name).name != name or meta['source'] != os.environ['GITHUB_SHA'] or meta['version'] != version or str(meta['run']) != run:
|
||||
raise RuntimeError('Installer identity differs')
|
||||
if hashlib.sha256((root / name).read_bytes()).hexdigest() != meta['sha256']:
|
||||
raise RuntimeError('Installer hash differs')
|
||||
PY
|
||||
- run: npm ci
|
||||
- name: Sign exact locally compiled bytes
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
||||
run: |
|
||||
node --input-type=module <<'JS'
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { execFileSync } from 'node:child_process';
|
||||
import { createHash } from 'node:crypto';
|
||||
const root = '_prepared-manager/';
|
||||
const meta = JSON.parse(readFileSync(root + 'prepared-source.json'));
|
||||
execFileSync('node_modules/.bin/tauri', ['signer', 'sign', '--app-version', meta.version, root + meta.installer], {stdio: 'inherit'});
|
||||
if (createHash('sha256').update(readFileSync(root + meta.installer)).digest('hex') !== meta.sha256) throw new Error('Signed bytes changed');
|
||||
const signature = readFileSync(root + meta.installer + '.sig', 'utf8').trim();
|
||||
const url = `https://github.com/Corfirean/coa-server-manager/releases/download/v${meta.version}/${encodeURIComponent(meta.installer)}`;
|
||||
writeFileSync(root + 'latest.json', JSON.stringify({version: meta.version, notes: 'See the release notes.', pub_date: new Date().toISOString(), platforms: {'windows-x86_64': {signature, url}}}, null, 2) + '\n');
|
||||
meta.signingRun = process.env.GITHUB_RUN_ID;
|
||||
writeFileSync(root + 'prepared-source.json', JSON.stringify(meta, null, 2) + '\n');
|
||||
JS
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: prepared-manager-windows
|
||||
path: _prepared-manager/*
|
||||
retention-days: 14
|
||||
if-no-files-found: error
|
||||
Generated
+3
-3
@@ -586,7 +586,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "coa-core"
|
||||
version = "0.9.9"
|
||||
version = "0.9.10"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"chrono",
|
||||
@@ -634,7 +634,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "coa-release"
|
||||
version = "0.9.9"
|
||||
version = "0.9.10"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"coa-core",
|
||||
@@ -643,7 +643,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "coa-server-manager"
|
||||
version = "0.9.9"
|
||||
version = "0.9.10"
|
||||
dependencies = [
|
||||
"coa-control-proto",
|
||||
"coa-core",
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ members = ["crates/coa-core", "crates/coa-release", "crates/coa-registry-proto",
|
||||
exclude = ["services/coa-registry", "services/coa-registry-e2e", "services/coa-coordinator", "services/coa-relay"]
|
||||
|
||||
[workspace.package]
|
||||
version = "0.9.9"
|
||||
version = "0.9.10"
|
||||
edition = "2021"
|
||||
license = "AGPL-3.0-only"
|
||||
|
||||
|
||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "coa-server-manager",
|
||||
"version": "0.9.9",
|
||||
"version": "0.9.10",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "coa-server-manager",
|
||||
"version": "0.9.9",
|
||||
"version": "0.9.10",
|
||||
"dependencies": {
|
||||
"@tauri-apps/api": "^2.12.0",
|
||||
"@tauri-apps/plugin-dialog": "^2.8.0",
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "coa-server-manager",
|
||||
"private": true,
|
||||
"version": "0.9.9",
|
||||
"version": "0.9.10",
|
||||
"license": "AGPL-3.0-only",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"$schema": "https://schema.tauri.app/config/2",
|
||||
"productName": "CoA Server Manager",
|
||||
"version": "0.9.9",
|
||||
"version": "0.9.10",
|
||||
"identifier": "com.coa.servermanager",
|
||||
"build": {
|
||||
"beforeDevCommand": "npm run dev",
|
||||
|
||||
@@ -36,3 +36,7 @@ Manager 0.9.8 preparation refreshes the bundled server history through 0.261030.
|
||||
The two reviewed upcoming records are in `tools/reviewed-manager-notes.json` and
|
||||
`tools/reviewed-server-notes.json`; every new note has all five translations.
|
||||
These files describe preparation and do not add unpublished releases to canonical history.
|
||||
|
||||
Manager 0.9.10 refreshes the bundled server history through 0.261104.94 from
|
||||
canonical build commit `a9c6b17c8c1a295680fda4ad4bcdde266357264d` on 2026-11-08.
|
||||
The reviewed upcoming Manager and server records carry translations in all five languages.
|
||||
@@ -37,7 +37,8 @@
|
||||
"Update validation keeps MySQL running between compatible checks": "При проверке обновления MySQL продолжает работать между совместимыми проверками",
|
||||
"Choose normal logs, errors only or no server logs in maintenance settings": "Выбирайте обычные логи, только ошибки или отключение логов в настройках обслуживания",
|
||||
"Diagnostic exports include launcher stages and lock owner records": "В архив диагностики входят этапы лаунчера и записи о владельцах блокировок",
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Проверка обновления и восстановления использует временный порт входа даже при переопределении в Windows"
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Проверка обновления и восстановления использует временный порт входа даже при переопределении в Windows",
|
||||
"Custom Races patch installation recovers from interrupted downloads": "Установка патчей дополнительных рас восстанавливается после прерывания загрузки"
|
||||
},
|
||||
"de": {
|
||||
"Choose Parallel or Global level scaling in module settings": "Parallele oder globale Levelskalierung in den Moduleinstellungen wählen",
|
||||
@@ -76,7 +77,8 @@
|
||||
"Update validation keeps MySQL running between compatible checks": "Bei der Update-Validierung bleibt MySQL zwischen kompatiblen Prüfungen aktiv",
|
||||
"Choose normal logs, errors only or no server logs in maintenance settings": "In den Wartungseinstellungen normale Protokolle, nur Fehler oder keine Serverprotokolle wählen",
|
||||
"Diagnostic exports include launcher stages and lock owner records": "Diagnoseexporte enthalten Launcher-Schritte und aufgezeichnete Sperrbesitzer",
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Update- und Wiederherstellungsprüfungen verwenden den temporären Anmeldeport auch bei einer Windows-Vorgabe"
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Update- und Wiederherstellungsprüfungen verwenden den temporären Anmeldeport auch bei einer Windows-Vorgabe",
|
||||
"Custom Races patch installation recovers from interrupted downloads": "Die Installation zusätzlicher Völker setzt unterbrochene Downloads fort"
|
||||
},
|
||||
"fr": {
|
||||
"Choose Parallel or Global level scaling in module settings": "Choisissez une progression parallèle ou globale des niveaux dans les paramètres du module",
|
||||
@@ -115,7 +117,8 @@
|
||||
"Update validation keeps MySQL running between compatible checks": "La validation des mises à jour garde MySQL actif entre les vérifications compatibles",
|
||||
"Choose normal logs, errors only or no server logs in maintenance settings": "Choisissez les journaux normaux, les erreurs uniquement ou aucun journal dans les paramètres de maintenance",
|
||||
"Diagnostic exports include launcher stages and lock owner records": "Les exports de diagnostic incluent les étapes de lancement et les propriétaires des verrous",
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Les contrôles de mise à jour et de restauration utilisent le port de connexion temporaire même si Windows en impose un autre"
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Les contrôles de mise à jour et de restauration utilisent le port de connexion temporaire même si Windows en impose un autre",
|
||||
"Custom Races patch installation recovers from interrupted downloads": "L’installation des races supplémentaires reprend les téléchargements interrompus"
|
||||
},
|
||||
"es": {
|
||||
"Choose Parallel or Global level scaling in module settings": "Elige escalado de nivel paralelo o global en los ajustes del módulo",
|
||||
@@ -154,7 +157,8 @@
|
||||
"Update validation keeps MySQL running between compatible checks": "La validación de actualizaciones mantiene MySQL activo entre comprobaciones compatibles",
|
||||
"Choose normal logs, errors only or no server logs in maintenance settings": "Elige registros normales, solo errores o ningún registro en los ajustes de mantenimiento",
|
||||
"Diagnostic exports include launcher stages and lock owner records": "Los archivos de diagnóstico incluyen las etapas del lanzador y los propietarios de bloqueos",
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Las comprobaciones de actualización y recuperación usan el puerto temporal de acceso aunque Windows indique otro"
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "Las comprobaciones de actualización y recuperación usan el puerto temporal de acceso aunque Windows indique otro",
|
||||
"Custom Races patch installation recovers from interrupted downloads": "La instalación de razas adicionales se recupera de descargas interrumpidas"
|
||||
},
|
||||
"zh": {
|
||||
"Choose Parallel or Global level scaling in module settings": "在模块设置中选择并行或全局等级缩放",
|
||||
@@ -193,7 +197,8 @@
|
||||
"Update validation keeps MySQL running between compatible checks": "更新验证会在兼容的检查步骤之间保持 MySQL 运行",
|
||||
"Choose normal logs, errors only or no server logs in maintenance settings": "在维护设置中选择普通日志、仅错误或关闭服务器日志",
|
||||
"Diagnostic exports include launcher stages and lock owner records": "诊断导出包含启动器阶段和锁所属进程记录",
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "即使 Windows 指定了其他端口,更新和恢复检查也会使用临时登录端口"
|
||||
"Update and recovery checks use the temporary login port even with a Windows override": "即使 Windows 指定了其他端口,更新和恢复检查也会使用临时登录端口",
|
||||
"Custom Races patch installation recovers from interrupted downloads": "自定义种族补丁安装可从中断的下载中恢复"
|
||||
}
|
||||
},
|
||||
"server": {
|
||||
@@ -244,7 +249,16 @@
|
||||
"Startup and shutdown keep bounded diagnostics of launcher stages": "При запуске и остановке сохраняется ограниченная по объёму диагностика этапов лаунчера",
|
||||
"Database shutdown succeeds when MySQL closes its connection before replying": "Остановка базы завершается успешно, если MySQL закрыл соединение до отправки ответа",
|
||||
"Server startup waits for ports that Windows is still releasing": "При запуске сервер ждёт, пока Windows освободит порт",
|
||||
"Companions avoid repeating unreachable routes in the open world": "В открытом мире спутники перестают повторять непроходимые маршруты"
|
||||
"Companions avoid repeating unreachable routes in the open world": "В открытом мире спутники перестают повторять непроходимые маршруты",
|
||||
"Login server startup works when Windows does not list its listening port": "Сервер входа запускается, даже если Windows не показывает его прослушиваемый порт",
|
||||
"Updated SQUID's Playerbots to 2.9.4 and refreshed Dungeon Clear": "Обновлены SQUID’s Playerbots до 2.9.4 и Dungeon Clear",
|
||||
"Electrocutioner is used up by Electrocute and no longer makes it look ready too early": "Electrocute расходует Electrocutioner и больше не выглядит готовым раньше времени",
|
||||
"The Dungeon Finder boss objective survives a relog": "Цель убийства босса в поиске подземелий сохраняется после повторного входа",
|
||||
"Vanilla dungeon bosses no longer sleep or mind control tanks and healers": "Боссы классических подземелий больше не усыпляют и не подчиняют танков и лекарей",
|
||||
"Classic dungeons scale only for Dungeon Finder groups": "Классические подземелья масштабируются только для групп поиска подземелий",
|
||||
"Darkmaster Gandling raises Risen Students only at 52% health": "Тёмный магистр Гандлинг поднимает восставших студентов только при 52% здоровья",
|
||||
"Sunken Temple's dragons appear only after the Avatar of Hakkar and Jammal'an": "Драконы Затонувшего храма появляются только после Аватары Хаккара и Джаммал’ана",
|
||||
"Scaled loot previews survive a map change": "Предпросмотр масштабированной добычи сохраняется при смене карты"
|
||||
},
|
||||
"de": {
|
||||
"Restrict new characters by custom race without changing existing characters": "Neue Charaktere nach zusätzlichem Volk beschränken, ohne bestehende Charaktere zu ändern",
|
||||
@@ -293,7 +307,16 @@
|
||||
"Startup and shutdown keep bounded diagnostics of launcher stages": "Start und Herunterfahren speichern begrenzte Diagnosedaten der Launcher-Schritte",
|
||||
"Database shutdown succeeds when MySQL closes its connection before replying": "Das Herunterfahren der Datenbank gelingt auch, wenn MySQL die Verbindung vor der Antwort schließt",
|
||||
"Server startup waits for ports that Windows is still releasing": "Beim Start wartet der Server, bis Windows den Port freigibt",
|
||||
"Companions avoid repeating unreachable routes in the open world": "Gefährten meiden in der offenen Welt wiederholte Versuche auf unpassierbaren Routen"
|
||||
"Companions avoid repeating unreachable routes in the open world": "Gefährten meiden in der offenen Welt wiederholte Versuche auf unpassierbaren Routen",
|
||||
"Login server startup works when Windows does not list its listening port": "Der Anmeldeserver startet auch ohne Eintrag seines lauschenden Ports in Windows",
|
||||
"Updated SQUID's Playerbots to 2.9.4 and refreshed Dungeon Clear": "SQUID’s Playerbots auf 2.9.4 aktualisiert und Dungeon Clear erneuert",
|
||||
"Electrocutioner is used up by Electrocute and no longer makes it look ready too early": "Electrocute verbraucht Electrocutioner und erscheint nicht mehr vorzeitig einsatzbereit",
|
||||
"The Dungeon Finder boss objective survives a relog": "Das Bossziel der Dungeonsuche bleibt nach erneutem Einloggen erhalten",
|
||||
"Vanilla dungeon bosses no longer sleep or mind control tanks and healers": "Bosse klassischer Dungeons versetzen Tanks und Heiler nicht mehr in Schlaf oder Gedankenkontrolle",
|
||||
"Classic dungeons scale only for Dungeon Finder groups": "Klassische Dungeons skalieren nur für Gruppen der Dungeonsuche",
|
||||
"Darkmaster Gandling raises Risen Students only at 52% health": "Dunkelmeister Gandling erweckt auferstandene Studenten erst bei 52 % Gesundheit",
|
||||
"Sunken Temple's dragons appear only after the Avatar of Hakkar and Jammal'an": "Die Drachen im Versunkenen Tempel erscheinen erst nach dem Avatar von Hakkar und Jammal’an",
|
||||
"Scaled loot previews survive a map change": "Die Vorschau skalierter Beute bleibt beim Kartenwechsel erhalten"
|
||||
},
|
||||
"fr": {
|
||||
"Restrict new characters by custom race without changing existing characters": "Restreignez les races supplémentaires des nouveaux personnages sans modifier les personnages existants",
|
||||
@@ -342,7 +365,16 @@
|
||||
"Startup and shutdown keep bounded diagnostics of launcher stages": "Le démarrage et l’arrêt conservent un diagnostic limité des étapes de lancement",
|
||||
"Database shutdown succeeds when MySQL closes its connection before replying": "L’arrêt de la base réussit même si MySQL ferme la connexion avant de répondre",
|
||||
"Server startup waits for ports that Windows is still releasing": "Au démarrage, le serveur attend que Windows libère le port",
|
||||
"Companions avoid repeating unreachable routes in the open world": "Les compagnons évitent de reprendre les chemins impraticables en monde ouvert"
|
||||
"Companions avoid repeating unreachable routes in the open world": "Les compagnons évitent de reprendre les chemins impraticables en monde ouvert",
|
||||
"Login server startup works when Windows does not list its listening port": "Le serveur de connexion démarre même si Windows ne répertorie pas son port d’écoute",
|
||||
"Updated SQUID's Playerbots to 2.9.4 and refreshed Dungeon Clear": "SQUID’s Playerbots passe en version 2.9.4 et Dungeon Clear est actualisé",
|
||||
"Electrocutioner is used up by Electrocute and no longer makes it look ready too early": "Electrocute consomme Electrocutioner et ne paraît plus disponible trop tôt",
|
||||
"The Dungeon Finder boss objective survives a relog": "L’objectif de boss de la recherche de donjons est conservé après reconnexion",
|
||||
"Vanilla dungeon bosses no longer sleep or mind control tanks and healers": "Les boss des donjons classiques n’endorment plus les tanks et soigneurs et ne contrôlent plus leur esprit",
|
||||
"Classic dungeons scale only for Dungeon Finder groups": "Les donjons classiques ne s’adaptent que pour les groupes de la recherche de donjons",
|
||||
"Darkmaster Gandling raises Risen Students only at 52% health": "Le sombre maître Gandling ne relève les étudiants qu’à 52 % de ses points de vie",
|
||||
"Sunken Temple's dragons appear only after the Avatar of Hakkar and Jammal'an": "Les dragons du Temple englouti n’apparaissent qu’après l’Avatar d’Hakkar et Jammal’an",
|
||||
"Scaled loot previews survive a map change": "L’aperçu du butin adapté est conservé lors d’un changement de carte"
|
||||
},
|
||||
"es": {
|
||||
"Restrict new characters by custom race without changing existing characters": "Restringe las razas adicionales de personajes nuevos sin modificar los existentes",
|
||||
@@ -391,7 +423,16 @@
|
||||
"Startup and shutdown keep bounded diagnostics of launcher stages": "El inicio y la parada guardan diagnósticos limitados de las etapas del lanzador",
|
||||
"Database shutdown succeeds when MySQL closes its connection before replying": "La parada de la base de datos se completa aunque MySQL cierre la conexión antes de responder",
|
||||
"Server startup waits for ports that Windows is still releasing": "Al iniciarse, el servidor espera a que Windows libere el puerto",
|
||||
"Companions avoid repeating unreachable routes in the open world": "Los compañeros evitan repetir rutas intransitables en el mundo abierto"
|
||||
"Companions avoid repeating unreachable routes in the open world": "Los compañeros evitan repetir rutas intransitables en el mundo abierto",
|
||||
"Login server startup works when Windows does not list its listening port": "El servidor de acceso arranca aunque Windows no muestre su puerto de escucha",
|
||||
"Updated SQUID's Playerbots to 2.9.4 and refreshed Dungeon Clear": "SQUID’s Playerbots se actualiza a 2.9.4 y se renueva Dungeon Clear",
|
||||
"Electrocutioner is used up by Electrocute and no longer makes it look ready too early": "Electrocute consume Electrocutioner y ya no parece disponible antes de tiempo",
|
||||
"The Dungeon Finder boss objective survives a relog": "El objetivo de jefe del buscador de mazmorras se conserva al volver a entrar",
|
||||
"Vanilla dungeon bosses no longer sleep or mind control tanks and healers": "Los jefes de mazmorras clásicas ya no duermen ni controlan mentalmente a tanques y sanadores",
|
||||
"Classic dungeons scale only for Dungeon Finder groups": "Las mazmorras clásicas solo se ajustan para grupos del buscador de mazmorras",
|
||||
"Darkmaster Gandling raises Risen Students only at 52% health": "El Maestro Oscuro Gandling solo alza a los estudiantes resucitados al 52 % de salud",
|
||||
"Sunken Temple's dragons appear only after the Avatar of Hakkar and Jammal'an": "Los dragones del Templo Sumergido solo aparecen después del Avatar de Hakkar y Jammal’an",
|
||||
"Scaled loot previews survive a map change": "La vista previa del botín ajustado se conserva al cambiar de mapa"
|
||||
},
|
||||
"zh": {
|
||||
"Restrict new characters by custom race without changing existing characters": "限制新角色可选的自定义种族,不影响现有角色",
|
||||
@@ -440,7 +481,16 @@
|
||||
"Startup and shutdown keep bounded diagnostics of launcher stages": "启动和关闭时会保留大小受限的启动器阶段诊断日志",
|
||||
"Database shutdown succeeds when MySQL closes its connection before replying": "即使 MySQL 在回复前关闭连接,数据库关闭操作也能正确完成",
|
||||
"Server startup waits for ports that Windows is still releasing": "服务器启动时会等待 Windows 释放端口",
|
||||
"Companions avoid repeating unreachable routes in the open world": "伙伴在开放世界中会避免反复尝试无法通行的路线"
|
||||
"Companions avoid repeating unreachable routes in the open world": "伙伴在开放世界中会避免反复尝试无法通行的路线",
|
||||
"Login server startup works when Windows does not list its listening port": "即使 Windows 未列出监听端口,登录服务器也能启动",
|
||||
"Updated SQUID's Playerbots to 2.9.4 and refreshed Dungeon Clear": "已将 SQUID’s Playerbots 更新至 2.9.4,并更新 Dungeon Clear",
|
||||
"Electrocutioner is used up by Electrocute and no longer makes it look ready too early": "Electrocute 会消耗 Electrocutioner,且不再过早显示为可用",
|
||||
"The Dungeon Finder boss objective survives a relog": "地下城查找器的首领目标在重新登录后仍会保留",
|
||||
"Vanilla dungeon bosses no longer sleep or mind control tanks and healers": "经典地下城首领不再使坦克和治疗者沉睡或受到精神控制",
|
||||
"Classic dungeons scale only for Dungeon Finder groups": "经典地下城仅对通过地下城查找器组成的队伍进行缩放",
|
||||
"Darkmaster Gandling raises Risen Students only at 52% health": "黑暗院长加丁仅在生命值降至 52% 时唤起复活的学生",
|
||||
"Sunken Temple's dragons appear only after the Avatar of Hakkar and Jammal'an": "沉没的神庙中的巨龙仅在哈卡的化身和迦玛兰之后出现",
|
||||
"Scaled loot previews survive a map change": "缩放后的战利品预览在切换地图后仍会保留"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1571,6 +1571,143 @@
|
||||
},
|
||||
"experimentalFeatures": [],
|
||||
"compare": "https://github.com/Corfirean/coa-server-build/compare/server-0.261030.90...server-0.261101.92"
|
||||
},
|
||||
{
|
||||
"tag": "server-0.261104.94",
|
||||
"version": "0.261104.94",
|
||||
"date": "2026-11-04",
|
||||
"url": "https://github.com/Corfirean/coa-server-build/releases/tag/server-0.261104.94",
|
||||
"notes": [
|
||||
"Companions avoid repeating unreachable routes in the open world",
|
||||
"Server startup waits for ports that Windows is still releasing",
|
||||
"Updated the reviewed CoA upstream snapshot"
|
||||
],
|
||||
"snapshot": "f67a6d8545e4c6ece2f819f9dd2642fe5a81a69c959946a1031859c19b5c4d74",
|
||||
"components": {
|
||||
"upstream": {
|
||||
"repository": "jealous-sound/azerothcore-wotlk-coa",
|
||||
"ref": "a34c5ad7167b6b2087a678cb4344c6cbe6abb823",
|
||||
"sha": "a34c5ad7167b6b2087a678cb4344c6cbe6abb823"
|
||||
},
|
||||
"core": {
|
||||
"repository": "Corfirean/azerothcore-wotlk-coa",
|
||||
"ref": "14cf375f1e006770b330d3fb89201ace54bfca24",
|
||||
"sha": "14cf375f1e006770b330d3fb89201ace54bfca24"
|
||||
},
|
||||
"bots": {
|
||||
"repository": "Corfirean/mod-coa-playerbots",
|
||||
"ref": "447558bc27d6bb447aaf10eefcb2e85ac2b15c32",
|
||||
"sha": "447558bc27d6bb447aaf10eefcb2e85ac2b15c32"
|
||||
},
|
||||
"scaling": {
|
||||
"repository": "Corfirean/mod-coa-content-scaling",
|
||||
"ref": "3c2febf636bd09087bb278e381b975271a70fdf6",
|
||||
"sha": "3c2febf636bd09087bb278e381b975271a70fdf6"
|
||||
},
|
||||
"manager": {
|
||||
"repository": "Corfirean/coa-server-manager",
|
||||
"ref": "173248efbe24da9b4c1b5ca12fa7580fcd1e8ea7",
|
||||
"sha": "173248efbe24da9b4c1b5ca12fa7580fcd1e8ea7"
|
||||
},
|
||||
"races": {
|
||||
"repository": "ilusixn/azerothcore-wotlk-coa",
|
||||
"ref": "coa-custom-1.9.2",
|
||||
"sha": "31bd63d309b8b0fb4f1a4d9b793a343b8ac36f1e",
|
||||
"assets": [
|
||||
{
|
||||
"name": "CoA-Custom-1.9.2-Client-1.zip",
|
||||
"size": 1513021586,
|
||||
"digest": "sha256:a9dd51ed2d90fb048d549602f40f5429d56e2df0df5606a38781b358fa369568",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/CoA-Custom-1.9.2-Client-1.zip"
|
||||
},
|
||||
{
|
||||
"name": "CoA-Custom-1.9.2-Client-2.zip",
|
||||
"size": 1198283005,
|
||||
"digest": "sha256:ab084a55509ccbcc2977a06dd0c01fa879973a1892baaacaeb3ff52f3dfc750e",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/CoA-Custom-1.9.2-Client-2.zip"
|
||||
},
|
||||
{
|
||||
"name": "CoA-Custom-1.9.2-Client-3.zip",
|
||||
"size": 1678829573,
|
||||
"digest": "sha256:907e267f0ee7038807e626c3c1eca5e12db6c88b747137a23c5fb52eaa1a358e",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/CoA-Custom-1.9.2-Client-3.zip"
|
||||
},
|
||||
{
|
||||
"name": "CoA-Custom-1.9.2-Client-4.zip",
|
||||
"size": 502385128,
|
||||
"digest": "sha256:e0bd87172af989fa50a8e2b08ba4321c72b6265047482f051a1db3b80d55bcaa",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/CoA-Custom-1.9.2-Client-4.zip"
|
||||
},
|
||||
{
|
||||
"name": "CoA-Custom-1.9.2-Client-5.zip",
|
||||
"size": 168079711,
|
||||
"digest": "sha256:73364ad1b58c6342641a848a3b20a835472834f600416606be1470386774ca78",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/CoA-Custom-1.9.2-Client-5.zip"
|
||||
},
|
||||
{
|
||||
"name": "CoA-Custom-1.9.2-Server.zip",
|
||||
"size": 53004560,
|
||||
"digest": "sha256:b893813573a4d3f6a0003c1f174582d3def997f37b402cbca44d53055d2fc1d2",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/CoA-Custom-1.9.2-Server.zip"
|
||||
},
|
||||
{
|
||||
"name": "INSTALL-GUIDE.txt",
|
||||
"size": 3006,
|
||||
"digest": "sha256:f17e97fafa3225901d1caf8c3b8141293f98fbfb8c9243c0c4717278c60146aa",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/INSTALL-GUIDE.txt"
|
||||
},
|
||||
{
|
||||
"name": "PATCH-NOTES-1.9.2.txt",
|
||||
"size": 2822,
|
||||
"digest": "sha256:f2fd4693ba181959a572d3fb10a0050e9ff6c4f735b3ab0019c7d16712db28cb",
|
||||
"url": "https://github.com/ilusixn/azerothcore-wotlk-coa/releases/download/coa-custom-1.9.2/PATCH-NOTES-1.9.2.txt"
|
||||
}
|
||||
]
|
||||
},
|
||||
"squid": {
|
||||
"repository": "Zyth45/mod-playerbots",
|
||||
"ref": "v2.8.2",
|
||||
"sha": "fa4cfd31997367b3e574a2b89b858c4669ff53fb",
|
||||
"patch": "patches/squid-coa-validation.patch",
|
||||
"patchSha256": "9b101db17369fb5a6af3f7e99323f7770eb8650ba3b5e9b3970bf09a0ef5d32f"
|
||||
},
|
||||
"build": {
|
||||
"repository": "Corfirean/coa-server-build",
|
||||
"ref": "d9aaa5263154473b2fe1623172492f88e6e03d73",
|
||||
"sha": "d9aaa5263154473b2fe1623172492f88e6e03d73"
|
||||
},
|
||||
"dungeon-clear": {
|
||||
"repository": "Zyth45/mod-dungeon-clear",
|
||||
"sha": "9a9d09cf512e0a883af9cda6973445b81c123b13",
|
||||
"patch": "patches/dungeon-clear-coa-validation.patch",
|
||||
"patchSha256": "956f278865e22ee75c984ca22ff8238150b5886c9934ddfe64dd9c832c912dcc",
|
||||
"ref": "9a9d09cf512e0a883af9cda6973445b81c123b13"
|
||||
},
|
||||
"navigation": {
|
||||
"repository": "Corfirean/azerothcore-wotlk-coa",
|
||||
"ref": "8b44099f480af0b69c6dfc697e4d388e865e9ffc",
|
||||
"sha": "8b44099f480af0b69c6dfc697e4d388e865e9ffc",
|
||||
"sourceRelease": "navigation-20261012",
|
||||
"manifestSha256": "7f28600735f115792e79a5e8d1c8d78a83a8f5ed14a090c6d87268e49c2bb683",
|
||||
"archiveSha256": "aa1347a095f85af44b4f592270a0e9314954801fda4578f0147f847e32c24a60",
|
||||
"assets": [
|
||||
{
|
||||
"name": "navigation.zip.001",
|
||||
"size": 1500000000,
|
||||
"sha256": "e3a93903fc8155ee0d92db399ec426769c360bef87c44c07beb7e21cfd892c18",
|
||||
"url": "https://github.com/Corfirean/coa-server-build/releases/download/navigation-20261012/navigation.zip.001"
|
||||
},
|
||||
{
|
||||
"name": "navigation.zip.002",
|
||||
"size": 1377006470,
|
||||
"sha256": "c1af26ba7f83676278613076c357c4da0a11cfa6ae1ff00003479057c4864471",
|
||||
"url": "https://github.com/Corfirean/coa-server-build/releases/download/navigation-20261012/navigation.zip.002"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"experimentalFeatures": [],
|
||||
"compare": "https://github.com/Corfirean/coa-server-build/compare/server-0.261101.92...server-0.261104.94"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"version": "0.9.9",
|
||||
"version": "0.9.10",
|
||||
"notes": [
|
||||
"Update and recovery checks use the temporary login port even with a Windows override"
|
||||
"Custom Races patch installation recovers from interrupted downloads"
|
||||
]
|
||||
}
|
||||
@@ -1,12 +1,17 @@
|
||||
{
|
||||
"core": "14cf375f1e006770b330d3fb89201ace54bfca24",
|
||||
"bots": "447558bc27d6bb447aaf10eefcb2e85ac2b15c32",
|
||||
"squid": "fa4cfd31997367b3e574a2b89b858c4669ff53fb",
|
||||
"core": "bd4263d26f99ff051017373e3b4fc35518b8df90",
|
||||
"bots": "0588a8e5cdfe54f81fe47bbb40fc9f75d29662e3",
|
||||
"squid": "75d1784f66f3c731340a96f72bfbd301974b6ab4",
|
||||
"dungeon-clear": "081a04f4208056dbb90717a5d10fe1e593943d5b",
|
||||
"notes": [
|
||||
"Server startup waits for ports that Windows is still releasing",
|
||||
"Normal Classic dungeons retain their authored damage at full party size",
|
||||
"Companions avoid repeating unreachable routes in the open world",
|
||||
"Updated the reviewed CoA upstream snapshot"
|
||||
],
|
||||
"dungeon-clear": "9a9d09cf512e0a883af9cda6973445b81c123b13"
|
||||
"Login server startup works when Windows does not list its listening port",
|
||||
"Updated SQUID's Playerbots to 2.9.4 and refreshed Dungeon Clear",
|
||||
"Electrocutioner is used up by Electrocute and no longer makes it look ready too early",
|
||||
"The Dungeon Finder boss objective survives a relog",
|
||||
"Vanilla dungeon bosses no longer sleep or mind control tanks and healers",
|
||||
"Classic dungeons scale only for Dungeon Finder groups",
|
||||
"Darkmaster Gandling raises Risen Students only at 52% health",
|
||||
"Sunken Temple's dragons appear only after the Avatar of Hakkar and Jammal'an",
|
||||
"Scaled loot previews survive a map change"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user