pkgforge 0.20.0 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 41ffe55f7c506d38a4be46bfbcb89b7b7ec49f79
4
- data.tar.gz: 6146d7d7d1a8c88165deb5bc079a85c026a81570
2
+ SHA256:
3
+ metadata.gz: e6295bc0fa6b21641b31a86cb8a7b72e98788c7acb0d98bdf77453818dbf3d97
4
+ data.tar.gz: 2dc25196c7e6d0be42a004b538b8b3738fda5443152fffc302145aa993c4b6b7
5
5
  SHA512:
6
- metadata.gz: 4046b67e1b623ddd4662d199aa615fd4514fddf28beee96663b5485ab3e7284bf792b186b10f5eb8aa13d34ace973f1b7f5b002e5ae9ae9eb65683501cba1bb5
7
- data.tar.gz: 7360342df27396a35cf130d30303c92ff7cbff37f01eea9f51b0155dc57270825bbf2fc060e6be1fa501af96a40fa3b91b381c0f78a5bf637b0c93d7e315f0d2
6
+ metadata.gz: d139be8290e21e10e98504d91db078abe3d1a235df6eeb21eee23ad8ea88837362cf4a8ab0a0cb3850836bd964691c75f3989d2d0595aa171679af9136b9c6fc
7
+ data.tar.gz: 92a91e3cfc2ae61e94da4c5a91ea235b0e0872ef2e6ff61640c2c291516ff928f0484b1eea90606470efc216139e77c7e4d4f3512e6f2ae79aeb0306c33bd0fc
data/.circle-ruby CHANGED
@@ -1,3 +1,4 @@
1
- 2.4.2
2
- 2.3.5
3
- 2.2.8
1
+ 2.5.1
2
+ 2.4.4
3
+ 2.3.7
4
+ 2.2.10
data/.prospectus CHANGED
@@ -1,25 +1,11 @@
1
- Prospectus.extra_dep('file', 'prospectus_circleci')
2
-
3
1
  my_slug = 'akerl/pkgforge'
4
2
 
3
+ Prospectus.extra_dep('file', 'prospectus_circleci')
4
+ Prospectus.extra_dep('file', 'prospectus_gems')
5
+
5
6
  item do
6
7
  noop
7
8
 
8
- deps do
9
- item do
10
- name 'gems'
11
-
12
- expected do
13
- static
14
- set 'green'
15
- end
16
-
17
- actual do
18
- gemnasium
19
- slug my_slug
20
- end
21
- end
22
- end
23
-
9
+ extend ProspectusGems::Gemspec.new
24
10
  extend ProspectusCircleci::Build.new(my_slug)
25
11
  end
data/.rubocop.yml CHANGED
@@ -1,7 +1,4 @@
1
1
  inherit_gem:
2
2
  goodcop: .rubocop.yml
3
- AllCops:
4
- Include:
5
- - 'bin/*'
6
3
  Lint/Void:
7
4
  Enabled: false
data/README.md CHANGED
@@ -12,6 +12,268 @@ DSL engine for building Arch packages
12
12
 
13
13
  ## Usage
14
14
 
15
+ ### Running pkgforge
16
+
17
+ If you already have a .pkgforge file you want to run, the `pkgforge` tool has 3 subcommands:
18
+
19
+ ```
20
+ ❯ pkgforge
21
+ pkgforge 0.20.0 -- DSL engine for building Arch packages
22
+
23
+ Usage:
24
+
25
+ pkgforge <subcommand> [options]
26
+
27
+ Options:
28
+ -h, --help Show this message
29
+ -v, --version Print the name and version
30
+ -t, --trace Show the full backtrace when an error occurs
31
+
32
+ Subcommands:
33
+ build Build the package
34
+ release Release the package
35
+ info Print package info
36
+ ```
37
+
38
+ Each subcommand has help text that can be invoked w/ the `-h` flag detailing available options. Specific options of note:
39
+
40
+ * `-d DIR` -- Change to this directory before starting
41
+ * `-s` -- Don't clean up anything afterwards. Very useful for troubleshooting
42
+ * `-t` -- Enable tracebacks, so you can debug pkgforge internal errors
43
+
44
+ #### Standard flow
45
+
46
+ Generally, you'll want to run `pkgforge build` to confirm building works, and then `pkgforge release` to upload the package to GitHub. Releasing will use the tag on the current revision as the GitHub release name.
47
+
48
+ To avoid building the package twice (since build and release don't default to sharing state), you can use the `--statefile /path/to/file` option. This will cause the two commands to share state, so building builds an artifact and release updates that same artifact.
49
+
50
+ ### Writing .pkgforge files
51
+
52
+ The pkgforge spec has a couple of required elements and then several optional ones. The file is parsed as Ruby, so Ruby syntax applies for strings and similar, and additionally for advanced use cases you can write arbitrary Ruby at any point.
53
+
54
+ Before we start, here's an example complete .pkgforge for `git`:
55
+
56
+ ```
57
+ name 'git'
58
+ org 'amylum'
59
+
60
+ licenses 'COPYING'
61
+
62
+ deps(
63
+ zlib: {
64
+ version: '1.2.11-1',
65
+ checksum: '5596e2d39ef98e2323ac415f50afa71a433ed65c23e8d1f2723f711f5ffb4f32'
66
+ },
67
+ openssl: {
68
+ version: '1.1.0g-1',
69
+ checksum: 'f70d94ca94f05be4a14438cf29ed4695d9731d023a4b72d30126d826720bc48b'
70
+ },
71
+ curl: {
72
+ version: '7.57.0-1',
73
+ checksum: 'ea8db25223edddd2668d4f25f8a030469aa90306b1204cc1cecf64d468cb2949'
74
+ }
75
+ )
76
+
77
+ cflags
78
+ harden
79
+
80
+ build do
81
+ run(['make', 'all', 'install',
82
+ 'CC=musl-gcc',
83
+ "DESTDIR=#{releasedir}",
84
+ "CURL_LIBCURL=#{@forge.dep(:curl)}/usr/lib/libcurl.a #{@forge.dep(:openssl)}/usr/lib/libssl.a #{@forge.dep(:openssl)}/usr/lib/libcrypto.a",
85
+ "CFLAGS=#{@forge.cflags.join(' ')}",
86
+ "LDFLAGS=#{@forge.cflags.join(' ')}",
87
+ 'NO_TCLTK=1',
88
+ 'NO_PYTHON=1',
89
+ 'NO_EXPAT=1',
90
+ 'NO_GETTEXT=1',
91
+ 'NO_REGEX=1',
92
+ 'prefix=/usr',
93
+ 'gitexecdir=/usr/lib/git-core'
94
+ ])
95
+ end
96
+
97
+ test do
98
+ run 'git --version'
99
+ end
100
+ ```
101
+
102
+ #### name (required)
103
+
104
+ The name of the package, provided as a string
105
+
106
+ #### org (required)
107
+
108
+ The GitHub organization to upload the package to (this plus the name become the GitHub repo slug, as in `https://github.com/ORG/NAME`)
109
+
110
+ #### license (optional)
111
+
112
+ This defines where to find the license file. The default is to look for a file called 'LICENSE' in the source directory. This can be provided as a string or an array of strings (for multiple license files). If the given license does not exist, that is a fatal error during build.
113
+
114
+ #### source (optional)
115
+
116
+ The source block describes how to load the source of the upstream package. The default is "git" with a path of "./upstream". The available options:
117
+
118
+ ##### git
119
+
120
+ Loads the source from a local git submodule. Accepts a single argument, "path", which defines the path to the submodule, relative to the repo base dir:
121
+
122
+ ```
123
+ source(
124
+ type: 'git',
125
+ path: 'my_sub_dir'
126
+ )
127
+ ```
128
+
129
+ ##### tar
130
+
131
+ Loads the source from a remote tarball. Requires a "url" argument and a "checksum":
132
+
133
+ ```
134
+ source(
135
+ type: 'tar',
136
+ url: 'https://invisible-mirror.net/archives/ncurses/current/ncurses-6.0-20171223.tgz',
137
+ checksum: 'd0e2261c84f3fc56c13ebbc297a4b19fd6c9634fabd2143f88781b405ffe7698'
138
+ )
139
+ ```
140
+
141
+ #### empty
142
+
143
+ This sets up a blank source dir. Useful if you'll be generating all the contents, as in [this example](https://github.com/amylum/iana-etc/blob/master/.pkgforge)
144
+
145
+ ```
146
+ source(type: 'empty')
147
+ ```
148
+
149
+ #### deps (optional)
150
+
151
+ The deps parameter is an hash of dep objects, each of which contains a version and checksum. Deps are expected themselves to be pkgforge-built GitHub release artifacts and exist in the same org as this package. They are described by a version number and checksum.
152
+
153
+ ```
154
+ deps(
155
+ zlib: {
156
+ version: '1.2.11-1',
157
+ checksum: '5596e2d39ef98e2323ac415f50afa71a433ed65c23e8d1f2723f711f5ffb4f32'
158
+ },
159
+ openssl: {
160
+ version: '1.1.0g-1',
161
+ checksum: 'f70d94ca94f05be4a14438cf29ed4695d9731d023a4b72d30126d826720bc48b'
162
+ },
163
+ curl: {
164
+ version: '7.57.0-1',
165
+ checksum: 'ea8db25223edddd2668d4f25f8a030469aa90306b1204cc1cecf64d468cb2949'
166
+ }
167
+ )
168
+ ```
169
+
170
+ #### configure_flags (optional)
171
+
172
+ This lets you set flags that will be used if you run `configure` while building. They are specified as a hash, where the keys are the configure flag names without leading "--". A value of "nil" adds the flag without a value.
173
+
174
+ ```
175
+ configure_flags(
176
+ prefix: '/usr',
177
+ 'with-termlib': 'tinfo',
178
+ 'with-ticlib': 'tic',
179
+ 'with-shared': nil,
180
+ 'with-normal': nil,
181
+ 'without-cxx': nil,
182
+ 'without-cxx-binding': nil,
183
+ 'enable-widec': nil
184
+ )
185
+ ```
186
+
187
+ #### cflags (optional)
188
+
189
+ When called with no value, this auto-adds `-L /path/to/dep/lib -I /path/to/dep/include` to the CFLAGS variable used for build commands for every dep specified in the .pkgforge file. When called with a an array of strings, it adds those strings to the CFLAGS variable. It can be called multiple times.
190
+
191
+ ```
192
+ cflags
193
+ cflags ['-Wa,--noexecstack']
194
+ ```
195
+
196
+ #### libs (optional)
197
+
198
+ When called with no value, auto-adds `-lNAME` for every dep listed in the .pkgforge file to the LIBS variable that will be used for build commands. When called with an array of strings, adds those values to LIBS variable. Do not prefix with "-l" when calling with strings.
199
+
200
+ ```
201
+ libs %w(gpg-error assuan)
202
+ ```
203
+
204
+ #### remove_linker_archives (optional)
205
+
206
+ If called, this removes all .la files from deps. This exists because sometimes those files interfere with building.
207
+
208
+ #### remove_pkgconfig_files (optional)
209
+
210
+ If called, this removes all .pc files from deps. This exists because sometimes those files interfere with building.
211
+
212
+ #### harden (optional)
213
+
214
+ This adds a stock set of hardening options to CFLAGS. The list was originally sourced from [this blog](https://blog.mayflower.de/5800-Hardening-Compiler-Flags-for-NixOS.html), and can be seen [here](https://github.com/akerl/pkgforge/blob/master/lib/pkgforge/components/cflags.rb#L40). Passing an array of strings as arguments disables the listed options from the ALL_HARDEN_OPTS hash.
215
+
216
+ #### patch (optional)
217
+
218
+ This patches the source with the given patch files. Files must be stored in the `./patches` dir in the repo, and listed by name without the `./patches` prefix. This command can be used multiple times, and patches will be run in the order they are listed.
219
+
220
+ ```
221
+ patch 'musl.patch'
222
+ patch 'elf.patch'
223
+ patch 'if_arp.patch'
224
+ ```
225
+
226
+ #### package (optional)
227
+
228
+ This describes how to package the resulting build artifact. The default is to use "tarball"
229
+
230
+ ##### tarball
231
+
232
+ This bundles the whole release dir into a .tar.gz file
233
+
234
+ ##### file
235
+
236
+ This uploads individual files as listed. The "source" is where inside the release dir to find the file, the "name" is the name to give the artifact.
237
+
238
+ ```
239
+ package(
240
+ type: 'file',
241
+ artifacts: [
242
+ {
243
+ source: 'bin/speculate_darwin',
244
+ name: 'speculate_darwin'
245
+ },
246
+ {
247
+ source: 'bin/speculate_linux',
248
+ name: 'speculate_linux'
249
+ }
250
+ ]
251
+ )
252
+ ```
253
+
254
+ #### test (required)
255
+
256
+ The test block describes how to check that the build works. It is run after building, from the context of the newly created release's directory. Available helper commands:
257
+
258
+ * `run` -- Runs a command with the environment adjusted to use only this package's libs and the libs of your named deps.
259
+
260
+ #### build (required)
261
+
262
+ The build command describes how to actually turn the source into a package. It has a number of helper commands:
263
+
264
+ * `run` -- runs a command from the build directory. Takes a string or array of strings
265
+ * `configure` -- runs `./configure` with any given configure_flags, CFLAGS, and LIBs, as well as with the CC set to musl-gcc. If you have other env vars to set, pass them as a hash
266
+ * `make` -- runs `make` with the CFLAGS / LIBS / CC set similarly to ./configure. Again, if you have extra env vars, pass them as a hash.
267
+ * `install` -- runs `make DESTDIR=#{releasedir} install` with the same CFLAGS / LIBS / CC as make. Again, env vars can be passed as a hash.
268
+ * `rm` -- Remove a file from the release dir. Useful for cleaning up extra files. Accepts a string or array of strings
269
+ * `cp` -- Copies a file from the build dir to the release dir. Pass just the source path to copy to the same dest path, or pass source and dest to copy to a new path.
270
+
271
+ There are also a handful of variables / helper functions for looking up info:
272
+
273
+ * `releasedir` -- resolves to the release dir's absolute path
274
+ * `dep(PACKAGE)` -- resolves to that dep's absolute path
275
+ * `default_env` -- the CC, CFLAGS, and LIBS vars used by the helper commands.
276
+
15
277
  ## Installation
16
278
 
17
279
  gem install pkgforge
data/bin/pkgforge CHANGED
@@ -90,3 +90,4 @@ Mercenary.program(:pkgforge) do |p|
90
90
  exit 1
91
91
  end
92
92
  end
93
+ # rubocop:enable Metrics/BlockLength
@@ -36,7 +36,7 @@ module PkgForge
36
36
  deps.each do |dep_name, dep_hash|
37
37
  file = tmpfile(dep_name)
38
38
  dir = tmpdir(dep_name)
39
- download_file(dep_name, file, dep_hash[:version])
39
+ download_file(dep_name, dep_hash, file)
40
40
  verify_file(file, dep_hash[:checksum])
41
41
  extract_file(file, dir)
42
42
  end
@@ -44,9 +44,13 @@ module PkgForge
44
44
  end
45
45
 
46
46
  Contract Symbol, String, String => nil
47
- def download_file(dep_name, file, dep_version)
48
- url = "https://github.com/#{org}/#{dep_name}/releases/download/#{dep_version}/#{dep_name}.tar.gz" # rubocop:disable Metrics/LineLength
49
- open(file, 'wb') { |fh| fh << open(url, 'rb').read }
47
+ def download_file(dep_name, dep_hash, file)
48
+ dep_hash[:org] ||= org
49
+ dep_hash[:site] ||= 'https://github.com'
50
+ url = "#{dep_hash[:site]}/#{dep_hash[:org]}/#{dep_name}/releases/download/#{dep_hash[:version]}/#{dep_name}.tar.gz" # rubocop:disable Metrics/LineLength
51
+ File.open(file, 'wb') do |fh|
52
+ fh << open(url, 'rb').read # rubocop:disable Security/Open
53
+ end
50
54
  nil
51
55
  end
52
56
 
@@ -31,7 +31,9 @@ module PkgForge
31
31
  def tar_prepare_source
32
32
  dest_file = tmpfile(:source_tar)
33
33
  File.open(dest_file, 'wb') do |fh|
34
- open(source[:url], 'rb') { |request| fh.write request.read }
34
+ open(source[:url], 'rb') do |request| # rubocop:disable Security/Open
35
+ fh.write request.read
36
+ end
35
37
  verify_file(dest_file, source[:checksum])
36
38
  end
37
39
  run "tar -xf #{dest_file} --strip-components=1"
@@ -1,5 +1,5 @@
1
1
  ##
2
2
  # Declare version number
3
3
  module PkgForge
4
- VERSION = '0.20.0'.freeze
4
+ VERSION = '0.21.0'.freeze
5
5
  end
data/pkgforge.gemspec CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'English'
2
- $LOAD_PATH.unshift File.expand_path('../lib/', __FILE__)
2
+ $LOAD_PATH.unshift File.expand_path('lib', __dir__)
3
3
  require 'pkgforge/version'
4
4
 
5
5
  Gem::Specification.new do |s|
@@ -18,14 +18,14 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files spec/*`.split
19
19
  s.executables = ['pkgforge']
20
20
 
21
- s.add_dependency 'mercenary', '~> 0.3.4'
22
21
  s.add_dependency 'contracts', '~> 0.16.0'
23
22
  s.add_dependency 'cymbal', '~> 1.0.0'
23
+ s.add_dependency 'mercenary', '~> 0.3.4'
24
24
 
25
- s.add_development_dependency 'rubocop', '~> 0.50.0'
26
- s.add_development_dependency 'goodcop', '~> 0.1.0'
27
- s.add_development_dependency 'rake', '~> 12.1.0'
28
25
  s.add_development_dependency 'codecov', '~> 0.1.1'
29
- s.add_development_dependency 'rspec', '~> 3.6.0'
30
- s.add_development_dependency 'fuubar', '~> 2.2.0'
26
+ s.add_development_dependency 'fuubar', '~> 2.3.0'
27
+ s.add_development_dependency 'goodcop', '~> 0.5.0'
28
+ s.add_development_dependency 'rake', '~> 12.3.0'
29
+ s.add_development_dependency 'rspec', '~> 3.7.0'
30
+ s.add_development_dependency 'rubocop', '~> 0.57.1'
31
31
  end
metadata CHANGED
@@ -1,141 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pkgforge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Les Aker
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-17 00:00:00.000000000 Z
11
+ date: 2018-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: mercenary
14
+ name: contracts
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.4
19
+ version: 0.16.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.4
26
+ version: 0.16.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: contracts
28
+ name: cymbal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.16.0
33
+ version: 1.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 0.16.0
40
+ version: 1.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: cymbal
42
+ name: mercenary
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.0.0
47
+ version: 0.3.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.0.0
54
+ version: 0.3.4
55
55
  - !ruby/object:Gem::Dependency
56
- name: rubocop
56
+ name: codecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.50.0
61
+ version: 0.1.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.50.0
68
+ version: 0.1.1
69
69
  - !ruby/object:Gem::Dependency
70
- name: goodcop
70
+ name: fuubar
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.1.0
75
+ version: 2.3.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.1.0
82
+ version: 2.3.0
83
83
  - !ruby/object:Gem::Dependency
84
- name: rake
84
+ name: goodcop
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 12.1.0
89
+ version: 0.5.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 12.1.0
96
+ version: 0.5.0
97
97
  - !ruby/object:Gem::Dependency
98
- name: codecov
98
+ name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.1.1
103
+ version: 12.3.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.1.1
110
+ version: 12.3.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 3.6.0
117
+ version: 3.7.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 3.6.0
124
+ version: 3.7.0
125
125
  - !ruby/object:Gem::Dependency
126
- name: fuubar
126
+ name: rubocop
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 2.2.0
131
+ version: 0.57.1
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 2.2.0
138
+ version: 0.57.1
139
139
  description: DSL engine for building Arch packages
140
140
  email: me@lesaker.org
141
141
  executables:
@@ -194,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
194
  version: '0'
195
195
  requirements: []
196
196
  rubyforge_project:
197
- rubygems_version: 2.6.13
197
+ rubygems_version: 2.7.6
198
198
  signing_key:
199
199
  specification_version: 4
200
200
  summary: DSL engine for building Arch packages