From 44a18a6511f3069b113cbbb57929717f6b9ccb0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Sun, 25 Oct 2026 21:10:37 +0100 Subject: [PATCH 1/3] Bump ruby to 4.0.9 --- .ruby-version | 2 +- Gemfile.lock | 2 +- docker/dev/backend/Dockerfile | 2 +- docker/prod/Dockerfile | 2 +- .../development-environment/linux/README.md | 12 ++++++------ .../development-environment/macos/README.md | 10 +++++----- .../installation/manual/README.md | 8 ++++---- 7 files changed, 19 insertions(+), 19 deletions(-) diff --git a/.ruby-version b/.ruby-version index d13e837c8ecb..7919852fe104 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -4.0.6 +4.0.9 diff --git a/Gemfile.lock b/Gemfile.lock index 61b346203840..cc6437a9a0c0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2309,7 +2309,7 @@ CHECKSUMS zeitwerk (2.8.3) sha256=2c85125a8467ce069e20123d1e709a08955c9d29c118c25b46b7b7fafdbb92e5 RUBY VERSION - ruby 4.0.6 + ruby 4.0.9 BUNDLED WITH 4.0.20 diff --git a/docker/dev/backend/Dockerfile b/docker/dev/backend/Dockerfile index a4d05bd9bb93..4ee2f4dcea5e 100644 --- a/docker/dev/backend/Dockerfile +++ b/docker/dev/backend/Dockerfile @@ -1,4 +1,4 @@ -FROM ruby:4.0.6-trixie AS develop +FROM ruby:4.0.9-trixie AS develop LABEL org.opencontainers.image.authors="operations@openproject.com" ARG DEV_UID=1000 diff --git a/docker/prod/Dockerfile b/docker/prod/Dockerfile index a2d89870c809..5d58b7d8ef91 100755 --- a/docker/prod/Dockerfile +++ b/docker/prod/Dockerfile @@ -1,4 +1,4 @@ -ARG RUBY_VERSION="4.0.6" +ARG RUBY_VERSION="4.0.9" ARG DEBIAN_BASE="trixie" # Add SBOM scan context for intermediate steps ARG BUILDKIT_SBOM_SCAN_CONTEXT=true diff --git a/docs/development/development-environment/linux/README.md b/docs/development/development-environment/linux/README.md index 65d9112e8be8..da56e535afe2 100644 --- a/docs/development/development-environment/linux/README.md +++ b/docs/development/development-environment/linux/README.md @@ -40,10 +40,10 @@ sudo apt-get install git curl build-essential zlib1g-dev libyaml-dev libssl-dev Use [rbenv](https://github.com/rbenv/rbenv) and [ruby-build](https://github.com/rbenv/ruby-build#readme) to install Ruby. You can check available ruby versions with `rbenv install --list`. -At the time of this writing, the latest stable version is `4.0.6`, which we also require. +At the time of this writing, the latest stable version is `4.0.9`, which we also require. We suggest you install the version we require in [.ruby-version](https://github.com/opf/openproject/blob/dev/.ruby-version). -Read the first line e.g. `4.0.6` and install that version. +Read the first line e.g. `4.0.9` and install that version. #### Install rbenv and ruby-build @@ -80,18 +80,18 @@ With both installed, we can now install ruby. You can check available ruby versions with `rbenv install --list`. We suggest you install the version we require in [.ruby-version](https://github.com/opf/openproject/blob/dev/.ruby-version). -Read the first line e.g. `4.0.6` and install that version. +Read the first line e.g. `4.0.9` and install that version. ```shell # Install the required version as read from the .ruby-version file -rbenv install 4.0.6 +rbenv install 4.0.9 ``` This might take a while depending on whether ruby is built from source. After it is complete, you need to tell rbenv to globally activate this version ```shell -rbenv global 4.0.6 +rbenv global 4.0.9 rbenv rehash ``` @@ -181,7 +181,7 @@ You should now have an active ruby and node installation. Verify that it works w ```shell ruby --version -ruby 4.0.6 (2026-07-14 revision 03b6d3f889) +PRISM [arm64-darwin25] +ruby 4.0.9 (2026-10-23 revision 3e93b23afc) +PRISM [arm64-darwin25] bundler --version 4.0.16 diff --git a/docs/development/development-environment/macos/README.md b/docs/development/development-environment/macos/README.md index 09a5ef330f1e..7a1e482691c0 100644 --- a/docs/development/development-environment/macos/README.md +++ b/docs/development/development-environment/macos/README.md @@ -28,7 +28,7 @@ their homepage. Use [rbenv](https://github.com/rbenv/rbenv) and [ruby-build](https://github.com/rbenv/ruby-build#readme) to install Ruby. We always require the latest ruby versions, and you can check which version is required by [checking the Gemfile](https://github.com/opf/openproject/blob/dev/Gemfile#L31) for the `ruby "~> X.Y"` statement. At -the time of writing, this version is "4.0.6" +the time of writing, this version is "4.0.9" #### Install rbenv and ruby-build @@ -48,18 +48,18 @@ With both installed, we can now install the actual ruby version. You can check available ruby versions with `rbenv install --list`. We suggest you install the version we require in [.ruby-version](https://github.com/opf/openproject/blob/dev/.ruby-version). -Read the first line e.g. `4.0.6` and install that version. +Read the first line e.g. `4.0.9` and install that version. ```shell # Install the required version as read from the .ruby-version file -rbenv install 4.0.6 +rbenv install 4.0.9 ``` This might take a while depending on whether ruby is built from source. After it is complete, you need to tell rbenv to globally activate this version ```shell -rbenv global 4.0.6 +rbenv global 4.0.9 ``` You also need to install [bundler](https://github.com/bundler/bundler/), the ruby gem bundler. @@ -134,7 +134,7 @@ You should now have an active ruby and node installation. Verify that it works w ```shell $ ruby --version -ruby 4.0.6 (2026-07-14 revision 03b6d3f889) +PRISM [arm64-darwin25] +ruby 4.0.9 (2026-10-23 revision 3e93b23afc) +PRISM [arm64-darwin25] $ bundler --version 4.0.16 diff --git a/docs/installation-and-operations/installation/manual/README.md b/docs/installation-and-operations/installation/manual/README.md index bc00d237d097..9086f53d3619 100644 --- a/docs/installation-and-operations/installation/manual/README.md +++ b/docs/installation-and-operations/installation/manual/README.md @@ -106,19 +106,19 @@ Please be aware that the actual installation of a specific Ruby version takes so ``` We suggest you install the version we require in [.ruby-version](https://github.com/opf/openproject/blob/dev/.ruby-version). -Read the first line e.g. `4.0.6` and install that version. +Read the first line e.g. `4.0.9` and install that version. ```shell -[openproject@host] rbenv install 4.0.6 +[openproject@host] rbenv install 4.0.9 [openproject@host] rbenv rehash -[openproject@host] rbenv global 4.0.6 +[openproject@host] rbenv global 4.0.9 ``` To check our Ruby installation we run `ruby --version`. It should output something very similar to: ```text -ruby 4.0.6 (2026-07-14 revision 03b6d3f889) +PRISM [arm64-darwin25] +ruby 4.0.9 (2026-10-23 revision 3e93b23afc) +PRISM [arm64-darwin25] ``` ## Installation of Node From 363eda0c60410b941fb126ce493481a0a08fd736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Sun, 25 Oct 2026 21:15:13 +0100 Subject: [PATCH 2/3] Bump setup-ruby to find 4.0.9 --- .github/workflows/brakeman-scan-core.yml | 2 +- .github/workflows/crowdin.yml | 2 +- .github/workflows/danger.yml | 2 +- .github/workflows/docs.yaml | 4 ++-- .github/workflows/erb-lint-core.yml | 2 +- .github/workflows/i18n-tasks.yml | 2 +- .github/workflows/openapi.yaml | 2 +- .github/workflows/rubocop-core.yml | 2 +- .github/workflows/seed-all-locales.yml | 2 +- .github/workflows/work-package-check.yml | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/brakeman-scan-core.yml b/.github/workflows/brakeman-scan-core.yml index 9bae0ffca401..4e51965ae622 100644 --- a/.github/workflows/brakeman-scan-core.yml +++ b/.github/workflows/brakeman-scan-core.yml @@ -30,7 +30,7 @@ jobs: persist-credentials: false - name: Setup Ruby - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 - name: Setup Brakeman run: | diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index efe52a5ad4f2..97a904e173a8 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -46,7 +46,7 @@ jobs: with: ref: ${{ matrix.branch }} fetch-depth: 1 - - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + - uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: bundler-cache: true - name: "Set crowdin branch name" diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml index 0042a1e8c7d0..dcfbeb151d70 100644 --- a/.github/workflows/danger.yml +++ b/.github/workflows/danger.yml @@ -22,7 +22,7 @@ jobs: with: fetch-depth: 0 persist-credentials: false - - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + - uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: ruby-version: .ruby-version bundler-cache: true diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index eaf241b3d9ab..e02f32ef33e8 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + - uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: bundler-cache: true - run: bundle exec ./script/docs/check_links @@ -39,7 +39,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + - uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: bundler-cache: true - run: script/docs/check_readme_yaml_header_syntax diff --git a/.github/workflows/erb-lint-core.yml b/.github/workflows/erb-lint-core.yml index 24e088c0591c..b70af5a7be8d 100644 --- a/.github/workflows/erb-lint-core.yml +++ b/.github/workflows/erb-lint-core.yml @@ -20,7 +20,7 @@ jobs: with: persist-credentials: false - name: Set up Ruby - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: bundler-cache: true - name: Run ERB lint diff --git a/.github/workflows/i18n-tasks.yml b/.github/workflows/i18n-tasks.yml index e7b4a18e3b4c..da0508bb5043 100644 --- a/.github/workflows/i18n-tasks.yml +++ b/.github/workflows/i18n-tasks.yml @@ -33,7 +33,7 @@ jobs: persist-credentials: false - name: Setup Ruby - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 - name: Setup i18n-tasks run: | diff --git a/.github/workflows/openapi.yaml b/.github/workflows/openapi.yaml index baf36a31c839..3eba5b39d18e 100644 --- a/.github/workflows/openapi.yaml +++ b/.github/workflows/openapi.yaml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + - uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: bundler-cache: false - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 diff --git a/.github/workflows/rubocop-core.yml b/.github/workflows/rubocop-core.yml index 465a9526b67c..8b14ed5a12cd 100644 --- a/.github/workflows/rubocop-core.yml +++ b/.github/workflows/rubocop-core.yml @@ -18,7 +18,7 @@ jobs: with: persist-credentials: false - name: Set up Ruby - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 - name: Run RuboCop uses: reviewdog/action-rubocop@b6d5e953a5fc0bf3ab65254e77730ea2174d6d6d # v2 with: diff --git a/.github/workflows/seed-all-locales.yml b/.github/workflows/seed-all-locales.yml index af54fef7756e..3b0176f744b1 100644 --- a/.github/workflows/seed-all-locales.yml +++ b/.github/workflows/seed-all-locales.yml @@ -98,7 +98,7 @@ jobs: run: sudo apt-get update && sudo apt-get install -y libpq-dev - name: Setup Ruby - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 with: bundler-cache: true diff --git a/.github/workflows/work-package-check.yml b/.github/workflows/work-package-check.yml index 0c31c519a0c1..56827e1dce8b 100644 --- a/.github/workflows/work-package-check.yml +++ b/.github/workflows/work-package-check.yml @@ -29,7 +29,7 @@ jobs: persist-credentials: false - name: Set up Ruby - uses: ruby/setup-ruby@95ef2b042f9d7a56d8268cba8559e2842e2ad01b # v1 + uses: ruby/setup-ruby@7f797815d8adceb1c412e7abefdd1ab4abc47a5f # v1.335.0 - name: Verify work package fields are set (linked version matches core version and Enterprise field is set) id: work-package-check From 475e722d236894e26e44f294915e7680f761d5b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20G=C3=BCnther?= Date: Sun, 25 Oct 2026 21:22:21 +0100 Subject: [PATCH 3/3] Fix outdated ruby comment in AGENTS.md --- AGENTS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index c3bd7d1c9f9f..9aa054cba66b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,7 +7,7 @@ **OpenProject** is a web-based, open-source project management software written in Ruby on Rails with PostgreSQL for data persistence. - **Size**: Large monorepo (~840MB, ~1M+ lines of code) -- **Backend**: Ruby 3.4.7, Rails ~8.0.3 +- **Backend**: Ruby 4.0.9, Rails ~8.1.3 - **Frontend**: Node.js 24.x (>= 24.22.1), npm 11.x, TypeScript - **Database**: PostgreSQL (required) - **Architecture**: Server-rendered HTML with Hotwire (Turbo + Stimulus). Legacy Angular components exist and are being migrated to custom elements. Uses GitHub's Primer Design System via ViewComponent. @@ -16,9 +16,9 @@ ## Critical Setup Requirements **ALWAYS verify versions before building:** -- Ruby: `3.4.7` (see `.ruby-version`) +- Ruby: `4.0.9` (see `.ruby-version`) - Node: `^24.22.1` (see `package.json` engines) -- Bundler: Latest 2.x +- Bundler: `4.0.20` (see `BUNDLED WITH` in `Gemfile.lock`) ### Local Development Setup