Skip to content

Commit 06df6f3

Browse files
author
qount25
committed
Working scaffold for Pgpm::Deb::Builder where every method is a build step
1 parent da86c64 commit 06df6f3

File tree

5 files changed

+189
-22
lines changed

5 files changed

+189
-22
lines changed

exe/pgpm

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ require "dry/cli"
88
require "parallel"
99
require "etc"
1010

11+
require "debug"
12+
1113
module Pgpm
1214
module CLI
1315
module Commands
@@ -85,34 +87,54 @@ module Pgpm
8587
exit(1)
8688
end
8789

88-
unless os.is_a?(Pgpm::OS::RedHat)
89-
puts "#{os.name} is not a supported OS at this moment"
90-
exit(1)
91-
end
92-
puts "Building #{pkgs.map { |p| "#{p.name}@#{p.version}" }.join(", ")} for Postgres #{matching_pgver}"
93-
selected_pgdist = Postgres::RedhatBasedPgdg.new(matching_pgver.to_s)
94-
95-
os.with_scope do
96-
arch.with_scope do
97-
selected_pgdist.with_scope do
98-
b = pkgs.reduce(nil) do |c, p|
99-
if p.broken?
100-
puts "Can't build a broken package #{p.name}@#{p.version}"
101-
exit(1)
90+
if os.is_a? Pgpm::OS::Debian
91+
puts "Building #{pkgs.map { |p| "#{p.name}@#{p.version}" }.join(", ")} for Postgres #{matching_pgver}"
92+
selected_pgdist = Postgres::RedhatBasedPgdg.new(matching_pgver.to_s)
93+
94+
os.with_scope do
95+
arch.with_scope do
96+
selected_pgdist.with_scope do
97+
spec = nil
98+
b = pkgs.reduce(nil) do |c, p|
99+
p = Pgpm::ScopedObject.new(p, os, arch)
100+
spec = p.to_deb_spec
102101
end
103-
p = Pgpm::ScopedObject.new(p, os, arch)
104-
spec = p.to_rpm_spec
105-
builder = Pgpm::RPM::Builder.new(spec)
106-
src_builder = builder.source_builder
107-
p = c.nil? ? src_builder : c.and_then(src_builder)
108-
p.and_then(builder.versionless_builder)
102+
binding.break
103+
builder = Pgpm::Deb::Builder.new(spec)
104+
builder.build
109105
end
106+
end
107+
end
108+
elsif os.is_a? Pgpm::OS::RedHat
109+
puts "Building #{pkgs.map { |p| "#{p.name}@#{p.version}" }.join(", ")} for Postgres #{matching_pgver}"
110+
selected_pgdist = Postgres::RedhatBasedPgdg.new(matching_pgver.to_s)
111+
112+
os.with_scope do
113+
arch.with_scope do
114+
selected_pgdist.with_scope do
115+
b = pkgs.reduce(nil) do |c, p|
116+
if p.broken?
117+
puts "Can't build a broken package #{p.name}@#{p.version}"
118+
exit(1)
119+
end
120+
p = Pgpm::ScopedObject.new(p, os, arch)
121+
spec = p.to_rpm_spec
122+
builder = Pgpm::RedHat::Builder.new(spec)
123+
src_builder = builder.source_builder
124+
p = c.nil? ? src_builder : c.and_then(src_builder)
125+
p.and_then(builder.versionless_builder)
126+
end
110127

111-
srpms = b.call
112-
Pgpm::RPM::Builder.builder(srpms).call
128+
srpms = b.call
129+
Pgpm::RedHat::Builder.builder(srpms).call
130+
end
113131
end
114132
end
133+
else
134+
puts "#{os.name} is not a supported OS at this moment"
135+
exit(1)
115136
end
137+
116138
end
117139

118140
# rubocop:enable Metrics/ParameterLists:

lib/pgpm/deb/builder.rb

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
# frozen_string_literal: true
2+
3+
module Pgpm
4+
module Deb
5+
class Builder
6+
7+
def initialize(spec)
8+
@spec = spec
9+
end
10+
11+
def build
12+
puts "build()"
13+
p @spec
14+
#create_container
15+
#generate_deb_src_files
16+
#run_pbuilder
17+
#copy_build_from_container
18+
#destroy_container
19+
end
20+
21+
private
22+
23+
def create_container
24+
# pull pgpm-enabled debian podman image if doesn't exist locally
25+
# create a new container with that image
26+
# and @spec.package.source mounted into the container
27+
end
28+
29+
def generate_deb_src_files
30+
@spec.generate_rules
31+
@spec.generate_control
32+
@spec.generate_licence
33+
@spec.generate_version
34+
# save generated content into actual files
35+
end
36+
37+
def run_pbuilder
38+
end
39+
40+
def copy_build_from_container
41+
end
42+
43+
def copy_into_container(dest_dir_in_container)
44+
end
45+
46+
def copy_from_container(dest_dir_on_host)
47+
end
48+
49+
def destroy_container
50+
end
51+
52+
def run_container_command(cmd)
53+
end
54+
55+
def safe_package_name
56+
@spec.package.name.gsub(%r{/}, "__")
57+
end
58+
59+
end
60+
end
61+
end

lib/pgpm/deb/spec.rb

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# frozen_string_literal: true
2+
3+
require "digest"
4+
require "open-uri"
5+
6+
module Pgpm
7+
module Deb
8+
class Spec
9+
attr_reader :package, :release, :postgres_version, :postgres_distribution
10+
11+
def initialize(package)
12+
@package = package
13+
@release = 1
14+
15+
@postgres_distribution = Pgpm::Postgres::Distribution.in_scope
16+
end
17+
18+
def sources
19+
@package.sources
20+
end
21+
22+
def generate_control
23+
end
24+
25+
def generate_rules
26+
end
27+
28+
def generate_licence
29+
end
30+
31+
def generate_version
32+
end
33+
34+
private
35+
36+
def unpack?(src)
37+
src = src.name if src.respond_to?(:name)
38+
src.to_s.end_with?(".tar.gz") || src.to_s.end_with?(".tar.xz")
39+
end
40+
41+
end
42+
end
43+
end

lib/pgpm/os/debian.rb

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
require "rbconfig"
4+
5+
module Pgpm
6+
module OS
7+
class Debian < Pgpm::OS::Linux
8+
def self.auto_detect
9+
# TODO: distinguish between flavors of Debian
10+
Debian12.new
11+
end
12+
13+
def self.name
14+
"debian"
15+
end
16+
17+
def mock_config; end
18+
end
19+
20+
class Debian12 < Pgpm::OS::Debian
21+
def self.name
22+
"debian-12"
23+
end
24+
25+
def self.builder
26+
Pgpm::Debian::Builder
27+
end
28+
29+
def mock_config
30+
"debian-12-#{Pgpm::Arch.in_scope.name}+pgdg"
31+
end
32+
33+
end
34+
end
35+
end

lib/pgpm/package/packaging.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,15 @@
33
module Pgpm
44
class Package
55
module Packaging
6+
67
def to_rpm_spec(**opts)
78
Pgpm::RPM::Spec.new(self, **opts)
89
end
10+
11+
def to_deb_spec(**opts)
12+
Pgpm::Deb::Spec.new(self, **opts)
13+
end
14+
915
end
1016
end
1117
end

0 commit comments

Comments
 (0)