All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
bundle installnow succeeds out-of-the-box for Rails 7+ projects that use the standarddebuggem (#28). v1.9.0 shippedlibyaml-0-2(runtime lib only) but not the development headers required to compilepsych5.x as a native gem; the resolution chaindebug → irb → rdoc → psychfailed at the psych build step. Replacedlibyaml-0-2withlibyaml-dev(which transitively pulls in the runtime lib).tests/smoke-rails.shextended with abundle installstep against the Rails-shaped fixture's Gemfile — exercises the psych native-compile path end-to-end and assertsrequire 'psych'succeeds inside the container.
- Ruby support is now consumable by Rails 7+ projects out-of-the-box (#25):
- Image now ships Ruby 3.4.9 (Bundler 2.6) via a dedicated
ruby-builderstage, replacing the bookworm APT Ruby 3.1.2 that could not parse Gemfiles using thewindowsplatform alias (platforms: %i[mri windows]). _lint,_format, and_fixRuby branches now scoperubocopandreekto a configurableRUBY_PATHS(default:app lib spec config bin) instead of the workspace root, eliminating tens of thousands of warnings fromvendor/bundle/gem source. Override per-project viaRUBY_PATHS="lib spec" make check.
- Image now ships Ruby 3.4.9 (Bundler 2.6) via a dedicated
reekis no longer pinned to~> 6.3.0— Ruby 3.4 satisfies itsdry-schema 1.14requirement.
tests/smoke-rails.sh— CI smoke test that builds a minimal Rails-shaped fixture (modern Gemfile +vendor/bundle/noise) and assertsmake _lintpasses cleanly and does not descend intovendor/bundle/..devrail.ymlenv:section is now passed through to the container as-e KEY=VALUEflags ondocker run. Lets projects declare environment variables (e.g.ANSIBLE_ROLES_PATH,ANSIBLE_COLLECTIONS_PATH) that tools inside the container need. Schema documented instandards/devrail-yml-schema.md._lintAnsible branch now auto-detectsANSIBLE_ROLES_PATHfromansible.cfg(oransible/ansible.cfg) when the env var is not set explicitly. Resolves a common stumble whereansible-lintcannot find roles in projects that keep their config under anansible/subdirectory. Explicit configuration via.devrail.ymlenv:always wins.
- Bump Go builder from 1.24 to 1.25 (fixes govulncheck on Go 1.25 projects)
- Add critical rule 9 to agent instructions — ensure DevRail Makefile is active (GNUmakefile precedence)
- Replace deprecated tfsec with
trivy configfor Terraform security scanning - Pin gitleaks to v8.30.0 with
-ldflagsfor proper version reporting
- tfsec (deprecated, merged into Trivy)
community.generalAnsible collection now actually installs (ansible-galaxy collection listexits 0 even when not installed; check grep output instead)
devrail-init.shprogressive adoption script for bootstrapping DevRail in any projectcommunity.generalAnsible collection in container (yaml callback, json_query, common modules)
- Interactive prompts now read from
/dev/ttysocurl | bashworks correctly - Version-manifest CI job no longer skipped on tag push
- Rust language ecosystem support (clippy, rustfmt, cargo-audit, cargo-deny, cargo test)
- Terragrunt companion tool for Terraform (format checking, HCL validation)
make fixtarget for in-place formatting across all languagesmake checkpre-push hook for full validation before pushmake release VERSION=x.y.ztarget for manual version releases- Tool version manifest (
report-tool-versions.sh) for release artifacts - git-cliff for automated changelog generation
- Updated STABILITY.md from beta to v1 stable
- Updated README with all 8 languages in tools table
- Bumped conventional-commits hook to v1.1.0 (all language and workflow scopes)
- Added critical rule 8 — update documentation when changing behavior
- Added missing clippy and rustfmt rustup components to Rust toolchain
make init/make _inittarget for scaffolding config files based on.devrail.yml- Scaffolds: ruff.toml, .shellcheckrc, .tflint.hcl, .ansible-lint, .rubocop.yml, .reek.yml, .rspec, .golangci.yml, eslint.config.js, .prettierrc, .prettierignore, .editorconfig
- Updated contributing guide references from
contributing-a-language.mdtocontributing.md
- JavaScript/TypeScript language support (eslint, prettier, typescript, vitest, npm audit)
- Node.js 22 runtime in container (COPY'd from node:22-bookworm-slim)
- Switched trivy installation from GitHub release downloads to APT repository
- Fixed shfmt formatting in install-universal.sh
- Go language support (golangci-lint, gofumpt, govulncheck, go test)
- Go SDK in container (COPY'd from golang builder stage)
- Ruby language support (rubocop, reek, brakeman, bundler-audit, rspec, sorbet)
- Initial repository structure with multi-stage Dockerfile
- Shared bash libraries (lib/log.sh, lib/platform.sh)
- Per-language install scripts (Python, Bash, Terraform, Ansible, Universal)
- Two-layer delegation Makefile with JSON summary output
- Multi-arch build (amd64 + arm64) and GHCR publishing workflows
- Cosign image signing
- Automated weekly builds with semver patch bump
- CI validation with self-check, trivy scan, and gitleaks
- Use v-prefixed major version tag for container image (
:v1not:1)