diff --git a/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md b/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md index 054b3d0a6ac..47b3f9b80ca 100644 --- a/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md +++ b/docs/enterprise-guide/enterprise-cloud-guide/enterprise-cloud-faq/README.md @@ -133,7 +133,7 @@ Please note: For the OpenProject Enterprise cloud we currently have two SaaS inf **OpenProject.com** -This infrastructure is hosted at AWS in Dublin. For sending transactional emails we use the service Postmark which is based in the US. +This infrastructure is hosted at AWS in Frankfurt, Germany. For sending transactional emails we use the service Postmark which is based in the US. **OpenProject.eu** diff --git a/docs/release-notes/16-6-6/README.md b/docs/release-notes/16-6-6/README.md new file mode 100644 index 00000000000..c1bca83d933 --- /dev/null +++ b/docs/release-notes/16-6-6/README.md @@ -0,0 +1,27 @@ +--- +title: OpenProject 16.6.6 +sidebar_navigation: + title: 16.6.6 +release_version: 16.6.6 +release_date: 2026-01-27 +--- + +# OpenProject 16.6.6 + +Release date: 2026-01-27 + +We released OpenProject [OpenProject 16.6.6](https://community.openproject.org/versions/2261). +The release contains security related bug fixes and we strongly urge you to update to the newest version. +Below you will find a complete list of all changes and bug fixes. + + + +## Bug fixes and changes + + + + +- Bugfix: Fix revision parsing in git diff output \[[#71019](https://community.openproject.org/wp/71019)\] + + + diff --git a/docs/release-notes/17-0-2/README.md b/docs/release-notes/17-0-2/README.md new file mode 100644 index 00000000000..3e7769105cb --- /dev/null +++ b/docs/release-notes/17-0-2/README.md @@ -0,0 +1,36 @@ +--- +title: OpenProject 17.0.2 +sidebar_navigation: + title: 17.0.2 +release_version: 17.0.2 +release_date: 2026-01-27 +--- + +# OpenProject 17.0.2 + +Release date: 2026-01-27 + +We released OpenProject [OpenProject 17.0.2](https://community.openproject.org/versions/2260). +The release contains sa security fix and several bug fixes and we strongly recommend updating to the newest version. +Below you will find a complete list of all changes and bug fixes. + + + +## Bug fixes and changes + + + + +- Bugfix: Unable to change to earlier finish date for automatically scheduled successor \[[#65130](https://community.openproject.org/wp/65130)\] +- Bugfix: Meeting outcomes cannot be saved with ctrl/cmd+enter \[[#69974](https://community.openproject.org/wp/69974)\] +- Bugfix: AXe Accessibility error: invalid list structure \[[#70573](https://community.openproject.org/wp/70573)\] +- Bugfix: Fix AXe Accessibility error: Navigation toggler must have discernible text \[[#70574](https://community.openproject.org/wp/70574)\] +- Bugfix: Documents module is missing meaningfull html title \[[#70614](https://community.openproject.org/wp/70614)\] +- Bugfix: Users with the "Manage Users" permission did not see links to Lock/Unlock users \[[#70796](https://community.openproject.org/wp/70796)\] +- Bugfix: Cannot authorise OpenProject app with OpenProject when user has 2FA enabled \[[#70966](https://community.openproject.org/wp/70966)\] +- Bugfix: Running docker slim image, runs slim-bim one \[[#70980](https://community.openproject.org/wp/70980)\] +- Bugfix: 'For all projects' project attributes are not displayed during new project creation \[[#70982](https://community.openproject.org/wp/70982)\] +- Bugfix: Fix revision parsing in git diff output \[[#71020](https://community.openproject.org/wp/71020)\] + + + diff --git a/docs/release-notes/README.md b/docs/release-notes/README.md index fa7e466aba0..6b3b511f83f 100644 --- a/docs/release-notes/README.md +++ b/docs/release-notes/README.md @@ -13,6 +13,13 @@ Stay up to date and get an overview of the new features included in the releases +## 17.0.2 + +Release date: 2026-01-27 + +[Release Notes](17-0-2/) + + ## 17.0.1 Release date: 2026-01-16 @@ -24,6 +31,12 @@ Release date: 2026-01-16 Release date: 2026-01-14 [Release Notes](17-0-0/) +## 16.6.6 + +Release date: 2026-01-27 + +[Release Notes](16-6-6/) + ## 16.6.5 diff --git a/docs/user-guide/meetings/README.md b/docs/user-guide/meetings/README.md index 3736dc1e950..da0618e885e 100644 --- a/docs/user-guide/meetings/README.md +++ b/docs/user-guide/meetings/README.md @@ -109,7 +109,7 @@ You will be guided through creating an iCal subscription token: 3. Add this URL to your external calendar to subscribe to your OpenProject meetings. If you are only interested in a specific meeting, you can [download that specific meeting as an iCal event] -(/one-time-meetings/#download-a-meeting-as-an-icalendar-event/) instead. +(/one-time-meetings/#download-a-meeting-as-an-icalendar-event) instead. > [!TIP] > If you are interested in how the Meetings module is used by the OpenProject team, please take a look at [this blog article](https://www.openproject.org/blog/meeting-management-example/). diff --git a/docs/user-guide/projects/project-templates/README.md b/docs/user-guide/projects/project-templates/README.md index f86c2def228..57f7346cc26 100644 --- a/docs/user-guide/projects/project-templates/README.md +++ b/docs/user-guide/projects/project-templates/README.md @@ -15,14 +15,16 @@ You can create a project template in OpenProject by [creating a new project](../ Configure everything you want included in future projects: - Add project members -- Select the necessary modules +- Select and populate the necessary modules +> [!IMPORTANT] +> Settings and data from the *Budgets* and *Time and costs* modules is not included when copying a template. For this reason, these modules should not be configured in templates, as any projects created from them will not contain the corresponding data. + - Set up the default project structure in the Gantt chart - Create work package templates Navigate to the [project settings](../project-settings), click the **More (three dots)** icon in the upper right corner and select **Set as template** from the dropdown menu. You can later remove the project from the template list at the same location. > [!NOTE] -> > Only administrators can set or remove projects as templates ![Icon to set a project as a template under project settings in OpenProject](openproject_userguide_projects_project_template.png) diff --git a/publiccode.yml b/publiccode.yml index 80feec477e3..5ebff5e7710 100644 --- a/publiccode.yml +++ b/publiccode.yml @@ -7,8 +7,8 @@ name: OpenProject applicationSuite: openDesk url: 'https://github.com/opf/openproject' roadmap: 'https://www.openproject.org/roadmap' -releaseDate: '2026-01-16' -softwareVersion: '17.0.1' +releaseDate: '2026-01-27' +softwareVersion: '17.0.2' developmentStatus: stable softwareType: standalone/web logo: 'publiccode_logo.svg' diff --git a/spec/features/projects/life_cycle/overview_page/dialog/update_spec.rb b/spec/features/projects/life_cycle/overview_page/dialog/update_spec.rb index d48db9e06c5..8024adb7584 100644 --- a/spec/features/projects/life_cycle/overview_page/dialog/update_spec.rb +++ b/spec/features/projects/life_cycle/overview_page/dialog/update_spec.rb @@ -281,6 +281,7 @@ RSpec.describe "Edit project phases on project overview page", :js do # The earliest enabled date should be after initiating date's finish date initiating_finish_date_succesor = initiating_finish_date + 1.day + datepicker.show_date(initiating_finish_date) datepicker.expect_not_disabled(initiating_finish_date) datepicker.expect_not_disabled(initiating_finish_date_succesor) @@ -300,6 +301,7 @@ RSpec.describe "Edit project phases on project overview page", :js do dialog.expect_input("Finish date", value: "") dialog.expect_input("Duration", value: "", disabled: true) + datepicker.show_date(initiating_finish_date) datepicker.expect_disabled(initiating_finish_date) datepicker.expect_not_disabled(initiating_finish_date_succesor) diff --git a/spec/support/components/datepicker/datepicker.rb b/spec/support/components/datepicker/datepicker.rb index 960f6e7ee3f..bf28493b7c3 100644 --- a/spec/support/components/datepicker/datepicker.rb +++ b/spec/support/components/datepicker/datepicker.rb @@ -5,6 +5,7 @@ module Components include Capybara::DSL include Capybara::RSpecMatchers include RSpec::Matchers + attr_reader :context_selector ## @@ -180,7 +181,6 @@ module Components ## # Expect the given date to be visible and a non-working day def expect_non_working(date) - ensure_date_is_displayed(date) unless displays_date?(date) label = date.strftime("%B %-d, %Y") expect(page).to have_css(".flatpickr-day.flatpickr-non-working-day[aria-label='#{label}']") end @@ -188,7 +188,6 @@ module Components ## # Expect the given date to be visible and a working day def expect_working(date) - ensure_date_is_displayed(date) unless displays_date?(date) label = date.strftime("%B %-d, %Y") expect(page).to have_css(".flatpickr-day:not(.flatpickr-non-working-day)[aria-label='#{label}']") end @@ -196,7 +195,6 @@ module Components ## # Expect the given date to be visible and disabled def expect_disabled(date) - ensure_date_is_displayed(date) unless displays_date?(date) label = date.strftime("%B %-d, %Y") expect(page).to have_css(".flatpickr-day.flatpickr-disabled[aria-label='#{label}']," \ ".flatpickr-day.flatpickr-non-working-day[aria-label='#{label}']") @@ -205,23 +203,19 @@ module Components ## # Expect the given date to be visible and enabled def expect_not_disabled(date) - ensure_date_is_displayed(date) unless displays_date?(date) label = date.strftime("%B %-d, %Y") expect(page).to have_css(".flatpickr-day:not(.flatpickr-disabled):not(.flatpickr-non-working-day)[aria-label='#{label}']") end def displays_date?(date) + expect_visible label = date.strftime("%B %-d, %Y") - page.has_css?(".flatpickr-day.flatpickr-disabled[aria-label='#{label}']") + page.has_css?(".flatpickr-day[aria-label='#{label}']", wait: 0) end def has_previous_month_toggle? - page.has_css?(".flatpickr-prev-month") - end - - def ensure_date_is_displayed(date) - select_year(date.year) - select_month(date.month) + expect_visible + page.has_css?(".flatpickr-prev-month", wait: 0) end protected diff --git a/spec/support/shared/ferrum_patches.rb b/spec/support/shared/ferrum_patches.rb index a654785ab3b..b0a81063ecc 100644 --- a/spec/support/shared/ferrum_patches.rb +++ b/spec/support/shared/ferrum_patches.rb @@ -52,7 +52,7 @@ module Ferrum main_frame_id = @traffic.first&.request&.frame_id current_navigation = @traffic.reverse.find { |conn| conn.navigation_request?(main_frame_id) } current_traffic = @traffic.filter do |exchange| - next unless exchange.request + next unless exchange.request && current_navigation exchange.request.loader_id == current_navigation.request.loader_id end