The step uses a generic DOCKER_REDEPLOY_WEBHOOK_URL secret and is not
Portainer-specific — any redeploy webhook endpoint works. Rename the step
label, echo line, and warning to reflect the generic nature.
Three separate things sink portable-Python-on-Windows VBS launchers,
all learned from a debugging session where a wled-screen-controller
shortcut silently did nothing:
1. wscript parses .vbs as ANSI — any UTF-8 byte (em-dash, smart quote,
even in a comment) triggers a dialog that lies about the cause:
"Not enough memory resources are available to complete this
operation." It's actually an encoding parse failure.
2. LF line endings parse inconsistently across WSH versions. Always
normalize to CRLF.
3. pythonw.exe has null stdout/stderr; libraries that touch those at
startup (uvicorn, structlog) can crash silently before the first
log line. python.exe with WshShell.Run cmd, 0, False gives real
stream handles attached to a hidden window — same visual result,
reliable startup.
Also added a build-script snippet that normalizes the VBS
automatically so nobody has to remember these rules.
Two cooperating bugs we hit in production caused a Pillow version
mismatch error on in-place upgrades. Documenting both so future
projects do not reproduce them.
- Section 4.3: removed the "delete .py, keep .pyc" snippet (no
compileall step ever ran, so the dist shipped with no .py and no
.pyc — every package's submodules were unimportable). Added a
warning box and the correct compileall -b pattern.
- Section 6: NSIS Core section now shows explicit RMDir /r of payload
dirs before File /r. NSIS File /r is a merge, not a replace, so
upgrades produce half-old/half-new site-packages.
- Section 14: new troubleshooting entry "Pillow / package version
mismatch on upgrade" with the symptom, both root causes, and a
file-state table showing how the mismatch arises.
Bare labels like 'dev' or 'nightly' break pip/setuptools when
stamped into pyproject.toml. Add a regex check that falls back
to 0.0.0.dev0 with a warning, plus a callout explaining the
gotcha.
Describes a workflow_dispatch-triggered build.yml that produces
CI artifacts without creating a Gitea release. Useful for testing
builds before tagging.
- Section 10: Single source of truth via pyproject.toml + importlib.metadata,
CI version stamping, Docker build args, updated fallback chain
- Section 11: Release provider abstraction, PEP 440 version normalization,
install type detection, update service pattern, NSIS silent install,
portable ZIP/tarball swap scripts, API endpoints, frontend integration
Document the VBS wrapper approach for launching Windows apps
without console window flash. Update NSIS example to prefer
VBS over direct bat execution.
Add ::warning:: annotation and fallback to fetch existing release
when tag already has a release. Add troubleshooting section for
re-triggering failed release workflows. Fix markdown lint warnings.