Repository navigation
Declare cucumber as a development dependency - #1856
Merged
Merged
Conversation
The Rakefile requires cucumber's rake task and the features load aruba's cucumber integration, but cucumber was never declared as a dependency. It arrived through aruba, which listed it as a runtime dependency up to 2.x. aruba 3.0.0, released on 2026-10-16, depends only on cucumber-core at runtime and moved cucumber to its own development dependencies. The build workflow resolves the appraisal gemfiles fresh on every run because their lockfiles are not tracked, so since that release every matrix job installs aruba 3 without cucumber and fails at Rakefile line 6 with "cannot load such file -- cucumber/rake/task" before any spec runs. The standard job and local runs still pass because the tracked Gemfile.lock and the local appraisal lockfiles pin aruba 2. Declare cucumber directly, since this project uses it directly. Gemfile.lock gains the dependency entry; cucumber itself was already in it. aruba 3 still ships aruba/cucumber, so the features run unchanged under aruba 3 and cucumber 12.
With cucumber declared but unconstrained, Bundler on Ruby 3.2 keeps aruba 3 and its cucumber-core 20, cannot use cucumber 12 (Ruby 3.3 or newer) or cucumber 11 (cucumber-core below 17), and falls back to cucumber 1.3.20. That version does not know the --publish-quiet option in cucumber.yml, so the five Ruby 3.2 matrix jobs failed at the features step after the specs passed. Ruby 3.1 resolved aruba 2 with cucumber 10 and Ruby 3.3 or newer resolved cucumber 12, so only 3.2 was affected. A floor of 10 rules the fallback out. Bundler then resolves aruba 3 with cucumber 11 on Ruby 3.2, aruba 2 with cucumber 10 on Ruby 3.1, and cucumber 12 on Ruby 3.3 or newer, and aruba 3 supports cucumber 11 and 12.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every matrix job in CI has failed since 2026-10-16, on any branch, before a single spec runs:
Cause
cucumber was never declared as a dependency of this project. It arrived through
aruba, a development dependency, which listed cucumber as a runtime dependency up to 2.x. aruba 3.0.0 (2026-10-16) "depends only on cucumber-core at runtime" and moved cucumber to its own development dependencies.The build workflow resolves the appraisal gemfiles fresh on every run, because
gemfiles/*.gemfile.lockare not tracked, so every matrix job now installs aruba 3.0.1 without cucumber. Thestandardjob keeps passing because it uses the trackedGemfile.lock, which pins aruba 2.3.2, and local runs keep passing because the untracked appraisal lockfiles on a developer machine pin whatever aruba they last resolved. main's last green matrix run was the push on 2026-10-13, before the aruba release.Change
Declare
cucumberas a development dependency in the gemspec, with a floor of 10, since the Rakefile and the features use it directly.Gemfile.lockgains thecucumber (>= 10)line underDEPENDENCIES; the gem itself was already in the lock through aruba.The floor matters on Ruby 3.2. The first CI run of this PR, with
cucumberunconstrained, passed everywhere except the five Ruby 3.2 jobs: Bundler kept aruba 3 and its cucumber-core 20, could not use cucumber 12 (Ruby 3.3 or newer) or cucumber 11 (cucumber-core below 17), and fell back to cucumber 1.3.20, which rejects the--publish-quietoption incucumber.yml. With the floor, Ruby 3.2 resolves aruba 3 with cucumber 11, Ruby 3.1 resolves aruba 2 with cucumber 10, and Ruby 3.3 or newer resolves cucumber 12, all of which aruba supports.Verification
BUNDLE_GEMFILE=gemfiles/7.0.gemfile bundle installnow resolves aruba 3.0.1, cucumber 12.0.1 and cucumber-core 20.0.0, andbundle exec rake all_specspasses: 334 unit examples, 451 acceptance examples, 4 Cucumber scenarios. aruba 3 still shipsaruba/cucumber, whichfeatures/support/env.rbrequires, so the features run unchanged.bundle exec rake all_specspasses with the same counts.