ghcr-manager 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSE +21 -0
  3. package/README.md +97 -0
  4. package/dist/cli/_args.d.ts +6 -0
  5. package/dist/cli/_args.js +38 -0
  6. package/dist/cli/_logger.d.ts +9 -0
  7. package/dist/cli/_logger.js +24 -0
  8. package/dist/cli/_scan-command.d.ts +1 -0
  9. package/dist/cli/_scan-command.js +32 -0
  10. package/dist/cli/index.d.ts +2 -0
  11. package/dist/cli/index.js +30 -0
  12. package/dist/core/_types.d.ts +49 -0
  13. package/dist/core/_types.js +1 -0
  14. package/dist/core/index.d.ts +1 -0
  15. package/dist/core/index.js +1 -0
  16. package/dist/db/_manifest-reachability.d.ts +2 -0
  17. package/dist/db/_manifest-reachability.js +94 -0
  18. package/dist/db/_scan-writer.d.ts +18 -0
  19. package/dist/db/_scan-writer.js +176 -0
  20. package/dist/db/_schema.d.ts +2 -0
  21. package/dist/db/_schema.js +19 -0
  22. package/dist/db/_snapshot-repository.d.ts +24 -0
  23. package/dist/db/_snapshot-repository.js +98 -0
  24. package/dist/db/index.d.ts +4 -0
  25. package/dist/db/index.js +9 -0
  26. package/dist/ingest/github/_manifest-client.d.ts +8 -0
  27. package/dist/ingest/github/_manifest-client.js +100 -0
  28. package/dist/ingest/github/_manifest-ingest.d.ts +3 -0
  29. package/dist/ingest/github/_manifest-ingest.js +104 -0
  30. package/dist/ingest/github/_package-version-page-load.d.ts +13 -0
  31. package/dist/ingest/github/_package-version-page-load.js +52 -0
  32. package/dist/ingest/github/_packages-client.d.ts +10 -0
  33. package/dist/ingest/github/_packages-client.js +59 -0
  34. package/dist/ingest/github/_paginated-ingest.d.ts +11 -0
  35. package/dist/ingest/github/_paginated-ingest.js +28 -0
  36. package/dist/ingest/github/_parallel-paginated-ingest.d.ts +11 -0
  37. package/dist/ingest/github/_parallel-paginated-ingest.js +49 -0
  38. package/dist/ingest/github/_registry-token-client.d.ts +6 -0
  39. package/dist/ingest/github/_registry-token-client.js +67 -0
  40. package/dist/ingest/github/_shared.d.ts +28 -0
  41. package/dist/ingest/github/_shared.js +102 -0
  42. package/dist/ingest/github/index.d.ts +7 -0
  43. package/dist/ingest/github/index.js +26 -0
  44. package/dist/tuning/index.d.ts +6 -0
  45. package/dist/tuning/index.js +6 -0
  46. package/package.json +59 -0
  47. package/resources/sql/schema/001_schema.sql +109 -0
  48. package/resources/sql/views/001_v_latest_scan_per_package.sql +27 -0
  49. package/resources/sql/views/002_v_missing_digests.sql +32 -0
  50. package/resources/sql/views/003_v_missing_digests_related_manifests.sql +78 -0
  51. package/resources/sql/views/004_v_manifests_related_manifests.sql +142 -0
@@ -0,0 +1,142 @@
1
+ DROP VIEW IF EXISTS v_manifests_related_manifests;
2
+
3
+ CREATE VIEW v_manifests_related_manifests AS
4
+ WITH source_manifests AS (
5
+ SELECT
6
+ m.scan_id,
7
+ lsp.owner,
8
+ lsp.package_name,
9
+ m.digest AS source_manifest_digest,
10
+ m.media_type AS source_media_type
11
+ FROM manifests m
12
+ JOIN v_latest_scan_per_package lsp
13
+ ON lsp.scan_id = m.scan_id
14
+ ),
15
+ manifest_seen_window AS (
16
+ SELECT
17
+ md.scan_id,
18
+ md.manifest_digest,
19
+ MIN(md.created_at) AS first_seen_at,
20
+ MAX(md.created_at) AS last_seen_at
21
+ FROM (
22
+ SELECT m.scan_id, m.digest AS manifest_digest, pv.created_at
23
+ FROM manifests m
24
+ JOIN package_versions pv
25
+ ON pv.scan_id = m.scan_id
26
+ AND pv.digest = m.digest
27
+
28
+ UNION
29
+
30
+ SELECT m.scan_id, m.digest AS manifest_digest, pv.created_at
31
+ FROM manifests m
32
+ JOIN package_versions pv
33
+ ON pv.scan_id = m.scan_id
34
+ JOIN manifest_reachability r
35
+ ON r.scan_id = m.scan_id
36
+ AND r.ancestor_digest = pv.digest
37
+ AND r.descendant_digest = m.digest
38
+ ) md
39
+ GROUP BY
40
+ md.scan_id,
41
+ md.manifest_digest
42
+ ),
43
+ related_manifests AS (
44
+ SELECT
45
+ sm.scan_id,
46
+ sm.owner,
47
+ sm.package_name,
48
+ sm.source_manifest_digest,
49
+ sm.source_media_type,
50
+ sm.source_manifest_digest AS related_manifest_digest,
51
+ sm.source_media_type AS related_media_type,
52
+ 0 AS hops_manifest_to_related_manifest
53
+ FROM source_manifests sm
54
+
55
+ UNION
56
+
57
+ SELECT
58
+ sm.scan_id,
59
+ sm.owner,
60
+ sm.package_name,
61
+ sm.source_manifest_digest,
62
+ sm.source_media_type,
63
+ r.descendant_digest AS related_manifest_digest,
64
+ m.media_type AS related_media_type,
65
+ r.min_distance AS hops_manifest_to_related_manifest
66
+ FROM source_manifests sm
67
+ JOIN manifest_reachability r
68
+ ON r.scan_id = sm.scan_id
69
+ AND r.ancestor_digest = sm.source_manifest_digest
70
+ JOIN manifests m
71
+ ON m.scan_id = sm.scan_id
72
+ AND m.digest = r.descendant_digest
73
+
74
+ UNION
75
+
76
+ SELECT
77
+ sm.scan_id,
78
+ sm.owner,
79
+ sm.package_name,
80
+ sm.source_manifest_digest,
81
+ sm.source_media_type,
82
+ r.ancestor_digest AS related_manifest_digest,
83
+ m.media_type AS related_media_type,
84
+ r.min_distance AS hops_manifest_to_related_manifest
85
+ FROM source_manifests sm
86
+ JOIN manifest_reachability r
87
+ ON r.scan_id = sm.scan_id
88
+ AND r.descendant_digest = sm.source_manifest_digest
89
+ JOIN manifests m
90
+ ON m.scan_id = sm.scan_id
91
+ AND m.digest = r.ancestor_digest
92
+ ),
93
+ closest_related_manifests AS (
94
+ SELECT
95
+ scan_id,
96
+ owner,
97
+ package_name,
98
+ source_manifest_digest,
99
+ source_media_type,
100
+ related_manifest_digest,
101
+ related_media_type,
102
+ MIN(hops_manifest_to_related_manifest) AS hops_manifest_to_related_manifest
103
+ FROM related_manifests
104
+ GROUP BY
105
+ scan_id,
106
+ owner,
107
+ package_name,
108
+ source_manifest_digest,
109
+ source_media_type,
110
+ related_manifest_digest,
111
+ related_media_type
112
+ )
113
+ SELECT
114
+ crm.scan_id,
115
+ crm.owner,
116
+ crm.package_name,
117
+ crm.source_manifest_digest,
118
+ crm.source_media_type,
119
+ ssw.first_seen_at AS source_first_seen_at,
120
+ ssw.last_seen_at AS source_last_seen_at,
121
+ st.tag AS source_tag,
122
+ st.version_id AS source_version_id,
123
+ crm.related_manifest_digest,
124
+ crm.related_media_type,
125
+ rsw.first_seen_at AS related_first_seen_at,
126
+ rsw.last_seen_at AS related_last_seen_at,
127
+ crm.hops_manifest_to_related_manifest,
128
+ rt.tag AS related_tag,
129
+ rt.version_id AS related_version_id
130
+ FROM closest_related_manifests crm
131
+ LEFT JOIN manifest_seen_window ssw
132
+ ON ssw.scan_id = crm.scan_id
133
+ AND ssw.manifest_digest = crm.source_manifest_digest
134
+ LEFT JOIN tags st
135
+ ON st.scan_id = crm.scan_id
136
+ AND st.digest = crm.source_manifest_digest
137
+ LEFT JOIN manifest_seen_window rsw
138
+ ON rsw.scan_id = crm.scan_id
139
+ AND rsw.manifest_digest = crm.related_manifest_digest
140
+ LEFT JOIN tags rt
141
+ ON rt.scan_id = crm.scan_id
142
+ AND rt.digest = crm.related_manifest_digest;