katello 4.3.0.rc1 → 4.3.0.rc2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (208) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/v2/api_controller.rb +4 -0
  3. data/app/controllers/katello/api/v2/host_errata_controller.rb +5 -0
  4. data/app/controllers/katello/api/v2/host_packages_controller.rb +2 -0
  5. data/app/controllers/katello/api/v2/host_tracer_controller.rb +4 -0
  6. data/app/controllers/katello/api/v2/repository_sets_controller.rb +2 -2
  7. data/app/controllers/katello/api/v2/root_controller.rb +10 -19
  8. data/app/controllers/katello/concerns/api/v2/bulk_extensions.rb +3 -13
  9. data/app/controllers/katello/remote_execution_controller.rb +1 -1
  10. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +7 -5
  11. data/app/lib/actions/katello/repository/destroy.rb +3 -3
  12. data/app/lib/actions/pulp/repository/sync.rb +0 -2
  13. data/app/lib/actions/pulp3/abstract_async_task.rb +16 -4
  14. data/app/lib/katello/resources/cdn.rb +10 -1
  15. data/app/models/katello/concerns/host_managed_extensions.rb +7 -4
  16. data/app/models/katello/concerns/smart_proxy_extensions.rb +6 -2
  17. data/app/models/katello/content_view_version.rb +1 -6
  18. data/app/models/katello/glue/pulp/repo.rb +1 -2
  19. data/app/models/katello/host_tracer.rb +2 -0
  20. data/app/models/katello/repository.rb +2 -30
  21. data/app/models/katello/root_repository.rb +3 -43
  22. data/app/presenters/katello/host_package_presenter.rb +21 -0
  23. data/app/services/katello/bulk_items_helper.rb +35 -0
  24. data/app/services/katello/smart_proxy_helper.rb +10 -1
  25. data/app/views/foreman/job_templates/install_errata.erb +8 -6
  26. data/app/views/foreman/job_templates/resolve_traces.erb +4 -5
  27. data/app/views/foreman/job_templates/resolve_traces_-_katello_ansible_default.erb +3 -5
  28. data/app/views/foreman/smart_proxies/_content_sync.html.erb +7 -0
  29. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +4 -0
  30. data/app/views/katello/api/v2/{organizations/cdn_configuration.rabl → cdn_configurations/show.json.rabl} +4 -0
  31. data/app/views/katello/api/v2/content_facet/show.json.rabl +8 -0
  32. data/app/views/katello/api/v2/content_view_filters/show.json.rabl +0 -1
  33. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -1
  34. data/app/views/katello/api/v2/host_packages/base.json.rabl +2 -0
  35. data/app/views/katello/api/v2/organizations/show.json.rabl +1 -1
  36. data/app/views/katello/api/v2/repositories/show.json.rabl +0 -3
  37. data/config/routes/api/v2.rb +0 -10
  38. data/db/migrate/20211115215210_drop_ostree_branches.rb +13 -0
  39. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion-katello-bootstrap.js +0 -2
  40. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion_katello.js +0 -3
  41. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -10
  42. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -3
  43. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -10
  44. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-versions.module.js +0 -1
  45. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -7
  46. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/content.service.js +0 -5
  47. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.module.js +0 -1
  48. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.routes.js +0 -11
  49. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/organizations/fenced-pages.service.js +1 -2
  50. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -4
  51. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.filter.js +0 -10
  52. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  53. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +3 -6
  54. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +4 -1
  55. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/os-versions.service.js +1 -0
  56. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.routes.js +0 -9
  57. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +0 -8
  58. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
  59. data/lib/katello/permission_creator.rb +0 -1
  60. data/lib/katello/plugin.rb +0 -10
  61. data/lib/katello/tasks/reset.rake +2 -2
  62. data/lib/katello/version.rb +1 -1
  63. data/webpack/components/Packages/index.js +63 -0
  64. data/webpack/components/Search/Search.js +7 -1
  65. data/webpack/components/SelectAllCheckbox/index.js +2 -2
  66. data/webpack/components/Table/MainTable.scss +7 -1
  67. data/webpack/components/Table/TableHooks.js +10 -19
  68. data/webpack/components/Table/TableWrapper.js +0 -2
  69. data/webpack/components/WithOrganization/__snapshots__/withOrganization.test.js.snap +3 -3
  70. data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +1 -0
  71. data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +16 -0
  72. data/webpack/components/extensions/HostDetails/HostErrata/HostErrataConstants.js +2 -0
  73. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +11 -0
  74. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +2 -0
  75. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesSelectors.js +16 -0
  76. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +4 -0
  77. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +1 -0
  78. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.js +119 -25
  79. data/webpack/components/extensions/HostDetails/Tabs/HostTracesConstants.js +1 -0
  80. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +127 -0
  81. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.scss +11 -0
  82. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +30 -4
  83. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
  84. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsActions.js +73 -0
  85. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsConstants.js +2 -0
  86. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsSelectors.js +16 -0
  87. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +347 -0
  88. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.scss +7 -0
  89. data/webpack/components/extensions/HostDetails/Tabs/TracesTab.js +38 -31
  90. data/webpack/components/extensions/HostDetails/Tabs/__tests__/bookmarks.fixtures.json +12 -0
  91. data/webpack/components/extensions/HostDetails/Tabs/__tests__/contentOverrides.fixtures.json +227 -0
  92. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +423 -2
  93. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +28 -0
  94. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +91 -0
  95. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +120 -0
  96. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +307 -0
  97. data/webpack/components/extensions/HostDetails/Tabs/__tests__/resolveErrata.fixtures.json +35 -0
  98. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +55 -9
  99. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +28 -14
  100. data/webpack/containers/Application/overrides.scss +31 -9
  101. data/webpack/global_index.js +4 -2
  102. data/webpack/redux/reducers/RedHatRepositories/enabled.fixtures.js +0 -2
  103. data/webpack/scenes/Content/ContentConfig.js +23 -7
  104. data/webpack/scenes/ContentCredentials/ContentCredentialActions.js +18 -0
  105. data/webpack/scenes/ContentCredentials/ContentCredentialConstants.js +2 -0
  106. data/webpack/scenes/ContentCredentials/ContentCredentialSelectors.js +12 -0
  107. data/webpack/scenes/ContentCredentials/__tests__/contentCredentials.fixtures.js +73 -0
  108. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -1
  109. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +3 -3
  110. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +7 -2
  111. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.scss +7 -0
  112. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +9 -9
  113. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +6 -6
  114. data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +39 -37
  115. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReview.js +35 -33
  116. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +7 -5
  117. data/webpack/scenes/ContentViews/Delete/__tests__/cvVersionsData.fixtures.json +2 -6
  118. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentEnvironments.js +13 -14
  119. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +18 -9
  120. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +3 -2
  121. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterCreateResult.fixtures.json +1 -2
  122. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +1 -1
  123. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewErrataByDateDetails.fixtures.json +1 -8
  124. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetail.fixtures.json +1 -2
  125. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -8
  126. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvAllRepos.fixtures.json +0 -2
  127. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErratumFilterDetails.fixtures.json +1 -2
  128. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailModuleAffectedRepos.fixtures.json +1 -8
  129. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailWithAffectedRepos.fixtures.json +1 -8
  130. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilterDetails.fixtures.json +1 -2
  131. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvPackageFilterDetail.fixtures.json +1 -3
  132. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +44 -28
  133. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +2 -1
  134. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +1 -1
  135. data/webpack/scenes/ContentViews/Details/Repositories/LastSync.js +46 -8
  136. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.fixtures.json +0 -2
  137. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +19 -3
  138. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionEnvironments.js +2 -2
  139. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.js +5 -3
  140. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.scss +5 -2
  141. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +7 -4
  142. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +59 -53
  143. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +24 -17
  144. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/versionsResponseData.fixtures.json +1 -4
  145. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +8 -3
  146. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionComponent.fixtures.json +1 -4
  147. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +1 -2
  148. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsCounts.fixtures.json +1 -2
  149. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRepositories.fixtures.json +1 -18
  150. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.fixtures.json +5 -5
  151. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +1 -0
  152. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionsWithTask.fixtures.json +1 -3
  153. data/webpack/scenes/ContentViews/Details/contentViewInfo.scss +0 -4
  154. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +66 -53
  155. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +40 -28
  156. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +3 -3
  157. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +14 -14
  158. data/webpack/scenes/ContentViews/Publish/cvPublishForm.scss +6 -0
  159. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -12
  160. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +12 -6
  161. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +6 -6
  162. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +6 -5
  163. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +2 -2
  164. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +26 -27
  165. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +18 -6
  166. data/webpack/scenes/ContentViews/components/WizardHeader.js +44 -0
  167. data/webpack/scenes/ContentViews/components/contentViewIcon.scss +13 -2
  168. data/webpack/scenes/Organizations/OrganizationActions.js +22 -24
  169. data/webpack/scenes/Organizations/OrganizationConstants.js +1 -3
  170. data/webpack/scenes/Organizations/OrganizationReducer.js +0 -7
  171. data/webpack/scenes/Organizations/OrganizationSelectors.js +16 -0
  172. data/webpack/scenes/Organizations/__tests__/OrganizationActions.test.js +1 -21
  173. data/webpack/scenes/Organizations/__tests__/OrganizationReducer.test.js +0 -20
  174. data/webpack/scenes/Organizations/__tests__/organizations.fixtures.js +34 -23
  175. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +151 -14
  176. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +150 -31
  177. data/webpack/scenes/Subscriptions/Manifest/index.js +14 -3
  178. data/webpack/utils/dateTimeHelpers.js +7 -0
  179. data/webpack/utils/helpers.js +1 -1
  180. metadata +45 -43
  181. data/app/controllers/katello/api/v2/ostree_branches_controller.rb +0 -16
  182. data/app/lib/actions/pulp/repository/presenters/ostree_presenter.rb +0 -91
  183. data/app/models/katello/ostree_branch.rb +0 -12
  184. data/app/models/katello/repository_ostree_branch.rb +0 -7
  185. data/app/services/katello/pulp/ostree_branch.rb +0 -14
  186. data/app/services/katello/pulp/repository/ostree.rb +0 -48
  187. data/app/views/katello/api/v2/ostree_branches/compare.json.rabl +0 -10
  188. data/app/views/katello/api/v2/ostree_branches/index.json.rabl +0 -7
  189. data/app/views/katello/api/v2/ostree_branches/show.json.rabl +0 -5
  190. data/app/views/katello/api/v2/root/resource_list.json.rabl +0 -3
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-ostree-branches.html +0 -26
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-ostree.html +0 -27
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/ostree-branch-repositories.controller.js +0 -77
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/ostree-branch.controller.js +0 -31
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/views/ostree-branch-info.html +0 -15
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/views/ostree-branch-repositories.html +0 -72
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/details/views/ostree-branch.html +0 -30
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branch.factory.js +0 -27
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branches.controller.js +0 -67
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branches.module.js +0 -15
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/ostree-branches.routes.js +0 -50
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/ostree-branches/views/ostree-branches.html +0 -40
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-ostree-branches.html +0 -40
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/ostree-upstream-sync-policy.service.js +0 -26
  205. data/webpack/components/extensions/HostDetails/Tabs/SubscriptionTab.js +0 -12
  206. data/webpack/scenes/Content/Details/ContentCounts.js +0 -42
  207. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +0 -108
  208. data/webpack/scenes/Subscriptions/Manifest/__tests__/__snapshots__/ManageManifestModal.test.js.snap +0 -158
@@ -2,14 +2,14 @@
2
2
  kind: job_template
3
3
  name: Install Errata - Katello SSH Default
4
4
  job_category: Katello
5
- description_format: 'Install errata %{errata}'
5
+ description_format: 'Install errata %{Errata search query}'
6
6
  feature: katello_errata_install
7
7
  provider_type: SSH
8
8
  template_inputs:
9
- - name: errata
10
- description: A comma separated list of errata to install
9
+ - name: Errata search query
10
+ description: Filter criteria for errata to be installed.
11
11
  input_type: user
12
- required: true
12
+ required: false
13
13
  foreign_input_sets:
14
14
  - template: Package Action - SSH Default
15
15
  exclude: action,package
@@ -19,6 +19,8 @@ foreign_input_sets:
19
19
  <% advisories = input(:errata).split(',').join(' ') %>
20
20
  <%= render_template('Package Action - SSH Default', :action => 'install -n -t patch', :package => advisories) %>
21
21
  <% else %>
22
- <% advisories = input(:errata).split(',').map { |e| "--advisory=#{e}" }.join(' ') %>
22
+ <% advisory_ids = @host.advisory_ids(search: input("Errata search query")) %>
23
+
24
+ <% advisories = advisory_ids.map { |e| "--advisory=#{e}" }.join(' ') %>
23
25
  <%= render_template('Package Action - SSH Default', :action => 'update-minimal', :package => advisories) %>
24
- <% end %>
26
+ <% end %>
@@ -6,15 +6,14 @@ description_format: 'Resolve Traces'
6
6
  feature: katello_host_tracer_resolve
7
7
  provider_type: SSH
8
8
  template_inputs:
9
- - name: ids
10
- description: A comma-separated list of trace IDs to resolve
9
+ - name: Traces search query
10
+ description: Search query to provide traces to resolve
11
11
  input_type: user
12
- required: true
12
+ required: false
13
13
  %>
14
14
 
15
15
  <%
16
- ids = input(:ids).split(',').map { |split| split.strip.to_i }
17
- commands = @host.traces_helpers(ids)
16
+ commands = @host.traces_helpers(search: input('Traces search query'))
18
17
  reboot = commands.delete('reboot')
19
18
  -%>
20
19
  <% if reboot -%>
@@ -5,18 +5,16 @@ model: JobTemplate
5
5
  job_category: Katello via Ansible
6
6
  description_format: Resolve Traces
7
7
  template_inputs:
8
- - name: ids
9
- description: A comma-separated list of trace IDs to resolve
8
+ - name: Traces search query
9
+ description: Search query to provide traces to resolve
10
10
  input_type: user
11
11
  required: true
12
- advanced: false
13
12
  provider_type: Ansible
14
13
  kind: job_template
15
14
  %>
16
15
 
17
16
  <%
18
- ids = input(:ids).split(',').map { |split| split.strip.to_i }
19
- commands = @host.traces_helpers(ids)
17
+ commands = @host.traces_helpers(search: input('Traces search query'))
20
18
  reboot = commands.delete('reboot')
21
19
  -%>
22
20
  <%= render_template(
@@ -19,6 +19,13 @@
19
19
  </div>
20
20
 
21
21
  <br>
22
+ <div ng-hide="syncStatus.unsyncable_content_types.length == 0">
23
+ <span translate>
24
+ Pulp plugin missing for synchronizable content types: <b>{{ syncStatus.unsyncable_content_types.join(", ") }}.</b><br />
25
+ Repositories containing these content types will not be synced.
26
+ </span>
27
+ </div>
28
+
22
29
  <div ng-show="syncState.is(syncState.SYNCING, syncState.SYNC_TRIGGERED, syncState.CANCEL_TRIGGERED)">
23
30
  <a ng-click="cancelSync()" class="btn btn-default" ng-disabled="!syncState.is(syncState.SYNCING)">
24
31
  <span translate>Cancel Sync</span>
@@ -2,6 +2,10 @@ object @capsule
2
2
 
3
3
  attribute :last_sync_time
4
4
 
5
+ node :unsyncable_content_types do
6
+ ::Katello::SmartProxyHelper.new(@capsule).unsyncable_content_types
7
+ end
8
+
5
9
  child :active_sync_tasks => :active_sync_tasks do
6
10
  extends 'foreman_tasks/api/tasks/show'
7
11
  end
@@ -1 +1,5 @@
1
1
  attributes :url, :username, :upstream_organization_label, :ssl_ca_credential_id
2
+
3
+ node :password_exists do |config|
4
+ config.password.present?
5
+ end
@@ -25,6 +25,14 @@ child :content_facet => :content_facet_attributes do
25
25
  node :katello_tracer_installed do |content_facet|
26
26
  content_facet.tracer_installed?
27
27
  end
28
+
29
+ node :katello_agent_enabled do
30
+ Katello.with_katello_agent?
31
+ end
32
+
33
+ node :remote_execution_by_default do
34
+ Katello.remote_execution_by_default?
35
+ end
28
36
  end
29
37
 
30
38
  attributes :description, :facts
@@ -14,7 +14,6 @@ child :content_view => :content_view do
14
14
 
15
15
  node :content_counts do |repo|
16
16
  {
17
- :ostree_branch => repo.ostree_branches.count,
18
17
  :docker_manifest => repo.docker_manifests.count,
19
18
  :docker_tag => repo.docker_tags.count,
20
19
  :rpm => repo.rpms.count,
@@ -17,7 +17,7 @@ node :next_version do |content_view|
17
17
  end
18
18
 
19
19
  child :last_task => :last_task do |_task|
20
- attributes :id
20
+ attributes :id, :started_at
21
21
  attributes :result => :result
22
22
  node :last_sync_words do |object|
23
23
  if object.try(:started_at)
@@ -2,3 +2,5 @@ object @resource
2
2
 
3
3
  attributes :id, :name
4
4
  attributes :nvrea, :nvra
5
+ attributes :upgradable_version
6
+ attributes :rpm_id
@@ -16,7 +16,7 @@ node :owner_details do |org|
16
16
  end
17
17
 
18
18
  node :cdn_configuration do |org|
19
- partial('katello/api/v2/organizations/cdn_configuration', object: org.cdn_configuration)
19
+ partial('katello/api/v2/cdn_configurations/show', object: org.cdn_configuration)
20
20
  end
21
21
 
22
22
  node :default_content_view_id do |org|
@@ -21,8 +21,6 @@ glue(@resource.root) do
21
21
 
22
22
  attributes :product_type
23
23
  attributes :upstream_username
24
- attributes :ostree_upstream_sync_policy, :ostree_upstream_sync_depth
25
- attributes :compute_ostree_upstream_sync_depth => :computed_ostree_upstream_sync_depth
26
24
  attributes :deb_releases, :deb_components, :deb_architectures
27
25
  attributes :http_proxy_policy
28
26
  attributes :http_proxy_id
@@ -53,7 +51,6 @@ glue(@resource.root) do
53
51
  end
54
52
  end
55
53
 
56
- attributes :ostree_branch_names => :ostree_branches
57
54
  attributes :relative_path
58
55
  attributes :promoted? => :promoted
59
56
  attributes :content_view_version_id, :library_instance_id
@@ -14,8 +14,6 @@ Katello::Engine.routes.draw do
14
14
  # re-routes alphabetical
15
15
  ##############################
16
16
 
17
- root :to => 'root#resource_list'
18
-
19
17
  api_resources :capsules, :only => [:index, :show] do
20
18
  member do
21
19
  resource :content, :only => [], :controller => 'capsule_content' do
@@ -162,13 +160,6 @@ Katello::Engine.routes.draw do
162
160
  end
163
161
  end
164
162
 
165
- api_resources :ostree_branches, :only => [:index, :show] do
166
- collection do
167
- get :auto_complete_search
168
- get :compare
169
- end
170
- end
171
-
172
163
  api_resources :debs, :only => [:index, :show] do
173
164
  collection do
174
165
  get :auto_complete_search
@@ -417,7 +408,6 @@ Katello::Engine.routes.draw do
417
408
  Katello::RepositoryTypeManager.generic_content_types(false).each do |type|
418
409
  api_resources type.pluralize.to_sym, :only => [:index, :show], :controller => 'generic_content_units', :content_type => type
419
410
  end
420
- api_resources :ostree_branches, :only => [:index, :show]
421
411
 
422
412
  api_resources :content_uploads, :controller => :content_uploads, :only => [:create, :destroy, :update]
423
413
 
@@ -0,0 +1,13 @@
1
+ class DropOstreeBranches < ActiveRecord::Migration[6.0]
2
+ def up
3
+ drop_table :katello_repository_ostree_branches
4
+ drop_table :katello_ostree_branches
5
+
6
+ remove_column :katello_root_repositories, :ostree_upstream_sync_policy
7
+ remove_column :katello_root_repositories, :ostree_upstream_sync_depth
8
+ end
9
+
10
+ def down
11
+ fail ActiveRecord::IrreversibleMigration
12
+ end
13
+ end
@@ -9,9 +9,7 @@ BASTION_MODULES.push(
9
9
  'Bastion.docker-tags',
10
10
  'Bastion.files',
11
11
  'Bastion.ansible-collections',
12
- 'Bastion.ostree-branches',
13
12
  'Bastion.hosts',
14
- 'Bastion.ostree-branches',
15
13
  'Bastion.module-streams',
16
14
  'Bastion.environments',
17
15
  'Bastion.content-credentials',
@@ -40,9 +40,6 @@
40
40
  //= require "bastion_katello/ansible-collections/ansible-collections.module.js"
41
41
  //= require_tree "./ansible-collections"
42
42
 
43
- //= require "bastion_katello/ostree-branches/ostree-branches.module.js"
44
- //= require_tree "./ostree-branches"
45
-
46
43
  //= require "bastion_katello/debs/debs.module.js"
47
44
  //= require_tree "./debs"
48
45
 
@@ -130,16 +130,6 @@ angular.module('Bastion.content-views').config(['$stateProvider', function ($sta
130
130
  parent: 'content-view.version.details'
131
131
  }
132
132
  })
133
- .state('content-view.version.ostree-branches', {
134
- url: '/ostree_branches',
135
- permission: 'view_content_views',
136
- controller: 'ContentViewVersionContentController',
137
- templateUrl: 'content-views/versions/views/content-view-version-ostree-branches.html',
138
- ncyBreadcrumb: {
139
- label: '{{ "OSTree Branches" | translate }}',
140
- parent: 'content-view.version.details'
141
- }
142
- })
143
133
  .state('content-view.version.module-streams', {
144
134
  url: '/module_streams',
145
135
  permission: 'view_content_views',
@@ -74,9 +74,6 @@
74
74
  <div translate ng-if="version.docker_tag_count && version.docker_tag_count > 0">
75
75
  {{ version.docker_tag_count }} Container Image Tags
76
76
  </div>
77
- <div translate ng-if="version.ostree_branch_count && version.ostree_branch_count > 0">
78
- {{ version.ostree_branch_count }} OSTree Branches
79
- </div>
80
77
  <div translate ng-if="version.file_count && version.file_count > 0">
81
78
  {{ version.file_count }} Files
82
79
  </div>
@@ -52,16 +52,6 @@
52
52
  type: Erratum,
53
53
  repositoryType: 'yum'
54
54
  },
55
- 'ostree-branches': {
56
- type: OstreeBranch,
57
- repositoryType: 'ostree',
58
- params: {
59
- 'content_type': "ostree",
60
- 'content_view_version_id': $scope.$stateParams.versionId,
61
- 'sort_by': 'version',
62
- 'sort_order': 'DESC'
63
- }
64
- },
65
55
  'module-streams': {
66
56
  type: ModuleStream,
67
57
  repositoryType: 'yum',
@@ -15,7 +15,6 @@ angular.module('Bastion.content-views.versions', [
15
15
  'Bastion.packages',
16
16
  'Bastion.errata',
17
17
  'Bastion.package-groups',
18
- 'Bastion.ostree-branches',
19
18
  'Bastion.module-streams',
20
19
  'Bastion.files',
21
20
  'Bastion.debs'
@@ -71,13 +71,6 @@
71
71
  </a>
72
72
  </li>
73
73
 
74
- <li ng-class="{active: isState('content-view.version.ostree-branches')}"
75
- ng-show="version.ostree_branch_count !== 0">
76
- <a ui-sref="content-view.version.ostree-branches({versionId: version.id})">
77
- <span translate>OSTree Branches</span>
78
- </a>
79
- </li>
80
-
81
74
  <li ng-class="{active: isState('content-view.version.details')}">
82
75
  <a ui-sref="content-view.version.details({versionId: version.id})">
83
76
  <span translate>Details</span>
@@ -50,11 +50,6 @@
50
50
  resource: 'DockerTag',
51
51
  display: translate('Container Image Tags'),
52
52
  repositoryType: 'docker'
53
- }, {
54
- state: 'ostree',
55
- resource: 'OstreeBranch',
56
- display: translate('OSTree Branches'),
57
- repositoryType: 'ostree'
58
53
  }, {
59
54
  state: 'module-streams',
60
55
  resource: 'ModuleStream',
@@ -14,7 +14,6 @@ angular.module('Bastion.environments', [
14
14
  'Bastion.components',
15
15
  'Bastion.errata',
16
16
  'Bastion.packages',
17
- 'Bastion.ostree-branches',
18
17
  'Bastion.repositories',
19
18
  'Bastion.content-views',
20
19
  'Bastion.dates'
@@ -108,17 +108,6 @@ angular.module('Bastion.environments').config(['$stateProvider', function ($stat
108
108
  parent: 'environment.details'
109
109
  }
110
110
  })
111
- .state('environment.ostree', {
112
- url: '/ostree?repositoryId&contentViewId',
113
- reloadOnSearch: false,
114
- permission: 'view_lifecycle_environments',
115
- controller: 'EnvironmentContentController',
116
- templateUrl: 'environments/details/views/environment-ostree.html',
117
- ncyBreadcrumb: {
118
- label: '{{ "OSTree Branches" | translate }}',
119
- parent: 'environment.details'
120
- }
121
- })
122
111
  .state('environment.content-views', {
123
112
  url: '/content-views',
124
113
  reloadOnSearch: false,
@@ -22,8 +22,7 @@ angular.module('Bastion.organizations').service('FencedPages', ['$state',
22
22
  'subscriptions',
23
23
  'sync-plans',
24
24
  'files',
25
- 'debs',
26
- 'ostree-branches'
25
+ 'debs'
27
26
  ];
28
27
 
29
28
  function getRootPath(path) {
@@ -10,7 +10,6 @@
10
10
  * @requires CurrentOrganization
11
11
  * @requires Checksum
12
12
  * @requires DownloadPolicy
13
- * @requires OstreeUpstreamSyncPolicy
14
13
  * @requires Architecture
15
14
  * @requires HttpProxyPolicy
16
15
  * @requires OSVersions
@@ -20,8 +19,8 @@
20
19
  * Provides the functionality for the repository details info page.
21
20
  */
22
21
  angular.module('Bastion.repositories').controller('RepositoryDetailsInfoController',
23
- ['$scope', '$q', 'translate', 'Notification', 'ContentCredential', 'CurrentOrganization', 'Checksum', 'DownloadPolicy', 'OstreeUpstreamSyncPolicy', 'Architecture', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions', 'RepositoryTypesService',
24
- function ($scope, $q, translate, Notification, ContentCredential, CurrentOrganization, Checksum, DownloadPolicy, OstreeUpstreamSyncPolicy, Architecture, HttpProxy, HttpProxyPolicy, OSVersions, RepositoryTypesService) {
22
+ ['$scope', '$q', 'translate', 'Notification', 'ContentCredential', 'CurrentOrganization', 'Checksum', 'DownloadPolicy', 'Architecture', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions', 'RepositoryTypesService',
23
+ function ($scope, $q, translate, Notification, ContentCredential, CurrentOrganization, Checksum, DownloadPolicy, Architecture, HttpProxy, HttpProxyPolicy, OSVersions, RepositoryTypesService) {
25
24
  $scope.organization = CurrentOrganization;
26
25
 
27
26
  $scope.progress = {uploading: false};
@@ -199,7 +198,6 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
199
198
 
200
199
  $scope.checksums = Checksum.checksums;
201
200
  $scope.downloadPolicies = DownloadPolicy.downloadPolicies;
202
- $scope.ostreeUpstreamSyncPolicies = OstreeUpstreamSyncPolicy.syncPolicies;
203
201
 
204
202
  $scope.checksumTypeDisplay = function (checksum) {
205
203
  return Checksum.checksumType(checksum);
@@ -1,13 +1,3 @@
1
- /**
2
- * @ngdoc object
3
- * @name Bastion.repositories.controller:OstreeUpstreamSyncPolicyFilter
4
- *
5
- * @requires translate
6
- * @requires OstreeUpstreamSyncPolicy
7
- * @requires YumContentUnits
8
- * @requires HttpProxyPolicy
9
- **/
10
-
11
1
  angular.module('Bastion.components.formatters').filter('upstreamPasswordFilter', [function () {
12
2
  return function (displayValue, repository) {
13
3
  if (repository["upstream_auth_exists"]) {
@@ -262,7 +262,7 @@
262
262
  <dd translate>Yes</dd>
263
263
 
264
264
  <span ng-hide="repository.content_type === 'docker' || repository.content_type === 'ansible_collection'">
265
- <dt translate>Publish via HTTP</dt>
265
+ <dt translate>Unprotected</dt>
266
266
  <dd bst-edit-checkbox="repository.unprotected"
267
267
  formatter="booleanToYesNo"
268
268
  on-save="save(repository)"
@@ -14,7 +14,6 @@
14
14
  * @requires BastionConfig
15
15
  * @requires Checksum
16
16
  * @requires DownloadPolicy
17
- * @requires OstreeUpstreamSyncPolicy
18
17
  * @requires Architecture
19
18
  * @requires RepositoryTypesService
20
19
  * @requires OSVersions
@@ -24,8 +23,8 @@
24
23
  * Controls the creation of an empty Repository object for use by sub-controllers.
25
24
  */
26
25
  angular.module('Bastion.repositories').controller('NewRepositoryController',
27
- ['$scope', '$sce', 'Repository', 'Product', 'ContentCredential', 'FormUtils', 'translate', 'Notification', 'ApiErrorHandler', 'BastionConfig', 'Checksum', 'DownloadPolicy', 'OstreeUpstreamSyncPolicy', 'Architecture', 'RepositoryTypesService', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions',
28
- function ($scope, $sce, Repository, Product, ContentCredential, FormUtils, translate, Notification, ApiErrorHandler, BastionConfig, Checksum, DownloadPolicy, OstreeUpstreamSyncPolicy, Architecture, RepositoryTypesService, HttpProxy, HttpProxyPolicy, OSVersions) {
26
+ ['$scope', '$sce', 'Repository', 'Product', 'ContentCredential', 'FormUtils', 'translate', 'Notification', 'ApiErrorHandler', 'BastionConfig', 'Checksum', 'DownloadPolicy', 'Architecture', 'RepositoryTypesService', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions',
27
+ function ($scope, $sce, Repository, Product, ContentCredential, FormUtils, translate, Notification, ApiErrorHandler, BastionConfig, Checksum, DownloadPolicy, Architecture, RepositoryTypesService, HttpProxy, HttpProxyPolicy, OSVersions) {
29
28
 
30
29
  function success() {
31
30
  Notification.setSuccessMessage(translate('Repository %s successfully created.').replace('%s', $scope.repository.name));
@@ -63,8 +62,7 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
63
62
 
64
63
  $scope.repository = new Repository({'product_id': $scope.$stateParams.productId, unprotected: true,
65
64
  'checksum_type': null, 'mirror_on_sync': true, 'verify_ssl_on_sync': true,
66
- 'download_policy': BastionConfig.defaultDownloadPolicy, 'arch': null,
67
- 'ostree_upstream_sync_policy': 'latest'});
65
+ 'download_policy': BastionConfig.defaultDownloadPolicy, 'arch': null});
68
66
 
69
67
  $scope.product = Product.get({id: $scope.$stateParams.productId}, function () {
70
68
  $scope.page.loading = false;
@@ -78,7 +76,6 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
78
76
 
79
77
  $scope.checksums = Checksum.checksums;
80
78
  $scope.downloadPolicies = DownloadPolicy.downloadPolicies;
81
- $scope.ostreeUpstreamSyncPolicies = OstreeUpstreamSyncPolicy.syncPolicies;
82
79
 
83
80
  $scope.$watch('repository.name', function () {
84
81
  if ($scope.repositoryForm && $scope.repositoryForm.name) {
@@ -332,8 +332,11 @@
332
332
  <div class="checkbox" ng-hide="repository.content_type === 'docker' || repository.content_type === 'ansible_collection'">
333
333
  <label>
334
334
  <input id="unprotected" name="unprotected" ng-model="repository.unprotected" type="checkbox"/>
335
- <span translate>Publish via HTTP</span>
335
+ <span translate>Unprotected</span>
336
336
  </label>
337
+ <p class="help-block" translate>
338
+ Do not require a subscription entitlement certificate for accessing this repository.
339
+ </p>
337
340
  </div>
338
341
 
339
342
  <div bst-form-group label="{{ 'GPG Key' | translate }}" ng-show="repository.content_type === 'yum' || repository.content_type === 'deb'">
@@ -14,6 +14,7 @@ angular
14
14
  this.getOSVersionsOptions = function () {
15
15
  return [
16
16
  { name: 'No restriction', id: '' },
17
+ { name: 'Red Hat Enterprise Linux 9 ', id: 'rhel-9' },
17
18
  { name: 'Red Hat Enterprise Linux 8 ', id: 'rhel-8' },
18
19
  { name: 'Red Hat Enterprise Linux 7 ', id: 'rhel-7' },
19
20
  { name: 'Red Hat Enterprise Linux 6 ', id: 'rhel-6' }
@@ -126,15 +126,6 @@
126
126
  parent: 'product.repository.info'
127
127
  }
128
128
  })
129
- .state('product.repository.manage-content.ostree-branches', {
130
- url: '/ostree_branches',
131
- permission: 'view_products',
132
- templateUrl: 'products/details/repositories/details/views/repository-manage-ostree-branches.html',
133
- ncyBreadcrumb: {
134
- label: "{{'OSTree Branches' | translate }}",
135
- parent: 'product.repository.info'
136
- }
137
- })
138
129
  .state('product.repository.manage-content.module-streams', {
139
130
  url: '/module_streams',
140
131
  permission: 'view_products',
@@ -156,14 +156,6 @@
156
156
  </div>
157
157
  </span>
158
158
 
159
- <span ng-show="repository.content_type == 'ostree'">
160
- <div>
161
- <span translate>
162
- {{ repository.content_counts.ostree_branch || 0 }} OSTree Branches
163
- </span>
164
- </div>
165
- </span>
166
-
167
159
  <span ng-show="repository.content_type == 'file'">
168
160
  <div>
169
161
  <span translate>
@@ -29,7 +29,6 @@ module BastionKatello
29
29
  debs
30
30
  docker_tags
31
31
  files
32
- ostree_branches
33
32
  errata
34
33
  packages
35
34
  lifecycle_environments
@@ -254,7 +254,6 @@ module Katello
254
254
  :compare,
255
255
  :repositories],
256
256
  'katello/api/v2/file_units' => [:index, :show, :auto_complete_search, :compare],
257
- 'katello/api/v2/ostree_branches' => [:index, :show, :auto_complete_search, :compare],
258
257
  'katello/api/v2/errata' => [:index, :show, :auto_complete_search, :compare],
259
258
  'katello/api/v2/module_streams' => [:index, :show, :auto_complete_search, :compare, :auto_complete_name],
260
259
  'katello/api/v2/ansible_collections' => [:index, :show, :auto_complete_search, :compare],
@@ -121,16 +121,6 @@ Foreman::Plugin.register :katello do
121
121
  :turbolinks => false,
122
122
  :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::FILE_TYPE) }
123
123
 
124
- menu :top_menu,
125
- :ostree_branches,
126
- :caption => N_('OSTree Branches'),
127
- :url => '/ostree_branches',
128
- :url_hash => {:controller => 'katello/api/v2/ostree_branches',
129
- :action => 'index'},
130
- :engine => Katello::Engine,
131
- :turbolinks => false,
132
- :if => lambda { ::Katello::RepositoryTypeManager.enabled?(::Katello::Repository::OSTREE_TYPE) }
133
-
134
124
  menu :top_menu,
135
125
  :packages,
136
126
  :caption => N_('Packages'),
@@ -15,9 +15,9 @@ namespace :katello do
15
15
  system("sudo runuser - postgres -c 'createdb pulpcore'")
16
16
 
17
17
  Dir.chdir("/tmp") do
18
- fail "\e[31mCannot migrate Pulp3 database\e[0m\n\n" unless system("sudo -u pulp PULP_SETTINGS='/etc/pulp/settings.py' DJANGO_SETTINGS_MODULE='pulpcore.app.settings' python3-django-admin migrate --no-input")
18
+ fail "\e[31mCannot migrate Pulp3 database\e[0m\n\n" unless system("sudo -u pulp PULP_SETTINGS='/etc/pulp/settings.py' DJANGO_SETTINGS_MODULE='pulpcore.app.settings' pulpcore-manager migrate --no-input")
19
19
  puts "\e[33mRecreating Admin User\e[0m\n\n"
20
- system("sudo -u pulp PULP_SETTINGS='/etc/pulp/settings.py' DJANGO_SETTINGS_MODULE='pulpcore.app.settings' python3-django-admin reset-admin-password --password password")
20
+ system("sudo -u pulp PULP_SETTINGS='/etc/pulp/settings.py' DJANGO_SETTINGS_MODULE='pulpcore.app.settings' pulpcore-manager reset-admin-password --password password")
21
21
  end
22
22
 
23
23
  SERVICES.each { |s| system(service_start.gsub("%s", s)) }
@@ -1,3 +1,3 @@
1
1
  module Katello
2
- VERSION = "4.3.0.rc1".freeze
2
+ VERSION = "4.3.0.rc2".freeze
3
3
  end
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import { TableText } from '@patternfly/react-table';
3
+ import { translate as __ } from 'foremanReact/common/I18n';
4
+ import {
5
+ CheckIcon,
6
+ LongArrowAltUpIcon,
7
+ MinusIcon,
8
+ } from '@patternfly/react-icons';
9
+ import PropTypes from 'prop-types';
10
+
11
+ export const PackagesStatus = ({ upgradable_version: upgradableVersion }) => {
12
+ let PackagesIcon;
13
+ let label;
14
+ let color;
15
+
16
+ if (upgradableVersion == null) {
17
+ color = 'green';
18
+ label = __('Up-to date');
19
+ PackagesIcon = CheckIcon;
20
+ } else {
21
+ color = 'blue';
22
+ label = __('Upgradable');
23
+ PackagesIcon = LongArrowAltUpIcon;
24
+ }
25
+ if (!PackagesIcon) return null;
26
+
27
+ return (
28
+ <TableText wrapModifier="nowrap">
29
+ {color && <PackagesIcon color={color} title={label} />} {label}
30
+ </TableText>
31
+ );
32
+ };
33
+
34
+ PackagesStatus.propTypes = {
35
+ upgradable_version: PropTypes.string,
36
+ };
37
+
38
+ PackagesStatus.defaultProps = {
39
+ upgradable_version: null,
40
+ };
41
+
42
+ export const PackagesLatestVersion = ({ name, upgradable_version: upgradableVersion }) => {
43
+ let label;
44
+ let color;
45
+
46
+ if (upgradableVersion == null) {
47
+ label = '';
48
+ color = 'green';
49
+ } else {
50
+ label = upgradableVersion.replace(`${name}-`, '');
51
+ }
52
+
53
+ return <TableText wrapModifier="nowrap">{color && <MinusIcon color={color} title={label} />} {label} </TableText>;
54
+ };
55
+
56
+ PackagesLatestVersion.propTypes = {
57
+ name: PropTypes.string.isRequired,
58
+ upgradable_version: PropTypes.string,
59
+ };
60
+
61
+ PackagesLatestVersion.defaultProps = {
62
+ upgradable_version: null,
63
+ };