Commit Graph
224 Commits
Author SHA1 Message Date
Michael BiancoandGitHub 7ffd2ca139 docs: add changelog page and generation task (#671)
- Add changelog generation task to fetch releases from GitHub and format them for documentation
- Integrate changelog into reference navigation and upgrade script
- Update search highlight colors to purple matching active state

Generated-by: aiautocommit
2026-07-31 16:43:32 -06:00
Michael BiancoandGitHub 392d3fef96 feat: respect dockerignore on initial source load (#373)
* docs: add claude ref to agents

* refactor: simplify DockerignoreContext passing and make it required

* refactor: another take at fixing the initial docker ignore load stuff

* style: whitespace formatting tweaks

I'm not sure how it got into this state :/

* fix: apply dockerignore rules when copying local app context, not later in the build process

* fix: merge dockerignore excludes with top-level railpack.json excludes/includes

* test: top-level railpack.json exclude/include

* docs: update excluding files docs

* test: add negation to an existing dockerignore to expand test coverage

* fix: hack to determine if I'm understanding the llb exclude functionality right

* refactor: remove Includes and instead use negation operators and Excludes

* test: respect dockerignore on initial source load

- Apply exclude and include filters during the initial buildkit context load to improve local build performance
- Support top-level exclude and include configurations in railpack.json

Generated-by: aiautocommit

* feat: respect dockerignore on initial source load

- Load local source layers using the plan package directly to ensure .dockerignore patterns are respected at the buildkit level.
- Prevent unnecessary loading of ignored files like node_modules and virtual environments during local builds.

Generated-by: aiautocommit

* style: formatting updates

* docs(config): update documentation for dockerignore and exclude pattern handling

Generated-by: aiautocommit

* feat(plan): respect dockerignore on initial source load

Generated-by: aiautocommit

* refactor(core): access include rules directly from layer struct

Generated-by: aiautocommit

* feat(buildkit): respect exclude patterns on initial source load

- Apply exclude patterns at the buildkit level during local context loading to prevent transferring unnecessary large directories like node_modules or virtual environments.

Generated-by: aiautocommit

* feat: respect dockerignore on initial source load

Generated-by: aiautocommit

* feat(core): respect dockerignore on initial source load

- Expose the parsed dockerignore context via the build generate context
- Ensure build results preserve the correct dockerignore metadata and excludes on initial load

Generated-by: aiautocommit

* style(docs): fix trailing whitespace in CLAUDE.md

Generated-by: aiautocommit

* feat(core): respect dockerignore on initial source load

- Apply exclude and include filters during buildkit context setup to avoid loading large ignored directories locally.
- Support top-level exclude and include configuration in railpack.json.

Generated-by: aiautocommit

* test(plan): assert all expected empty dockerignore examples are found

Generated-by: aiautocommit

* docs(config): fix typo in excluding-files guide

Generated-by: aiautocommit

* feat(dockerignore): respect dockerignore on initial source load

- Apply exclude and include filters during Buildkit context establishment to drastically improve local build performance.
- Support top-level `exclude` and `include` rules directly in `railpack.json`.

Generated-by: aiautocommit

* docs(config): clarify directory matching behavior in excluding-files guide

Generated-by: aiautocommit

* refactor(core): remove dead dockerignore context fields

- Remove unused dockerignore context properties from build plans and options
- Clean up obsolete metadata checks in core tests

Generated-by: aiautocommit

* feat: add top-level exclude option to railpack config

Generated-by: aiautocommit
2026-07-31 07:41:35 -06:00
Michael BiancoandGitHub 012d2c2f10 feat(docs): improve table of contents loading and display (#667)
- Hide table of contents components when only a single heading exists
- Prevent initial transition flash on TOC progress indicators and dots
- Update sidebar scrollbar styling and hover behavior

Generated-by: aiautocommit
2026-07-31 07:37:59 -06:00
Michael BiancoandGitHub 60c281787d feat(node): support LTS version queries, use LTS as default node version (#650)
* feat(mise): support LTS version queries and improve version candidates

- Add support for resolving LTS and other non-semver version aliases in mise
- Introduce `versionQueryCandidates` to gracefully fall back from extracted semver to original version strings
- Add unit tests for LTS resolution and version query candidate generation

Generated-by: aiautocommit

* feat(node): update default Node version to lts

Generated-by: aiautocommit

* feat(mise): improve version resolution fallbacks and error messages

- Fallback to unconstrained release age queries when strict minimum age checks fail to respect pinned versions or custom configs.
- Include tried candidate versions in error messages to improve debugging when package lookups fail.

Generated-by: aiautocommit
2026-07-31 06:35:56 -06:00
Michael BiancoandGitHub 21014d7c7b docs: reorganize platform documentation and improve navigation (#665)
* docs(platform): update platform documentation links and paths

Generated-by: aiautocommit

* docs(platform-docs): improve FAQ clarity and formatting

Generated-by: aiautocommit

* docs(platform): add documentation for building with Railpack

Generated-by: aiautocommit

* docs(platform): add recommendations guide and update installation docs

Generated-by: aiautocommit

* feat(docs): enhance table of contents with animated progress indicator

- Add a custom `TableOfContents` component featuring a smooth SVG progress track and active indicator dot that tracks current page sections.
- Style starlight asides with a restrained purple brand tint and refine content panel spacing.

Generated-by: aiautocommit
2026-07-30 20:53:02 -06:00
Michael BiancoandGitHub 688d47507e docs(config): reorganize configuration docs and clarify schema usage (#662)
- Add a dedicated Configuration Options page to explain configuration methods and build plans
- Remove redundant user-config page and update documentation links
- Add editor setup guidance for JSON5 support and schema validation in railpack.json

Generated-by: aiautocommit
2026-07-30 06:58:19 -06:00
Michael BiancoandGitHub 86a454733c feat: add agent skill for railpack configuration and troubleshooting (#660)
- Add SKILL.md defining Railpack configuration, environment variables, overlay behavior, CLI usage, and local BuildKit container workflows.
- Document the Agent Skill installation instructions in the installation guide.

Generated-by: aiautocommit
2026-07-28 10:04:23 -06:00
Michael BiancoandGitHub 445d7f321c docs(bun): extract bun documentation into dedicated page (#658)
Generated-by: aiautocommit
2026-07-28 09:23:19 -06:00
Michael BiancoandGitHub c2a451dec7 docs(resolving-errors): add documentation for resolving Playwright errors (#659)
Generated-by: aiautocommit
2026-07-28 09:22:58 -06:00
Michael BiancoandGitHub 8a91cd686e docs: add mise GPG verification guidance (#657)
* docs: add guidelines for concise documentation writing

Generated-by: aiautocommit

* docs(node): document GPG verification settings and behavior

Generated-by: aiautocommit

* docs: add Gleam and C/C++ to supported languages list

Generated-by: aiautocommit
2026-07-28 09:07:24 -06:00
Michael BiancoandGitHub 94402f3684 feat(node,python): opt-in Playwright browser installation (#653)
* feat: automatically install packages required for playwright, and playwright browser

This reverts commit 2a5567ff09fa044cf391b1d79ecf1fe7846e8828.

* docs: update environment variable test configuration property name

Generated-by: aiautocommit

* docs(node): add production deployment guide link to start command help

Generated-by: aiautocommit

* feat(python-playwright): install playwright only when requested via env

- Enable Playwright browser installation conditionally using `RAILPACK_PYTHON_PLAYWRIGHT_INSTALL`.
- Update python-playwright example to test against example.com.

Generated-by: aiautocommit

* feat(python): make Playwright browser installation opt-in

- Require `RAILPACK_PYTHON_PLAYWRIGHT_INSTALL=1` to install Playwright browsers and their runtime dependencies automatically.
- Prevent unintended deployment size increases and breaking changes for existing users since automatic installation can cause issues.
- Add test coverage verifying opt-in behavior and production dependency resolution.

Generated-by: aiautocommit

* docs(python): document playwright install configuration variable

Generated-by: aiautocommit

* feat(node): add support for checking production-only dependencies

Generated-by: aiautocommit

* feat(node): make Playwright browser installation opt-in

- Restrict automatic Playwright detection to production dependencies and require an explicit environment variable to install browsers, preventing unexpected side effects for existing users.
- Add tests to verify Playwright installation behavior based on environment configuration.

Generated-by: aiautocommit

* docs: add unit testing guideline against testing log output

Generated-by: aiautocommit

* chore(deps): update playwright dependency to v1.60 in node-playwright example

Generated-by: aiautocommit

* feat(node,python): update Playwright runtime dependencies for Debian 12

- Align Playwright runtime dependencies with the official nativeDeps.ts list for Debian 12 Chromium.
- Ensure production runtime images include all required system libraries for Playwright without relying on builder-only installation flags.

Generated-by: aiautocommit

* feat(examples): navigate to example.com in playwright node example

Generated-by: aiautocommit

* docs(node): document opt-in Playwright browser installation

Generated-by: aiautocommit

* test(core): update test snapshots for playwright production-only dependencies

Generated-by: aiautocommit

* docs: add instruction regarding snapshot updates to PR template

Generated-by: aiautocommit

* feat(node): remove libatomic1 requirement for Node.js 25+

Generated-by: aiautocommit

* test(core): update playwright snapshots for mise version and apt caches

Generated-by: aiautocommit
2026-07-28 08:10:48 -06:00
Michael BiancoandGitHub e016c11725 feat(docs): adopt Railway-inspired design system (#655)
* feat(docs): add IBM Plex Serif and JetBrains Mono fonts

Generated-by: aiautocommit

* feat(docs): adopt railway-inspired theme and design tokens

- Add comprehensive color scales and design tokens adapted from Railway docs
- Configure custom typography and Expressive Code terminal frame styles in Astro configuration

Generated-by: aiautocommit
2026-07-28 07:16:02 -06:00
Michael BiancoandGitHub 1953766fb9 build(deps): upgrade Astro and Starlight packages (#652)
- Upgrade Astro to version 7.1.4 and Starlight to version 0.41.4.
- Update Tailwind integration, llms-txt, and page actions Starlight plugins to their latest compatible versions.

Generated-by: aiautocommit
2026-07-27 16:06:17 -06:00
Michael BiancoandGitHub 9e29507165 Improve docs code block styling (#651) 2026-07-27 15:53:20 -06:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>Michael Bianco
961af4b126 chore: mise update 2026.7.14 (#648)
* fix: update mise to 2026.7.14

* test: update snapshots

* chore: update go, mise, and bun packages

* test: update mise lock with latest version

* chore: update mise to 2026.7.14

Generated-by: aiautocommit

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Bianco <[email protected]>
2026-07-27 10:32:44 -06:00
Michael BiancoandGitHub ac1fbbafa3 feat(node): gracefully handle out of sync package-lock.json (#643)
* feat(node): add out-of-sync package-lock npm example

- Add new example demonstrating npm ci failure with an out-of-sync lockfile
- Include test configuration and documentation for the scenario

Generated-by: aiautocommit

* fix(node): fallback to npm install when lockfile is missing

- Always use `npm install` for npm projects to prevent build failures when `package-lock.json` is missing.
- Log a warning when the lockfile is absent to encourage generating one.
- Clean up outdated comments regarding package manifest parsing.

Generated-by: aiautocommit

* test(core): update test snapshots for npm install changes

Generated-by: aiautocommit

* feat(node): add npm ci recommendation and railpack example

- Document recommendations for preferring `npm ci` over `npm install` for Node.js projects using npm.
- Add a corresponding `railpack.json` example demonstrating how to configure deterministic installs with `npm ci`.

Generated-by: aiautocommit

* refactor(core): use npm ci in build plan for node npm examples

- Switch from `npm install` to `npm ci` for deterministic builds when package-lock.json is present.
- Remove redundant cache directory creation step.

Generated-by: aiautocommit

* feat(node): add suggestions for missing lockfiles

- Log suggestions when `package-lock.json` or `pnpm-lock.yaml` is missing to encourage deterministic installs.
- Update architecture documentation with guidance on committing `package-lock.json`.

Generated-by: aiautocommit

* test(core): update out-of-sync package-lock snapshot for builder changes

Generated-by: aiautocommit

* feat(node): allow overriding npm install command via config variable

Generated-by: aiautocommit

* docs(node): document RAILPACK_NODE_NPM_INSTALL environment variable

Generated-by: aiautocommit

* docs: recommend committing all package manager lockfiles

Generated-by: aiautocommit
2026-07-27 06:50:07 -06:00
Michael BiancoandGitHub 5814dcc0e6 feat(node): support SvelteKit with adapter-auto (#641)
* feat(node): add support for SvelteKit with adapter-auto

- Configure SvelteKit builds to force adapter-node output via GCP_BUILDPACKS variable
- Set appropriate start command for SvelteKit projects using adapter-auto
- Add test coverage for SvelteKit detection and configuration

Generated-by: aiautocommit

* test(examples): replace justBuild flags with specific test assertions

Generated-by: aiautocommit

* docs(guides): remove obsolete justBuild reference from developing-locally guide

Generated-by: aiautocommit

* refactor(tests): remove JustBuild test option and logic

Generated-by: aiautocommit

* refactor(node): update SvelteKit adapter-auto comment reasoning

Generated-by: aiautocommit

* feat(core): add start command and build variables to sveltekit build plan

Generated-by: aiautocommit

* chore: exclude tmp directory when staging updated snapshots

Generated-by: aiautocommit
2026-07-23 13:26:00 -06:00
Michael BiancoandGitHub 0be8db4ab1 fix(node): react router spa detection (#604)
* chore: update react router to v8 and modernize node infrastructure

- Bump React Router to v8.0.0 and update associated dependencies.
- Upgrade Node.js base image to v24.
- Simplify TSConfig and Vite configuration by utilizing native TSConfig path resolution.
- Add .env to gitignore.
- Ensure consistent scripting and environment settings across SPA and SSR examples.

Generated-by: aiautocommit

* feat(node): detect React Router SPA mode from config

Generated-by: aiautocommit

* test(node): improve React Router SPA detection and handling

Generated-by: aiautocommit

* chore(deps): update mise.dev.lock

Generated-by: aiautocommit

* docs(node): clarify SPA detection limitation and manual override

Generated-by: aiautocommit

* test(node): bind React Router preview server to IPv4 in SPA example

- Force preview host to 127.0.0.1 in Vite config and generation script.
- Prevent connection mismatch issues between prerender requests and the preview server.

Generated-by: aiautocommit
2026-07-23 12:34:14 -06:00
6b992e780a feat(build): support package overrides with spread operator (#645)
* test(node-puppeteer): add test case for package override bug

Generated-by: aiautocommit

* test(node-puppeteer): preserve default packages in custom config

- Use the spread operator in apt package overrides to retain required Puppeteer dependencies during tests.

Generated-by: aiautocommit

* feat(core): add pretty print style for deprecation logs

Generated-by: aiautocommit

* feat(generate): support package overriding with ... operator

- Add support for explicit package overrides using the `...` operator in `buildAptPackages` and `deploy.aptPackages`.
- Emit deprecation warnings when `buildAptPackages` is specified without `...` before transitioning to replacement behavior.
- Emit info logs when `deploy.aptPackages` replaces generated packages without `...`.

Generated-by: aiautocommit

* feat(logger): add suggestion log level with optional documentation links

Generated-by: aiautocommit

* refactor(generate): use suggestion log type for apt package warnings

Generated-by: aiautocommit

* docs(guides): document apt package override syntax using ...

Generated-by: aiautocommit

* test(generate): update apt packages deprecation and suggestion log assertions

Generated-by: aiautocommit

* feat(tasks): add optional case filter to integration test task

Generated-by: aiautocommit

* test(integration): increase timeouts for QEMU emulated workloads

- Extend container execution timeout from 2 to 3 minutes in integration tests
- Increase Puppeteer launch and navigation timeouts in the node-puppeteer example to prevent failures on emulated arm runners

Generated-by: aiautocommit

* test(node-puppeteer): skip amd64 override case on arm64

QEMU-emulated Chrome on GHA arm runners hangs past the container
timeout; native amd64 CI already covers the apt package override case.

---------

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-23 12:24:10 -06:00
Michael BiancoandGitHub 40c443f960 test(frontend): run e2e test on frontend image (#644)
* test: update railpack-builder and runtime versions in snapshots

Generated-by: aiautocommit

* feat(ci): add frontend integration test workflow

- Introduce a new workflow job to validate frontend builds using randomized examples.
- Implement a build plan generation step to ensure consistency during integration testing.
- Enable local image usage for frontend build testing within the CI pipeline.

Generated-by: aiautocommit

* build: pin docker version to v29.6.2 in CI workflows

- Update CI workflows to explicitly set up Docker v29.6.2.
- Bypass GitHub's default Docker 28 environment which uses the classic image store, ensuring compatibility with container-based merge operations used by Railpack.
- Introduce DOCKER_VERSION in mise.ci.toml for centralized management.

Generated-by: aiautocommit

* docs: update local development guide with build instructions

* Clarify local build workflow for the runtime image and frontend.
* Correct commands and configuration paths for consistency with current tooling.
* Update BuildKit integration instructions to reflect local registry requirements.

Generated-by: aiautocommit
2026-07-22 12:03:49 -06:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
3074961acc chore: mise update 2026.7.11 (#636)
* fix: update mise to 2026.7.11

* test: update snapshots

* chore: update go, mise, and bun packages

* test: update mise lock with latest version

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-21 15:50:12 -06:00
Michael BiancoandGitHub ba4ff74fbc feat(build): --no-cache build option (#516)
* feat: add --no-cache option to build subcommand

* docs: no cache docs

* refactor(buildkit): remove no-cache build option

* The no-cache option is no longer utilized in the BuildKit frontend logic.
* Updated documentation to reflect the removal of this parameter.

Generated-by: aiautocommit
2026-07-21 15:25:25 -06:00
Michael BiancoandGitHub 14a60ffdf8 feat(node): nx support (#606)
* feat(example): add node-nx-next workspace scaffold

- Initialize an Nx workspace with a Next.js application using pnpm.
- Configure workspace tooling including TypeScript, Prettier, and ESLint.
- Include a generation script to automate the workspace setup process.

Generated-by: aiautocommit

* feat(node): add BuildScriptContains helper to PackageJson

Generated-by: aiautocommit

* feat(node): add support for Nx workspaces with Next.js

- Implement Nx workspace detection and package resolution.
- Enable automatic Nx build commands when no root build script is detected.
- Add RAILPACK_NX_APP environment variable to support selecting specific apps in multi-app workspaces.
- Refactor Next.js detection logic to better support monorepo and Nx-inferred architectures.
- Include unit tests for Nx workspace detection and build/start command generation.

Generated-by: aiautocommit

* docs: add documentation for Nx monorepo support

- Explain how Railpack handles Nx workspaces, including automatic detection and support for inferred tasks.
- Document the new `RAILPACK_NX_APP` configuration variable to target specific apps in multi-app workspaces.
- Detail the build and start behavior for Next.js applications within an Nx context.

Generated-by: aiautocommit

* test: add snapshot for Nx Node.js and Next.js example

Generated-by: aiautocommit

* chore: bump railpack images and set version to dev

- Update builder and runtime images to mise-2026.7.7
- Include RAILPACK_VERSION environment variable in build plan

Generated-by: aiautocommit
2026-07-21 12:50:43 -06:00
Michael BiancoandGitHub 986e6ef89e feat: set RAILPACK_VERSION on runtime images (#633)
* test: update snapshots to include RAILPACK_VERSION environment variable

Generated-by: aiautocommit

* feat: add RAILPACK_VERSION to runtime environment variables

- Inject the Railpack version into the build plan to ensure it is available as an environment variable in the final runtime image for observability.
- Update documentation to reflect that this variable is automatically set.

Generated-by: aiautocommit
2026-07-21 07:24:30 -06:00
Michael BiancoandGitHub ba89e0a730 build: add Linux shell environment for Apple container machines (#628)
* feat: add linux shell environment task for Apple container machines

- Add `mise-linux-shell` task to manage a dedicated Alpine Linux container machine for tool isolation.
- Configure automatic bootstrapping for `mise` and `zsh` within the container.
- Implement Docker TCP proxying to allow the guest machine to interface with host Docker services.
- Update `mise.toml` cleanup task to include teardown for the machine and its network proxy.

Generated-by: aiautocommit

* docs: add documentation for running Linux container shell on macOS

Generated-by: aiautocommit
2026-07-14 13:12:29 -06:00
Michael BiancoandGitHub 71a021ca04 fix(mise): prevent host mise.toml from breaking version resolution (#627)
* feat: add .miserc.toml to gitignore and document local dev environment

- Ignore .miserc.toml to prevent accidental commits of local environment configurations.
- Update documentation to include the new workflow for loading development tools via mise.

Generated-by: aiautocommit

* chore: lock mise.toml environment versioning

Generated-by: aiautocommit

* fix(mise): prevent host config pollution by setting working directory

* Set the working directory for mise commands to the cache directory.
* Ensures that mise does not accidentally discover and apply local configuration files (like locked=true) from the host filesystem during operation.

Generated-by: aiautocommit

* docs(mise): add comment explaining cacheDir purpose

Generated-by: aiautocommit
2026-07-14 12:41:00 -06:00
Michael BiancoandGitHub 50761d3388 docs: improve contribution guidelines and developer workflow (#612)
* refactor: clean up comments regarding version precedence

- Remove redundant comments about "last write wins" and version precedence, as the implementation order is clear from the code.
- Update the documentation for UseMiseVersions to clarify its role in the overwrite process.

Generated-by: aiautocommit

* docs: update contribution guidelines and add pull request template

- Establish clear "Lifecycle of a Change" guide for developers
- Formalize AI contribution policy and developer expectations
- Add standard PR template to improve contribution quality and consistency
- Refine documentation for local setup, testing, and workflow processes

Generated-by: aiautocommit

* docs: update contribution guidelines

- Improve formatting of links and instructions.
- Add instructions to run snapshot updates before finishing work.

Generated-by: aiautocommit

* feat: add retry-cli and apply to buildkit startup

* Add retry-cli via mise to improve CI reliability.
* Wrap the buildkit startup command with retry to mitigate transient connection or service availability issues during integration tests.

Generated-by: aiautocommit

* chore: replace retry-cli with local mise task

* Remove external dependency `retry-cli` to reduce toolchain overhead.
* Add a custom task script to handle command retries with exponential backoff directly within the project.
* Enable `locked` mode in `mise.toml` to ensure consistent environment versions.

Generated-by: aiautocommit

* chore: disable mise lockfile enforcement

* Commented out `locked` in `mise.toml` to allow for dependency updates without constant lockfile synchronization during development.

Generated-by: aiautocommit
2026-07-13 14:31:33 -06:00
de1a4d3a9a feat(build): attach docker registry auth to solve session (#623)
* feat(buildkit): attach docker registry auth to solve session

BuildKit keeps no static credential store of its own; without credentials
attached to a solve session it cannot authenticate pulls/pushes against
private registries. Load the caller's docker CLI config ($DOCKER_CONFIG,
default ~/.docker/config.json) and attach an authprovider alongside the
existing secrets provider on every SolveOpt.Session.

* chore: update dependencies and promote docker/cli

- Bump tonistiigi/fsutil to latest version
- Move docker/cli from indirect dependency to direct to ensure proper resolution
- Add necessary indirect dependencies triggered by the update

Generated-by: aiautocommit

* docs: document docker registry authentication for build command

Generated-by: aiautocommit

* fix(buildkit): enable docker auth provider for private registries

- Add the docker auth provider to the buildkit session attachables to ensure the daemon can authenticate with private registries using local configuration.

Generated-by: aiautocommit

* docs: remove AI comment

---------

Co-authored-by: Wei Mingzhi <[email protected]>
2026-07-13 12:02:31 -06:00
3e53630854 feat: respect cache backend type for registry cache import/export, add cache support to build subcommand (#595)
* fix: respect cache backend type for registry cache import/export

* docs: update local development build instructions

- Update local image building to use the provided project task.
- Document the workflow for building with a local registry.
- Add examples for configuring buildctl with caching and debugging flags.

Generated-by: aiautocommit

* refactor(buildkit): clean up code comments and formatting

- Remove redundant comments and improve internal documentation.
- Fix minor formatting inconsistencies in code blocks and comment descriptions.

Generated-by: aiautocommit

* feat: add ParseBool utility to handle common boolean string variants

Generated-by: aiautocommit

* feat: integrate local registry and buildkit configuration

- Add buildkitd configuration to enable HTTP/insecure access to the local registry.
- Introduce a local registry service container on port 7890.
- Update the buildkit setup to mount the new registry configuration.
- Add tasks for building the frontend image and running project builds using the local registry and buildctl.

Generated-by: aiautocommit

* docs: update CLAUDE.md with architecture and style guidance

Generated-by: aiautocommit

* feat: add support for multiple cache-from and cache-to build flags

- Allow users to configure external cache sources and destinations via the `build` subcommand.
- Update cache parsing logic to support multiple entries matching the Docker buildx CLI format.
- Remove hardcoded default cache type to provide better control over BuildKit cache configurations.

Generated-by: aiautocommit

* test: add integration tests for cache-import parsing

Generated-by: aiautocommit

* refactor(buildkit): extract cache entry parsing logic

- Centralize cache configuration logic by moving loop-based parsing into a reusable `cacheEntriesFromFlags` helper.
- Improve code maintainability and readability by reducing duplication in `BuildWithBuildkitClient`.
- Add comprehensive unit tests for cache entry processing, including edge cases for flag parsing and empty inputs.

Generated-by: aiautocommit

* fix(test): remove unused buildkit cache flags from integration tests

* Remove unused flag variables that were meant for remote BuildKit caching.
* Ensure integration tests avoid remote cache (e.g., type=gha) to prevent exceeding GitHub Actions cache limits and excessive eviction.

Generated-by: aiautocommit

* test(buildkit): consolidate cache import tests

- Move TestParseCacheImports from its own file to frontend_test.go to consolidate related buildkit frontend tests.

Generated-by: aiautocommit

* style: fix indentation in build test helper

Generated-by: aiautocommit

* docs: document support for BuildKit cache backends

Generated-by: aiautocommit

* docs(developing-locally): add information on Docker, BuildKit, and caching

- Add missing setup prerequisites.
- Include debugging and configuration guidance for BuildKit/Docker.
- Clarify cache export and import implementation expectations in Railpack.

Generated-by: aiautocommit

* docs: clarify cache flag parsing and pnpm version logic

Generated-by: aiautocommit

---------

Co-authored-by: Matt Van Horn <[email protected]>

Co-authored-by: Michael Bianco <[email protected]>

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-13 11:15:16 -06:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
0d3e0a6b4f chore: mise update 2026.7.5 (#621)
* fix: update mise to 2026.7.5

* test: update snapshots

* chore: update go, mise, and bun packages

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-07-10 09:34:39 -06:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>Michael Bianco
2bfb71b385 chore: mise update 2026.7.2 (#618)
* fix: update mise to 2026.7.2

* test: update snapshots

* chore: update go, mise, and bun packages

* test: update mise lock with latest version

* fix: use musl install for mise on builder image

Generated-by: aiautocommit

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Michael Bianco <[email protected]>
2026-07-09 11:08:08 -06:00
Michael BiancoandGitHub 88e745d89e refactor(node): consolidate SPA framework detection (#603)
- Introduce `getSPAName` to centralize canonical framework identification.
- Remove redundant framework detection logic in `getRuntime`.
- Clean up metadata handling by removing unnecessary `nodeSPAFramework` entry.
- Improve SPA framework name normalization.

Generated-by: aiautocommit
2026-06-19 08:27:51 +02:00
95dd8cfb76 feat(node): Support NextJS SPAs (#602)
* feat: support NextJS SPAs

Co-authored-by: Michael Bianco <[email protected]>

* docs: add Next.js SPA support documentation

Generated-by: aiautocommit

* test: update snapshot

* chore(node-next-spa): update internal port for test configuration

Generated-by: aiautocommit

---------

Co-authored-by: Dillen Meijboom <[email protected]>
2026-06-18 14:57:44 +02:00
Michael BiancoandGitHub a90dc2c373 docs: add architecture pages and update contribution guidelines (#599)
* docs(node): add information about native module support

Generated-by: aiautocommit

* docs: add design goals documentation

Generated-by: aiautocommit

* docs(architecture): add design goals and recommendations pages

- Add navigation links for Design Goals and Recommendations to the documentation sidebar.
- Update Design Goals documentation to clarify core architectural principles, including an emphasis on zero-config defaults, failure visibility, and a preference for integration testing.

Generated-by: aiautocommit

* docs: add recommendations for environment and tooling configurations

Generated-by: aiautocommit

* docs: update contribution guidelines

* Remove stale project status section.
* Add policy against fully AI-generated pull requests.
* Link to external development workflow guide instead of hardcoding setup instructions.

Generated-by: aiautocommit

* docs: renumber design goals in documentation

Generated-by: aiautocommit
2026-06-18 12:20:44 +02:00
Michael BiancoandGitHub 73c31ee4ef feat(node): support conditional SPA index fallback (#582)
* fix(caddy): standardize and improve security in Caddyfile templates

- Standardize security headers and compression settings across Node and static file providers.
- Improve health check handling by using log_skip to reduce log noise.
- Implement custom error page support for static file deployments.
- Update documentation to reflect the default Caddyfile capabilities.
- Add Railway proxy range to trusted proxies for improved network compatibility.

Generated-by: aiautocommit

* test(example): add node-astro-static-404 reproduction case

- Create a new example project to reproduce static site behavior with custom 404 pages.
- Configure Staticfile with index_fallback set to false to test 404 handling.
- Include an integration test suite validating that unknown routes correctly return the custom 404 page.

Generated-by: aiautocommit

* feat(node): support conditional SPA index fallback

- Allow the Caddy configuration to disable index.html fallback for node SPA deployments.
- Expose an option to read `index_fallback` from a Staticfile, defaulting to true for Node SPA projects.

Generated-by: aiautocommit

* docs: document Staticfile index_fallback configuration for Node SPAs

Generated-by: aiautocommit

* test: update snapshot

* Revert "fix(caddy): standardize and improve security in Caddyfile templates"

This reverts commit 6c8f57f5149ca1cc84d04d8eded8cdf7a928a66d.

* refactor: rename static-404 example to spa-staticfile

- Renamed the node-astro-static-404 example to node-spa-staticfile to better reflect its purpose as a SPA configuration example.
- Added a readme explaining the use case for customizing SPA behavior via a Staticfile.

Generated-by: aiautocommit

* refactor(node): update SPA detection and deployment configuration

*   Include Expo in SPA detection logic to ensure consistent behavior.
*   Standardize framework naming capitalization.
*   Update index fallback lookup to use a generalized helper function.

Generated-by: aiautocommit

* refactor(staticfile): align index fallback logic with provider requirements

- Centralize index fallback resolution in GetIndexFallback to differentiate between user-defined values and defaults.
- Update the Staticfile provider to explicitly set the default to false while maintaining compatibility for node SPA implementations.
- Improve Caddyfile template documentation regarding SPA routing behavior.

Generated-by: aiautocommit

* chore: update build plan dependencies and environment variables

- Bump railpack-builder and runtime versions to 2026.6.11
- Update Caddy version to 2.11.4
- Add NPM_CONFIG_FETCH_RETRIES to node environment variables
- Improve Caddyfile SPA routing logic
- Rename snapshot file to reflect the correct test case target

Generated-by: aiautocommit

* test: update Caddyfile try_files comments in snapshots

Generated-by: aiautocommit

* feat(node): treat expo start as a default command

- Add DefaultExpoStartCommand constant to identify the default Expo start script.
- Update hasCustomStartCommand to exclude Expo's default command from the custom command check.
- Update tests to reflect that Expo default behavior is no longer considered custom.

Generated-by: aiautocommit

* test: update snapshot
2026-06-18 10:19:31 +02:00
Michael BiancoandGitHub ec1b056ade feat(node): add support for Expo SPA builds (#585)
* feat(expo-spa): scaffold initial expo spa project structure

*   Initialize core directory structure for expo-spa example.
*   Add theme management hooks and components to handle color schemes.
*   Include necessary assets for branding and UI components.
*   Setup initial configuration files and root layout.

Generated-by: aiautocommit

* feat(node): add support for Expo SPA builds

- Detect Expo projects using 'expo' and 'react-native-web' dependencies with static web output configured in 'app.json'.
- Automatically add a build command for 'expo export --platform web' when no build script is defined.
- Configure output directory resolution and runtime categorization for Expo applications.

Generated-by: aiautocommit

* docs: update documentation for Expo Web support and SPA build process

Generated-by: aiautocommit

* refactor(expo): remove default expo export command

- Remove the hardcoded Expo CLI export command.
- Rely on projects defining their own build scripts to maintain flexibility and alignment with standard Node provider patterns.

Generated-by: aiautocommit

* feat(expo): support static and single web output modes

- Update detection logic to include "single" output mode as a valid configuration for Expo SPAs.
- Add case-insensitive comparison for web output mode to ensure robustness.

Generated-by: aiautocommit

* test: add build plan snapshot for expo-spa project

Generated-by: aiautocommit

* docs: update Expo Web SPA mode detection criteria

Generated-by: aiautocommit
2026-06-17 21:47:43 +02:00
Michael BiancoandGitHub 2d4cbcacaa fix(node): increase npm fetch retries for build reliability (#598)
* feat(node): increase npm fetch retries for reliability

- Add NPM_CONFIG_FETCH_RETRIES=5 to environment variables to improve resilience against transient network failures during dependency installation.
- Update node documentation to reflect the new default configuration.

Generated-by: aiautocommit

* test: update snapshot
2026-06-17 19:55:57 +02:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
5c4d2fae46 chore: mise update 2026.6.6 (#593)
* fix: update mise to 2026.6.6

* test: update snapshots

* refactor: modernize code with go fix

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-14 09:05:06 +02:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
1ad71f968e chore: mise update 2026.6.5 (#592)
* fix: update mise to 2026.6.5

* test: update snapshots

* chore: update go, mise, and bun packages

* test: update mise lock with latest version

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-13 08:23:36 +02:00
Michael BiancoandGitHub dbed125d33 feat: configure en_US.UTF-8 locale in Debian images (#576)
* feat: configure en_US.UTF-8 locale in docker images

Generated-by: aiautocommit

* docs: add documentation for locale configuration

Generated-by: aiautocommit

* feat(tasks): add local build option to mise-builder-shell task

Generated-by: aiautocommit
2026-06-09 13:14:49 +02:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
daa9246bed chore: mise update 2026.5.18 (#572)
* fix: update mise to 2026.5.18

* test: update snapshots

* chore: update go, mise, and bun packages

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-01 09:57:55 +02:00
Michael BiancoandGitHub 58da3e15a3 feat(node): include corepack shims in runtime image for Node 25+ (#568)
* test(node): add node-pnpm-corepack-runtime example

- Introduce a new example project demonstrating Node.js 25+ integration with Corepack and pnpm.
- Includes a test specification to verify runtime version and execution flow.

Generated-by: aiautocommit

* docs(node): document node 25 corepack behaviors and constraints

- Explain the shift in corepack availability and requirement in Node 25+.
- Detail the directory structure for shims and the impact on the build process.
- Update maintenance documentation to include pnpm lockfile version mapping.

Generated-by: aiautocommit

* feat(node): ensure corepack binaries are available in runtime

* Include /mise/installs and /mise/shims in buildIncludeDirs when using corepack.
* This ensures that binaries like pnpm are correctly captured in the final image despite runtime mutations performed by corepack.

Generated-by: aiautocommit

* chore(test): update expectations for Node 25 and pnpm 11 in runtime test

Generated-by: aiautocommit

* feat(test): add mise paths to build plan snapshots

- Include `/mise/installs` and `/mise/shims` in the build plan snapshots to support mise-managed toolchains.
- Update pnpm-corepack-runtime snapshot to reflect current install and build command logic.

Generated-by: aiautocommit

* docs: add architectural documentation for input ordering and layering

Generated-by: aiautocommit

* refactor: rename example directory and bump node version

- Rename node-pnpm-corepack-runtime to pnpm-corepack-runtime-usage to better reflect its purpose.
- Update node engine version to v26 in example configuration.
- Update test expectation to match the new node version.

Generated-by: aiautocommit

* test: rename snapshot file for pnpm-corepack-runtime test

Generated-by: aiautocommit
2026-06-01 09:07:49 +02:00
Leo JeonandGitHub 30901c8ab3 Expose provider choices where users configure Railpack (#558)
The config schema did not enumerate provider values, and the configuration docs only described the field generically. Add explicit provider enum values to the generated schema, document the same values in the config file guide, and make provider lookup case-insensitive so lowercase documented values work for providers whose internal names are capitalized.

Constraint: Central Station bounty asks for provider names to be discoverable in docs and JSON schema

Rejected: Docs-only update | would leave railpack schema incomplete

Confidence: high

Scope-risk: narrow

Directive: Keep provider docs and schema enum aligned with core/providers/provider.go

Tested: go test ./core/config ./core/providers; bun run build in docs; go run ./cmd/cli schema shows provider enum; git diff --check

Not-tested: go test ./... fails on existing environment/snapshot drift: Caddy/FrankenPHP patch snapshots and missing BUILDKIT_HOST for integration tests
2026-05-30 14:06:15 +02:00
Michael BiancoandGitHub f99b48a960 feat(node): support package.json5 manifests (#566)
* feat(node): add support for package.json5

- introduce findPackageManifest to prioritize package.json over package.json5
- update dependency detection and installation logic to include package.json5
- ensure local file detection and workspace parsing support the new manifest format

Generated-by: aiautocommit

* feat(example): add node-pnpm-json5 project

* Add a new example project to demonstrate native pnpm support for package.json5 manifests.
* Include a test configuration to verify environment detection and CLI version reporting.

Generated-by: aiautocommit

* chore: bump node and pnpm versions in json5 example

Generated-by: aiautocommit

* test: add build plan snapshot for pnpm-json5 project

Generated-by: aiautocommit

* test: update snapshots

* chore(examples): update engine versions and test expectations

Generated-by: aiautocommit

* chore(deps): update pnpm-lock.yaml

Generated-by: aiautocommit

* docs: update mise configuration documentation and add package resolution notes

* Update the `install_before` setting name to `minimum_release_age` to match current configuration.
* Add clarification on how Railpack handles semver constraints from manifest files by simplifying ranges to major versions.

Generated-by: aiautocommit

* feat(example): log pnpm version in pnpm workspaces example

- Add checks for pnpm version via npm_config_user_agent and the pnpm CLI.
- Update test expectations to verify pnpm version reporting.

Generated-by: aiautocommit

* feat(node): support more pnpm lockfile version mapping

- Add support for pnpm lockfile versions 6.1 and 9.0 to ensure correct tool version detection.
- Refactor the lockfile version check into a switch statement to improve readability and maintainability.
- Add logging for cases where the pnpm lockfile version cannot be identified.

Generated-by: aiautocommit

* test(node): add tests for pnpm version resolution logic

- Verify that pnpm versions are correctly derived from pnpm-lock.yaml versioning.
- Ensure proper precedence hierarchy between lockfile, engines, and packageManager fields.

Generated-by: aiautocommit

* docs: move mise installation instruction to workflow section

Generated-by: aiautocommit

* fix(node): ensure engines.pnpm overrides lockfile version inference

- Reprioritize pnpm version resolution to prefer `engines` over lockfile-based inference.
- Lockfile version parsing can be ambiguous across major versions, whereas `engines` provides an explicit developer intent.

Generated-by: aiautocommit
2026-05-30 13:12:36 +02:00
Michael BiancoandGitHub 76d9036a33 chore: update mise 2026.5.16 (#564)
* fix: update mise to 2026.5.11

* test: update snapshots

* chore: update mise upgrade task to run locally

Use the --local flag for the mise upgrade task to ensure consistency with local environment configurations during dependency updates.

Generated-by: aiautocommit

* chore: update go, mise, and bun packages

* chore: update go, mise, and bun packages

* chore: update mise to 2026.5.15

- Update build plan snapshots to use mise version 2026.5.15 across all test examples.

Generated-by: aiautocommit

* chore: update mise to 2026.5.15

Generated-by: aiautocommit

* chore: ignore .antigravitycli directory

Generated-by: aiautocommit

* chore: update mise 2026.5.11

Generated-by: aiautocommit

* chore: update better-sqlite3 dependency version

Generated-by: aiautocommit

* feat(test): add example for testing npm native dependencies with node-lts

Generated-by: aiautocommit

* fix: do not run rdoc when compiling ruby

this fixes a locale issue which causes the build to fail

* chore: update python version in examples to 3.13.3

no GH attestations for 3.13.1

Generated-by: aiautocommit

* chore: bump better-sqlite3 in examples

Generated-by: aiautocommit

* chore(node): update pnpm path to include bin directory

Generated-by: aiautocommit

* chore: update railpack-builder and runtime to mise 2026.5.16

Generated-by: aiautocommit

* chore: bump mise version to 2026.5.16

Generated-by: aiautocommit

* chore: update mise to 2026.5.16

- Update mise CLI command structure for improved task execution.
- Includes upstream bug fixes and stability improvements.

Generated-by: aiautocommit

* feat(node): update pnpm path layout for version 11+

- Adjust the pnpm binary path detection to account for changes in pnpm v11, which uses a /pnpm/bin directory layout.
- Introduce version checking to ensure backward compatibility for older pnpm versions.
- Add unit tests to verify path resolution for various version scenarios.

Generated-by: aiautocommit

* chore(node): update pnpm home paths and versioning logic

Generated-by: aiautocommit

* chore: update python-freethreaded example configuration

Generated-by: aiautocommit

* feat: add mise-builder-shell task

- Adds a new task to facilitate debugging by spawning a shell inside the published builder container image.

Generated-by: aiautocommit

* test(python): fix fasthtml example

I have no idea why this wasn't caught before...

* chore: update mise configuration to 2026.5.16

- Set MISE_MINIMUM_RELEASE_AGE to match the builder default.
- Correct the mise setting key from `install_before` to `minimum_release_age`.

Generated-by: aiautocommit

* chore: ensure uv is installed when using pipx.uvx in mise

Generated-by: aiautocommit

* chore: update mise 2026.5.16

- Sync environment variables from the Elixir provider to the mise installation step to ensure installation consistency.

Generated-by: aiautocommit

* feat(node): prioritize mise-managed package manager versions

- Allow mise to override inferred package manager versions for pnpm, bun, and yarn.
- Ensure consistent version resolution between Railpack and user-defined mise environment settings.
- Update node provider logic to correctly identify and use package manager tool names from mise.

Generated-by: aiautocommit

* chore: update test configuration for pnpm 11 compatibility

- Enable stderr allowance in tests to accommodate pnpm 11 command logging behavior.

Generated-by: aiautocommit

* chore: update example env configuration for mise compatibility

- Replace python3-venv with dnsutils for build-time apt testing.
- Add python to RAILPACK_PACKAGES to ensure pipx and other requirements function correctly within the mise environment.
- Update build and start commands to verify the availability of the new packages and validate expected scoping.

Generated-by: aiautocommit

* chore: update test snapshots for mise 2026.5.16

- Update snapshot files to reflect changes in build plan generation, including the addition of `uv` to Python environments, corrected pathing for pnpm, and updated environment variables for Elixir configurations.
- Reflect renaming of `install_before` to `minimum_release_age` in configuration settings.

Generated-by: aiautocommit
2026-05-29 14:40:00 +02:00
Abdulrahman SandGitHub 75b0b6846e docs: correct GHCR image for Railpack frontend (#565) 2026-05-28 17:05:20 +02:00
Michael BiancoandGitHub 5457737eb7 feat: 14d delay on new mise packages (#540)
* feat: configure mise versioning and installation policy

Generated-by: aiautocommit

* test: update mise configuration snapshot

Generated-by: aiautocommit

* docs: add default mise settings documentation

Generated-by: aiautocommit
2026-03-28 12:16:47 -06:00
Michael BiancoandGitHub 8fd6a9226b feat: add configurable index fallback for static files (#534)
* feat(staticfile): add configurable index fallback for SPAs

- Fixes #https://github.com/railwayapp/railpack/issues/533
- Introduce index_fallback option in Staticfile config to toggle SPA routing.
- Improve root directory detection by trimming whitespace from environment variables and configuration.

* feat: add index fallback example for static files

- Create a new example directory demonstrating the index_fallback configuration.
- Include a test case to verify that non-existent routes correctly serve index.html.

Generated-by: aiautocommit

* test: update snapshots

Generated-by: aiautocommit

* test: update static file config and index test cases

Generated-by: aiautocommit

* test: add SPA index fallback verification to test suite

Generated-by: aiautocommit

* docs: document RAILPACK_VERBOSE and clarify Staticfile config

Generated-by: aiautocommit
2026-03-28 09:34:59 -06:00
Michael BiancoandGitHub c1a9ac68fb docs: add llm actions (#529) 2026-03-24 12:43:37 -06:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
c2ad7016eb chore: mise update 2026.3.13 (#528)
* fix: update mise to 2026.3.13

* test: update snapshots

* refactor: modernize code with go fix

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-03-24 08:39:36 -06:00