Module: PackagesHelper

Instance Method Summary collapse

Methods included from API::Helpers::RelatedResourcesHelpers

#expose_path, #expose_url, #issues_available?, #mrs_available?, #project_feature_string_access_level

Instance Method Details

#can_delete_group_packages?(group) ⇒ Boolean

Returns:

  • (Boolean)


87
88
89
90
# File 'app/helpers/packages_helper.rb', line 87

def can_delete_group_packages?(group)
  group.packages_feature_enabled? &&
    Ability.allowed?(current_user, :destroy_package, group)
end

#can_delete_packages?(project) ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
85
# File 'app/helpers/packages_helper.rb', line 82

def can_delete_packages?(project)
  Gitlab.config.packages.enabled &&
    Ability.allowed?(current_user, :destroy_package, project)
end

#cleanup_settings_data(project) ⇒ Object



127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'app/helpers/packages_helper.rb', line 127

def cleanup_settings_data(project)
  {
    project_id: project.id,
    project_path: project.full_path,
    cadence_options: cadence_options.to_json,
    keep_n_options: keep_n_options.to_json,
    older_than_options: older_than_options.to_json,
    is_admin: current_user&.admin.to_s,
    admin_settings_path: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'),
    project_settings_path: project_settings_packages_and_registries_path(project),
    enable_historic_entries: container_expiration_policies_historic_entry_enabled?.to_s,
    help_page_path: help_page_path(
      'user/packages/container_registry/reduce_container_registry_storage.md',
      anchor: 'cleanup-policy'
    ),
    show_cleanup_policy_link: show_cleanup_policy_link(project).to_s,
    tags_regex_help_page_path: help_page_path(
      'user/packages/container_registry/reduce_container_registry_storage.md',
      anchor: 'regex-pattern-examples'
    )
  }
end

#composer_config_repository_name(group_id) ⇒ Object



50
51
52
# File 'app/helpers/packages_helper.rb', line 50

def composer_config_repository_name(group_id)
  "#{Gitlab.config.gitlab.host}/#{group_id}"
end

#composer_registry_url(group_id) ⇒ Object



46
47
48
# File 'app/helpers/packages_helper.rb', line 46

def composer_registry_url(group_id)
  expose_url(api_v4_group___packages_composer_packages_path(id: group_id, format: '.json'))
end

#group_packages_template_data(group) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'app/helpers/packages_helper.rb', line 92

def group_packages_template_data(group)
  packages_template_data.merge({
    can_delete_packages: can_delete_group_packages?(group).to_s,
    endpoint: group_packages_path(group),
    full_path: group.full_path,
    group_list_url: group_packages_path(group),
    page_type: 'groups',
    npm_group_url: package_registry_group_url(group.id, :npm),

    settings_path: if show_group_package_registry_settings(group)
                     group_settings_packages_and_registries_path(group)
                   else
                     ''
                   end
  })
end

#nuget_package_registry_url(project_id) ⇒ Object



6
7
8
# File 'app/helpers/packages_helper.rb', line 6

def nuget_package_registry_url(project_id)
  expose_url(api_v4_projects_packages_nuget_index_path(id: project_id, format: '.json'))
end

#package_registry_group_url(group_id, registry_type = :maven) ⇒ Object



14
15
16
17
18
# File 'app/helpers/packages_helper.rb', line 14

def package_registry_group_url(group_id, registry_type = :maven)
  group_api_path = expose_path(api_v4_groups_path(id: group_id))
  package_registry_group_path = "#{group_api_path}/-/packages/#{registry_type}"
  expose_url(package_registry_group_path)
end

#package_registry_instance_url(registry_type) ⇒ Object



10
11
12
# File 'app/helpers/packages_helper.rb', line 10

def package_registry_instance_url(registry_type)
  expose_url("api/#{::API::API.version}/packages/#{registry_type}")
end

#package_registry_project_url(project_id, registry_type = :maven) ⇒ Object



20
21
22
23
24
# File 'app/helpers/packages_helper.rb', line 20

def package_registry_project_url(project_id, registry_type = :maven)
  project_api_path = api_v4_projects_path(id: project_id)
  package_registry_project_path = "#{project_api_path}/packages/#{registry_type}"
  expose_url(package_registry_project_path)
end

#packages_and_registries_group_settings_template_data(group) ⇒ Object



162
163
164
165
166
167
# File 'app/helpers/packages_helper.rb', line 162

def packages_and_registries_group_settings_template_data(group)
  {
    group_path: group.full_path,
    group_dependency_proxy_path: group_dependency_proxy_path(group)
  }
end

#project_packages_template_data(project) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'app/helpers/packages_helper.rb', line 109

def project_packages_template_data(project)
  packages_template_data.merge({
    can_delete_packages: can_delete_packages?(project).to_s,
    endpoint: project_packages_path(project),
    full_path: project.full_path,
    page_type: 'projects',
    project_list_url: project_packages_path(project),
    group_list_url: project.group ? group_packages_path(project.group) : '',
    npm_group_url: package_registry_group_url(project.group&.id, :npm),

    settings_path: if show_package_registry_settings(project)
                     project_settings_packages_and_registries_path(project, anchor: 'package-registry-settings')
                   else
                     ''
                   end
  })
end

#pypi_registry_url(project) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'app/helpers/packages_helper.rb', line 31

def pypi_registry_url(project)
  full_url = expose_url(
    api_v4_projects_packages_pypi_simple_package_name_path(
      { id: project.id, package_name: '' },
      true
    )
  )

  if project.project_feature.public_packages?
    full_url
  else
    full_url.sub!('://', '://gitlab-ci-token:<your_personal_token>@')
  end
end

#settings_data(project) ⇒ Object



150
151
152
153
154
155
156
157
158
159
160
# File 'app/helpers/packages_helper.rb', line 150

def settings_data(project)
  cleanup_settings_data(project).merge(
    show_container_registry_settings: show_container_registry_settings(project).to_s,
    show_package_registry_settings: show_package_registry_settings(project).to_s,
    is_container_registry_metadata_database_enabled: (
      show_container_registry_settings(project) &&
        ContainerRegistry::GitlabApiClient.supports_gitlab_api?
    ).to_s,
    cleanup_settings_path: cleanup_image_tags_project_settings_packages_and_registries_path(project)
  )
end


60
61
62
63
64
65
# File 'app/helpers/packages_helper.rb', line 60

def show_cleanup_policy_link(project)
  show_container_registry_settings(project) &&
    project.feature_available?(:container_registry, current_user) &&
    project.container_repositories.exists? &&
    !project.container_expiration_policy&.enabled
end

#show_container_registry_settings(project) ⇒ Object



67
68
69
70
# File 'app/helpers/packages_helper.rb', line 67

def show_container_registry_settings(project)
  Gitlab.config.registry.enabled &&
    Ability.allowed?(current_user, :admin_container_image, project)
end

#show_group_package_registry_settings(group) ⇒ Object



77
78
79
80
# File 'app/helpers/packages_helper.rb', line 77

def show_group_package_registry_settings(group)
  group.packages_feature_enabled? &&
    Ability.allowed?(current_user, :admin_group, group)
end

#show_package_registry_settings(project) ⇒ Object



72
73
74
75
# File 'app/helpers/packages_helper.rb', line 72

def show_package_registry_settings(project)
  Gitlab.config.packages.enabled &&
    Ability.allowed?(current_user, :admin_package, project)
end

#terraform_module_presenter(package) ⇒ Object



26
27
28
29
# File 'app/helpers/packages_helper.rb', line 26

def terraform_module_presenter(package)
  presenter = ::Packages::TerraformModule::PackagePresenter.new(package)
  presenter.to_json
end

#track_package_event(event_name, scope, **args) ⇒ Object



54
55
56
57
58
# File 'app/helpers/packages_helper.rb', line 54

def track_package_event(event_name, scope, **args)
  ::Packages::CreateEventService.new(args[:project], current_user, event_name: event_name, scope: scope).execute
  category = args.delete(:category) || self.class.name
  ::Gitlab::Tracking.event(category, event_name.to_s, **args)
end