* 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