[openstreetmap/openstreetmap-website] Update MANUAL_INSTALL.md with integration test note (PR #7139)

Pablo Brasero notifications at github.com
Thu Jun 11 11:24:22 UTC 2026


@pablobm commented on this pull request.

Tried with a newly-installed Ubuntu Desktop 26.04 (arm64) and it's complaining about Geckodriver not being present.

<details>
<summary>Full output</summary>
<pre>
$ bundle exec rails test:all
2026-06-11 11:14:47 INFO Selenium [:logger_info] Details on how to use and modify Selenium logger:
  https://selenium.dev/documentation/webdriver/troubleshooting/logging

2026-06-11 11:14:47 ERROR Selenium Exception occurred: Unsuccessful command executed: ["/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/bin/linux/selenium-manager", "--browser", "firefox", "--language-binding", "ruby", "--output", "json"] - Code 2
{}
/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/bin/linux/selenium-manager: 1: Syntax error: ")" unexpected

2026-06-11 11:14:47 ERROR Selenium Backtrace:
	/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/selenium_manager.rb:117:in `validate_command_result'
	/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/selenium_manager.rb:67:in `run'
	/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/selenium_manager.rb:44:in `binary_paths'
	/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:58:in `paths'
	/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:39:in `driver_path'
	/var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/browser.rb:68:in `resolve_driver_path'
	/var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/browser.rb:46:in `preload'
	/var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/driver.rb:21:in `initialize'
	/var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_test_case.rb:161:in `new'
	/var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_test_case.rb:161:in `driven_by'
	/home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:39:in `driven_by_selenium'
	/home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:51:in `<class:ApplicationSystemTestCase>'
	/home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:11:in `<top (required)>'
	/usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
	/usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
	/var/lib/gems/3.3.0/gems/bootsnap-1.24.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
	/var/lib/gems/3.3.0/gems/zeitwerk-2.8.2/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
	/home/pablobm/Documents/openstreetmap-website/test/system/account_deletion_test.rb:3:in `<top (required)>'
	/usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
	/usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
	/var/lib/gems/3.3.0/gems/bootsnap-1.24.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
	/var/lib/gems/3.3.0/gems/zeitwerk-2.8.2/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
	/var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:71:in `block in load_tests'
	/var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:69:in `each'
	/var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:69:in `load_tests'
	/var/lib/gems/3.3.0/gems/railties-8.1.3/lib/minitest/rails_plugin.rb:147:in `block in plugin_rails_options'
	/usr/lib/ruby/3.3.0/optparse.rb:1715:in `block in parse_in_order'
	/usr/lib/ruby/3.3.0/optparse.rb:913:in `search'
	/usr/lib/ruby/3.3.0/optparse.rb:1832:in `block in visit'
	/usr/lib/ruby/3.3.0/optparse.rb:1831:in `reverse_each'
	/usr/lib/ruby/3.3.0/optparse.rb:1831:in `visit'
	/usr/lib/ruby/3.3.0/optparse.rb:1715:in `parse_in_order'
	/usr/lib/ruby/3.3.0/optparse.rb:1630:in `order!'
	/usr/lib/ruby/3.3.0/optparse.rb:1739:in `permute!'
	/usr/lib/ruby/3.3.0/optparse.rb:1764:in `parse!'
	/var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:254:in `block in process_args'
	/usr/lib/ruby/3.3.0/optparse.rb:1153:in `initialize'
	/var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:160:in `new'
	/var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:160:in `process_args'
	/var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:300:in `run'
	/var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:84:in `block in autorun'
/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:75:in `rescue in paths': Unable to obtain geckodriver; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location (Selenium::WebDriver::Error::NoSuchDriverError)
	from /var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:49:in `paths'
	from /var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:39:in `driver_path'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/browser.rb:68:in `resolve_driver_path'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/browser.rb:46:in `preload'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/driver.rb:21:in `initialize'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_test_case.rb:161:in `new'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_test_case.rb:161:in `driven_by'
	from /home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:39:in `driven_by_selenium'
	from /home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:51:in `<class:ApplicationSystemTestCase>'
	from /home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:11:in `<top (required)>'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
	from /var/lib/gems/3.3.0/gems/bootsnap-1.24.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
	from /var/lib/gems/3.3.0/gems/zeitwerk-2.8.2/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
	from /home/pablobm/Documents/openstreetmap-website/test/system/account_deletion_test.rb:3:in `<top (required)>'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
	from /var/lib/gems/3.3.0/gems/bootsnap-1.24.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
	from /var/lib/gems/3.3.0/gems/zeitwerk-2.8.2/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:71:in `block in load_tests'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:69:in `each'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:69:in `load_tests'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/minitest/rails_plugin.rb:147:in `block in plugin_rails_options'
	from /usr/lib/ruby/3.3.0/optparse.rb:1715:in `block in parse_in_order'
	from /usr/lib/ruby/3.3.0/optparse.rb:913:in `search'
	from /usr/lib/ruby/3.3.0/optparse.rb:1832:in `block in visit'
	from /usr/lib/ruby/3.3.0/optparse.rb:1831:in `reverse_each'
	from /usr/lib/ruby/3.3.0/optparse.rb:1831:in `visit'
	from /usr/lib/ruby/3.3.0/optparse.rb:1715:in `parse_in_order'
	from /usr/lib/ruby/3.3.0/optparse.rb:1630:in `order!'
	from /usr/lib/ruby/3.3.0/optparse.rb:1739:in `permute!'
	from /usr/lib/ruby/3.3.0/optparse.rb:1764:in `parse!'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:254:in `block in process_args'
	from /usr/lib/ruby/3.3.0/optparse.rb:1153:in `initialize'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:160:in `new'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:160:in `process_args'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:300:in `run'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:84:in `block in autorun'
/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/selenium_manager.rb:117:in `validate_command_result': Unsuccessful command executed: ["/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/bin/linux/selenium-manager", "--browser", "firefox", "--language-binding", "ruby", "--output", "json"] - Code 2 (Selenium::WebDriver::Error::WebDriverError)
{}
/var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/bin/linux/selenium-manager: 1: Syntax error: ")" unexpected

	from /var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/selenium_manager.rb:67:in `run'
	from /var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/selenium_manager.rb:44:in `binary_paths'
	from /var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:58:in `paths'
	from /var/lib/gems/3.3.0/gems/selenium-webdriver-4.44.0/lib/selenium/webdriver/common/driver_finder.rb:39:in `driver_path'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/browser.rb:68:in `resolve_driver_path'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/browser.rb:46:in `preload'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_testing/driver.rb:21:in `initialize'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_test_case.rb:161:in `new'
	from /var/lib/gems/3.3.0/gems/actionpack-8.1.3/lib/action_dispatch/system_test_case.rb:161:in `driven_by'
	from /home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:39:in `driven_by_selenium'
	from /home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:51:in `<class:ApplicationSystemTestCase>'
	from /home/pablobm/Documents/openstreetmap-website/test/application_system_test_case.rb:11:in `<top (required)>'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
	from /var/lib/gems/3.3.0/gems/bootsnap-1.24.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
	from /var/lib/gems/3.3.0/gems/zeitwerk-2.8.2/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
	from /home/pablobm/Documents/openstreetmap-website/test/system/account_deletion_test.rb:3:in `<top (required)>'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `require'
	from /usr/lib/ruby/3.3.0/bundled_gems.rb:69:in `block (2 levels) in replace_require'
	from /var/lib/gems/3.3.0/gems/bootsnap-1.24.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:33:in `require'
	from /var/lib/gems/3.3.0/gems/zeitwerk-2.8.2/lib/zeitwerk/core_ext/kernel.rb:34:in `require'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:71:in `block in load_tests'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:69:in `each'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/rails/test_unit/runner.rb:69:in `load_tests'
	from /var/lib/gems/3.3.0/gems/railties-8.1.3/lib/minitest/rails_plugin.rb:147:in `block in plugin_rails_options'
	from /usr/lib/ruby/3.3.0/optparse.rb:1715:in `block in parse_in_order'
	from /usr/lib/ruby/3.3.0/optparse.rb:913:in `search'
	from /usr/lib/ruby/3.3.0/optparse.rb:1832:in `block in visit'
	from /usr/lib/ruby/3.3.0/optparse.rb:1831:in `reverse_each'
	from /usr/lib/ruby/3.3.0/optparse.rb:1831:in `visit'
	from /usr/lib/ruby/3.3.0/optparse.rb:1715:in `parse_in_order'
	from /usr/lib/ruby/3.3.0/optparse.rb:1630:in `order!'
	from /usr/lib/ruby/3.3.0/optparse.rb:1739:in `permute!'
	from /usr/lib/ruby/3.3.0/optparse.rb:1764:in `parse!'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:254:in `block in process_args'
	from /usr/lib/ruby/3.3.0/optparse.rb:1153:in `initialize'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:160:in `new'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:160:in `process_args'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:300:in `run'
	from /var/lib/gems/3.3.0/gems/minitest-6.0.6/lib/minitest.rb:84:in `block in autorun'
Coverage report generated for Minitest to /home/pablobm/Documents/openstreetmap-website/coverage.
Line Coverage: 3.18% (314 / 9868)
Lcov style coverage report generated for Minitest to coverage/lcov.info
Stopped processing SimpleCov as a previous error not related to SimpleCov has been detected
</pre>
</details>

I was looking for a simple way to install it. A one-liner that downloads the latest version and puts it in a sensible place, but couldn't think of something. For one there isn't a URL to download the "latest" and instead we have to point to a specific version (eg: "0.37.0"). Any ideas?

> @@ -211,6 +233,13 @@ This test will take a few minutes, reporting tests run, assertions, and any erro
 
 > [!NOTE]
 > The unit tests may output parser errors related to "Attribute lat redefined." These can be ignored.
+>
+> For the tests that use WebGL to complete successfully on an headless machine you need to start an X server rendering on the virtual framebuffer
+> an easy way to do that is to use the docker entrypoint script
+>
+> ```bash
+> docker/entrypoint.sh bundle exec rails test:all

The entrypoint file is not marked executable, so at least in the environment I tried (pristine Ubuntu Desktop 26.04, arm64, bash), this won't run on its own. Instead:

```suggestion
> sh docker/entrypoint.sh bundle exec rails test:all
```

> @@ -131,7 +145,15 @@ We use [Bundler](https://bundler.io/) to manage the rubygems required for the pr
 ```bash
 cd openstreetmap-website
 bundle install
-```
+
+> [NOTE]
+> On Ubuntu 26.04 the version of bundle installed is old and will not install the gems, you can

Typo ("bundle" vs "bundler") and order/choice of words that I think flows better (although I'm not a native speaker):

```suggestion
> On Ubuntu 26.04 the provided version of bundler is old and will not install the gems, you can
```

-- 
Reply to this email directly or view it on GitHub:
https://github.com/openstreetmap/openstreetmap-website/pull/7139#pullrequestreview-4476114885
You are receiving this because you are subscribed to this thread.

Message ID: <openstreetmap/openstreetmap-website/pull/7139/review/4476114885 at github.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/rails-dev/attachments/20260611/701dc982/attachment-0001.htm>


More information about the rails-dev mailing list