Problem upgrading Gitlab 19.0.x to 19.1.0 due to changes with /opt/gitlab/embedded/service/gitlab-rails/.agents/skills
### Summary Whilst upgrading Gitlab to 19.1.0 from 19.0.1 an error is encountered: ```shell Error: Transaction test error: file /opt/gitlab/embedded/service/gitlab-rails/.agents/skills from install of gitlab-ee-19.1.0-ee.0.el9.x86_64 conflicts with file from package gitlab-ee-19.0.2-ee.0.el9.x86_64 ``` As above, it affects distributions based on Red Hat Enterprise Linux. On further analysis, we can see prior to the upgrade that the package content is: ```shell /opt/gitlab/embedded/service/gitlab-rails/.agents/skills /opt/gitlab/embedded/service/gitlab-rails/.agents/skills/gitlab-coding-principles /opt/gitlab/embedded/service/gitlab-rails/.agents/skills/gitlab-coding-principles/SKILL.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/gitlab-coding-principles /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/gitlab-coding-principles/SKILL.md ``` After upgrade, we can see the package content is: ```shell /opt/gitlab/embedded/service/gitlab-rails/.agents/skills /opt/gitlab/embedded/service/gitlab-rails/.claude/skills /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/README.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/dependency-management-auto-remediation /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/dependency-management-auto-remediation/SKILL.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/gitlab-coding-principles /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/gitlab-coding-principles/SKILL.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/SKILL.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/assets /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/assets/graphql /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/assets/graphql/create-note.graphql /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/assets/graphql/epic-notes.graphql /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/epic-comments.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/epics.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/issue-api.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/issue-links.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/mr-review.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/multi-host.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/nested-groups.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/search.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/references/work-items.md /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/scripts /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/scripts/create-epic-note.sh /opt/gitlab/embedded/service/gitlab-rails/.claude/skills/glab/scripts/epic-notes.sh ``` Further checking the `/opt/gitlab/embedded/service/gitlab-rails/.agents` directory - prior to upgrade `.agents/skills` is a directory with a directory called `gitlab-coding-principles` and a file `SKILLS.md`. After upgrade, we now see that the `skills` directory is a symlink to `.claude/skills`. Whilst the package links above do not show this, the status on disk does. ```shell root@repo:/opt/gitlab/embedded/service/gitlab-rails/.agents# ls -lha total 12K drwxr-xr-x. 3 root root 38 Jun 19 09:30 . drwxr-xr-x. 41 root root 8.0K Jun 19 09:30 .. lrwxrwxrwx. 1 root root 17 Jun 17 12:14 skills -> ../.claude/skills drwxr-xr-x. 3 root root 38 Jun 10 07:16 skills.old ``` It seems whoever packaged it, didn't take into account this change, which causes the upgrade to fail. A workaround is to rename `skills` to `skills.old` which is what I did (hence why it's shown in the results above), but it's also possible to delete it entirely so that the upgrade creates the symlink and doesn't end up with a conflict. This issue was initially reported by other users on the Gitlab forum: 1. https://forum.gitlab.com/t/gitlab-ce-19-0-0-19-1-0-upgrade-fails-with-agents-skills-file-conflict/134277/2 2. https://forum.gitlab.com/t/error-in-upgrade-to-gitlab-19-1-0/134279 3. https://forum.gitlab.com/t/upgrade-to-19-1-0-fails-with-file-conflict-on-opt-gitlab-embedded-service-gitlab-rails-agents-skills/134278 ### Steps to reproduce 1. Install GitLab 19.0.0 on RHEL 8 (either CE or EE) 2. Upgrade with yum/dnf to 19.1.0 3. See the conflict error ### Example Project ### What is the current *bug* behavior? Package upgrades (RPM) fail with file/directory conflicts and cannot continue. ### What is the expected *correct* behavior? File/directory changes do not impact upgrades and stop. ### Relevant logs and/or screenshots ### Output of checks ### Possible fixes Remove `.agents` and `.claude` from the distributed packages. #### Workarounds From https://forum.gitlab.com/t/gitlab-ce-19-0-0-19-1-0-upgrade-fails-with-agents-skills-file-conflict/134277 > As a temporary workaround, renaming the directory allowed the upgrade transaction to succeed. > > ```shell > mv /opt/gitlab/embedded/service/gitlab-rails/.agents/skills > /opt/gitlab/embedded/service/gitlab-rails/.agents/skills.bak > ``` From https://forum.gitlab.com/t/upgrade-to-19-1-0-fails-with-file-conflict-on-opt-gitlab-embedded-service-gitlab-rails-agents-skills/134278 > Removing the conflicting path before upgrade resolves it: > > ``` > rm -rf /opt/gitlab/embedded/service/gitlab-rails/.agents/skills > sudo dnf update --refresh ./gitlab-ee-19.1.0-ee.0.amazon2023.x86_64.rpm > ``` ### Patch release information for backports If the bug fix needs to be backported in a [patch release](https://handbook.gitlab.com/handbook/engineering/releases/patch-releases) to a version under [the maintenance policy](https://docs.gitlab.com/policy/maintenance/), please follow the steps on the [patch release runbook for GitLab engineers](https://gitlab.com/gitlab-org/release/docs/-/blob/master/general/patch/engineers.md). Refer to the [internal "Release Information" dashboard](https://dashboards.gitlab.net/d/delivery-release_info/delivery3a-release-information?orgId=1) for information about the next patch release, including the targeted versions, expected release date, and current status. #### High-severity bug remediation To remediate high-severity issues requiring an [internal release](https://handbook.gitlab.com/handbook/engineering/releases/internal-releases/) for single-tenant SaaS instances, refer to the [internal release process for engineers](https://gitlab.com/gitlab-org/release/docs/-/blob/master/general/internal-releases/engineers.md?ref_type=heads).
issue