Files
sanspie d436311f69 Stage 11i4: signed self-updates for Aego and exported games (D362)
update core: signed release.json (Ed25519) per channel, ETag check, resumable download with sha256, Auto/Ask/Off policy, appliers for the install.sh layout, AppImage, NSIS installer (keeps the replaced setup.exe for Restore) and .app, trial run with rollback.
Editor and launcher: banner, status bar, Help commands, Task Center download, install on restart.
CLI: aego update, aego release keygen|manifest, aego export --release-json.
Games: modules/update with update { url publicKey }, settings and the aego/update script API.
release.sh refuses to publish without AEGO_RELEASE_KEY and AEGO_UPDATE_KEY; install.sh lays out versions; make test-update runs a real v1 -> v2 update.
2026-10-26 19:36:15 +03:00

1.8 KiB
Raw Permalink Blame History

id, summary
id summary
aego/update Находит более новую версию игры на её сервере обновлений, скачивает её и перезапускает игру на ней.

Игра обновляет себя, если в project.aego указаны её сервер обновлений и ключ, которым подписаны её релизы:

update {
  url="https://example.com/mygame/updates"
  publicKey="<публичный ключ из aego release keygen>"
}

На сервере по папке на канал, stable/release.json и nightly/release.json, у каждого свой release.json.sig. aego export --release-json пишет оба файла рядом с архивом экспорта. Игра проверяет обновления при запуске; в режиме «Автоматически» она скачивает новую версию в фоне, а в окне настроек появляются Обновления и Канал обновлений. Без верной подписи и контрольной суммы ничего не устанавливается. В песочнице нет сервера обновлений, поэтому для этого примера нужен проект.

Пример

package demo

import (
    "aego/log"
    "aego/update"
)

script UpdateBanner {
    var shown bool

    func Update(dt float) {
        if !shown && update.State() == "ready" {
            shown = true
            log.Info("version " + update.Version() + " is ready: " + update.Notes())
        }
    }

    func Restart() {
        if update.State() == "ready" {
            update.Apply()
        }
    }
}