litbuild 1.0.3 → 1.0.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79441e2b11890ec0e9a3271224f80ed9ca7c40f548fc3ee59bf774a55d3ff54f
4
- data.tar.gz: 77ab5c060afb201d5a0014e92bd8e2ad1352efc8dbc0d37d864992d159a53be9
3
+ metadata.gz: 021106eb1915ada36b41382da16fdde8d9c2762d3e250dc0cbdb5067c7432bcf
4
+ data.tar.gz: a42ebf4088c9c1f7b9ae2d3d4f238ec2e9610c17c6fd07da1e0af6a5938c71dd
5
5
  SHA512:
6
- metadata.gz: 5f0a0bb98c15066ad8f945a1717ccbfdaa59bb7ac60caa8975459cf62a2601367dab0d68e3e7722999726de22f3d1acbac92a957972574184b430a8ee1d8dbef
7
- data.tar.gz: a366a4a6c91629107a7f9d3868273b8bce8baf26670dc22b4d1edb53d5c31dcbd8fc1e9c2835561f96d576c6cc5a113d6cd261663a12edff7e285085b8d07d0e
6
+ metadata.gz: 93da197d79732d1944ec9821f2d567c76962408923e68a2642789a4408176ab341dcf6e2fb61b2274413b98272e2d4f3cf979c38b20d11186d7f80a6a8e90238
7
+ data.tar.gz: 2a38bdce9e787c5685ccaf92fca51cffc16da80c900694701fc6a169aef9c9e8797eedbf8fe53d317e2129000126bff9076d69ba4da0f0bba086630e367b6928
data/bin/lb CHANGED
@@ -4,14 +4,10 @@
4
4
  gem 'litbuild'
5
5
  require 'litbuild'
6
6
  require 'optparse'
7
- require 'ostruct'
8
7
  require 'fileutils'
9
8
 
10
- options = OpenStruct.new
11
-
12
- # defaults:
13
- options.query = nil
14
- options.version = false
9
+ Options = Struct.new(:query, :version)
10
+ options = Options.new(nil, false)
15
11
 
16
12
  OptionParser.new do |opts|
17
13
  opts.banner = 'Usage: lb [options] target'
@@ -139,10 +139,9 @@ module Litbuild
139
139
  FileUtils.mkdir_p(location)
140
140
  doc_name = format('%<count>02d-%<doc>s',
141
141
  count: @written[location].size,
142
- doc: blueprint.file_name + '.adoc')
143
- File.open(File.join(location, doc_name), 'w') do |f|
144
- f.write(to_asciidoc(blueprint, extra, summary, block))
145
- end
142
+ doc: "#{blueprint.file_name}.adoc")
143
+ content = to_asciidoc(blueprint, extra, summary, block)
144
+ File.write(File.join(location, doc_name), content)
146
145
  @written[location] << doc_name
147
146
  @all_written_targets << blueprint.target_name
148
147
  end
@@ -180,12 +179,12 @@ module Litbuild
180
179
  extra.call(doc)
181
180
  # If there are any extraneous blank lines in the document, get rid
182
181
  # of them.
183
- doc.string.gsub(/\n\n\n+/, "\n\n").strip + "\n"
182
+ "#{doc.string.gsub(/\n\n\n+/, "\n\n").strip}\n"
184
183
  end
185
184
 
186
185
  def phase_heading(level, blueprint)
187
186
  "[[#{blueprint.name_with_phase},#{blueprint.header_text_with_phase}]]\n" \
188
- "#{level} #{blueprint.header_text_with_phase}\n\n"
187
+ "#{level} #{blueprint.header_text_with_phase}\n\n"
189
188
  end
190
189
 
191
190
  def render_grafs(doc, grafs, block)
@@ -397,9 +396,8 @@ module Litbuild
397
396
  end
398
397
  if !package.phases? || for_phase
399
398
  write_environment_row(doc, package)
400
- if package.build_dir
399
+ package.build_dir &&
401
400
  doc.puts("|Build Directory| `#{package.build_dir}`")
402
- end
403
401
  end
404
402
  doc.puts("|===\n\n")
405
403
  end
@@ -104,6 +104,7 @@ module Litbuild
104
104
  skip_line(f)
105
105
  f.puts("trap 'echo UTTER FAILURE on line $LINENO' ERR")
106
106
  f.puts('set -e -v')
107
+ f.puts('cd $(dirname $0)')
107
108
  skip_line(f)
108
109
  write_components(location: script_dir, script: f)
109
110
  f.puts('set +v')
@@ -120,13 +121,11 @@ module Litbuild
120
121
  FileUtils.mkdir_p(location)
121
122
  script_name = format('%<count>02d-%<script>s',
122
123
  count: @written[location].size,
123
- script: blueprint.file_name + '.sh')
124
+ script: "#{blueprint.file_name}.sh")
124
125
  script_path = File.join(location, script_name)
125
- File.open(script_path, 'w') do |f|
126
- f.write(to_bash_script(blueprint, block))
127
- end
126
+ File.write(script_path, to_bash_script(blueprint, block))
128
127
  FileUtils.chmod('ugo+x', script_path)
129
- envcmds = environment_commands(blueprint).reject { |c| c =~ /^mkdir/ }
128
+ envcmds = environment_commands(blueprint).grep_v(/^mkdir/)
130
129
  unless envcmds.empty?
131
130
  envscript = File.join(location, "env_#{blueprint.file_name}.sh")
132
131
  File.open(envscript, 'w') do |f|
@@ -214,11 +213,11 @@ module Litbuild
214
213
  return [] if running_as_root
215
214
 
216
215
  raw_sudo_cmds = @all_commands.select do |c|
217
- c =~ /sudo / && c.lines.size < 2
216
+ c.include?('sudo ') && c.lines.size < 2
218
217
  end.uniq
219
218
  sudo_cmds = raw_sudo_cmds.map do |c|
220
219
  sudoed_cmd = c.sub(/^.*sudo (.*)$/, '\\1')
221
- sudoed_cmd = sudoed_cmd.sub(/;.*$/, '') if sudoed_cmd.match?(/;/)
220
+ sudoed_cmd = sudoed_cmd.sub(/;.*$/, '') if sudoed_cmd.include?(';')
222
221
  sudoed_cmd = convert_to_absolute(sudoed_cmd)
223
222
  sudoed_cmd.gsub(/([,:=\\])/, '\\\\\1')
224
223
  end
@@ -241,17 +240,39 @@ module Litbuild
241
240
  build_location = dir_for_build(package)
242
241
 
243
242
  if package.build_dir
244
- render_command(script, "mkdir -p #{build_location}", '/dev/null')
243
+ render_command(script, "mkdir -p #{build_location}")
245
244
  skip_line(script)
246
245
  end
247
246
 
247
+ # When actually running stage commands: if something goes wrong we
248
+ # want to try one more time without MAKEFLAGS set. This addresses
249
+ # the case where parallelism breaks builds, and also addresses
250
+ # ephemeral compiler errors that can crop up when using an
251
+ # emulated virtual machine.
252
+ #
253
+ # The simplest way of doing that, with proper `set -e` behavior,
254
+ # is to have a separate script for each stage and possibly run
255
+ # each script twice. (Shell functions don't work the same way.
256
+ # Bash is complicated.) So here we are going to write out
257
+ # temporary scripts that we can then invoke.
258
+ render_command(script, 'scriptdir=$(mktemp -d pkg.XXXXXX)')
259
+ render_command(script, 'trap "rm -rf $scriptdir" EXIT')
260
+ skip_line(script)
248
261
  Package::BUILD_STAGES.each do |stage|
262
+ path = "$scriptdir/#{stage}.sh"
263
+ render_command(script, "cat > #{path} <<'LBEOF'")
264
+ render_command(script, '#!/bin/bash')
265
+ render_command(script, 'set -e')
249
266
  log = package.logfile(stage, phase)
250
267
  render_in_dir(script, build_location) do
251
268
  package.build_commands(stage).each do |command|
252
269
  render_command(script, command, log)
253
270
  end
254
271
  end
272
+ render_command(script, 'LBEOF')
273
+ render_command(script, "chmod 755 #{path}")
274
+ exec_cmd = "#{path} >> #{log} 2>&1"
275
+ render_command(script, "#{exec_cmd} || MAKEFLAGS='' #{exec_cmd}")
255
276
  end
256
277
  render_restart_trailer(script, restart_file, package.version)
257
278
  end
@@ -311,7 +332,6 @@ module Litbuild
311
332
  log = package.logfile('pkgusr')
312
333
  pkgusr_dir = "~#{pkgusr}"
313
334
  package.directives['configuration-files'] ||= []
314
- package.directives['configuration-files'] << "~#{pkgusr}/options"
315
335
  restart_file = ".#{package.active_phase || 'default'}"
316
336
  render_restart_header(script, restart_file, package.version, pkgusr_dir)
317
337
  pkgusr_srcdir = File.join(pkgusr_dir, package.name_and_version)
@@ -366,7 +386,7 @@ module Litbuild
366
386
  package.build_dir && options.puts("export build_dir=#{package.build_dir}")
367
387
  render_intree_commands(package, options)
368
388
  Package::BUILD_STAGES.each do |stage|
369
- options.puts("function #{stage}_commands()\n{")
389
+ options.puts("function #{stage}_commands\n{")
370
390
  cmds = package.build_commands(stage)
371
391
  if cmds.empty?
372
392
  options.puts(':')
@@ -425,11 +445,14 @@ module Litbuild
425
445
  script.puts('fi')
426
446
  end
427
447
 
428
- def render_command(script, command, log)
448
+ def render_command(script, command, log = nil)
429
449
  unfolded_command = command.gsub(/ ?\\\n */, ' ')
430
450
  @all_commands << unfolded_command
431
- if unfolded_command.match?(/>/)
432
- # redirecting output of command, can't put stdout in log.
451
+
452
+ # If a command's output is being redirected, it can't be logged.
453
+ # And if logging is being done elsewhere, we don't need to do it
454
+ # here.
455
+ if unfolded_command.include?('>') || log.nil?
433
456
  script.puts(unfolded_command)
434
457
  else
435
458
  script.puts("#{unfolded_command} >> #{log} 2>&1")
@@ -485,9 +508,8 @@ module Litbuild
485
508
  sdirs = spipe['servicedirs']
486
509
  sdirs.each_with_index do |sdir, i|
487
510
  render_service_dir(script, sdir)
488
- if i == sdirs.size - 1
511
+ i == sdirs.size - 1 &&
489
512
  script.puts("echo #{pname} > #{sdir['name'].first}/pipeline-name")
490
- end
491
513
  if i < sdirs.size - 1
492
514
  next_svc = sdirs[i + 1]['name'].first
493
515
  script.puts("echo #{next_svc} > #{sdir['name'].first}/producer-for")
@@ -537,7 +559,10 @@ module Litbuild
537
559
  cfgs = blueprint['configuration-files']
538
560
  return unless cfgs
539
561
 
540
- render_command(script, "cfggit add #{cfgs.join(' ')}", log)
562
+ unless cfgs.empty?
563
+ cmd = "cfggit add #{cfgs.join(' ')}"
564
+ render_command(script, cmd, log)
565
+ end
541
566
  render_command(script, 'cfggit stageall', log)
542
567
  bp = "#{blueprint.class.name.split('::').last} #{blueprint.name}"
543
568
  cmd = "cfggit as-default -m 'Configuration files for #{bp}'"
@@ -553,11 +578,12 @@ module Litbuild
553
578
  # now, if the value contains ' -- backslash-quote everything (incl spaces)
554
579
  # if the value contains " -- single-quote the whole thing
555
580
  # if the value contains other punctuation -- double-quote the whole thing
556
- if oneline.match?(/'/)
581
+ case oneline
582
+ when /'/
557
583
  oneline.gsub(/([\\ "'`$])/, '\\\\\1')
558
- elsif oneline.match?(/"/)
584
+ when /"/
559
585
  "'#{oneline}'"
560
- elsif oneline.match?(/[\\ `]/)
586
+ when /[\\ `]/
561
587
  "\"#{oneline}\""
562
588
  else
563
589
  oneline
@@ -8,7 +8,7 @@ require 'litbuild/visitor'
8
8
 
9
9
  module Litbuild
10
10
  class Blueprint
11
- class <<self
11
+ class << self
12
12
  # This should simply be the name of the directory where blueprints
13
13
  # of each specific type are expected to be found by Driver.
14
14
  def self.directory_name
@@ -16,9 +16,7 @@ module Litbuild
16
16
  end
17
17
  end
18
18
 
19
- attr_reader :active_phase
20
- attr_reader :base_grafs
21
- attr_writer :logfile_namer
19
+ attr_reader :active_phase, :base_grafs, :logfile_namer
22
20
 
23
21
  def self.descendants
24
22
  ObjectSpace.each_object(Class).select { |c| c < self }
@@ -180,7 +178,7 @@ module Litbuild
180
178
  # to avoid including two versions of the dependency.
181
179
  def deduped_dependency_names
182
180
  dep_names = self['depends-on'].clone || []
183
- deps_with_phase = dep_names.select { |dep| dep.match?(/::/) }
181
+ deps_with_phase = dep_names.select { |dep| dep.include?('::') }
184
182
  deps_with_phase.each do |dep|
185
183
  dep_without_phase = dep.split('::')[0]
186
184
  dep_names.delete(dep_without_phase)
@@ -209,7 +207,7 @@ module Litbuild
209
207
  def resolve_all(parameters, something)
210
208
  case something
211
209
  when Hash
212
- something.values.each { |element| resolve_all(parameters, element) }
210
+ something.each_value { |element| resolve_all(parameters, element) }
213
211
  when Array
214
212
  something.each { |element| resolve_all(parameters, element) }
215
213
  when String
@@ -220,9 +218,8 @@ module Litbuild
220
218
  def resolve(parameters:, a_string:)
221
219
  params = a_string.scan(/PARAM\[([A-Z_]+)\]/).flatten.sort.uniq
222
220
  params.each do |p|
223
- unless parameters[p]
221
+ parameters[p] ||
224
222
  raise(ParameterMissing, "Parameter #{p} is not defined")
225
- end
226
223
 
227
224
  a_string.gsub!(/PARAM\[#{p}\]/, parameters[p])
228
225
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'litbuild/commands.rb'
4
- require 'litbuild/narrative.rb'
5
- require 'litbuild/package.rb'
6
- require 'litbuild/section.rb'
3
+ require 'litbuild/commands'
4
+ require 'litbuild/narrative'
5
+ require 'litbuild/package'
6
+ require 'litbuild/section'
7
7
 
8
8
  module Litbuild
9
9
  # BlueprintLibrary initializes and sets configuration parameters for
@@ -33,9 +33,7 @@ module Litbuild
33
33
  def blueprint_for(target:)
34
34
  name, phase = split_name_and_phase(target: target)
35
35
  bp = blueprints[name]
36
- unless bp
37
- raise(UnknownBlueprint, "Blueprint #{name} not found in library")
38
- end
36
+ bp || raise(UnknownBlueprint, "Blueprint #{name} not found in library")
39
37
 
40
38
  bp.for_phase(phase)
41
39
  end
@@ -46,7 +44,7 @@ module Litbuild
46
44
  def dependencies_for(blueprint)
47
45
  dep_names = blueprint.deduped_dependency_names
48
46
  dep_names.map do |dep|
49
- if dep.match?(/::/) # Explicit phase specified
47
+ if dep.include?('::') # Explicit phase specified
50
48
  blueprint_for(target: dep)
51
49
  else
52
50
  bp = blueprint_for(target: dep)
@@ -64,7 +62,7 @@ module Litbuild
64
62
  # split a target name, like linux::headers, into a blueprint name
65
63
  # (linux) and a phase name (headers).
66
64
  def split_name_and_phase(target:)
67
- if target.match?(/::/)
65
+ if target.include?('::')
68
66
  target.strip.match(/(.*)::(.*)/)[1..2]
69
67
  else
70
68
  [target.strip, nil]
@@ -82,13 +80,15 @@ module Litbuild
82
80
  # works around the issue, whatever it is.
83
81
  return unless blueprint_type.name
84
82
 
83
+ # All blueprints have a name and a full-name. If a blueprint has
84
+ # no `name:` or `full-name:` directive, they will be provided at
85
+ # load time.
86
+ automatic_directives = %w[name full-name]
87
+
85
88
  Dir.glob("./#{blueprint_type.directory_name}/*.txt").each do |a_file|
86
89
  bp_text = File.read(a_file)
87
90
  begin
88
- # All blueprints have a name and a full-name. If a blueprint
89
- # has no `name:` or `full-name:` directive, they will be
90
- # provided at load time.
91
- %w[name full-name].each do |directive|
91
+ automatic_directives.each do |directive|
92
92
  unless bp_text.match?(/^#{directive}:/)
93
93
  bp_text = "#{directive}: #{File.basename(a_file, '.txt')}\n\n" +
94
94
  bp_text
@@ -97,7 +97,7 @@ module Litbuild
97
97
  end
98
98
 
99
99
  def directives?(paragraph)
100
- paragraph.split(' ').first =~ /^[a-z-]+:/
100
+ paragraph.split.first =~ /^[a-z-]+:/
101
101
  end
102
102
 
103
103
  def add_directives(directives, parsed)
@@ -124,13 +124,11 @@ module Litbuild
124
124
  firstline_value = md[2]
125
125
  value_lines = related_lines(directive_line, lines_to_process)
126
126
  value = parse_directive_value(firstline_value, value_lines)
127
- if value == "''"
128
- # two literal apostrophes is a special case, we treat it as an
129
- # empty string. Probably ought to document that.
130
- graf_directives[directive_name] << ''
131
- else
132
- graf_directives[directive_name] << value
133
- end
127
+ graf_directives[directive_name] << if value == "''"
128
+ ''
129
+ else
130
+ value
131
+ end
134
132
  graf_directives[directive_name].flatten!
135
133
  end
136
134
  graf_directives
@@ -178,7 +176,7 @@ module Litbuild
178
176
  end
179
177
 
180
178
  def multiline_value(lines)
181
- lines.join("\n") + "\n"
179
+ "#{lines.join("\n")}\n"
182
180
  end
183
181
 
184
182
  def array_value(lines)
@@ -26,9 +26,8 @@ module Litbuild
26
26
  protected
27
27
 
28
28
  def add_file_content(directive)
29
- unless directive['name'] && directive['content']
29
+ (directive['name'] && directive['content']) ||
30
30
  raise(InvalidDirective, 'file directive missing name or content')
31
- end
32
31
 
33
32
  content = @files[directive['name'].first] ||= StringIO.new
34
33
  content.puts(directive['content'].first)
@@ -8,7 +8,7 @@ module Litbuild
8
8
  end
9
9
 
10
10
  def path_for(blueprint, phase = nil, stage = nil)
11
- count = format('%03d', @counter)
11
+ count = format('%<counter>03d', counter: @counter)
12
12
  @counter += 1
13
13
  file_name = build_name(count, blueprint, phase, stage)
14
14
  File.join(@log_dir, file_name)
@@ -17,7 +17,7 @@ module Litbuild
17
17
  protected
18
18
 
19
19
  def build_name(*elements)
20
- elements.uniq.compact.join('-') + '.log'
20
+ "#{elements.uniq.compact.join('-')}.log"
21
21
  end
22
22
  end
23
23
  end
@@ -29,7 +29,6 @@ module Litbuild
29
29
 
30
30
  protected
31
31
 
32
- attr_reader :other_parts
33
- attr_reader :appendices
32
+ attr_reader :other_parts, :appendices
34
33
  end
35
34
  end
@@ -67,14 +67,12 @@ module Litbuild
67
67
  end
68
68
  copy_commands = []
69
69
  package.tar_files_needed.each do |filename|
70
- unless pkgusr_file_available?(package, filename)
71
- copy_commands << "cp #{find_tarfile(filename)} ~#{pkgusr}/src"
72
- end
70
+ pkgusr_file_available?(package, filename) ||
71
+ (copy_commands << "cp #{find_tarfile(filename)} ~#{pkgusr}/src")
73
72
  end
74
73
  package.patch_files.each do |filename|
75
- unless pkgusr_file_available?(package, filename)
76
- copy_commands << "cp #{find_file(filename)} ~#{pkgusr}/patches"
77
- end
74
+ pkgusr_file_available?(package, filename) ||
75
+ (copy_commands << "cp #{find_file(filename)} ~#{pkgusr}/patches")
78
76
  end
79
77
  mkdir_commands + copy_commands.sort
80
78
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Litbuild
4
- VERSION = '1.0.3'
4
+ VERSION = '1.0.9'
5
5
  end
metadata CHANGED
@@ -1,40 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: litbuild
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Neumeier
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZicmV0
14
- dC9EQz1mcmVlc2EvREM9b3JnMB4XDTE5MDkwMTEyNDkxMFoXDTIwMDgzMTEyNDkx
15
- MFowITEfMB0GA1UEAwwWYnJldHQvREM9ZnJlZXNhL0RDPW9yZzCCAaIwDQYJKoZI
16
- hvcNAQEBBQADggGPADCCAYoCggGBALKrZnh07ME+wnUpu3EYsKisqaD68WomtNpt
17
- pOIPUWtQnRD3iVKmPfIsCrwGbU1NQDohiwz0SdLlLVDHIovwZB/j9sI5tzSfltas
18
- 5dNgN4mgtURqlILYNmuyDbOOsWtOec9Nz7OJfvV6oat7m4prf+rU0j8JtzCAsFNT
19
- B/IdLSqJlJEQ4UMeHPaC06RjOJJJOXSE+yh0Sm2dHjNnUyFnrzfHehMMFJ0wpL42
20
- RFaxRNGp/U9fn/h94lXz8h42ksoWXWG8RrsnRA3Olsu6uWQJsggnMbD7zzHlQ9Xf
21
- 0cV9ePbXmyKm2EfvcoVLBybimPmvYxrXOOxblbIMFl3yWX+YfJKrEsLb5F54RSao
22
- N4wy76RNF+d7m2yarhiqPf1dm8kzPRzJmhLLMpPa89N3mQaQtC+jrVEME6ahLNhl
23
- lnxLd3zcT7ExrHJQQnQgei5AsJe80Noq9K2+8QjLSYDSNsc80SuBczqMeybHxVVA
24
- 4CJKSU+amFYp/Z414cJr9AG+/xal8wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
25
- DwQEAwIEsDAdBgNVHQ4EFgQUtedZFs4wsrrlPms2Gt+1jV7JYYwwGwYDVR0RBBQw
26
- EoEQYnJldHRAZnJlZXNhLm9yZzAbBgNVHRIEFDASgRBicmV0dEBmcmVlc2Eub3Jn
27
- MA0GCSqGSIb3DQEBCwUAA4IBgQAfjb44P0zp86q4cvN8Wv/VEyvVLEiTT/DFWmER
28
- UBMPB1lIUxxgCs6MqxpRK8icX4IRb/W9qeC2nIBsmY7u4Xoj3JiaOLmoJImXt+tO
29
- KdGUu7ygymVZ7991XaAf4dpOcVYMmUDqS+G7mo/nbHBT4440AG2SSL02Nj7zDfn8
30
- Ut0XU+6UT3WxpBIA1o/BTmLkPvQhkOEMv7sWBWHdvS0eSxNTSfXpwkjIYpXMsUIg
31
- BbgMcxnxUIv5Y+Xb/TIbrRYqiDtqsDT+vsadKk3qjN0bx7vCVdibh2cfGTJA9Spe
32
- pi1q/NcnHXSeMFJ4iWyp6lyZxo+B7KIFkgD/irWbBoyZYpbMYJexasmoVuFgyvND
33
- VBt/HnbucMCrdU4EqbBQHFimTIyvOaI12/TaU4362smlgZhZdnlHyBeOUBGzDSLX
34
- PvrrfEkjwo+u4dPBTaO5ZBa4qsFE5bK/1l6d4AVV5Yi5NohUwmpp1bFFCGPqvzVA
35
- bhee2x0YS1uGTnADpv2GLkmNMIA=
36
- -----END CERTIFICATE-----
37
- date: 2019-09-14 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2021-12-25 00:00:00.000000000 Z
38
12
  dependencies: []
39
13
  description: A build system based on Knuth's idea of literate programming.
40
14
  email:
@@ -71,8 +45,9 @@ files:
71
45
  homepage: http://git.freesa.org/freesa/litbuild
72
46
  licenses:
73
47
  - GPL-3.0
74
- metadata: {}
75
- post_install_message:
48
+ metadata:
49
+ rubygems_mfa_required: 'true'
50
+ post_install_message:
76
51
  rdoc_options: []
77
52
  require_paths:
78
53
  - lib
@@ -80,15 +55,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
55
  requirements:
81
56
  - - ">="
82
57
  - !ruby/object:Gem::Version
83
- version: '2.6'
58
+ version: '3.0'
84
59
  required_rubygems_version: !ruby/object:Gem::Requirement
85
60
  requirements:
86
61
  - - ">="
87
62
  - !ruby/object:Gem::Version
88
63
  version: '0'
89
64
  requirements: []
90
- rubygems_version: 3.0.3
91
- signing_key:
65
+ rubygems_version: 3.3.3
66
+ signing_key:
92
67
  specification_version: 4
93
68
  summary: A literate build system
94
69
  test_files: []
checksums.yaml.gz.sig DELETED
Binary file
data.tar.gz.sig DELETED
Binary file
metadata.gz.sig DELETED
@@ -1,4 +0,0 @@
1
- H�8�,�Bj��
2
- 8-ik�[���ѩ�o����P})2~�ѷ�0����V������ϥt�
3
- ��N�Q-)�ET����?^5C�1P<�H7?� w��T>Nui�$Y5�f��u2O�����S;BQ2�()�bI�ǩ5M[�s��
4
- �/"s���XkC��23[�R)ioM��c,7� &K N�cu���J�'L��=�my�fӵW����b=R���+n��wK���