Project Topics: detach from tags
### Initial situation In GitLab, you can add arbitrary **topics** to a ~project in the project settings. <details> <summary>Project settings > General > Topics (screenshot)</summary> ![image](/uploads/7656f2d433ddbc1f12e1b9ab3c743d4e/image.png) </details> In the **backend**, these topics are managed as so-called `Tags`, which are also used for CI runners and CI builds. And also in the **frontend**, the term `tag` is sometimes used instead of `topic`. E.g. on the `Explore projects` page, you can filter the projects by topic using the parameter `tag` instead of `topic`: ``` http://gdk.test:3000/explore/projects?tag=topic1 ``` And on the `Project overview` page, you can see the topics as well as the real tags (git tags): ![image](/uploads/87958a3e67a812c301b35b9bc91100df/image.png) ### Ideas We want to give a boost to the use of project topics and have several ideas: - extend API functionality for topics - add `Expore topics` page - make input of topics more convenient using autocomplete or a selection component - add automatic suggestions of suitable topics - ... But before we can tackle these ideas as ~"Community contribution", the confusion between topics and tags should be resolved first. ### Proposal The existing `Tag` and `Tagging` models are used for CI runners (`taggable_type=Ci::Runner`) and CI builds (`taggable_type=CommitStatus`) in the form of tags and are alienated for project topics (`taggable_type=Project`). In the context of projects, the term "tags" is used for topics as well as git tags, which is confusing. **Therefore, we propose to detach project topics from the `Tag` model and introduce a separate `Topic` model for project topics only.** Before we start tackling this as ~"Community contribution", we want to clarify if this idea is in your sense. ~"group::project management" WDYT? ### Implementation 1. [x] GraphQL field: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61250 1. [x] Data migration: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/61237 1. [x] Cleanup data migration: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62066 1. [x] ProjectsFinder parameter: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62093 1. [x] Create/update project parameter: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62191 1. [x] API entity `project`: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62206 1. [x] Remove `tags` association: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/62549 1. [x] Remove `tag_list` attribute: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/63493 1. [x] Data migration (2): https://gitlab.com/gitlab-org/gitlab/-/merge_requests/67574 1. [x] Data migration (3): https://gitlab.com/gitlab-org/gitlab/-/merge_requests/69199 1. [x] Data migration (4): https://gitlab.com/gitlab-org/gitlab/-/merge_requests/70018 1. [x] Clean up data migration: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68925 /cc @bufferoverflow
issue