Skip to content

Releases: AutoActuary/app-builder

app-builder 1.9.2

Choose a tag to compare

@heetbeet heetbeet released this 02 Oct 12:39
436571f

app-builder 1.9.2

Installer reliability updates:

  • Stage the new installation beside the destination, then replace whole directories instead of overwriting live files.
  • Check replacement by renaming the old directory and restoring its name in finally. Retry restoration three times; if it remains blocked, retain that moved directory as the recovery backup and continue.
  • Locked old DLLs and harmless legacy leftovers warn without failing a successful upgrade. Cleanup removes what it can without following junction targets.
  • Failed replacement offers interactive retry with close-app/restart guidance. Unattended --yes and --no-wait runs never prompt.
  • Preserve recovery backups when rollback cannot finish, keep per-run logs, and wait for uninstall completion. External project-hook changes are not rolled back.
  • No runtime C# compilation, native process inspection or optional lock-diagnostic dependency.

Built from 436571f51b548b59fb851f835eba85a0b6973d71. Full local Windows suite: 277 passed, 2 skipped. Windows and Linux CI passed. Directory checks also passed under Windows PowerShell 5.1.

This release supersedes the withdrawn 1.9.0 and 1.9.1 releases. Their Git tags remain available for reproducibility.

app-builder 1.8.1

Choose a tag to compare

@heetbeet heetbeet released this 09 Sep 12:08
76082de

app-builder 1.8.1

This bugfix release fixes managed app-builder version setup on shared caches, including SMB shares where files appear owned by another account.

Fixed

  • Git no longer rejects app-builder's managed cache repositories solely because their reported owner differs from the runner's user. The exemption applies only to specific cache repositories and individual Git commands. No global Git settings are changed.
  • If a requested version cannot be resolved, the error now includes Git's underlying explanation instead of only reporting a missing ref.
  • Cloning and fetching from the shared source repository now use its existing cache lock.

This affects version selection through app_builder_version. It does not change application packaging or the opt-in Python environment caches introduced in 1.8.0.

Anyone who can modify your cache can change code that app-builder runs.

Fixes #91 through PR #96.

Downloads

Run app-builder-1.8.1-installer.exe to install or upgrade. Use --yes for unattended installation. The .7z asset is the application payload, not the complete installer. Checksums and the build manifest are included.

Assets

  • app-builder-1.8.1.7z (sha256:206e874b9acc6714b4a0e34b6cb609d9f848113d6eacb5f8507b52a70e911933)
  • app-builder-1.8.1-installer.exe (sha256:d6dbe0bd4155f4af23ad376729dee900fbeda84a20699b1037840604a54df72c)
  • app-builder-1.8.1-manifest.json (sha256:2fdeb9c38cdcc450d1f77d93f3786d1d00ec7c8fbfcd04a3ec2cfff57c5956e0)
  • app-builder-1.8.1-SHA256SUMS.txt (sha256:3b5c040bf15e5d932cf6b4f08a80220073811cf31edca8fa5eb144473d06c8fe)

app-builder 1.8.0

Choose a tag to compare

@heetbeet heetbeet released this 09 Sep 10:46
0da2295

app-builder 1.8.0

This release adds opt-in Python environment caching for repeated CI builds. Existing builds behave as before unless you enable it.

Speed up Python setup

env:
  APP_BUILDER_CACHE_PYTHON_BIN: '1'
  APP_BUILDER_CACHE_PYTHON_VENV: '1'

Enable either independently. BIN caches bundled Python and its dependencies; VENV caches the development environment. Continue using app-builder deps, release and release-gh normally.

Matching caches speed up fresh environment creation. Every pre/post hook still runs. Existing developer environments retain their normal updates and added packages.

app-builder cache info
app-builder cache clear python-bin
app-builder cache clear python-venv

Clear removes saved environments, not live ones, and does not force a rebuild. Both caches share a 5 GiB storage target. A corrupt archive or failed runtime check warns and falls back to normal setup.

What to know before enabling it

  • Caches match the dependency lock, Python configuration, platform and app-builder version, not branch names or checkout locations.
  • VENV caching does not detect custom changes that hooks make to bundled Python before venv creation. After such changes, clear python-venv and recreate the environment, or disable VENV caching.
  • Use trusted storage. Disposable CI runners need their CI cache service to preserve the cache between jobs.
  • The bundled HTML help includes the controls and recovery guidance.

Validation

The change was tested with the full Windows suite and focused cache tests covering restoration, corruption, unsafe archive paths, concurrent saves, clearing, eviction, hook order and developer-added packages. A real Python fixture also verified relocated interpreters and pip-generated launchers.

In that small local fixture, fresh setup with both cache hits took 4.25 seconds versus 19.59 seconds without caching. Populating both caches took 89.72 seconds. These are fixture results, not an Autory CI benchmark or a performance guarantee.

Implemented in PR #100.

Downloads

Run app-builder-1.8.0-installer.exe to install or upgrade. Use --yes for unattended installation. The .7z asset is the application payload, not the complete installer. Checksums and the build manifest are included.

Assets

  • app-builder-1.8.0.7z (sha256:5ae91c0149428e42e7f874da4461e1633b045c950286c50720efd09c68506ddd)
  • app-builder-1.8.0-installer.exe (sha256:df672829090bb51cd1d0caf08619cab124c7c2684e463a0fd137265171310991)
  • app-builder-1.8.0-manifest.json (sha256:b374f009a6f9e313d8c00da2eaa3679386850a1eed267b8b5f0722f5dc0278d6)
  • app-builder-1.8.0-SHA256SUMS.txt (sha256:a6c764cad402ba16b45d701f16f0aba9778e3e69424d353f61994f416a34030c)

app-builder 1.7.3

Choose a tag to compare

@heetbeet heetbeet released this 08 Sep 08:42
2ac6a49

app-builder 1.7.3

Built from commit 2ac6a4920f199fae62bf97bef23883e5442377f6.

Changes

  • Merge pull request #99 from AutoActuary/codex/python-command
  • Support app-builder Python commands and borrowed worktree runtimes

Assets

  • app-builder-1.7.3.7z (sha256:21b65426fb6b3ab05e279f7c9e84043ad4a1f02d66f81f0cb5f0088fe8073206)
  • app-builder-1.7.3-installer.exe (sha256:2020d6d9c5dbabef60fcde67eedbb8a6f9bede8ef0d2b28a3a41c7caab39d1d9)
  • app-builder-1.7.3-manifest.json (sha256:585eff50ae55e127c67e812be9e0fb9ca799260c1d683e9c5d0fcf235b59e96a)
  • app-builder-1.7.3-SHA256SUMS.txt (sha256:cb6b1d8e392b3096e7598ab8a4b2ed0a79831de415bb5a9595caa3cdc1368f80)

app-builder 1.7.2

Choose a tag to compare

@heetbeet heetbeet released this 04 Sep 09:11
37a5826

app-builder 1.7.2

Built from commit 37a582636e94b9a21c4b88879a406bb1da66d06d.

Changes

  • Merge pull request #98 from AutoActuary/codex/release-1.7.2
  • Prepare app-builder 1.7.2
  • Merge pull request #97 from AutoActuary/codex/pre-lock-hook
  • Add dependency lock lifecycle hooks
  • Merge pull request #95 from AutoActuary/codex/payload-selection-stability
  • Make payload exclusion filtering linear
  • Merge pull request #94 from AutoActuary/codex/heal-existing-launchers
  • Heal stale launchers in existing runtimes
  • Merge pull request #93 from AutoActuary/codex/release-1.7.1
  • Prepare app-builder 1.7.1
  • Merge pull request #92 from AutoActuary/codex/relocatable-python-launchers
  • Make Python environments additive and relocatable
  • Merge pull request #87 from AutoActuary/blikbrein/issue-86-lock-check
  • Blikbrein: keep one maintained HTML guide
  • Blikbrein: add read-only lock checking

Assets

  • app-builder-1.7.2.7z (sha256:627872ba572919999beeea298bce9bd71dec9d268507e90821342e0610e63bc5)
  • app-builder-1.7.2-installer.exe (sha256:d595833b787ff1211612d6d5df575687c394c2f599c07915f2614006cd303052)
  • app-builder-1.7.2-manifest.json (sha256:3f4a5360072bba07cbc201572aca44ea3ac1bda4bdde0d47c440dbb9d7c5ecd8)
  • app-builder-1.7.2-SHA256SUMS.txt (sha256:e220dc7639caee49def64dcda862eeeaff1031f3215997b09c57e529577f8597)

app-builder 1.7.1

Choose a tag to compare

@heetbeet heetbeet released this 03 Sep 21:23
459879b

app-builder 1.7.1

app-builder 1.7.1 fixes the two rough edges in managed Python environments that surfaced during real project migration: developer virtual environments are now additive, and Python command launchers remain valid after an application is moved or installed elsewhere.

What changed

Developer-owned virtual environments

python_venv is now updated in place. app-builder installs or updates the packages declared by the project, while leaving unrelated packages that the developer added to the environment intact. New environments are created directly at their configured final path, and incompatible environments are rebuilt with restoration on failure.

Relocatable Python launchers

Windows executables generated by pip and distlib now resolve Python relative to the launcher instead of embedding the build machine's absolute path. Existing stale launchers are repaired whenever app-builder prepares the runtime, and a runtime hook applies the same behavior to launchers installed later.

This covers both managed runtimes:

  • bundled Python launchers resolve ..\python\python.exe;
  • virtual-environment launchers resolve their adjacent python.exe.

More reliable Windows replacement

Runtime replacement retries the specific transient sharing and access failures Windows can produce while releasing files. The retry is bounded, and unrelated failures are still reported immediately.

Stable large-project packaging

Payload exclusion filtering is now linear rather than repeatedly traversing every selected path. This fixes the native crash found while rehearsing app-builder's own 6,570-file release and makes large payload selection substantially faster.

Verification

  • 255 automated tests pass locally.
  • Black and MyPy pass across the maintained source and test suites.
  • All six GitHub PR checks pass, including the Windows installer acceptance job.
  • The published installer was installed locally over the managed app-builder installation. The installed CLI reports 1.7.1, carries its HTML help, and registers version 1.7.1 with the expected uninstaller in Windows Installed Apps.

Built from commit 459879b7eaf4091472ba4d970aa1d6af307b6b5e.

Downloads

  • app-builder-1.7.1-installer.exe: normal Windows installer
  • app-builder-1.7.1.7z: payload archive
  • app-builder-1.7.1-manifest.json: exact payload manifest
  • app-builder-1.7.1-SHA256SUMS.txt: published checksums

app-builder 1.7.0

Choose a tag to compare

@heetbeet heetbeet released this 27 Aug 17:20
8a4e694

app-builder 1.7.0

This is the audit-driven hardening release for the app-builder 1.x line. It turns the findings from the public 1.6.0 code audit into tested installer, publication, dependency, runtime, schema, performance, and packaging fixes.

Start with the readable change record

Download and open app-builder-1.6.0-code-audit.html for the finding-by-finding account.

The filename identifies the release that was audited. The document now preserves every original P1, P2, and P3 finding beside an Implementation summary explaining the fix shipped in 1.7.0, plus the final verification record. It is the clearest way to review what changed and why.

Highlights

  • Hardens installer upgrades, rollback, archive containment, path collisions, shell integration, and release identity.
  • Binds GitHub publication to the verified repository, commit, tag, draft state, manifest, payload, installer, and checksums.
  • Makes managed versions and the bundled 0.x bridge deterministic from committed dependency locks.
  • Tightens Python runtime selection, extraction, architecture checks, and Pydantic/schema compatibility.
  • Aligns the canonical schema, generated schema, templates, output contracts, and publication assets.
  • Removes major payload-selection performance bottlenecks and keeps clean builds quieter and easier to diagnose.
  • Packages the full HTML help and audit documentation with the installable application.
  • Standardizes new projects on app_builder.yaml; ambiguous legacy config names are rejected instead of silently shadowed.

Verification

The remediation branches passed Black, MyPy, Python 3.11, 3.12, and 3.13, plus the Windows installer workflow. The final 1.7.0 installer was also built from the merged 1.x head, installed locally over the previous version, and verified for CLI version, manifest provenance, packaged help, packaged audit documentation, and Windows Installed Apps registration.

For normal installation, download app-builder-1.7.0-installer.exe. The payload, manifest, and checksum inventory are included for inspection and automated use.

app-builder 1.6.0

Choose a tag to compare

@heetbeet heetbeet released this 07 Aug 10:25
c7dfafb

app-builder 1.6.0

app-builder 1.6.0 is a backward-compatible feature release focused on smoother Windows distribution and more predictable repeated builds.

What is new

Shortcut icons travel with the application

Start Menu shortcuts can inherit installer.icon without repeating the path in every shortcut. app-builder now includes that icon automatically in the payload, follows file remaps correctly, and leaves Windows to choose its normal fallback when no icon is configured.

Reusable, configurable caches

Python.org runtimes and ExeWrap downloads now use a concurrency-safe, user-level cache with digest validation and atomic promotion. Managed version checkouts share the same cache contract, while pip and Poetry retain their native defaults unless you configure them.

Use the new diagnostics to see the effective paths:

app-builder cache path
app-builder cache info

Set APP_BUILDER_CACHE_ROOT to relocate app-builder-owned caches. Existing explicit pip and Poetry cache environment variables remain authoritative.

Clear end-user installation guidance

The shipped help now describes the supported Windows installer flow, PATH behavior, upgrades, verification, Windows Installed Apps registration, and removal. Editable pip installation remains documented as a development workflow rather than the normal way to install app-builder.

Install or upgrade

Download and run app-builder-1.6.0-installer.exe. It installs per-user without requiring a separate Python installation and upgrades an existing app-builder installation in place.

For unattended installation:

.\app-builder-1.6.0-installer.exe --yes --no-wait

Verify afterward with:

app-builder --version
app-builder --help

Compatibility

This release retains the explicit app-builder 0.x compatibility bridge and the 0.x runner-forwarding support introduced in 1.5.0. Existing 1.x configurations remain valid.

Validation

  • 215 local tests
  • Black and MyPy clean
  • GitHub Actions on Python 3.11, 3.12, and 3.13
  • Windows CI builds, installs, exercises, and uninstalls a real installer
  • Local upgrade from installed 1.4.0 to 1.6.0
  • Same-version reinstall
  • Exact published installer digest installed successfully
  • Installed CLI, HTML help, cache commands, PATH entry, and Windows Installed Apps registration verified

Built from commit c7dfafbfa79529605bc942dd9bb7dcaf17a81945.

Assets

  • app-builder-1.6.0-installer.exe: standard Windows installer
  • app-builder-1.6.0.7z: payload archive
  • app-builder-1.6.0-manifest.json: complete installed-file manifest
  • app-builder-1.6.0-SHA256SUMS.txt: checksums for the published artifacts

Full changes: 1.5.0...1.6.0

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)

v0.19.1

Choose a tag to compare

@BartJan142 BartJan142 released this 06 Mar 09:29
61b6a2f

Full Changelog: v0.19.0...v0.19.1

Add bugfix to startmenu shortcuts