* refactor(python): switch poetry installation back to mise native
- Stop using pipx to install poetry.
- Revert to using the native mise poetry plugin, which is now preferred for better environment integration.
Generated-by: aiautocommit
* refactor(python-poetry): remove default start command from config
* Remove the explicit start command to allow for standard project-level runtime defaults.
* The previous comment regarding poetry venv path issues is addressed by updated platform base images.
Generated-by: aiautocommit
* test: update snapshot
Generated-by: aiautocommit
* chore: remove unused railpack config example
Generated-by: aiautocommit
* 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
* 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
* feat: detect psycopg[binary] and skip apt packages
When using psycopg2-binary or psycopg[binary], the PostgreSQL client
libraries (libpq-dev, libpq5) are not needed because these variants
ship with pre-compiled binaries. This change:
- Adds usesBinaryPsycopg() to detect binary variants
- Updates usesPostgres() to return false when binary variants are used
- Skips libpq-dev (build) and libpq5 (runtime) apt package installation
- Adds comprehensive unit tests for binary psycopg detection
This reduces image size and build time for projects using binary variants.
* test: add psycopg[binary] integration test
Adds a dedicated test example for psycopg[binary] to verify that the
bracket syntax for optional dependencies is correctly detected. This
ensures the binary detection works for both psycopg2-binary and
psycopg[binary] variants.
Test coverage now includes:
- psycopg2-binary (existing python-system-deps example)
- psycopg[binary] (new python-psycopg-binary example)
- psycopg non-binary (existing python-latest-psycopg example)
- psycopg2 non-binary (existing python-django example)
* test: snapshot update
* test: add binary pyscogp test
* test: ensure libpq is installed for pyscog operation
* build: add helper for running the current dir tests
* test: check to make sure the libpg library is not installed when a binary postgres connection is requested
* test: update snapshot
---------
Co-authored-by: Hanzo Dev <[email protected]>
* feat(python): detect python projects with start.py or bot.py
Refactor Detect() to use getMainPythonFile() instead of duplicating
the sentinel file check. Add start.py to the list of recognized
Python entry files.
Add test case and example for bot.py-only detection.
Fixes PRO-4625
* update
* docs: update provider documentation with missing features
Added missing documentation for Node, Python, and Ruby providers:
Node.js:
- Added .node-version file support for version detection
- Documented Tanstack Start framework detection and caching
- Added Puppeteer system dependencies documentation
- Clarified React Router cache support
Python:
- Added FastHTML framework detection and start command
- Documented Flask with gunicorn start command
- Added FastAPI framework detection
- Documented additional main file names (app.py, bot.py, hello.py, server.py)
- Added pycairo system dependency documentation
Ruby:
- Documented Node.js integration for Ruby projects
- Added Bootsnap precompilation support documentation
- Documented Propshaft asset pipeline support
- Added local path dependencies support documentation
- Documented Bundler version auto-detection
- Added YJIT/rustc requirement for Ruby 3.2+
- Documented jemalloc performance optimization
- Updated Charlock Holmes dependencies to include full list
* docs: complete FastAPI documentation section
Clarify that FastAPI detection is for metadata only and doesn't provide
automatic start command configuration. Users should configure their own
production ASGI server.
* feat: add python-fastapi example project
Add example project demonstrating FastAPI with custom start command
configuration. This example shows how to configure FastAPI applications
that need explicit ASGI server configuration.
Features:
- Simple FastAPI app with root and health endpoints
- Uses uvicorn as the ASGI server
- Custom start command in railpack.json
- HTTP check test to verify the app runs correctly
* feat: add automatic FastAPI start command detection
Add automatic start command detection for FastAPI projects when uvicorn
is available as a dependency, similar to how Flask and FastHTML are
handled.
Changes:
- Add isFastapi() method to Python provider
- Automatically detect FastAPI + uvicorn and set start command
- Update StartCommandHelp to include FastAPI
- Refactor getRuntime() to use isFastapi() method for consistency
Example updates:
- Convert python-fastapi example to use uv package manager
- Remove railpack.json (no longer needed with automatic detection)
- Add pyproject.toml and uv.lock for dependency management
Documentation updates:
- Update FastAPI section to reflect automatic start command detection
- Clarify that uvicorn must be present as a dependency
* refactor: remove unused /health endpoint from FastAPI example
* test: update snapshot
---------
Co-authored-by: Hanzo Dev <[email protected]>
* feat: add psycopg (psycopg3) to postgres dependency detection
Added psycopg to the list of Python dependencies that trigger installation
of PostgreSQL libraries (libpq-dev for build, libpq5 for runtime).
While psycopg[binary] includes a bundled libpq, the base psycopg package
and psycopg[c] both require system libpq. Since we cannot determine which
variant is being used from dependency files, we conservatively install
libpq when any psycopg dependency is detected.
Also added integration test example for psycopg3 to verify the dependency
detection works correctly.
* chore: add tmp/ to .gitignore
* test: enhance psycopg3 example to test actual database connectivity
Updated the python-psycopg3 example to:
- Connect to a real PostgreSQL database
- Execute test queries to verify connectivity
- Use docker-compose.yml to provide postgres service for integration tests
- Assert on multiple output strings to verify full connection lifecycle
This provides a comprehensive test that psycopg can successfully use
the system libpq libraries to connect to and query PostgreSQL.
* test: upgrade psycopg3 example to Python 3.14 and assert major version
Updated the python-psycopg3 example to:
- Use Python 3.14 (latest stable release)
- Specify psycopg>=3.2,<4.0 to ensure psycopg3 is used
- Add runtime check that verifies psycopg major version is 3
- Update test assertion to match new output message
This ensures the test explicitly validates we're using psycopg3 (not
psycopg2) and tests compatibility with the latest Python version.
* refactor: convert python-psycopg3 example to use uv and latest Python
- Changed .python-version from 3.14 to "latest"
- Converted from pip to uv package manager
- Created pyproject.toml with psycopg>=3.2,<4.0 dependency
- Generated uv.lock for reproducible builds
- Removed requirements.txt
- Reverted .gitignore changes (removed tmp/)
* test: update snapshot
---------
Co-authored-by: Hanzo Dev <[email protected]>
* test: test install in build phase
* fix: detect node_modules removal and avoid caching node_modules/.cache
* test: add new snapshot
* build: adding go debugging tool and helper task
* refactor: node_modules detection is working
* test: test install in build phase
* refactor: pull plan cleansing into a separate file
* refactor: ai cleanup
* refactor: move cleanse to the provider level, stubs for all providers
* refactor: move existing node cleanse logic to a provider-specific implementation
* test: snapshot update
* docs: why we need node cleanse operation
* docs: note on corepack
* docs: on cache handling of node_modules
* feat: set pipx.uvx = true when pipx backend is used in Python provider
Add support for mise settings configuration and set pipx.uvx = true
when using pipx in the Python provider. This configures pipx to use
uvx as the backend, as documented at:
https://mise.jdx.dev/dev-tools/backends/pipx.html
Changes:
- Add Settings field to MiseConfig struct to support mise settings
- Update GenerateMiseToml to accept and write settings to TOML
- Add Settings map to MiseStepBuilder
- Set pipx.uvx = true in Python provider when pipx is used
* fix: move to ENV vs config
* test: snapshot update
* fix: remove mise settings completely
* docs: notes on tmp/ and ENV
---------
Co-authored-by: Hanzo Dev <[email protected]>
* test: add .tool-versions test
* feat: extract locally defined mise package versions
* test: .tool-versions unit tests
* docs: integration tests docs
* build: local mise config for less annoying warnings
* feat: pull python ecosystem versions from mise
* feat: internal support for extracting mise-specified package versions from app folder
* refactor: move mise package version methods into context
* test: snapshots
* test: multiple test.json expectation lines
this is using newly implemented multiple expectations syntax
* test: support multiple expectations per test.json entry, don't use additional non-deterministic contains to throw an error
* refactor: refine mise interface
* refactor: make mise versions easier for a provider to use
* test: snapshot update
* refactor: move mise local package logic to step builder
* test: move mise package version extraction to mise step builder tests
* refactor: move mise package into mise step builder
* fix: show-plan not showing json output
regression from $schema addition
* refactor: all providers using a consistent local layer entrypoint
* refactor: add local filesystem through a consistent entrypoint
* fix: improved error message on invalid firstInput
* test: remove path argument from NewLocalLayer test
* test: failing workspace example with uv
* test: passing workspace example
* feat: detect uv workspaces
* test: add packaged uv example
* test: snapshot update
* Use pipx:package pattern for Python package managers in mise
Install Python package managers (poetry, pdm, uv, pipenv) using the
pipx:package pattern through mise instead of separate pipx install commands.
This approach is more efficient and consistent.
* update python snapshots
* rename plan inputs to layers and use deploy base layer
* runtime deps installed
* step builders can create multiple steps
* support config step deploy outputs
* optimize when we merge vs copy layers
* update snapshots
* validate the deploy layers
* fix tests
* dont add mise if no packages
* fix pruning for php
* update layer merging and snapshot tests
* dont include mise commands or variables if no packages
* update docs
* update snapshots and normalization
* add guide for adding custom steps
* support .node-version file
* fix compile errors
* update snapshot tests