Skip to content

app-builder 1.5.0 - First production 1.x release

Choose a tag to compare

@heetbeet heetbeet released this 06 Aug 15:02
bf798fa

app-builder 1.5.0

The first production app-builder 1.x release

app-builder 1.x is a clean, schema-first replacement for the accumulated conventions and build-script indirection in 0.x. Version 1.5.0 is the first release intended to be the public entry point for 1.x, and the first that a released 0.x launcher can forward into without upgrading the installed launcher first.

What changed from 0.x

One explicit project contract

Projects are defined by app_builder.yaml. The schema makes the application, Python runtimes, installer, file selection, remaps, hooks, release outputs, and publications explicit and validates unsupported or contradictory settings before an expensive build begins.

Configuration strings support ${...} interpolation, including references to other config values and controlled values from the environment, Git, and app-builder. This allows versions, filenames, tags, paths, and publication metadata to derive from one another without project-specific glue scripts.

Reproducible Python environments

A project can define a complete bundled Python runtime for the installed application and a separate development venv. Python is sourced as a complete Python.org runtime, including its matching Tcl/Tk files, and dependency materialization is driven by the project's lock and recorded build inputs. Python hooks use project-owned runtimes instead of assuming that Python exists on the user's PATH.

Multiple release outputs

One release can now produce and name several assets from a single configuration. Outputs may select the standard installer and payload, collect files created by hooks, or publish additional artifacts such as alternate installers, wheels, and standalone executables. GitHub publication uploads the configured output set rather than assuming one installer per version.

A smaller, stronger build pipeline

The lifecycle has explicit phases for dependency materialization, pre-distribution work, payload selection, archive creation, installer assembly, post-distribution work, integrity metadata, and optional GitHub publication. Hooks receive documented app-builder environment values and run at defined points instead of relying on automatically discovered CMD files.

File remaps are validated before archiving. Paths cannot escape the archive root, collide after remapping, or replace app-builder-owned metadata. Locked Windows files can be staged before compression, and 7z output is kept suitably quiet for build logs.

A modern Windows installer

The generated installer uses the vendored ExeWrap launcher, a Windows-readable stored-ZIP outer layer, and either ZIP or 7z for the application payload. Projects can set the installer icon and run a general PowerShell-hosted pre-extraction hook before any installer files exist on disk.

The installer passes command-line arguments through to PowerShell safely, supports --yes and --no-wait, asks before interactive installation, and waits for Enter before closing when configured. It handles clean installs, same-version reinstalls, upgrades, recognized 1.x installs, and recognized legacy app-builder installs while refusing unrelated non-empty target directories.

Installed applications receive shortcuts, an installation manifest, a colocated uninstaller, and a Windows Installed Apps registration. Uninstall hooks have defined before-removal and after-removal behavior; post-uninstall entry points are preserved long enough to run after the rest of the application is gone. PATH and other application-owned integrations can therefore be removed cleanly.

Release integrity and GitHub publication

app-builder release produces the payload, installer, manifest, SHA-256 inventory, release notes, and every configured additional output. Publication preflight checks the Git root, clean worktree, package/release version identity, tag target, artifact set, embedded payload and manifest, and checksums before upload.

app-builder release-gh uses gh.exe for authentication and GitHub Releases. It creates or updates the release, removes stale assets, uploads exactly the configured publication set, and preserves explicit pre- and post-publication hooks.

A deliberate 0.x transition

The installed 1.x CLI still supports app-builder 0.x <args> through a fully isolated bundled legacy runner.

The reverse direction is new in 1.5.0: a released 0.x launcher can select 1.5.0, install that tag's root requirements.txt, and be redirected into the checked-out 1.x source. The compatibility package is inert outside the exact legacy versions/<ref>/venv layout and does not replace or modify the outer 0.x installation.

A migrated project can therefore keep this minimal legacy selector:

app_builder: 1.5.0
# Compatibility shim for app-builder 0.x. The real configuration is app_builder.yaml.

The complete 1.x project remains in app_builder.yaml; legacy config behavior does not leak into the 1.x parser.

Getting started

app-builder --help
app-builder init
app-builder deps
app-builder release --version 1.0.0
app-builder release-gh --version 1.0.0 --no-draft

app-builder --help prints a link to the complete installed HTML reference, including the full annotated configuration template.

Production validation

The 1.x pipeline has been exercised against simple projects, a multi-runtime/multi-asset complexity clone, app-builder's own installer, and the full Autory migration. For the 1.5.0 compatibility acceptance test, the published app-builder v0.19.0 installer was installed in an isolated Windows profile and its real launcher was run from Autory. It selected 1.5.0, created and reused the legacy version cache, and displayed the current 1.x help successfully.

The app-builder test suite, MyPy, Black, Linux matrix, and generated Windows installer checks passed for the merged release commit.

Built from commit bf798fa85fac5190c8c2a9688fd9bc3dfb84410b.

Assets

  • app-builder-1.5.0-installer.exe - ready-to-run Windows installer (sha256:cd3acc607a69809345142524c95f7de47050c97b3c9e4576c32e1a6adf2ef343)
  • app-builder-1.5.0.7z - application payload (sha256:758c9202a1d174d86c51b671b866009e14047f695441ef9115656dbba685bcdc)
  • app-builder-1.5.0-manifest.json - exact installer and payload contract (sha256:4cbc4cabe6705b636d00ed4cd1019ad835c3fc4ec001e596a1985081b7998b40)
  • app-builder-1.5.0-SHA256SUMS.txt - published integrity inventory (sha256:a303ddb7139cfc76ec0b57d6ee97ca92d1afbd0d9f19db4771b117c1916319e2)