nexus_api 1.5.0 → 2.1.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
2
  SHA256:
3
- metadata.gz: ae2066e62934bcfeed3480aa351da4ad8053d258c762b4ed8cfc006a64eae7c3
4
- data.tar.gz: 597ba898fabbf3efcb1c2ab22f0557875d33cb6af24fd8a9338cf7be4c83b942
3
+ metadata.gz: 371514d3283ad019a0143c037000fd69763e0231981dd864c224ddfbdbe3924f
4
+ data.tar.gz: f3180660805e3e34f6499d8476fe32745ac5e6ee4b9630b1b4b052b84eb523dc
5
5
  SHA512:
6
- metadata.gz: 3015d930671ca0f18b89647f55a2fda2496c5ddd5c3df9540cd2d0012530a8ecf379f9aeaead6ab7a8a132e45c825cf89d25a78efb2b58b999343698a6d6531d
7
- data.tar.gz: f217d6c26156c2dc7960ce5f393b211bdc560134ede1cb95658a7c0e4b54c4f6b02f8ff4e055f2d573c0082e487f223cd90018966ef97249d390e8d0c8ad386b
6
+ metadata.gz: 14a5948432eb3599b250ead5e7e42f3660790b461a6ca4f69fde81855e5e4aa286b56ba5e320a06d59856a3be224a241623429f213f2527833bb16ab21b0d3d4
7
+ data.tar.gz: 2d06ce5f2f4ae060772dd384fe93c89acc0e1b4806c6523f7ac6ece99bfe08d84872327fb11b3b98d649e1d07c3a7e8e365e7aefe653ca2eda70add7df10ed24
@@ -5,6 +5,50 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
 
8
+ ## [2.1.0](https://github.com/Cisco-AMP/nexus_api/compare/v2.0.1...v2.1.0) - 2020-10-13
9
+ ### Added
10
+ - The ability to override HTTPS as the connection protocol for testing purposes
11
+ - The ability to specify a component name during upload that differs from the local file on disk
12
+
13
+
14
+ ## [2.0.1](https://github.com/Cisco-AMP/nexus_api/compare/v2.0.0...v2.0.1) - 2020-09-08
15
+ ### Security
16
+ - Use `rake` version `12.3.3` or later to avoid an [OS Command Injection](https://github.com/advisories/GHSA-jppv-gw3r-w3q8)
17
+
18
+
19
+ ## [2.0.0](https://github.com/Cisco-AMP/nexus_api/compare/v1.6.1...v2.0.0) - 2020-07-27
20
+ ### Added
21
+ - Fully implemented create methods for group, hosted, and proxy type repository in the following formats:
22
+ - docker
23
+ - maven
24
+ - npm
25
+ - pypi
26
+ - raw
27
+ - rubygems
28
+ - yum
29
+
30
+
31
+ ### Changed
32
+ - Method signature for `NexusAPI::API.create_repository_docker_hosted()`
33
+ - Method signature for `NexusAPI::API.create_repository_maven_hosted()`
34
+ - Method signature for `NexusAPI::API.create_repository_npm_hosted()`
35
+ - Method signature for `NexusAPI::API.create_repository_pypi_hosted()`
36
+ - Method signature for `NexusAPI::API.create_repository_raw_hosted()`
37
+ - Method signature for `NexusAPI::API.create_repository_rubygems_hosted()`
38
+ - Method signature for `NexusAPI::API.create_repository_yum_hosted()`
39
+
40
+
41
+ ## [1.6.1](https://github.com/Cisco-AMP/nexus_api/compare/v1.6.0...v1.6.1) - 2020-07-20
42
+ ### Fixed
43
+ - Parameters for tag creation were being JSON encoded twice resulting in data Nexus could not parse
44
+
45
+
46
+ ## [1.6.0](https://github.com/Cisco-AMP/nexus_api/compare/v1.5.0...v1.6.0) - 2020-07-20
47
+ ### Added
48
+ - `create_repository_raw_hosted()`
49
+ - `create_repository_rubygems_hosted()`
50
+
51
+
8
52
  ## [1.5.0](https://github.com/Cisco-AMP/nexus_api/compare/v1.4.1...v1.5.0) - 2020-06-10
9
53
  ### Added
10
54
  - New methods around the `privileges` endpoint
@@ -1,12 +1,12 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nexus_api (1.5.0)
4
+ nexus_api (2.1.0)
5
5
  bundler (~> 2)
6
6
  docker-api (~> 1.34.2)
7
7
  dotenv (~> 2.7.5)
8
8
  pry (~> 0.12.2)
9
- rake (~> 10.0)
9
+ rake (>= 12.3.3)
10
10
  rest-client (~> 2.1.0)
11
11
  thor (~> 0.20.3)
12
12
 
@@ -15,18 +15,18 @@ GEM
15
15
  specs:
16
16
  addressable (2.7.0)
17
17
  public_suffix (>= 2.0.2, < 5.0)
18
- coderay (1.1.2)
18
+ coderay (1.1.3)
19
19
  crack (0.4.3)
20
20
  safe_yaml (~> 1.0.0)
21
- diff-lcs (1.3)
21
+ diff-lcs (1.4.4)
22
22
  docile (1.3.2)
23
23
  docker-api (1.34.2)
24
24
  excon (>= 0.47.0)
25
25
  multi_json
26
26
  domain_name (0.5.20190701)
27
27
  unf (>= 0.0.5, < 1.0.0)
28
- dotenv (2.7.5)
29
- excon (0.73.0)
28
+ dotenv (2.7.6)
29
+ excon (0.76.0)
30
30
  hashdiff (1.0.1)
31
31
  http-accept (1.7.0)
32
32
  http-cookie (1.0.3)
@@ -35,13 +35,13 @@ GEM
35
35
  mime-types (3.3.1)
36
36
  mime-types-data (~> 3.2015)
37
37
  mime-types-data (3.2020.0512)
38
- multi_json (1.14.1)
38
+ multi_json (1.15.0)
39
39
  netrc (0.11.0)
40
40
  pry (0.12.2)
41
41
  coderay (~> 1.1.0)
42
42
  method_source (~> 0.9.0)
43
- public_suffix (4.0.4)
44
- rake (10.5.0)
43
+ public_suffix (4.0.6)
44
+ rake (13.0.1)
45
45
  rest-client (2.1.0)
46
46
  http-accept (>= 1.7.0, < 2.0)
47
47
  http-cookie (>= 1.0.2, < 2.0)
@@ -51,17 +51,17 @@ GEM
51
51
  rspec-core (~> 3.9.0)
52
52
  rspec-expectations (~> 3.9.0)
53
53
  rspec-mocks (~> 3.9.0)
54
- rspec-core (3.9.0)
55
- rspec-support (~> 3.9.0)
56
- rspec-expectations (3.9.0)
54
+ rspec-core (3.9.2)
55
+ rspec-support (~> 3.9.3)
56
+ rspec-expectations (3.9.2)
57
57
  diff-lcs (>= 1.2.0, < 2.0)
58
58
  rspec-support (~> 3.9.0)
59
- rspec-mocks (3.9.0)
59
+ rspec-mocks (3.9.1)
60
60
  diff-lcs (>= 1.2.0, < 2.0)
61
61
  rspec-support (~> 3.9.0)
62
- rspec-support (3.9.0)
62
+ rspec-support (3.9.3)
63
63
  safe_yaml (1.0.5)
64
- simplecov (0.18.5)
64
+ simplecov (0.19.0)
65
65
  docile (~> 1.1)
66
66
  simplecov-html (~> 0.11)
67
67
  simplecov-html (0.12.2)
data/README.md CHANGED
@@ -5,10 +5,10 @@ A ruby gem that wraps the [Sonatype Nexus Repository Manager 3](https://help.son
5
5
  ## Latest Version Tested
6
6
  Title | Value
7
7
  ---|---
8
- **Version** | `3.22.0-02`
8
+ **Version** | `3.24.0-02`
9
9
  **Edition** | `PRO`
10
- **Build Revision** | `140e045ce3cdd3f35e6f9d13127d7299d21f7251`
11
- **Build Timestamp** | `2020-03-27-1616-27700`
10
+ **Build Revision** | `302d6f23f1414581162efaf0fa7b4d81dbf9b251`
11
+ **Build Timestamp** | `2020-06-03-2332-51567`
12
12
 
13
13
 
14
14
  ## Installation
@@ -62,38 +62,170 @@ api = NexusAPI::API.new(
62
62
  docker_pull_hostname: DOCKER_PULL_HOSTNAME, # Optional
63
63
  docker_push_hostname: DOCKER_PUSH_HOSTNAME, # Optional
64
64
  config: "team_configs/#{CONFIG_NAME}", # Optional
65
+ protocol: "https", # Optional
65
66
  )
66
67
  # NOTE: All Docker commands will fail if the docker hostnames are not initialized
67
68
 
69
+
70
+ # You can create various types of repositories in different formats
71
+ api.create_repository_docker_group(
72
+ name: REPOSITORY_NAME,
73
+ members: REPOSITORY_MEMBERS,
74
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
75
+ )
76
+ api.create_repository_docker_hosted(
77
+ name: REPOSITORY_NAME,
78
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
79
+ )
80
+ api.create_repository_docker_proxy(
81
+ name: REPOSITORY_NAME,
82
+ remote_url: URL_TO_PROXY,
83
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
84
+ )
85
+
86
+ api.create_repository_maven_group(
87
+ name: REPOSITORY_NAME,
88
+ members: REPOSITORY_MEMBERS,
89
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
90
+ )
91
+ api.create_repository_maven_hosted(
92
+ name: REPOSITORY_NAME,
93
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
94
+ )
95
+ api.create_repository_maven_proxy(
96
+ name: REPOSITORY_NAME,
97
+ remote_url: URL_TO_PROXY,
98
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
99
+ )
100
+
101
+ api.create_repository_npm_group(
102
+ name: REPOSITORY_NAME,
103
+ members: REPOSITORY_MEMBERS,
104
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
105
+ )
106
+ api.create_repository_npm_hosted(
107
+ name: REPOSITORY_NAME,
108
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
109
+ )
110
+ api.create_repository_npm_proxy(
111
+ name: REPOSITORY_NAME,
112
+ remote_url: URL_TO_PROXY,
113
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
114
+ )
115
+
116
+ api.create_repository_pypi_group(
117
+ name: REPOSITORY_NAME,
118
+ members: REPOSITORY_MEMBERS,
119
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
120
+ )
121
+ api.create_repository_pypi_hosted(
122
+ name: REPOSITORY_NAME,
123
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
124
+ )
125
+ api.create_repository_pypi_proxy(
126
+ name: REPOSITORY_NAME,
127
+ remote_url: URL_TO_PROXY,
128
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
129
+ )
130
+
131
+ api.create_repository_raw_group(
132
+ name: REPOSITORY_NAME,
133
+ members: REPOSITORY_MEMBERS,
134
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
135
+ )
136
+ api.create_repository_raw_hosted(
137
+ name: REPOSITORY_NAME,
138
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
139
+ )
140
+ api.create_repository_raw_proxy(
141
+ name: REPOSITORY_NAME,
142
+ remote_url: URL_TO_PROXY,
143
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
144
+ )
145
+
146
+ api.create_repository_rubygems_group(
147
+ name: REPOSITORY_NAME,
148
+ members: REPOSITORY_MEMBERS,
149
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
150
+ )
151
+ api.create_repository_rubygems_hosted(
152
+ name: REPOSITORY_NAME,
153
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
154
+ )
155
+ api.create_repository_rubygems_proxy(
156
+ name: REPOSITORY_NAME,
157
+ remote_url: URL_TO_PROXY,
158
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
159
+ )
160
+
161
+ api.create_repository_yum_group(
162
+ name: REPOSITORY_NAME,
163
+ members: REPOSITORY_MEMBERS,
164
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
165
+ )
166
+ api.create_repository_yum_hosted(
167
+ name: REPOSITORY_NAME,
168
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
169
+ )
170
+ api.create_repository_yum_proxy(
171
+ name: REPOSITORY_NAME,
172
+ remote_url: URL_TO_PROXY,
173
+ options: HASH_OF_REPOSITORY_OPTIONS # Optional
174
+ )
175
+
176
+
68
177
  # You can query information through the list methods
69
- api.list_assets(repository: REPOSITORY_NAME)
178
+ api.list_all_assets(repository: REPOSITORY_NAME)
179
+ api.list_assets(repository: REPOSITORY_NAME, paginate: BOOLEAN)
70
180
  api.list_asset(id: ASSET_ID)
71
- api.list_components(repository: REPOSITORY_NAME)
181
+
182
+ api.list_all_components(repository: REPOSITORY_NAME)
183
+ api.list_components(repository: REPOSITORY_NAME, paginate: BOOLEAN)
72
184
  api.list_component(id: ASSET_ID)
185
+
73
186
  api.list_privileges
187
+ api.list_privilege(privilege_id: ID)
188
+
74
189
  api.list_repositories
75
190
  api.list_repository_names
191
+
76
192
  api.list_roles
193
+ api.list_role(id: ROLE_ID)
194
+
77
195
  api.list_scripts
78
- api.list_tags
196
+
197
+ api.list_all_tags
198
+ api.list_tags(paginate: BOOLEAN)
199
+
79
200
  api.list_users
80
201
 
202
+
81
203
  # You can search for an asset by its name
82
204
  # Optionally, you can pass in additional fields to filter the results
205
+ api.search_all_assets(
206
+ name: ASSET_NAME,
207
+ format: REPOSITORY_FORMAT, # Optional
208
+ repository: REPOSITORY_NAME, # Optional
209
+ sha1: SHA1, # Optional
210
+ version: VERSION, # Optional
211
+ )
212
+ # You can also paginate through the results if you want to do some additional filtering
83
213
  api.search_asset(
84
214
  name: ASSET_NAME,
85
215
  format: REPOSITORY_FORMAT, # Optional
86
216
  repository: REPOSITORY_NAME, # Optional
87
217
  sha1: SHA1, # Optional
88
218
  version: VERSION, # Optional
219
+ paginate: BOOLEAN # Optional
89
220
  )
90
221
 
222
+
91
223
  # The following endpoints will paginate:
92
224
  # - list_assets
93
225
  # - list_components
94
226
  # - list_tags
95
227
  # - search_asset
96
- # You can use the following methods to automatically gather data from all pages for you:
228
+ # Or you can use the following methods to automatically gather data from all pages for you:
97
229
  # - list_all_assets
98
230
  # - list_all_components
99
231
  # - list_all_tags
@@ -106,9 +238,11 @@ set = Array.new.tap do |set|
106
238
  end
107
239
  end
108
240
 
241
+
109
242
  # You can move all components that are tagged to a new destination
110
243
  api.move_components_to(destination: DESTINATION, tag: TAG)
111
244
 
245
+
112
246
  # You can download an asset by using its asset_id
113
247
  # Optionally, you can rename the file on download
114
248
  api.download(
@@ -116,50 +250,61 @@ api.download(
116
250
  name: NEW_FILE_NAME, # Optional
117
251
  )
118
252
 
253
+
119
254
  # Different asset types require differing information to be uploaded
120
- # Optionally, you can tag the component provided the tag already exists
255
+ # Optionally, you can:
256
+ # - tag the component, provided the tag already exists
257
+ # - specify a new component name to use when uploading into Nexus (instead of using the local file name)
121
258
  api.upload_maven_component(
122
259
  filename: MAVEN_FILENAME,
123
260
  group_id: GROUP_ID,
124
261
  artifact_id: ARTIFACT_ID,
125
262
  version: VERSION,
126
263
  repository: REPOSITORY_NAME,
127
- tag: TAG, # Optional
264
+ tag: TAG, # Optional
265
+ upstream_filename: UPSTREAM_FILENAME, # Optional
128
266
  )
129
267
  api.upload_npm_component(
130
268
  filename: NPM_FILENAME,
131
269
  repository: REPOSITORY_NAME,
132
- tag: TAG, # Optional
270
+ tag: TAG, # Optional
271
+ upstream_filename: UPSTREAM_FILENAME, # Optional
133
272
  )
134
273
  api.upload_pypi_component(
135
274
  filename: PYPI_FILENAME,
136
275
  repository: REPOSITORY_NAME,
137
- tag: TAG, # Optional
276
+ tag: TAG, # Optional
277
+ upstream_filename: UPSTREAM_FILENAME, # Optional
138
278
  )
139
279
  api.upload_raw_component(
140
280
  filename: NPM_FILENAME,
141
281
  directory: PATH_IN_NEXUS,
142
282
  repository: REPOSITORY_NAME,
143
- tag: TAG, # Optional
283
+ tag: TAG, # Optional
284
+ upstream_filename: UPSTREAM_FILENAME, # Optional
144
285
  )
145
286
  api.upload_rubygems_component(
146
287
  filename: RUBYGEMS_FILENAME,
147
288
  repository: REPOSITORY_NAME,
148
- tag: TAG, # Optional
289
+ tag: TAG, # Optional
290
+ upstream_filename: UPSTREAM_FILENAME, # Optional
149
291
  )
150
292
  api.upload_yum_component(
151
293
  filename: YUM_FILENAME,
152
294
  directory: PATH_IN_NEXUS,
153
295
  repository: REPOSITORY_NAME,
154
- tag: TAG, # Optional
296
+ tag: TAG, # Optional
297
+ upstream_filename: UPSTREAM_FILENAME, # Optional
155
298
  )
156
299
 
300
+
157
301
  # Docker is a special case and uses the local Docker daemon
158
302
  # If this daemon is not installed and running these methods will fail
159
303
  # NOTE: Docker login/logout is handled as part of the docker methods
160
304
  api.download_docker_component(image: IMAGE_NAME, tag: DOCKER_TAG)
161
305
  api.upload_docker_component(image: IMAGE_NAME, tag: DOCKER_TAG)
162
306
 
307
+
163
308
  # You can create/delete tags and associate/disassociate them from components
164
309
  # (we use the SHA1 rather than the file name because the Nexus search is inconsistent)
165
310
  api.create_tag(name: TAG)
@@ -167,10 +312,12 @@ api.associate_tag(name: TAG, sha1: SHA1_SUM, repository: REPOSITORY_NAME)
167
312
  api.delete_associated_tag(name: TAG, sha1: SHA1_SUM, repository: REPOSITORY_NAME)
168
313
  api.delete_tag(name: TAG)
169
314
 
315
+
170
316
  # You can query the Nexus status
171
317
  api.status
172
318
  api.status_writable
173
319
 
320
+
174
321
  # Using an asset's URL you can gather its filesize as a String
175
322
  api.get_asset_size(asset_url: URL)
176
323
  ```
data/bin/test CHANGED
@@ -1,2 +1,3 @@
1
1
  #!/usr/bin/env bash
2
- bundle exec rake test
2
+
3
+ bundle exec rspec ${1:+$1}
@@ -7,7 +7,7 @@ module NexusAPI
7
7
  end
8
8
 
9
9
  def list_all_assets(repository: nil)
10
- assets = Array.new.tap do |assets|
10
+ Array.new.tap do |assets|
11
11
  loop do
12
12
  assets.concat(list_assets(repository: repository, paginate: true))
13
13
  break unless paginate?
@@ -7,7 +7,7 @@ module NexusAPI
7
7
  end
8
8
 
9
9
  def list_all_components(repository: nil)
10
- components = Array.new.tap do |components|
10
+ Array.new.tap do |components|
11
11
  loop do
12
12
  components.concat(list_components(repository: repository, paginate: true))
13
13
  break unless paginate?
@@ -16,62 +16,62 @@ module NexusAPI
16
16
  end
17
17
 
18
18
  # POST /service/rest/v1/components
19
- def upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil)
19
+ def upload_maven_component(filename:, group_id:, artifact_id:, version:, repository: nil, tag: nil, upstream_filename: nil)
20
20
  repository ||= @team_config.maven_repository
21
21
  parameters = {
22
22
  'maven2.groupId' => group_id,
23
23
  'maven2.artifactId' => artifact_id,
24
24
  'maven2.version' => version,
25
- 'maven2.asset1' => File.open(filename, 'r'),
25
+ 'maven2.asset1' => File.open(upstream_filename || filename, 'r'),
26
26
  'maven2.asset1.extension' => filename.split('.').last,
27
27
  }
28
28
  parameters['maven2.tag'] = tag if tag
29
29
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
30
30
  end
31
31
 
32
- def upload_npm_component(filename:, repository: nil, tag: nil)
32
+ def upload_npm_component(filename:, repository: nil, tag: nil, upstream_filename: nil)
33
33
  repository ||= @team_config.npm_repository
34
34
  parameters = {
35
- 'npm.asset' => File.open(filename, 'r'),
35
+ 'npm.asset' => File.open(upstream_filename || filename, 'r'),
36
36
  }
37
37
  parameters['npm.tag'] = tag if tag
38
38
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
39
39
  end
40
40
 
41
- def upload_pypi_component(filename:, repository: nil, tag: nil)
41
+ def upload_pypi_component(filename:, repository: nil, tag: nil, upstream_filename: nil)
42
42
  repository ||= @team_config.pypi_repository
43
43
  parameters = {
44
- 'pypi.asset' => File.open(filename, 'r'),
44
+ 'pypi.asset' => File.open(upstream_filename || filename, 'r'),
45
45
  }
46
46
  parameters['pypi.tag'] = tag if tag
47
47
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
48
48
  end
49
49
 
50
- def upload_raw_component(filename:, directory:, repository: nil, tag: nil)
50
+ def upload_raw_component(filename:, directory:, repository: nil, tag: nil, upstream_filename: nil)
51
51
  repository ||= @team_config.raw_repository
52
52
  parameters = {
53
53
  'raw.directory' => directory,
54
- 'raw.asset1' => File.open(filename, 'r'),
54
+ 'raw.asset1' => File.open(upstream_filename || filename, 'r'),
55
55
  'raw.asset1.filename' => filename.split('/').last,
56
56
  }
57
57
  parameters['raw.tag'] = tag if tag
58
58
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
59
59
  end
60
60
 
61
- def upload_rubygems_component(filename:, repository: nil, tag: nil)
61
+ def upload_rubygems_component(filename:, repository: nil, tag: nil, upstream_filename: nil)
62
62
  repository ||= @team_config.rubygems_repository
63
63
  parameters = {
64
- 'rubygems.asset' => File.open(filename, 'r'),
64
+ 'rubygems.asset' => File.open(upstream_filename || filename, 'r'),
65
65
  }
66
66
  parameters['rubygems.tag'] = tag if tag
67
67
  @connection.post(endpoint: "components?repository=#{repository}", parameters: parameters, headers: {})
68
68
  end
69
69
 
70
- def upload_yum_component(filename:, directory:, repository: nil, tag: nil)
70
+ def upload_yum_component(filename:, directory:, repository: nil, tag: nil, upstream_filename: nil)
71
71
  repository ||= @team_config.yum_repository
72
72
  parameters = {
73
73
  'yum.directory' => directory,
74
- 'yum.asset' => File.open(filename, 'r'),
74
+ 'yum.asset' => File.open(upstream_filename || filename, 'r'),
75
75
  'yum.asset.filename' => filename.split('/').last,
76
76
  }
77
77
  parameters['yum.tag'] = tag if tag