mode is only set when the user is automating (e.g. mode=default with
var_* overrides). The default bash -c curl invocation leaves mode empty
and shows the whiptail menu, so this check won't affect interactive use.
Check for missing token/URL only when mode is set AND there's no TTY,
so mode=default with a terminal still allows interactive prompts inside
the container.
Abort before build_container if mode is set (unattended) but no
runner registration token was provided. Avoids a 20+ minute container
build only to fail at the registration step.
forgejo-runner register writes .runner config to the current working
directory. The install script runs in a temp directory (via build.func),
so the config was lost on cleanup. The systemd service expects it in
/root (WorkingDirectory=/root), so cd there before registering.
core.func overwrites $HOSTNAME with a formatted emoji string for display
purposes, causing runner registration to send garbled ANSI codes as the
runner name. Use $(hostname) to get the actual system hostname.
CT script hardcoded the upstream URL for build.func, so the install
script was always fetched from upstream — ignoring fork/branch fixes.
Now respects COMMUNITY_SCRIPTS_URL override, consistent with how
build.func already handles this for all other resource fetching.
- Export app-specific variables (var_forgejo_instance, var_forgejo_runner_token,
var_runner_labels) in ct script so they survive lxc-attach into the container
- Replace nonexistent prompt_input_required/show_missing_values_warning calls
with standard read prompts that skip when variables are pre-set
- Add hard error when no runner token is provided
- Make runner labels configurable via var_runner_labels instead of hardcoded
- Update default runner image from node:20-bookworm to node:22-bookworm (Node 22 LTS)
- Add --ignore-engines to yarn install (web/ requires Node 18 exactly,
but works fine with Node 22 + --openssl-legacy-provider)
- Fix prompt formatting: use read -r -p inline instead of echo + read
- Apply same prompt fix to mongo-express addon
Move AI contribution guidelines from docs/AI.md to repo root AGENTS.md
following the open AGENTS.md standard (https://agents.md).
Most AI coding agents (Copilot, Codex, Cursor, etc.) automatically
discover and use AGENTS.md at the repo root.
MQTTX Web is a static browser-based MQTT client with no backend.
Makes more sense as an addon installable into any existing container
than as a dedicated LXC.
Addon installs into /opt/mqttx, builds web/ with yarn, serves via
Nginx on configurable port (default 8095). Supports install/update/uninstall.
Add bare-metal installation script for qdm12/ddns-updater with web UI
on port 8000, supporting 60+ DNS providers.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add NEXT_PUBLIC_ALLOW_CREDENTIALS=true to .env and export it during
build. Without this, only magic-link login is available which requires
SMTP configuration. Email+password auth allows registration without
any mail server.
Fleet requires Redis for live queries, async jobs, and distributed
locking. Without it the fleet serve process fails on startup.
- Install redis-server package
- Add FLEET_REDIS_ADDRESS=127.0.0.1:6379 to .env
- Add redis-server.service to systemd After/Requires
- Enable redis-server alongside fleet service
Puter: protocol was missing from config.json, causing origin to be
computed as 'undefined://IP:4100'. All API/WebSocket URLs inherited
this broken value, making the frontend unable to load.
Fleet: MySQL APT repo requires Debian 12 (Bookworm), not 13.
Puter requires services.database.engine in config.json. When the
config file is auto-generated it includes this, but our custom config
was missing it, causing: 'Must specify engine for service database'
and cascade failure of all services depending on the DB.
Next.js pre-renders pages during build. With POSTGRES_URL exported,
Server Components try to query DB tables that don't exist yet
(migrations run after build), causing the build to hang indefinitely.
Docker build does NOT set POSTGRES_URL and sets CI=true to skip env
validation. Match that behavior.
MariaDB fails on migration 20240905200000_UninstallPackages due to
SQL syntax incompatibility (MODIFY COLUMN ... NULL). Use real MySQL
with manual DB setup instead of setup_mariadb_db.
- Fix event_store.yaml migration path for LXC environment
- Add doctrine:database:create for both connections
- Run separate migrations for read_model and event_store entity managers
- Add messenger:setup-transports to create messenger_messages table
- Use $STD for all console commands
- Fix admin email in creds file
The single quotes around the spinel+hdlc+forkpty URL in the comment
example become part of the value when users copy it into the
double-quoted OTBR_AGENT_OPTS string, causing 'spinel interface name
is not supported' error.