Skip to content
This repository was archived by the owner on Jan 22, 2026. It is now read-only.

Commit 54ddabd

Browse files
committed
Rebuild enrichment branch on top of 0.6.0 changes
1 parent 468feb2 commit 54ddabd

File tree

11 files changed

+362
-2
lines changed

11 files changed

+362
-2
lines changed

Gemfile.lock

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ PATH
1515
specs:
1616
git-pkgs (0.6.1)
1717
ecosystems-bibliothecary (~> 15.0)
18+
purl (~> 1.6)
1819
rugged (~> 1.0)
1920
sequel (>= 5.0)
2021
sqlite3 (>= 2.0)
2122

2223
GEM
2324
remote: https://rubygems.org/
2425
specs:
26+
addressable (2.8.8)
27+
public_suffix (>= 2.0.2, < 8.0)
2528
benchmark (0.5.0)
2629
bigdecimal (4.0.1)
2730
csv (3.3.5)
@@ -46,6 +49,9 @@ GEM
4649
psych (5.3.1)
4750
date
4851
stringio
52+
public_suffix (7.0.2)
53+
purl (1.7.0)
54+
addressable (~> 2.8)
4955
racc (1.8.1)
5056
rake (13.3.1)
5157
rdoc (7.0.3)
@@ -100,6 +106,7 @@ DEPENDENCIES
100106
simplecov
101107

102108
CHECKSUMS
109+
addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057
103110
benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c
104111
bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7
105112
csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f
@@ -118,6 +125,8 @@ CHECKSUMS
118125
prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193
119126
prism (1.7.0) sha256=10062f734bf7985c8424c44fac382ac04a58124ea3d220ec3ba9fe4f2da65103
120127
psych (5.3.1) sha256=eb7a57cef10c9d70173ff74e739d843ac3b2c019a003de48447b2963d81b1974
128+
public_suffix (7.0.2) sha256=9114090c8e4e7135c1fd0e7acfea33afaab38101884320c65aaa0ffb8e26a857
129+
purl (1.7.0) sha256=e25a6b951975e94104a17d8d40e8529fa882a5a63717c68af2390e9b8d0ac3f2
121130
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
122131
rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
123132
rdoc (7.0.3) sha256=dfe3d0981d19b7bba71d9dbaeb57c9f4e3a7a4103162148a559c4fc687ea81f9

git-pkgs.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,5 @@ Gem::Specification.new do |spec|
3535
spec.add_dependency "sequel", ">= 5.0"
3636
spec.add_dependency "sqlite3", ">= 2.0"
3737
spec.add_dependency "ecosystems-bibliothecary", "~> 15.0"
38+
spec.add_dependency "purl", "~> 1.6"
3839
end

lib/git/pkgs.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@
99
require_relative "pkgs/repository"
1010
require_relative "pkgs/analyzer"
1111

12+
require_relative "pkgs/purl_helper"
1213
require_relative "pkgs/models/branch"
1314
require_relative "pkgs/models/branch_commit"
1415
require_relative "pkgs/models/commit"
1516
require_relative "pkgs/models/manifest"
1617
require_relative "pkgs/models/dependency_change"
1718
require_relative "pkgs/models/dependency_snapshot"
19+
require_relative "pkgs/models/package"
20+
require_relative "pkgs/models/version"
1821

1922
require_relative "pkgs/commands/init"
2023
require_relative "pkgs/commands/update"

lib/git/pkgs/database.rb

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ module Git
1515
module Pkgs
1616
class Database
1717
DB_FILE = "pkgs.sqlite3"
18-
SCHEMA_VERSION = 1
18+
SCHEMA_VERSION = 2
1919

2020
class << self
2121
attr_accessor :db
@@ -82,7 +82,9 @@ def self.refresh_models
8282
Git::Pkgs::Models::Commit,
8383
Git::Pkgs::Models::Manifest,
8484
Git::Pkgs::Models::DependencyChange,
85-
Git::Pkgs::Models::DependencySnapshot
85+
Git::Pkgs::Models::DependencySnapshot,
86+
Git::Pkgs::Models::Package,
87+
Git::Pkgs::Models::Version
8688
].each do |model|
8789
model.dataset = @db[model.table_name]
8890
# Clear all cached association data that may reference old db
@@ -177,6 +179,36 @@ def self.create_schema(with_indexes: true)
177179
DateTime :updated_at
178180
end
179181

182+
@db.create_table?(:packages) do
183+
primary_key :id
184+
String :purl, null: false
185+
String :latest_version
186+
String :license
187+
String :description, text: true
188+
String :homepage
189+
String :repository_url
190+
String :source
191+
DateTime :enriched_at
192+
DateTime :created_at
193+
DateTime :updated_at
194+
index :purl, unique: true
195+
end
196+
197+
@db.create_table?(:versions) do
198+
primary_key :id
199+
String :purl, null: false
200+
String :package_purl, null: false
201+
String :license
202+
DateTime :published_at
203+
String :integrity, text: true
204+
String :source
205+
DateTime :enriched_at
206+
DateTime :created_at
207+
DateTime :updated_at
208+
index :purl, unique: true
209+
index :package_purl
210+
end
211+
180212
set_version
181213
create_bulk_indexes if with_indexes
182214
refresh_models

lib/git/pkgs/models/dependency_change.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ def for_platform(platform)
2828
where(ecosystem: platform)
2929
end
3030
end
31+
32+
def purl(with_version: true)
33+
version = nil
34+
if with_version && manifest&.kind == "lockfile"
35+
version = requirement
36+
end
37+
PurlHelper.build_purl(ecosystem: ecosystem, name: name, version: version)
38+
end
3139
end
3240
end
3341
end

lib/git/pkgs/models/dependency_snapshot.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ def self.current_for_branch(branch)
2929

3030
where(commit: commit)
3131
end
32+
33+
def purl(with_version: true)
34+
version = nil
35+
if with_version && manifest&.kind == "lockfile"
36+
version = requirement
37+
end
38+
PurlHelper.build_purl(ecosystem: ecosystem, name: name, version: version)
39+
end
3240
end
3341
end
3442
end

lib/git/pkgs/models/package.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
3+
module Git
4+
module Pkgs
5+
module Models
6+
class Package < Sequel::Model
7+
one_to_many :versions, key: :package_purl, primary_key: :purl
8+
9+
def parsed_purl
10+
@parsed_purl ||= Purl.parse(purl)
11+
end
12+
13+
def registry_url
14+
parsed_purl.registry_url
15+
end
16+
17+
def enriched?
18+
!enriched_at.nil?
19+
end
20+
end
21+
end
22+
end
23+
end

lib/git/pkgs/models/version.rb

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# frozen_string_literal: true
2+
3+
module Git
4+
module Pkgs
5+
module Models
6+
class Version < Sequel::Model
7+
many_to_one :package, key: :package_purl, primary_key: :purl
8+
9+
def parsed_purl
10+
@parsed_purl ||= Purl.parse(purl)
11+
end
12+
13+
def version_string
14+
parsed_purl.version
15+
end
16+
17+
def registry_url
18+
parsed_purl.registry_url
19+
end
20+
21+
def enriched?
22+
!enriched_at.nil?
23+
end
24+
end
25+
end
26+
end
27+
end

lib/git/pkgs/purl_helper.rb

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# frozen_string_literal: true
2+
3+
require "purl"
4+
5+
module Git
6+
module Pkgs
7+
module PurlHelper
8+
# Mapping from Bibliothecary/ecosyste.ms ecosystem names to PURL types
9+
# Source: https://packages.ecosyste.ms/api/v1/registries/
10+
ECOSYSTEM_TO_PURL_TYPE = {
11+
"npm" => "npm",
12+
"go" => "golang",
13+
"docker" => "docker",
14+
"pypi" => "pypi",
15+
"nuget" => "nuget",
16+
"maven" => "maven",
17+
"packagist" => "composer",
18+
"cargo" => "cargo",
19+
"rubygems" => "gem",
20+
"cocoapods" => "cocoapods",
21+
"pub" => "pub",
22+
"bower" => "bower",
23+
"cpan" => "cpan",
24+
"alpine" => "alpine",
25+
"actions" => "githubactions",
26+
"cran" => "cran",
27+
"clojars" => "clojars",
28+
"conda" => "conda",
29+
"hex" => "hex",
30+
"hackage" => "hackage",
31+
"julia" => "julia",
32+
"swiftpm" => "swift",
33+
"openvsx" => "openvsx",
34+
"spack" => "spack",
35+
"homebrew" => "brew",
36+
"puppet" => "puppet",
37+
"deno" => "deno",
38+
"elm" => "elm",
39+
"vcpkg" => "vcpkg",
40+
"racket" => "racket",
41+
"bioconductor" => "bioconductor",
42+
"carthage" => "carthage",
43+
"elpa" => "melpa"
44+
}.freeze
45+
46+
def self.purl_type_for(ecosystem)
47+
ECOSYSTEM_TO_PURL_TYPE.fetch(ecosystem, ecosystem)
48+
end
49+
50+
def self.build_purl(ecosystem:, name:, version: nil)
51+
type = purl_type_for(ecosystem)
52+
Purl::PackageURL.new(type: type, name: name, version: version)
53+
end
54+
end
55+
end
56+
end

0 commit comments

Comments
 (0)