diff --git a/app/views/projects/tags/_tag.html.haml b/app/views/projects/tags/_tag.html.haml index 0ee3b89b62960efa260da3d1d9eb270f6032ec40..f9d49b36a68f60d5eacb2a18512adfe7c07e92bf 100644 --- a/app/views/projects/tags/_tag.html.haml +++ b/app/views/projects/tags/_tag.html.haml @@ -21,7 +21,7 @@ .text-secondary = sprite_icon("rocket", size: 12) = _("Release") - = link_to release.name, project_releases_path(@project, anchor: release.tag), class: 'gl-text-blue-600!' + = link_to release.name, ::Feature.enabled?(:fix_release_path_in_tag_index_page, @project) ? project_release_path(@project, release) : project_releases_path(@project, anchor: release.tag), class: 'gl-text-blue-600!' - if tag.message.present? %pre.wrap diff --git a/config/feature_flags/development/fix_release_path_in_tag_index_page.yml b/config/feature_flags/development/fix_release_path_in_tag_index_page.yml new file mode 100644 index 0000000000000000000000000000000000000000..2af6d391983a49a076256965a2159912b79d87c3 --- /dev/null +++ b/config/feature_flags/development/fix_release_path_in_tag_index_page.yml @@ -0,0 +1,8 @@ +--- +name: fix_release_path_in_tag_index_page +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/87736 +rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/362915 +milestone: '15.1' +type: development +group: group::release +default_enabled: false diff --git a/spec/views/projects/tags/index.html.haml_spec.rb b/spec/views/projects/tags/index.html.haml_spec.rb index ae59c1aa4b2c266dc7000cd70f64b29074cd4efb..3169199b56a4340dd788592c66ca9ef48a085052 100644 --- a/spec/views/projects/tags/index.html.haml_spec.rb +++ b/spec/views/projects/tags/index.html.haml_spec.rb @@ -4,7 +4,6 @@ RSpec.describe 'projects/tags/index.html.haml' do let_it_be(:project) { create(:project, :repository) } - let_it_be(:tags) { project.repository.tags } let_it_be(:git_tag) { project.repository.tags.last } let_it_be(:release) do create(:release, project: project, @@ -25,9 +24,41 @@ allow(view).to receive(:current_user).and_return(project.namespace.owner) end - it 'renders links to the Releases page for tags associated with a release' do - render - expect(rendered).to have_link(release.name, href: project_releases_path(project, anchor: release.tag)) + context 'when tag is associated with a release' do + context 'with feature flag disabled' do + before do + stub_feature_flags(fix_release_path_in_tag_index_page: false) + end + + it 'renders a link to the release page with anchor' do + render + expect(rendered).to have_link(release.name, href: project_releases_path(project, anchor: release)) + end + end + + context 'with feature flag enabled' do + before do + stub_feature_flags(fix_release_path_in_tag_index_page: true) + end + + context 'when name contains backslash' do + let_it_be(:release) { create(:release, project: project, tag: 'test/v1') } + + before_all do + project.repository.add_tag(project.owner, 'test/v1', project.default_branch_or_main) + project.repository.expire_tags_cache + + project.releases.reload + + assign(:tags, Kaminari.paginate_array(tags).page(0)) + end + + it 'renders a link to the release page with backslash escaped' do + render + expect(rendered).to have_link(release.name, href: project_release_path(project, release)) + end + end + end end context 'when the most recent build for a tag has artifacts' do @@ -104,4 +135,8 @@ ) end end + + def tags + project.repository.tags + end end