Investigate moving the Package Registry from EE to Core
Topic to Evaluate
GitLab recently announced 18 features are moving to open source. This includes support for a set of package managers so all your packages can stay in one place.
Prior to making those features available to the community for free, we need to better the implications of making this change and come up with a plan to do it. The outcome of the investigation will be a set of weighted and scheduled issues in the epic &2867 (closed).
Tasks to Evaluate
-
Determine feasibility of moving the Package Registry from GitLab Premium to GitLab Core -
Create issue(s) for implementation and add them to the epic &2867 (closed) -
Set weight on implementation issue(s) -
If weight is greater than 5, break issue into smaller issues
Risks and Implementation Considerations
Breakdown of the files to be moved
Note This list does not include the spec files. For each file listed here, there is likely a matching spec file that will also need to be moved.
This list is not yet complete and is still in progress.
The package stage consists of three main components: The APIs that package manager clients interact with to push/pull and work with packages, the GitLab frontend views that display package information, the GitLab backend that supports those frontend views.
This migration will involve moving all of those components and their associated tests from ee
locations to non-ee locations in addition to removing the license restriction and related code.
To begin, I believe we should move the front end code and all of it's supporting backend code first. This will allow packages to display on the front end for core, and as we move each package manager, we shouldn't need to further change the front end
These MRs will all be very large, but as long as they are limited to only file movement, the reviews should be straightforward and move quickly.
One of the biggest challenges will be dealing with the shared backend code.
Client API
Maven
ee/lib/api/maven_packages.rb
ee/app/models/packages/maven_metadatum.rb
ee/app/finders/packages/maven/package_finder.rb
ee/app/services/packages/maven/create_package_service.rb
ee/app/services/packages/maven/find_or_create_package_service.rb
NPM
ee/lib/api/npm_packages.rb
ee/app/finders/packages/npm/package_finder.rb
ee/app/services/packages/npm/create_package_service.rb
ee/app/services/packages/npm/create_tag_service.rb
ee/lib/ee/api/entities/npm_package_tag.rb
ee/lib/ee/api/entities/npm_package.rb
ee/app/presenters/packages/npm/package_presenter.rb
Conan
ee/lib/api/conan_packages.rb
ee/app/models/packages/conan_metadatum.rb
ee/app/models/packages/conan_file_metadatum.rb
ee/lib/api/helpers/packages/conan/api_helpers.rb
ee/app/finders/packages/conan/package_file_finder.rb
- `ee/app/finders/packages/conan/package_finder.rb
ee/app/services/packages/conan/create_package_file_service.rb
ee/app/services/packages/conan/create_package_service.rb
ee/app/services/packages/conan/search_service.rb
ee/app/presenters/packages/conan/package_presenter.rb
ee/lib/ee/api/entities/conan_package/conan_package_manifest.rb
ee/lib/ee/api/entities/conan_package/conan_package_snapshot.rb
ee/lib/ee/api/entities/conan_package/conan_recipe_manifest.rb
ee/lib/ee/api/entities/conan_package/conan_recipe_snapshot.rb
ee/lib/ee/api/entities/conan_package/conan_upload_urls.rb
NuGet
ee/lib/api/nuget_packages.rb
ee/lib/api/helpers/packages/nuget/metadata_presenter_helpers.rb
ee/app/finders/packages/nuget/package_finder.rb
ee/app/services/packages/nuget/create_package_service.rb
ee/app/services/packages/nuget/metadata_extraction_service.rb
ee/app/services/packages/nuget/search_service.rb
ee/app/services/packages/nuget/update_package_from_metadata_service.rb
ee/lib/ee/api/entities/nuget/package_metadata_catalog_entry.rb
ee/lib/ee/api/entities/nuget/package_metadata.rb
ee/lib/ee/api/entities/nuget/packages_metadata_item.rb
ee/lib/ee/api/entities/nuget/packages_metadata.rb
ee/lib/ee/api/entities/nuget/packages_versions.rb
ee/lib/ee/api/entities/nuget/search_result_version.rb
ee/lib/ee/api/entities/nuget/search_result.rb
ee/lib/ee/api/entities/nuget/search_results.rb
ee/lib/ee/api/entities/nuget/service_index.rb
ee/app/presenters/packages/nuget/package_metadata_presenter.rb
ee/app/presenters/packages/nuget/packages_metadata_presenter.rb
ee/app/presenters/packages/nuget/packages_versions_presenter.rb
ee/app/presenters/packages/nuget/search_results_presenter.rb
ee/app/presenters/packages/nuget/service_index_presenter.rb
ee/app/workers/packages/nuget/extraction_worker.rb
Backend internal (controllers, etc)
ee/app/controllers/groups/packages_controller.rb
ee/app/controllers/projects/packages/packages_controller.rb
ee/app/controllers/projects/packages/package_files_controller.rb
ee/app/controllers/concerns/packages_access.rb
Shared Backend
ee/app/models/packages/package.rb
ee/app/models/packages/package_file.rb
ee/app/models/packages/dependency.rb
ee/app/models/packages/dependency_link.rb
ee/app/models/packages/build_info.rb
ee/app/models/packages/tag.rb
ee/lib/api/helpers/packages_helpers.rb
ee/lib/api/helpers/packages/basic_auth_helpers.rb
ee/lib/api/helpers/packages_manager_clients_helpers.rb
ee/app/finders/packages/group_packages_finder.rb
ee/app/finders/packages/package_file_finder.rb
ee/app/finders/packages/package_finder.rb
ee/app/finders/packages/packages_finder.rb
ee/app/finders/packages/tags_finder.rb
ee/app/uploaders/packages/package_file_uploader.rb
ee/app/services/packages/create_dependency_service.rb
ee/app/services/packages/create_package_file_service.rb
ee/app/services/packages/remove_tag_service.rb
ee/lib/ee/api/entities/package_file.rb
ee/lib/ee/api/entities/package.rb
ee/lib/ee/api/entities/package/pipeline.rb
ee/app/presenters/packages/detail/package_presenter.rb
ee/lib/ee/gitlab/regex.rb
Front End
Assets > Javascripts
Details
ee/app/assets/javascripts/packages/details/components/activity.vue
ee/app/assets/javascripts/packages/details/components/app.vue
ee/app/assets/javascripts/packages/details/components/code_instruction.vue
ee/app/assets/javascripts/packages/details/components/conan_installation.vue
ee/app/assets/javascripts/packages/details/components/information.vue
ee/app/assets/javascripts/packages/details/components/maven_installation.vue
ee/app/assets/javascripts/packages/details/components/npm_installation.vue
ee/app/assets/javascripts/packages/details/components/nuget_installation.vue
ee/app/assets/javascripts/packages/details/components/package_title.vue
ee/app/assets/javascripts/packages/details/store/getters.js
ee/app/assets/javascripts/packages/details/store/index.js
ee/app/assets/javascripts/packages/details/store/state.js
ee/app/assets/javascripts/packages/details/constants.js
ee/app/assets/javascripts/packages/details/index.js
ee/app/assets/javascripts/packages/details/utils.js
List
ee/app/assets/javascripts/packages/list/components/packages_filter.vue
ee/app/assets/javascripts/packages/list/components/packages_list_app.vue
ee/app/assets/javascripts/packages/list/components/packages_list_loader.vue
-
ee/app/assets/javascripts/packages/list/components/packages_list_row.vue
(Not merged yet) ee/app/assets/javascripts/packages/list/components/packages_list.vue
ee/app/assets/javascripts/packages/list/components/packages_sort.vue
-
ee/app/assets/javascripts/packages/list/components/publish_method.vue
(Not merged yet) ee/app/assets/javascripts/packages/list/stores/actions.js
ee/app/assets/javascripts/packages/list/stores/getters.js
ee/app/assets/javascripts/packages/list/stores/index.js
ee/app/assets/javascripts/packages/list/stores/mutation_types.js
ee/app/assets/javascripts/packages/list/stores/mutations.js
ee/app/assets/javascripts/packages/list/stores/state.js
ee/app/assets/javascripts/packages/list/constants.js
ee/app/assets/javascripts/packages/list/packages_list_app_bundle.js
ee/app/assets/javascripts/packages/list/utils.js
Shared
ee/app/assets/javascripts/packages/shared/components/package_tags.vue
ee/app/assets/javascripts/packages/shared/constants.js
ee/app/assets/javascripts/packages/shared/utils.js
Views > Groups
-
ee/app/views/groups/packages/_legacy_package_list.html.haml
(can probably delete) ee/app/views/groups/packages/index.html.haml
Views > Projects
-
ee/app/views/projects/packages/packages/_legacy_package_list.html.haml
(can probably delete) ee/app/views/projects/packages/packages/index.html.haml
ee/app/views/projects/packages/packages/show.html.haml
Views > Misc
ee/app/views/admin/application_settings/_package_registry.haml
ee/app/views/layouts/nav/sidebar/_project_packages_link.html.haml
ee/app/views/groups/sidebar/_packages.html.haml
-
ee/app/views/shared/packages/_no_packages.html.haml
(I don't think this is needed anymore)
Additional methods to be aware of
stub_licensed_features(packages: true/false)
feature_available?(:packages)