-
-
Notifications
You must be signed in to change notification settings - Fork 687
Description
Is your feature request related to a problem? Please describe.
There are several problems with the cucumber/common monorepo:
- Building all the 50+ packages in the repo takes ~1h (both locally and in CI)
- The build system is complex, brittle and hard to maintain
- Newcomers find the size of the repo and complexity of the build process intimidating and hard to navigate
Describe the solution you'd like
I want to split cucumber/common up into multiple repos:
- Polyglot repos (with
java,javascript,rubyetc subdirectories)cucumber/cucumber-expressionscucumber/tag-expressionscucumber/gherkin- etc.
- Single implementation repos
cucumber/language-servicecucumber/language-servercucumber/vscodecucumber/monacocucumber/react- etc.
The current build system has complex functionality that we'd have to replace:
- Consistent build configs
- Extract to
cucumber/eslint,cucumber/tsconfigetc. git repos.
- Extract to
- Release scripts (Update version numbers in descriptors/changelogs, package and publish)
- Extract to bash scripts in a
cucumber/releasegit repo and use from Docker when doing a release
- Extract to bash scripts in a
- Update version numbers in dependent libraries after a release
- Rely on WhiteSource Renovate to do this
Also see discussion in Slack
Describe alternatives you've considered
We could probably push ahead with #1720 and make the current monorepo serial build run in a few seconds (by leveraging a cache in the cloud), but the build process would still be complex and brittle. Newcomers would still be intimidated by size and complexity of this huge repo.
Additional context
In 2015 the Cucumber implementations had diverged and behaved inconsistently. Each release made them more inconsistent. To mitigate this we decided to bring all the Gherkin implementations into one repository, using a shared acceptance test suite.
This worked well, so we continued with the same approach for new libraries such as Cucumber Expressions and Tag Expressions - in the same repo.
Building and in particular releasing libraries in 10 or so languages is complicated, so we built an "orchestration" build system with Make that makes the build process consistent across the increasing number of libraries.
Fast forward six years, and we have a build system with fangs, tentacles and worts. The build system wasn't designed with parallelism in mind, which is why it takes 1h.
TODO
- cucumber-expressions
- tag-expressions
- ...
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Status