Skip to content

Commit

Permalink
Add deletion protection experimental feature
Browse files Browse the repository at this point in the history
Signed-off-by: Sergio Castaño Arteaga <tegioz@icloud.com>
  • Loading branch information
tegioz committed Jan 13, 2025
1 parent 6698927 commit 595ad38
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 30 deletions.
2 changes: 1 addition & 1 deletion charts/artifact-hub/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ apiVersion: v2
name: artifact-hub
description: Artifact Hub is a web-based application that enables finding, installing, and publishing Cloud Native packages.
type: application
version: 1.21.0-3
version: 1.21.0-4
appVersion: 1.20.0
kubeVersion: ">= 1.19.0-0"
home: https://artifacthub.io
Expand Down
2 changes: 1 addition & 1 deletion charts/artifact-hub/values-production.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ tracker:
requests:
cpu: 2
memory: 4000Mi
repositoryTimeout: 25m
repositoryTimeout: 45m

trivy:
deploy:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ returns setof json as $$
'last_tracking_ts', floor(extract(epoch from r.last_tracking_ts)),
'last_tracking_errors', r.last_tracking_errors,
'data', r.data,
'packages_deletion_protection', r.packages_deletion_protection,
'user_alias', u.alias,
'organization_name', o.name,
'organization_display_name', o.display_name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ begin
r.last_tracking_ts,
r.last_tracking_errors,
r.data as repository_data,
r.packages_deletion_protection,
u.alias as user_alias,
o.name as organization_name,
o.display_name as organization_display_name
Expand Down Expand Up @@ -86,6 +87,7 @@ begin
'last_tracking_ts', floor(extract(epoch from last_tracking_ts)),
'last_tracking_errors', last_tracking_errors,
'data', repository_data,
'packages_deletion_protection', packages_deletion_protection,
'user_alias', user_alias,
'organization_name', organization_name,
'organization_display_name', organization_display_name
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
alter table repository add column packages_deletion_protection boolean;

---- create above / drop below ----

alter table repository drop column packages_deletion_protection;
12 changes: 8 additions & 4 deletions database/tests/functions/repositories/get_repository_by_id.sql
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ insert into repository (
last_scanning_errors,
last_tracking_ts,
last_tracking_errors,
data
data,
packages_deletion_protection
)
values (
:'repo1ID',
Expand All @@ -48,7 +49,8 @@ values (
'error1\nerror2\n',
'2020-06-16 11:20:34+02',
'error1\nerror2\n',
'{"k1": "v1"}'
'{"k1": "v1"}',
true
);
insert into repository (
repository_id,
Expand Down Expand Up @@ -100,7 +102,8 @@ select is(
"last_tracking_ts": 1592299234,
"last_tracking_errors": "error1\\nerror2\\n",
"user_alias": "user1",
"data": {"k1": "v1"}
"data": {"k1": "v1"},
"packages_deletion_protection": true
}'::jsonb,
'Repository 1 returned as a json object (without credentials)'
);
Expand All @@ -126,7 +129,8 @@ select is(
"last_tracking_ts": 1592299234,
"last_tracking_errors": "error1\\nerror2\\n",
"user_alias": "user1",
"data": {"k1": "v1"}
"data": {"k1": "v1"},
"packages_deletion_protection": true
}'::jsonb,
'Repository 1 is returned as a json object (with credentials)'
);
Expand Down
4 changes: 4 additions & 0 deletions database/tests/functions/repositories/search_repositories.sql
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ insert into repository (
auth_pass,
last_tracking_ts,
last_tracking_errors,
packages_deletion_protection,
repository_kind_id,
organization_id
) values (
Expand All @@ -55,6 +56,7 @@ insert into repository (
'pass',
'1970-01-01 00:00:00 UTC',
'error1\nerror2\nerror3',
true,
0,
:'org1ID'
);
Expand Down Expand Up @@ -126,6 +128,7 @@ select results_eq(
"scanner_disabled": false,
"last_tracking_ts": 0,
"last_tracking_errors": "error1\\nerror2\\nerror3",
"packages_deletion_protection": true,
"organization_name": "org1",
"organization_display_name": "Organization 1"
},
Expand Down Expand Up @@ -358,6 +361,7 @@ select results_eq(
"scanner_disabled": false,
"last_tracking_ts": 0,
"last_tracking_errors": "error1\\nerror2\\nerror3",
"packages_deletion_protection": true,
"organization_name": "org1",
"organization_display_name": "Organization 1"
}
Expand Down
1 change: 1 addition & 0 deletions database/tests/schema/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@ select columns_are('repository', array[
'digest',
'created_at',
'data',
'packages_deletion_protection',
'repository_kind_id',
'user_id',
'organization_id'
Expand Down
47 changes: 24 additions & 23 deletions internal/hub/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -274,29 +274,30 @@ type Owner struct {

// Repository represents a packages repository.
type Repository struct {
RepositoryID string `json:"repository_id"`
Name string `json:"name"`
DisplayName string `json:"display_name"`
URL string `json:"url"`
Branch string `json:"branch"`
Private bool `json:"private"`
AuthUser string `json:"auth_user"`
AuthPass string `json:"auth_pass"`
Digest string `json:"digest"`
Kind RepositoryKind `json:"kind"`
UserID string `json:"user_id"`
UserAlias string `json:"user_alias"`
OrganizationID string `json:"organization_id"`
OrganizationName string `json:"organization_name"`
OrganizationDisplayName string `json:"organization_display_name"`
LastScanningErrors string `json:"last_scanning_errors"`
LastTrackingErrors string `json:"last_tracking_errors"`
VerifiedPublisher bool `json:"verified_publisher"`
Official bool `json:"official"`
CNCF bool `json:"cncf"`
Disabled bool `json:"disabled"`
ScannerDisabled bool `json:"scanner_disabled"`
Data json.RawMessage `json:"data,omitempty"`
RepositoryID string `json:"repository_id"`
Name string `json:"name"`
DisplayName string `json:"display_name"`
URL string `json:"url"`
Branch string `json:"branch"`
Private bool `json:"private"`
AuthUser string `json:"auth_user"`
AuthPass string `json:"auth_pass"`
Digest string `json:"digest"`
Kind RepositoryKind `json:"kind"`
UserID string `json:"user_id"`
UserAlias string `json:"user_alias"`
OrganizationID string `json:"organization_id"`
OrganizationName string `json:"organization_name"`
OrganizationDisplayName string `json:"organization_display_name"`
LastScanningErrors string `json:"last_scanning_errors"`
LastTrackingErrors string `json:"last_tracking_errors"`
VerifiedPublisher bool `json:"verified_publisher"`
Official bool `json:"official"`
CNCF bool `json:"cncf"`
Disabled bool `json:"disabled"`
ScannerDisabled bool `json:"scanner_disabled"`
Data json.RawMessage `json:"data,omitempty"`
PackagesDeletionProtection bool `json:"packages_deletion_protection"`
}

// RepositoryCloner describes the methods a RepositoryCloner implementation
Expand Down
2 changes: 1 addition & 1 deletion internal/tracker/tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ func (t *Tracker) Run() error {
}

// Unregister packages not available anymore
if len(packagesAvailable) > 0 {
if len(packagesAvailable) > 0 && !t.r.PackagesDeletionProtection {
for key := range packagesRegistered {
// Return ASAP if context is cancelled
select {
Expand Down

0 comments on commit 595ad38

Please sign in to comment.