WIP: Add a CE->EE merge task
The goal is to have the task:
-
Merge CE into EE -
Open a merge request -
(Optional) Ping the most relevant people by looking at the conflicting files' history -
Specs
Pre-requisites
-
Add the ability to find/create a merge request: !139 (merged) -
Move remotes to the Project classes and get rid of the Remotes class: !168 (merged) -
Add head
,status
,log
,fetch
,checkout_new_branch
,pull
,push
, andmerge
toRemoteRepository
: !177
Todo
-
Allow to pass MENTION=true
(default to false) to ping people in the MR description
Merge request reports
Activity
@rymai Should we close this one for now?
@rspeicher No I still want to do it! :)
added 133 commits
- da920c04...2eb2b687 - 132 commits from branch
master
- 42457b53 - Bip WIP!!!!!
- da920c04...2eb2b687 - 132 commits from branch
I have a working PoC that:
- Fetch EE and CE
- Merge CE into EE
- Detect the conflicting files
- Add them
- Commit
- Detect the last person that has edited each file (mapping names to usernames using
team.yml
fromwww-gitlab
) - Push the branch
- Create an MR mentioning the people from step 6 to resolve the conflicts for each file
› TEST=1 bundle exec rake upstream_merge Prepare repository... Pushes will be ignored because of TEST env [2017-04-05 23:00:29 +0200] --> git remote add upstream git@gitlab.com:gitlab-org/gitlab-ce.git fatal: remote upstream already exists. [2017-04-05 23:00:29 +0200] --> git fetch --quiet --depth=200 origin master:master fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository [2017-04-05 23:00:32 +0200] --> git fetch --quiet --depth=200 origin master fatal: The remote end hung up unexpectedly [2017-04-05 23:00:36 +0200] --> git fetch --quiet origin master:master fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository [2017-04-05 23:00:39 +0200] --> git fetch --quiet origin master fatal: The remote end hung up unexpectedly [2017-04-05 23:00:43 +0200] --> git checkout --quiet -b ce-to-ee-2017-04-05 origin/master [2017-04-05 23:00:43 +0200] --> git fetch --quiet --depth=200 upstream master:master [2017-04-05 23:00:58 +0200] --> git fetch --quiet --depth=200 upstream master [2017-04-05 23:01:07 +0200] --> git merge --quiet --no-ff upstream/master ce-to-ee-2017-04-05 Auto-merging spec/models/namespace_spec.rb Auto-merging spec/lib/gitlab/import_export/all_models.yml Auto-merging spec/lib/gitlab/backend/shell_spec.rb Auto-merging spec/javascripts/environments/mock_data.js Auto-merging spec/javascripts/environments/environments_store_spec.js CONFLICT (content): Merge conflict in spec/javascripts/environments/environments_store_spec.js Auto-merging spec/javascripts/environments/environment_spec.js CONFLICT (content): Merge conflict in spec/javascripts/environments/environment_spec.js Auto-merging spec/features/search_spec.rb Auto-merging spec/features/merge_requests/create_new_mr_spec.rb Auto-merging package.json Auto-merging lib/gitlab/shell.rb Auto-merging lib/api/services.rb Auto-merging lib/api/internal.rb Auto-merging features/steps/shared/project.rb Auto-merging features/steps/project/merge_requests.rb Auto-merging config/webpack.config.js Auto-merging config/application.rb Removing app/views/shared/icons/_wiki.svg Removing app/views/shared/icons/_pipelines.svg Removing app/views/shared/icons/_mr.svg Removing app/views/shared/icons/_milestones.svg Removing app/views/shared/icons/_members.svg Removing app/views/shared/icons/_files.svg Removing app/views/shared/icons/_delta.svg Removing app/views/shared/icons/_contributionanalytics.svg Removing app/views/shared/icons/_commits.svg Removing app/views/shared/icons/_activity.svg Auto-merging app/views/projects/new.html.haml Removing app/views/projects/boards/components/_board_list.html.haml Auto-merging app/views/projects/boards/_show.html.haml Auto-merging app/models/service.rb Auto-merging app/models/repository.rb Auto-merging app/models/project.rb Auto-merging app/models/namespace.rb Auto-merging app/models/issue.rb Auto-merging app/models/ci/build.rb Auto-merging app/finders/issues_finder.rb Auto-merging app/assets/stylesheets/pages/projects.scss Auto-merging app/assets/stylesheets/pages/environments.scss Auto-merging app/assets/stylesheets/pages/boards.scss CONFLICT (content): Merge conflict in app/assets/stylesheets/pages/boards.scss Auto-merging app/assets/javascripts/main.js CONFLICT (content): Merge conflict in app/assets/javascripts/main.js Auto-merging app/assets/javascripts/environments/stores/environments_store.js CONFLICT (content): Merge conflict in app/assets/javascripts/environments/stores/environments_store.js Auto-merging app/assets/javascripts/environments/components/environments_table.js CONFLICT (content): Merge conflict in app/assets/javascripts/environments/components/environments_table.js Auto-merging app/assets/javascripts/environments/components/environment_item.js CONFLICT (content): Merge conflict in app/assets/javascripts/environments/components/environment_item.js Auto-merging app/assets/javascripts/environments/components/environment.js CONFLICT (content): Merge conflict in app/assets/javascripts/environments/components/environment.js Auto-merging app/assets/javascripts/boards/components/board_new_issue.js Auto-merging .gitlab-ci.yml Automatic merge failed; fix conflicts and then commit the result. Capturing conflicting files... [2017-04-05 23:01:08 +0200] --> git status --short [2017-04-05 23:01:08 +0200] --> git add app/assets/javascripts/environments/components/environment.js app/assets/javascripts/environments/components/environment_item.js app/assets/javascripts/environments/components/environments_table.js app/assets/javascripts/environments/stores/environments_store.js app/assets/javascripts/main.js app/assets/stylesheets/pages/boards.scss spec/javascripts/environments/environment_spec.js spec/javascripts/environments/environments_store_spec.js [2017-04-05 23:01:08 +0200] --> git commit --quiet --no-edit [2017-04-05 23:01:08 +0200] --> git rev-parse --verify HEAD [2017-04-05 23:01:08 +0200] --> git log --no-merges --pretty=format:'%an' app/assets/javascripts/environments/components/environment.js [2017-04-05 23:01:10 +0200] --> git log --no-merges --pretty=format:'%an' app/assets/javascripts/environments/components/environment_item.js [2017-04-05 23:01:10 +0200] --> git log --no-merges --pretty=format:'%an' app/assets/javascripts/environments/components/environments_table.js [2017-04-05 23:01:11 +0200] --> git log --no-merges --pretty=format:'%an' app/assets/javascripts/environments/stores/environments_store.js [2017-04-05 23:01:11 +0200] --> git log --no-merges --pretty=format:'%an' app/assets/javascripts/main.js [2017-04-05 23:01:11 +0200] --> git log --no-merges --pretty=format:'%an' app/assets/stylesheets/pages/boards.scss [2017-04-05 23:01:11 +0200] --> git log --no-merges --pretty=format:'%an' spec/javascripts/environments/environment_spec.js [2017-04-05 23:01:12 +0200] --> git log --no-merges --pretty=format:'%an' spec/javascripts/environments/environments_store_spec.js The following command will not be actually run, because of TEST env: [2017-04-05 23:01:12 +0200] --| git push git@gitlab.com:gitlab-org/gitlab-ee.git ce-to-ee-2017-04-05:ce-to-ee-2017-04-05 The following merge request will not be created, because of TEST env: #<MergeRequest:0x007f814cab1628 @title="CE Upstream - Wednesday", @source_branch="ce-to-ee-2017-04-05", @labels="CE Upstream", @description="Files to resolve:\n\n- [ ] @filipa Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/app/assets/javascripts/environments/components/environment.js\n- [ ] @filipa Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/app/assets/javascripts/environments/components/environment_item.js\n- [ ] @filipa Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/app/assets/javascripts/environments/components/environments_table.js\n- [ ] @filipa Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/app/assets/javascripts/environments/stores/environments_store.js\n- [ ] @mikegreiling Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/app/assets/javascripts/main.js\n- [ ] @iamphill Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/app/assets/stylesheets/pages/boards.scss\n- [ ] @filipa Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/spec/javascripts/environments/environment_spec.js\n- [ ] @filipa Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/5e87fd6c31beb8b2ed2954986b302ddb3bd38e57/spec/javascripts/environments/environments_store_spec.js"> --> Merge request "CE Upstream - Wednesday" created.
I need to write tests now... :)
- Resolved by username-removed-444
For the record, here is the log from the first totally successful run of the script:
› bundle exec rake upstream_merge Prepare repository... [2017-04-26 14:04:52 +0200] --> git clone --depth=1 --quiet --origin origin git@gitlab.com:gitlab-org/gitlab-ee.git /tmp/gitlab-ee [2017-04-26 14:05:27 +0200] --> git remote add upstream git@gitlab.com:gitlab-org/gitlab-ce.git [2017-04-26 14:05:27 +0200] --> git fetch --quiet --depth=200 origin master:master fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository [2017-04-26 14:05:33 +0200] --> git fetch --quiet --depth=200 origin master fatal: The remote end hung up unexpectedly [2017-04-26 14:09:12 +0200] --> git fetch --quiet origin master:master fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository [2017-04-26 14:09:16 +0200] --> git fetch --quiet origin master fatal: The remote end hung up unexpectedly [2017-04-26 14:09:19 +0200] --> git checkout --quiet -b ce-to-ee-2017-04-26 origin/master [2017-04-26 14:09:20 +0200] --> git fetch --quiet --depth=200 upstream master:master [2017-04-26 14:09:44 +0200] --> git fetch --quiet --depth=200 upstream master [2017-04-26 14:09:51 +0200] --> git merge --quiet --no-ff upstream/master ce-to-ee-2017-04-26 Auto-merging yarn.lock CONFLICT (content): Merge conflict in yarn.lock Removing vendor/assets/javascripts/notebooklab.js Auto-merging spec/support/test_env.rb CONFLICT (content): Merge conflict in spec/support/test_env.rb Removing spec/services/ci/expire_pipeline_cache_service_spec.rb Auto-merging spec/requests/git_http_spec.rb Auto-merging spec/requests/api/v3/settings_spec.rb Auto-merging spec/requests/api/v3/projects_spec.rb Auto-merging spec/requests/api/v3/merge_requests_spec.rb Auto-merging spec/requests/api/v3/merge_request_diffs_spec.rb Auto-merging spec/requests/api/v3/issues_spec.rb Auto-merging spec/requests/api/v3/groups_spec.rb Auto-merging spec/requests/api/users_spec.rb Auto-merging spec/requests/api/settings_spec.rb Auto-merging spec/requests/api/projects_spec.rb Auto-merging spec/requests/api/merge_requests_spec.rb Auto-merging spec/requests/api/members_spec.rb Auto-merging spec/requests/api/issues_spec.rb Auto-merging spec/requests/api/internal_spec.rb Auto-merging spec/requests/api/groups_spec.rb Auto-merging spec/requests/api/branches_spec.rb Auto-merging spec/requests/api/boards_spec.rb Auto-merging spec/models/merge_request_spec.rb Auto-merging spec/lib/gitlab/saml/user_spec.rb Auto-merging spec/javascripts/blob/blob_fork_suggestion_spec.js CONFLICT (content): Merge conflict in spec/javascripts/blob/blob_fork_suggestion_spec.js Auto-merging spec/helpers/ci_status_helper_spec.rb Auto-merging spec/features/protected_branches_spec.rb CONFLICT (content): Merge conflict in spec/features/protected_branches_spec.rb Auto-merging spec/features/projects/edit_spec.rb Auto-merging spec/features/merge_requests/widget_spec.rb Auto-merging spec/features/merge_requests/user_uses_slash_commands_spec.rb Auto-merging spec/features/merge_requests/diffs_spec.rb CONFLICT (content): Merge conflict in spec/features/merge_requests/diffs_spec.rb Auto-merging spec/features/issues_spec.rb Auto-merging spec/features/issues/user_uses_slash_commands_spec.rb Auto-merging spec/features/issues/issue_sidebar_spec.rb Auto-merging spec/features/issues/filtered_search/search_bar_spec.rb Auto-merging spec/features/boards/boards_spec.rb Auto-merging spec/features/admin/admin_users_spec.rb Auto-merging spec/factories/issues.rb Auto-merging spec/controllers/projects/merge_requests_controller_spec.rb Auto-merging spec/controllers/projects/environments_controller_spec.rb Auto-merging spec/controllers/projects/builds_controller_spec.rb Auto-merging scripts/prepare_build.sh CONFLICT (content): Merge conflict in scripts/prepare_build.sh Auto-merging package.json Auto-merging lib/gitlab/auth.rb Auto-merging lib/api/users.rb Auto-merging lib/api/merge_requests.rb Auto-merging lib/api/issues.rb Auto-merging lib/api/entities.rb Auto-merging features/steps/shared/authentication.rb Auto-merging features/steps/project/merge_requests.rb Removing doc/development/ci_setup.md Auto-merging doc/development/README.md Auto-merging doc/api/users.md Auto-merging doc/api/services.md Auto-merging doc/api/projects.md Auto-merging doc/api/merge_requests.md Auto-merging doc/api/issues.md Auto-merging db/schema.rb CONFLICT (content): Merge conflict in db/schema.rb Auto-merging config/initializers/1_settings.rb Auto-merging config/gitlab.yml.example Auto-merging config/database.yml.postgresql CONFLICT (content): Merge conflict in config/database.yml.postgresql Auto-merging app/views/shared/issuable/_filter.html.haml Auto-merging app/views/projects/settings/_head.html.haml Auto-merging app/views/projects/milestones/show.html.haml Auto-merging app/views/projects/blob/_header.html.haml CONFLICT (content): Merge conflict in app/views/projects/blob/_header.html.haml Auto-merging app/views/layouts/nav/_project.html.haml Removing app/services/ci/expire_pipeline_cache_service.rb Auto-merging app/models/merge_request.rb Auto-merging app/helpers/merge_requests_helper.rb Auto-merging app/controllers/projects/milestones_controller.rb Auto-merging app/controllers/admin/groups_controller.rb Auto-merging app/assets/stylesheets/framework/common.scss Auto-merging app/assets/javascripts/users_select.js Auto-merging README.md Auto-merging Gemfile.lock CONFLICT (content): Merge conflict in Gemfile.lock Auto-merging Gemfile Auto-merging CHANGELOG.md CONFLICT (content): Merge conflict in CHANGELOG.md Auto-merging .rubocop.yml Auto-merging .gitlab-ci.yml CONFLICT (content): Merge conflict in .gitlab-ci.yml Auto-merging .gitignore Automatic merge failed; fix conflicts and then commit the result. Capturing conflicting files... [2017-04-26 14:09:52 +0200] --> git status --short [2017-04-26 14:09:52 +0200] --> git add .gitlab-ci.yml CHANGELOG.md Gemfile.lock app/views/projects/blob/_header.html.haml config/database.yml.postgresql db/schema.rb scripts/prepare_build.sh spec/features/merge_requests/diffs_spec.rb spec/features/protected_branches_spec.rb spec/javascripts/blob/blob_fork_suggestion_spec.js spec/support/test_env.rb yarn.lock [2017-04-26 14:09:52 +0200] --> git commit --quiet --no-edit [2017-04-26 14:09:52 +0200] --> git log -1 --pretty=format:'%B' [2017-04-26 14:09:52 +0200] --> git commit --quiet --amend --message Merge remote-tracking branch 'upstream/master' into ce-to-ee-2017-04-26 # Conflicts: # .gitlab-ci.yml # CHANGELOG.md # Gemfile.lock # app/views/projects/blob/_header.html.haml # config/database.yml.postgresql # db/schema.rb # scripts/prepare_build.sh # spec/features/merge_requests/diffs_spec.rb # spec/features/protected_branches_spec.rb # spec/javascripts/blob/blob_fork_suggestion_spec.js # spec/support/test_env.rb # yarn.lock [ci skip] [2017-04-26 14:09:52 +0200] --> git rev-parse --verify HEAD [2017-04-26 14:09:52 +0200] --> git log --no-merges --pretty=format:'%an' .gitlab-ci.yml [2017-04-26 14:09:54 +0200] --> git log --no-merges --pretty=format:'%an' CHANGELOG.md [2017-04-26 14:09:54 +0200] --> git log --no-merges --pretty=format:'%an' Gemfile.lock [2017-04-26 14:09:54 +0200] --> git log --no-merges --pretty=format:'%an' app/views/projects/blob/_header.html.haml [2017-04-26 14:09:55 +0200] --> git log --no-merges --pretty=format:'%an' config/database.yml.postgresql [2017-04-26 14:09:55 +0200] --> git log --no-merges --pretty=format:'%an' db/schema.rb [2017-04-26 14:09:55 +0200] --> git log --no-merges --pretty=format:'%an' scripts/prepare_build.sh [2017-04-26 14:09:55 +0200] --> git log --no-merges --pretty=format:'%an' spec/features/merge_requests/diffs_spec.rb [2017-04-26 14:09:56 +0200] --> git log --no-merges --pretty=format:'%an' spec/features/protected_branches_spec.rb [2017-04-26 14:09:56 +0200] --> git log --no-merges --pretty=format:'%an' spec/javascripts/blob/blob_fork_suggestion_spec.js [2017-04-26 14:09:56 +0200] --> git log --no-merges --pretty=format:'%an' spec/support/test_env.rb [2017-04-26 14:09:57 +0200] --> git log --no-merges --pretty=format:'%an' yarn.lock [2017-04-26 14:09:57 +0200] --> git push git@gitlab.com:gitlab-org/gitlab-ee.git ce-to-ee-2017-04-26:ce-to-ee-2017-04-26 Counting objects: 2119, done. Delta compression using up to 4 threads. Compressing objects: 100% (694/694), done. Writing objects: 100% (2119/2119), 372.51 KiB | 0 bytes/s, done. Total 2119 (delta 1617), reused 1876 (delta 1410) remote: Resolving deltas: 100% (1617/1617), completed with 502 local objects. remote: remote: To create a merge request for ce-to-ee-2017-04-26, visit: remote: https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/new?merge_request%5Bsource_branch%5D=ce-to-ee-2017-04-26 remote: To gitlab.com:gitlab-org/gitlab-ee.git * [new branch] ce-to-ee-2017-04-26 -> ce-to-ee-2017-04-26 Removing /tmp/gitlab-ee... Files to resolve: - [ ] @rymai Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/.gitlab-ci.yml - [ ] @godfat Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/CHANGELOG.md - [ ] @stanhu Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/Gemfile.lock - [ ] @madlittlemods Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/app/views/projects/blob/_header.html.haml - [ ] @godfat Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/config/database.yml.postgresql - [ ] blackst0ne Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/db/schema.rb - [ ] @godfat Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/scripts/prepare_build.sh - [ ] @smcgivern Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/spec/features/merge_requests/diffs_spec.rb - [ ] Jacopo Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/spec/features/protected_branches_spec.rb - [ ] @madlittlemods Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/spec/javascripts/blob/blob_fork_suggestion_spec.js - [ ] @eReGeBe Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/spec/support/test_env.rb - [ ] @kushalpandya Please resolve https://gitlab.com/gitlab-org/gitlab-ee/blob/ac1e1b053bc1853f4eb7f4ba6eb944fdfc1158ca/yarn.lock Once the conflicts resolved, please push (no force-push!) to the `ce-to-ee-2017-04-26` branch. Thanks in advance! ❤️ Note: This merge request was created by an experimental script, it's not perfect (yet)! Do you want to create the above merge request (yes/no)? yes --> Merge request "CE upstream - Wednesday" created. https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/1725
That looks awesome @rymai!
added 1 commit
-
e7c49092 - Don't hard-code the
CE Upstream
label in MergeRequest
-
e7c49092 - Don't hard-code the
mentioned in merge request !139 (merged)
FYI the
bundle exec rake upstream_merge
task works if you checkout this branch but you will have to commentabort('Please use the master branch and make sure you are up to date.'.colorize(:red))
inRakefile
. :)The current status is that I'm waiting on !139 (merged) to be merged, and I still need to add test for this task.
mentioned in merge request !168 (merged)
mentioned in merge request !173 (merged)
mentioned in merge request !177
marked the checklist item Add
head
,status
,log
,fetch
,checkout_new_branch
,pull
,push
, andmerge
toRemoteRepository
: !177 as incompleteThe first commit is f79c8f2332a91fd43f4b054a0f8fb85a8324cb91 picked from !177.
Edited by username-removed-128633