Skip to content

v2.0.0: labs from the online library, clean first start, labs kept on update

Choose a tag to compare

@Specops13 Specops13 released this 20 Oct 15:42
· 26 commits to main since this release

Updating from 1.7.x-1.9.x: Settings > Updates > Install update (patch, 180 KB). Your labs, results, walkthrough
progress, snapshots and faults are kept; the formerly built-in labs are copied from the old program files on the first
start (no network needed). After a full download they are restored from the lab library automatically.

New installs start with no labs and a short welcome screen: one click installs the recommended starter set.

The app now ships without labs; every lab comes from the online lab library. This is a behaviour change for new
installs (a first start has no labs), hence 2.0.0. Existing users keep everything, and the runtime is unchanged, so
1.7.x-1.9.x installs update in place with the small patch.

Changed

  • No labs in the downloads. The 19 former built-in labs (including the EVPN walkthrough) moved from
    encorlab/labs/ to labsrc/ and are published as packs in the lab library (labs/, with sha256, size, version, RAM
    estimate and a recommended starter set in labs/index.json). The Windows zip, Linux tar.gz, .deb and patch contain no
    labs, and the example packs folder (example-packs/) is gone from the downloads too.
    • Honest numbers (1.9.0 -> 2.0.0, bytes): Windows zip 26,577,567 -> 26,489,377 (-86 KB, -0.3%), Linux tar.gz
      33,453,768 -> 33,398,858 (-54 KB, -0.2%), .deb 27,876,152 -> 27,824,844 (-50 KB, -0.2%), patch 276,109 -> 184,693
      (-89 KB, -33%). The labs were only ~300 KB uncompressed; the downloads are dominated by the Python runtime and
      libraries. The big win is a clean start: a new user picks what they want instead of facing 19 labs at once.
  • Courses list library labs instead of relying on built-in ones. Install all (library) installs a course plus every lab
    it lists that you don't have; importing a course file does the same when online.
  • Delete lab keeps the lab's results history by default (it links up again when you re-install the lab); the UI asks
    whether to delete the history too (DELETE /api/user-labs/<id>?clear_history=true).
  • The library accepts plain http only for a library on localhost (for local mirrors and testing); https elsewhere.

Added

  • A clean welcome screen on the first start (no labs yet): three choices side by side. Start with the basics
    (recommended) lists the six starter labs with their RAM estimate and total download size, and installs them in one
    click with Install recommended starter set. Follow a course opens Browse library & courses, and Got a lab
    file?
    imports a .encorlab file. Empty filters are hidden, and a hint points to Settings while no CML server is set.
    When the library can't be reached, a plain "can't be reached right now" note offers Try again (technical details below
    it); everything else keeps working offline.
  • Library view: sizes, RAM estimates (red RAM heavy tag), starter and installed vN tags, Install starter set,
    per-course Install all (N labs), and Update available / Update to vN / Update all when the library has a newer
    lab version (version: in lab.yaml, compared numerically). The lab list and lab page show update available too.
  • Settings > Library URL (library_url, ENCOR_LIBRARY_URL); empty means this repository.
  • Keeping the labs 1.x bundled (encorlab/migrate.py): on the first start of 2.x an existing installation gets
    every formerly bundled lab back under the same id.
    • Updated by patch: copied from the old program files still on disk (the runtime's bundled 1.x app code or an
      installed 1.x patch, newest copy wins). Works offline.
    • Updated by full download: installed from the library in the background. Until then a banner offers Restore now /
      Dismiss (CLI: encorlab library restore).
    • History, reports, walkthrough progress, snapshots, faults and exams are never touched, and an existing lab folder is
      never overwritten. Fresh installs are detected and skip all of this.
  • CLI: library install --starter | --all | --updates, library restore; library list shows size, RAM, installed /
    update and the starter set; list on an empty install explains how to get labs.
  • API: POST /api/library/install-set (starter / ids / updates), GET /api/migration, POST /api/migration/restore,
    POST /api/migration/dismiss; /api/labs adds version, library, update_available and migration.
  • packaging/build_library.py validates every lab strictly, writes versions and the starter set (labsrc/library.yaml)
    and refuses a changed lab pack whose version: was not raised.
  • Tests: first run, starter set, course Install all, offline, updates, version ordering, delete-keeps-history, every
    library pack installs and validates, and migration (patch, bundled runtime copy, full download, offline, broken
    source lab, never overwriting, background restore, dismiss). The smoke test now starts with no labs and installs the
    starter set and a course from a library served on 127.0.0.1. A new packaging/migration_test.py runs both update
    paths against the real 1.9.0 and 2.0.0 builds (passed on Linux and on Windows under Wine).
  • Developers: ENCOR_BUILTIN_LABS_DIR=labsrc uses the lab sources in place (the test suite does this).

Docs

  • README (first start, library, updating from 1.x), lab authoring guide (version:, publishing in the library, courses
    with library labs), AI prompt (version: guidance) and the JSON Schema (version description).