Skip to content

Releases

v3.3.2

Choose a tag to compare

@github-actions github-actions released this 06 Nov 15:25

Removed

  • Obsolete LocalValetDriver.php template. New projects no longer get a Valet driver.

Fixed

  • Node requirement matches the scaffolded toolchain: ^22.12.0 || >=24.0.0 in engines and the README (was >=22 / "Node.js >= 18"), as Vite 8 and vite-plugin-static-copy 4.1 need.

v3.3.1

Choose a tag to compare

@github-actions github-actions released this 17 Sep 11:16

Fixed

  • The scaffolded .htaccess no longer forces HTTPS or strips www. out of the box. Active by default, the rules broke plain-http hosts (local dev, reverse proxies that don't send X-Forwarded-Proto). They now ship commented out — uncomment them once the production host serves HTTPS.

v3.3.0

Choose a tag to compare

@github-actions github-actions released this 08 Sep 14:36

Added

  • submoduleAddons[].branch — track a branch instead of the remote HEAD (git submodule add -b <branch>), e.g. to install an addon from an open PR's head branch.

Changed

  • Preset custom prompts (templateReplacements) are pre-filled with the answers saved in .viterex-state.json, even when the reuse offer is declined.

Fixed

  • Re-running on a completed install no longer drops and half-rebuilds the database. isSetupComplete checked for setup: true in config.yml, which in Redaxo means "setup mode active" — a finished setup:run writes setup: false, so the guard never fired. A re-run backed up and dropped the DB, then re-ran setup:run, which skipped the system addons because the stale var/cache/core/config.cache still listed them as installed, leaving rex_user_role, rex_media, … missing (yform then failed with Table 'rex_user_role' doesn't exist). The check is inverted, and the retry path now clears the Redaxo cache dir before setup:run.
  • The saved-answers offer now works with the same command line that created the project. Passing --preset (or --layout, --pm, --lang, --timezone) suppressed the offer entirely; now a flag only suppresses it when it disagrees with the saved value.
  • create-viterex <existing-dir> from a parent folder targeted the wrong directory. In augment mode projectDir was process.cwd() instead of the named directory, so the state file wasn't found and the install would have landed in the parent folder.
  • A failed install:download no longer aborts the whole addon loop. The addon is skipped (install/activate/plugins included), the remaining addons are installed, and the failures are listed in a warning at the end of the task. Background: redaxo.org lists some addons twice under the same version with a dead download path (e.g. navbuilder 1.0.6), which makes install:download fail with a checksum error every time.

v3.2.1

Choose a tag to compare

@github-actions github-actions released this 19 Aug 06:54

Fixed

  • Default preset: the scaffolded @source "/src/…" globs resolved as absolute
    filesystem paths and matched nothing — Tailwind's default whole-project scan
    carried projects implicitly and tokenized docs/markdown prose into bogus
    class candidates (spurious tailwind-clamp build warnings). The template now
    uses @import "tailwindcss" source(none) with stylesheet-relative globs
    (incl. src/assets/js), making scanning explicit-only and deterministic.

v3.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Aug 20:30

Added

  • Bun is now a supported package manager — and the default when installed. bun joins pnpm/yarn/npm across the full flow: the PM prompt (listed first, with a (not installed) hint on missing PMs), the --pm flag, presets, dep install, the interactive upgrade step (bun update --interactive --latest), the browserslist refresh (per-PM dlx runner: bunx / pnpm dlx / npx), and the generated deploy.php (chosen PM pinned as the first commandExist check, existing chain kept as fallback). The default is auto-detected: bun on PATH → bun, else pnpm. The chosen PM is also stamped into the project package.json as "packageManager": "<pm>@<version>" before the first install, and a PM resolved via --pm or a preset that isn't installed now fails fast before the pipeline starts instead of mid-run.
  • A completed install can be re-run without re-entering answers. .viterex-state.json now persists in the project after a successful install (it was previously deleted). When the interactive flow finds one in the target directory, it offers to reuse the saved answers — running the full pipeline with the previous config (idempotent tasks skip what's already done). Declining answers prompts as usual; --config and --resume are unaffected.

Fixed

  • .viterex-state.json is no longer committed into the scaffolded repo. The state file — which contains the DB and Redaxo admin passwords — was tracked by the initial git add -A and then deleted from disk, leaving the credentials in git history (and on the remote when a git provider was configured). initGitRepo now merges .viterex-state.json into the project .gitignore (idempotent, covers fresh and augment installs) before anything is committed. Existing projects need a one-time git rm --cached .viterex-state.json plus a gitignore entry.
  • --pm no longer silently overrides preset packageManager. The flag had a commander hard default of "pnpm", so the documented precedence (flag > preset > prompt) never held — the PM prompt was dead code and a preset's packageManager could never take effect. The default is gone; --pm only wins when actually passed.
  • loadState no longer crashes on an unparseable state file — it warns and starts fresh.

v3.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 12:40

Changed

  • Node >=22 is now required (engines was >=18; Node 18 and 20 are EOL). Needed for util.styleText and stable fs.cp.
  • Four dependencies dropped, replaced by Node stdlib (−189 lines net): ora (unused — the pipeline uses @clack/prompts' spinner), chalk (→ util.styleText), fs-extra + @types/fs-extra (→ node:fs/promises, with a minimal src/utils/fs.ts providing pathExists/readJSON/writeJSON). Runtime deps are now just @clack/prompts, commander, execa.
  • getLatestRedaxoVersion now uses global fetch (native redirect handling + AbortSignal.timeout) instead of hand-rolled node:https.

Fixed

  • CI workflow no longer fails at the pnpm cache step (ERROR packages field missing or empty). Local dev on pnpm 11 wrote pnpm-11-style config (allowBuilds) into pnpm-workspace.yaml, which the workflows' pinned pnpm 9 rejects. The pnpm version is now pinned once via package.json's packageManager field (pnpm@11.13.0) and both workflows let pnpm/action-setup read it. CI also runs Node 24 (was 20) to match engines.

v3.0.1

Choose a tag to compare

@github-actions github-actions released this 04 Aug 09:54

Fixed

  • README no longer carries the alpha-release warning — the note and @alpha install commands lingered from the pre-release phase and showed on npmjs.com for the stable 3.0.0.

v3.0.0

Choose a tag to compare

@github-actions github-actions released this 04 Aug 09:49

First stable release of the v3 rewrite (TypeScript pipeline, presets, viterex_addon stubs).

Changed

  • Default deployment template overhauled (templates/deploy/deploy.php.tpl): configurable $removeOnRelease list of dev-only files pruned from each release, conditional assets_install, and general cleanup of the generated deploy.php.

Fixed

  • Restored the {{DEPLOYER_EXTRAS}} / {{DEPLOYER_EXTRAS_CLEAR_PATHS}} placeholders in the deploy template. The deployment-setup update had replaced them with a hardcoded require of deployer.task.release.metanet.php (a MASSIF-preset file), so any non-MASSIF project with deploy enabled got a deploy.php that fataled on a missing file, and preset deployerExtras were copied but never wired in. Extras are again injected per preset; the MASSIF preset output is unchanged.

v3.0.0-alpha.3

v3.0.0-alpha.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Jun 19:16

Added (2026-06-02)

  • pnpm dev now diffs ydeploy migrations around the Vite dev server when ydeploy is installed. A new pipeline task (src/tasks/patch-dev-script.ts, "Patch dev script for ydeploy") rewrites the project package.json dev script from "vite" to "<console> ydeploy:diff && cross-env NODE_ENV=development vite && <console> ydeploy:diff", so schema changes made during development surface as migrations both before Vite starts and after it exits. <console> is layout-aware (bin/console in modern, redaxo/bin/console in classic / classic+theme); cross-env already ships as a devDependency in viterex_addon's stub package.json. "ydeploy installed" is read from disk (the addon's package.yml), covering both a fresh install (ydeploy is part of the always-included baseline) and an augmented existing install. The task runs after Apply preset files (the default preset overwrites the stub package.json verbatim, so the patch must land on the final file) and before the initial commit. Idempotent and surgical: only the exact stub/preset "dev": "vite" value is rewritten, so a re-run or a customised dev script is left untouched. New pure helper src/utils/patch-dev-script.ts (unit-tested); ordering locked in src/__tests__/pipeline-order.test.ts (task count 18 → 19).

v3.0.0-alpha.2

v3.0.0-alpha.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Jun 13:32

Added (2026-06-02)

  • A preset can extend the project .gitignore instead of clobbering it. A top-level .gitignore in a preset's filesDir is now append-merged into the project .gitignore (only the missing patterns, under an # Added by preset '<name>' header, idempotent) rather than copied verbatim — mirroring the package-deps.json → package.json merge. The baseline .gitignore is owned by viterex_addon (stubs/.gitignore.example, merged during viterex:install-stubs); the preset now layers on top of it. Nested per-directory .gitignore files still copy verbatim (full-path check, not basename). New pure helper src/utils/merge-gitignore.ts (mirrors viterex_addon's StubsInstaller::mergeGitignore); wired into src/tasks/apply-preset-files.ts. For ignores that apply to every project, add them to viterex_addon's stubs/.gitignore.example instead.

Added (2026-05-29)

  • Presets can pre-fill — and thereby skip — any installer prompt. A preset.json may now set any scalar installer field (redaxoVersion, redaxoServerName, redaxoAdminUser/redaxoAdminPassword/redaxoAdminEmail/redaxoErrorEmail, redaxoLang, redaxoTimezone, skipDb, dbHost/dbPort/dbName/dbUser/dbPassword, packageManager, setupDeploy, skipGit, gitProvider/gitNamespace/gitRepoName, withTower, verbose, forcePush). When the preset supplies a value the matching prompt is skipped and a one-line Using values from preset '<name>': … summary is logged. Previously these fields existed on ViterexConfig but were never read from a preset (only redaxoLang/redaxoTimezone/layout/withTower/filesDir/addons/seed/installer/deployer fields were), so e.g. a preset's redaxoAdminEmail was silently ignored and prompted for anyway. Precedence is CLI flag > preset value > prompt/default. New pure, unit-tested resolver src/utils/resolve-preset-values.ts; PresetConfig (src/types.ts) extended with the fields and CliOptions moved there for shared use; src/prompts.ts now loads the preset right after the project-name prompt so all later prompts can be skipped. Notes: the git remote resolves per field — empty gitProvider ("") = no remote; a non-empty gitProvider configures a remote with gitNamespace from the preset (else prompted) and gitRepoName always prompted (default: project name) unless the preset pins it; an omitted gitProvider runs the normal opt-in flow. dbName stays prompted (per-project) unless the preset sets it; a preset redaxoAdminPassword is honoured only if it meets Redaxo's 8–4096-char rule, else ignored with a warning and prompted. The --config <path> path is unchanged.

Fixed (2026-05-29)

  • git status is clean immediately after install. The Git initial commit task is now the last file-touching step in the pipeline (src/pipeline.ts). Previously Build frontend (Vite output) and the browserslist refresh ran after the commit, leaving the freshly-scaffolded working tree dirty. Build frontend now runs before the commit (and absorbs the npx update-browserslist-db@latest refresh that used to live in Show next steps, each step warn-and-continue); the remote push, browser open, and next-steps message run after the commit and touch no tracked files. git init still runs early (before Add submodule addons, which needs .git); only the commit moved. Task count unchanged (18); names unchanged, so --resume is unaffected. New ordering test: src/__tests__/pipeline-order.test.ts.

Changed (2026-05-19)

  • A preset's frontend now installs through the generic filesDir overlay. The short-lived dedicated frontendDir task was folded into Apply preset files: a preset directory whose tree mirrors the project (src/…, public/…) is copied verbatim, and a package-deps.json placed in it is merged into the project package.json (additive, higher-version-wins) before the dependency install instead of being copied. New helper src/utils/merge-package-deps.ts. Consumed by the external viterex-massif-preset repo ("filesDir": "frontend").