issuer 0.2.1 → 0.3.0
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 +4 -4
- data/README.adoc +44 -29
- data/issuer.gemspec +0 -6
- data/lib/issuer/apis/github/client.rb +2 -2
- data/lib/issuer/cache.rb +1 -1
- data/lib/issuer/cli.rb +77 -12
- data/lib/issuer/issue.rb +2 -2
- data/lib/issuer/ops.rb +1 -1
- data/lib/issuer/sites/github.rb +1 -1
- metadata +4 -63
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9b9b8755cfce731755363e16c9499632533330adb62e565b1bafcd4b158c820e
|
|
4
|
+
data.tar.gz: 9372bd2d0245dd42e28143fb11060d173e14ad2bfa2422ef85dc5eb70897528c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e984bb19ef6339cd9b172dccb5108b376ce5e75565669d5eaacb4694f3978e278b152bc16bceb3e613ea6dd2cb161f463521b87970630555cfb3368527a72ba
|
|
7
|
+
data.tar.gz: 46e27411826c5c25a647bd8d7260c0284deffa5413285937e994e76c06f1cc70fe1e47954be085116df2f8162259d1796ce379f953cb4d2d5c09723a13a5612d
|
data/README.adoc
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
= Issuer: Bulk GitHub Issue Creator
|
|
2
2
|
:toc: macro
|
|
3
3
|
:toclevels: 3
|
|
4
|
-
:this_prod_vrsn: 0.
|
|
5
|
-
:next_prod_vrsn: 0.
|
|
6
|
-
:docker_base_command: docker run -it --rm -v $(pwd):/workdir -e ISSUER_API_TOKEN=$GITHUB_TOKEN docopslab/issuer
|
|
4
|
+
:this_prod_vrsn: 0.3.0
|
|
5
|
+
:next_prod_vrsn: 0.4.0
|
|
6
|
+
:docker_base_command: docker run -it --rm --user $(id -u):$(id -g) -v $(pwd):/workdir -e ISSUER_API_TOKEN=$GITHUB_TOKEN docopslab/issuer
|
|
7
7
|
:append_or_impose: Prepend items with `+` to indicate they should be appended to existing labels. Items without `+` will only be used for issues with no `tags` designated.
|
|
8
8
|
ifdef::env-github[]
|
|
9
9
|
:icons: font
|
|
@@ -15,6 +15,8 @@ ifdef::env-github[]
|
|
|
15
15
|
endif::[]
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
// tag::ai-prompt[]
|
|
19
|
+
[[overview]]
|
|
18
20
|
== Overview
|
|
19
21
|
|
|
20
22
|
_Issuer_ lets you define all your GitHub Issues work tickets in one place as YAML, apply defaults, and post them to GitHub Issues in bulk.
|
|
@@ -29,6 +31,8 @@ _Issuer_ lets you define all your GitHub Issues work tickets in one place as YAM
|
|
|
29
31
|
* *Issue validation* with helpful error messages
|
|
30
32
|
* *GitHub API integration*
|
|
31
33
|
|
|
34
|
+
// end::ai-prompt[]
|
|
35
|
+
|
|
32
36
|
Future plans include extending this capability to *Jira* (link:https://github.com/DocOps/issuer/issues/9[#9]), *GitLab* Issues (link:https://github.com/DocOps/issuer/issues/33[#33]), GitHub *Projects*, and other services.
|
|
33
37
|
|
|
34
38
|
toc::[]
|
|
@@ -92,15 +96,18 @@ See <<usage>> for more.
|
|
|
92
96
|
==== Alias the Docker Command
|
|
93
97
|
|
|
94
98
|
Optionally alias the base Docker command.
|
|
95
|
-
In your shell configuration (usually `~/.bashrc` or `~/.zshrc), add the following:
|
|
99
|
+
In your shell configuration (usually `~/.bashrc` or `~/.zshrc`), add the following:
|
|
96
100
|
|
|
97
101
|
[.prompt,subs=+attributes]
|
|
98
102
|
alias issuer='{docker_base_command}'
|
|
99
103
|
|
|
100
104
|
Reload your shell configuration for the alias to take effect:
|
|
101
105
|
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
....
|
|
107
|
+
source ~/.bashrc
|
|
108
|
+
# or
|
|
109
|
+
source ~/.zshrc
|
|
110
|
+
....
|
|
104
111
|
|
|
105
112
|
=== For Ruby Users
|
|
106
113
|
|
|
@@ -151,6 +158,7 @@ For Ruby Bundler usage, prepend `bundle exec ` and for un-aliased Docker usage,
|
|
|
151
158
|
[.prompt]
|
|
152
159
|
issuer example.yml
|
|
153
160
|
|
|
161
|
+
// tag::user-agent-prompt[]
|
|
154
162
|
[[imyml-format]]
|
|
155
163
|
=== IMYML File Format
|
|
156
164
|
|
|
@@ -329,8 +337,8 @@ Whether to treat the issue as a stub entry, meaning prepend any `$meta.defaults.
|
|
|
329
337
|
|
|
330
338
|
A source IMYML file is required and can be specified in two ways:
|
|
331
339
|
|
|
332
|
-
* *Positional argument* (most common)
|
|
333
|
-
* *Named option
|
|
340
|
+
* *Positional argument* (most common). Place the file path immediately after `issuer`
|
|
341
|
+
* *Named option.* Use the `--file` option flag to specify the file path
|
|
334
342
|
|
|
335
343
|
Examples:
|
|
336
344
|
|
|
@@ -367,6 +375,11 @@ Whether to treat all issues as stubs, meaning prepend any `$meta.defaults.head`
|
|
|
367
375
|
--dry, --dry-run::
|
|
368
376
|
Dry-run: print actions but do not post to GitHub.
|
|
369
377
|
|
|
378
|
+
--json [_FILE_PATH_]::
|
|
379
|
+
Save GitHub API issue payload as JSON file.
|
|
380
|
+
Use `--dry` if you want to skip posting while generating JSON.
|
|
381
|
+
If no `FILE_PATH` is specified, saves to time-stamped file in `_payloads/` directory.
|
|
382
|
+
|
|
370
383
|
--auto-versions, --auto-milestones::
|
|
371
384
|
Automatically create missing milestones/versions without prompting for confirmation.
|
|
372
385
|
|
|
@@ -382,6 +395,8 @@ Prints the usage screen.
|
|
|
382
395
|
--version::
|
|
383
396
|
Prints the version of `issuer`.
|
|
384
397
|
|
|
398
|
+
// end::user-ai-prompt[]
|
|
399
|
+
|
|
385
400
|
[[authentication]]
|
|
386
401
|
=== Authentication
|
|
387
402
|
|
|
@@ -423,9 +438,10 @@ Issuer automatically logs all API operations for tracking and potential cleanup.
|
|
|
423
438
|
|
|
424
439
|
By default, logs are stored in a user-wide directory:
|
|
425
440
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
441
|
+
[horizontal]
|
|
442
|
+
Linux/macOS:: `~/.config/issuer/logs/`
|
|
443
|
+
With XDG Base Directory:: `$XDG_CONFIG_HOME/issuer/logs/`
|
|
444
|
+
Custom location:: Set `ISSUER_CONFIG_DIR` environment variable
|
|
429
445
|
|
|
430
446
|
Example:
|
|
431
447
|
[source,bash]
|
|
@@ -491,6 +507,8 @@ In the end, the only thing that is mainly untouched by me are the rspec tests, w
|
|
|
491
507
|
This also explains why the terminal output contains emojis.
|
|
492
508
|
I will probably make those togglable or configurable in the future.
|
|
493
509
|
|
|
510
|
+
// tag::dev-ai-prompt[]
|
|
511
|
+
[[tests]]
|
|
494
512
|
=== Tests
|
|
495
513
|
|
|
496
514
|
The `specs/` directory contains all specifications, requirements, and tests for the Issuer CLI tool.
|
|
@@ -535,10 +553,10 @@ bundle exec rspec --pattern "*ops*"
|
|
|
535
553
|
|
|
536
554
|
The `pr_test` task runs the exact same tests that GitHub Actions runs for pull requests:
|
|
537
555
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
556
|
+
RSpec Tests:: All unit tests (`bundle exec rake spec`)
|
|
557
|
+
CLI Tests:: Command-line interface functionality tests
|
|
558
|
+
YAML Validation:: Validates all example YAML files
|
|
559
|
+
Documentation Quality:: Vale linting on all documentation files
|
|
542
560
|
|
|
543
561
|
This ensures you can validate your changes locally before pushing to GitHub.
|
|
544
562
|
|
|
@@ -597,39 +615,36 @@ The API reference includes:
|
|
|
597
615
|
|
|
598
616
|
This documentation is automatically updated with each gem release.
|
|
599
617
|
|
|
600
|
-
|
|
618
|
+
// end::dev-ai-prompt[]
|
|
601
619
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
ReleaseHx will be available soon, but for now the following is only usable by DocOps Lab.
|
|
620
|
+
[[release-history-management]]
|
|
621
|
+
=== Release History Management
|
|
606
622
|
|
|
607
|
-
.
|
|
608
|
-
|
|
609
|
-
[
|
|
610
|
-
gem 'releasehx', path: '../releasehx'
|
|
623
|
+
As of version 0.2.0, Release Notes and Changelog are generated using the link:https://github.com/DocOps/releasehx[_ReleaseHx_] tool.
|
|
624
|
+
You can find the release history assets in the `docs/releases/` directory, while the ReleaseHx configuration lives at `.config/releasehx.yml`.
|
|
625
|
+
The RHYML files are auto-generated and then manually edited to produce the GitHub link:https://github.com/DocOps/issuer/releases[release announcements].
|
|
611
626
|
|
|
612
627
|
. Draft RHYML draft file from the online GitHub Issues for the given version:
|
|
613
628
|
+
|
|
614
629
|
[.prompt,subs=+attributes]
|
|
615
|
-
|
|
616
|
-
+
|
|
617
|
-
The `releasehx-install.sh` ensures ReleaseHx is up to date.
|
|
630
|
+
bundle exec rhx {this_prod_vrsn} --yaml docs/releases/{this_prod_vrsn}.yml --config .config/releasehx.yml
|
|
618
631
|
|
|
619
632
|
. Manually edit the RHYML draft file.
|
|
620
633
|
|
|
621
634
|
. Generate the release history as Markdown.
|
|
622
635
|
+
|
|
623
636
|
[.prompt,subs=+attributes]
|
|
624
|
-
bundle exec rhx docs/
|
|
637
|
+
bundle exec rhx docs/releases/{this_prod_vrsn}.yml --md docs/releases/{this_prod_vrsn}.md --config .config/releasehx.yml
|
|
625
638
|
|
|
626
|
-
. Copy and paste the contents of `docs/
|
|
639
|
+
. Copy and paste the contents of `docs/releases/{this_prod_vrsn}.md` into the GitHub release form at https://github.com/DocOps/issuer/releases/new.
|
|
627
640
|
|
|
628
641
|
[[contributing]]
|
|
629
642
|
=== Contributing
|
|
630
643
|
|
|
631
644
|
Bug reports and pull requests are welcome on GitHub at https://github.com/DocOps/issuer.
|
|
632
645
|
|
|
646
|
+
|
|
647
|
+
[[legal]]
|
|
633
648
|
== Legal
|
|
634
649
|
|
|
635
650
|
The gem is available as open source under the terms of the MIT License.
|
data/issuer.gemspec
CHANGED
|
@@ -31,10 +31,4 @@ Gem::Specification.new do |spec|
|
|
|
31
31
|
spec.add_dependency "octokit", "~> 8.0"
|
|
32
32
|
spec.add_dependency "thor", "~> 1.0"
|
|
33
33
|
spec.add_dependency "faraday-retry", "~> 2.0"
|
|
34
|
-
|
|
35
|
-
# Development dependencies
|
|
36
|
-
spec.add_development_dependency "bundler", "~> 2.0"
|
|
37
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
|
38
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
|
39
|
-
spec.add_development_dependency "asciidoctor", "~> 2.0"
|
|
40
34
|
end
|
|
@@ -56,7 +56,7 @@ module Issuer
|
|
|
56
56
|
params[:assignee] = issue_params[:assignee].strip
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
# Handle milestone
|
|
59
|
+
# Handle milestone; only if milestone exists
|
|
60
60
|
if issue_params[:milestone]
|
|
61
61
|
milestone = find_milestone(repo, issue_params[:milestone])
|
|
62
62
|
params[:milestone] = milestone.number if milestone
|
|
@@ -259,7 +259,7 @@ module Issuer
|
|
|
259
259
|
def resolve_label_ids repo, label_names
|
|
260
260
|
# For now, we'll skip complex label ID resolution
|
|
261
261
|
# GitHub GraphQL API requires label IDs, but REST API uses names
|
|
262
|
-
# This is a simplification
|
|
262
|
+
# This is a simplification; in practice, you'd need to fetch and match labels
|
|
263
263
|
[]
|
|
264
264
|
end
|
|
265
265
|
|
data/lib/issuer/cache.rb
CHANGED
data/lib/issuer/cli.rb
CHANGED
|
@@ -18,6 +18,7 @@ module Issuer
|
|
|
18
18
|
class_option :tags, type: :string, desc: 'Comma-separated default or appended (+) labels for all issues'
|
|
19
19
|
class_option :stub, type: :boolean, desc: 'Enable stub mode for all issues'
|
|
20
20
|
class_option :dry, type: :boolean, default: false, aliases: ['--dry-run'], desc: 'Print issues, don\'t post'
|
|
21
|
+
class_option :json, type: :string, lazy_default: '', desc: 'Save API payloads as JSON to PATH (defaults to _payloads/). Combine with --dry to skip posting.'
|
|
21
22
|
class_option :tokenv, type: :string, desc: 'Name of environment variable containing GitHub token'
|
|
22
23
|
|
|
23
24
|
# Resource automation options
|
|
@@ -96,8 +97,9 @@ module Issuer
|
|
|
96
97
|
defaults['stub'] = options[:stub] if !options[:stub].nil?
|
|
97
98
|
|
|
98
99
|
# Determine target repository
|
|
100
|
+
dry_mode = options[:dry]
|
|
99
101
|
repo = options[:proj] || meta['proj'] || ENV['ISSUER_REPO'] || ENV['ISSUER_PROJ']
|
|
100
|
-
if repo.nil? && !
|
|
102
|
+
if repo.nil? && !dry_mode
|
|
101
103
|
abort 'No target repo set. Use --proj, $meta.proj, or ENV[ISSUER_REPO].'
|
|
102
104
|
end
|
|
103
105
|
|
|
@@ -110,6 +112,9 @@ module Issuer
|
|
|
110
112
|
# Apply stub logic with head/tail/body composition
|
|
111
113
|
issues = Issuer::Ops.apply_stub_logic(issues, defaults)
|
|
112
114
|
|
|
115
|
+
json_requested = !options[:json].nil?
|
|
116
|
+
json_path = options[:json]
|
|
117
|
+
|
|
113
118
|
# Separate valid and invalid issues
|
|
114
119
|
valid_issues = issues.select(&:valid?)
|
|
115
120
|
invalid_issues = issues.reject(&:valid?)
|
|
@@ -119,8 +124,11 @@ module Issuer
|
|
|
119
124
|
puts "Skipping issue ##{find_original_index(issues, issue) + 1}: #{issue.validation_errors.join(', ')}"
|
|
120
125
|
end
|
|
121
126
|
|
|
122
|
-
|
|
123
|
-
|
|
127
|
+
site = nil
|
|
128
|
+
|
|
129
|
+
if dry_mode
|
|
130
|
+
site = build_dry_run_site
|
|
131
|
+
perform_dry_run(valid_issues, repo, site)
|
|
124
132
|
else
|
|
125
133
|
# Use Sites architecture for validation and posting
|
|
126
134
|
site_options = {}
|
|
@@ -151,7 +159,9 @@ module Issuer
|
|
|
151
159
|
end
|
|
152
160
|
end
|
|
153
161
|
|
|
154
|
-
|
|
162
|
+
perform_json_output(valid_issues, repo, json_path, site, dry_run: dry_mode) if json_requested
|
|
163
|
+
|
|
164
|
+
print_summary(valid_issues.length, invalid_issues.length, dry_mode)
|
|
155
165
|
end
|
|
156
166
|
|
|
157
167
|
private
|
|
@@ -175,6 +185,7 @@ module Issuer
|
|
|
175
185
|
|
|
176
186
|
Mode Options:
|
|
177
187
|
--dry, --dry-run #{self.class_options[:dry].description}
|
|
188
|
+
--json [PATH] #{self.class_options[:json].description}
|
|
178
189
|
--auto-versions #{self.class_options[:auto_versions].description}
|
|
179
190
|
--auto-milestones (alias for --auto-versions)
|
|
180
191
|
--auto-tags #{self.class_options[:auto_tags].description}
|
|
@@ -190,6 +201,7 @@ module Issuer
|
|
|
190
201
|
issuer issues.yml --proj myorg/myrepo
|
|
191
202
|
issuer --file issues.yml --proj myorg/myrepo --dry
|
|
192
203
|
issuer issues.yml --vrsn 1.1.2
|
|
204
|
+
issuer issues.yml --json dry-output.json
|
|
193
205
|
issuer --version
|
|
194
206
|
issuer --help
|
|
195
207
|
|
|
@@ -203,16 +215,11 @@ module Issuer
|
|
|
203
215
|
issues_array.find_index(target_issue) || 0
|
|
204
216
|
end
|
|
205
217
|
|
|
206
|
-
def perform_dry_run issues, repo
|
|
207
|
-
# Create site instance for parameter conversion in dry-run mode
|
|
208
|
-
site_options = { token: 'dry-run-token' }
|
|
209
|
-
site_options[:token_env_var] = options[:tokenv] if options[:tokenv]
|
|
210
|
-
site = Issuer::Sites::Factory.create('github', **site_options)
|
|
211
|
-
|
|
218
|
+
def perform_dry_run issues, repo, site
|
|
212
219
|
issues.each do |issue|
|
|
213
220
|
print_issue_summary(issue, repo, site)
|
|
214
221
|
end
|
|
215
|
-
|
|
222
|
+
|
|
216
223
|
# Add project summary at the end
|
|
217
224
|
if repo
|
|
218
225
|
project_term = site.field_mappings[:project_name] || 'project'
|
|
@@ -220,6 +227,64 @@ module Issuer
|
|
|
220
227
|
end
|
|
221
228
|
end
|
|
222
229
|
|
|
230
|
+
def perform_json_output issues, repo, json_path, site, dry_run:
|
|
231
|
+
require 'json'
|
|
232
|
+
require 'fileutils'
|
|
233
|
+
|
|
234
|
+
if json_path.empty?
|
|
235
|
+
output_dir = '_payloads'
|
|
236
|
+
timestamp = Time.now.strftime('%Y%m%d_%H%M%S')
|
|
237
|
+
output_path = File.join(output_dir, "issues_#{timestamp}.json")
|
|
238
|
+
else
|
|
239
|
+
output_path = json_path
|
|
240
|
+
output_dir = File.dirname(output_path)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
FileUtils.mkdir_p(output_dir) unless Dir.exist?(output_dir)
|
|
244
|
+
|
|
245
|
+
# Convert issues to API payloads
|
|
246
|
+
payloads = issues.map do |issue|
|
|
247
|
+
site.convert_issue_to_site_params(issue, repo, dry_run: dry_run)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Create JSON structure
|
|
251
|
+
json_data = {
|
|
252
|
+
metadata: {
|
|
253
|
+
generated_at: Time.now.iso8601,
|
|
254
|
+
repository: repo,
|
|
255
|
+
total_issues: issues.length,
|
|
256
|
+
issuer_version: Issuer::VERSION
|
|
257
|
+
},
|
|
258
|
+
issues: payloads
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
File.write(output_path, JSON.pretty_generate(json_data))
|
|
262
|
+
|
|
263
|
+
puts "Saved #{issues.length} issue payloads to: #{output_path}"
|
|
264
|
+
|
|
265
|
+
puts "\nIssue preview:"
|
|
266
|
+
issues.first(3).each do |issue|
|
|
267
|
+
print_issue_summary(issue, repo, site)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
if issues.length > 3
|
|
271
|
+
puts "... and #{issues.length - 3} more issues"
|
|
272
|
+
puts "------\n"
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Add project summary
|
|
276
|
+
if repo
|
|
277
|
+
project_term = site.field_mappings[:project_name] || 'project'
|
|
278
|
+
puts "JSON contains #{issues.length} issue payloads for #{project_term}: #{repo}"
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
|
|
282
|
+
def build_dry_run_site
|
|
283
|
+
site_options = { token: 'dry-run-token' }
|
|
284
|
+
site_options[:token_env_var] = options[:tokenv] if options[:tokenv]
|
|
285
|
+
Issuer::Sites::Factory.create('github', **site_options)
|
|
286
|
+
end
|
|
287
|
+
|
|
223
288
|
def print_summary valid_count, invalid_count, dry_run
|
|
224
289
|
if dry_run
|
|
225
290
|
puts "\nDry run complete (use without --dry to actually post)"
|
|
@@ -228,7 +293,7 @@ module Issuer
|
|
|
228
293
|
puts "\n✅ Completed: #{valid_count} issues processed, #{invalid_count} skipped"
|
|
229
294
|
# Note: Run ID is already displayed in the main flow, no need to repeat it here
|
|
230
295
|
end
|
|
231
|
-
|
|
296
|
+
|
|
232
297
|
end
|
|
233
298
|
|
|
234
299
|
def print_issue_summary issue, repo, site
|
data/lib/issuer/issue.rb
CHANGED
|
@@ -78,7 +78,7 @@ module Issuer
|
|
|
78
78
|
@type = @raw_data['type'] || defaults['type']
|
|
79
79
|
@stub = @raw_data.key?('stub') ? @raw_data['stub'] : defaults['stub']
|
|
80
80
|
|
|
81
|
-
# For tags, we need special handling
|
|
81
|
+
# For tags, we need special handling; combine defaults and issue tags for later processing
|
|
82
82
|
defaults_tags = Array(defaults['tags'])
|
|
83
83
|
issue_tags = Array(@raw_data['tags'])
|
|
84
84
|
@tags = defaults_tags + issue_tags
|
|
@@ -401,7 +401,7 @@ module Issuer
|
|
|
401
401
|
# Get terminal width, default to 80 if not available
|
|
402
402
|
terminal_width = ENV['COLUMNS']&.to_i || 80
|
|
403
403
|
|
|
404
|
-
# Calculate available width for content (terminal width
|
|
404
|
+
# Calculate available width for content (terminal width; indentation)
|
|
405
405
|
available_width = terminal_width - indent_size
|
|
406
406
|
|
|
407
407
|
# If line fits within available width, just return it with indentation
|
data/lib/issuer/ops.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Issuer
|
|
|
14
14
|
# This method converts scalar strings to proper issue hashes and creates Issue objects
|
|
15
15
|
# with enhanced defaults processing. It handles both string and hash inputs gracefully.
|
|
16
16
|
#
|
|
17
|
-
# @param issues_data [Array<String, Hash>] Raw issue data
|
|
17
|
+
# @param issues_data [Array<String, Hash>] Raw issue data; can be strings or hashes
|
|
18
18
|
# @param defaults [Hash] Default values to apply to all issues
|
|
19
19
|
# @return [Array<Issuer::Issue>] Array of processed Issue objects
|
|
20
20
|
#
|
data/lib/issuer/sites/github.rb
CHANGED
|
@@ -77,7 +77,7 @@ module Issuer
|
|
|
77
77
|
params[:assignee] = issue_params[:assignee].strip
|
|
78
78
|
end
|
|
79
79
|
|
|
80
|
-
# Handle milestone
|
|
80
|
+
# Handle milestone; only if milestone exists
|
|
81
81
|
if issue_params[:milestone]
|
|
82
82
|
# If milestone is already a number (from convert_issue_to_site_params), use it directly
|
|
83
83
|
if issue_params[:milestone].is_a?(Integer)
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: issuer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- DocOps Lab
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: octokit
|
|
@@ -52,62 +51,6 @@ dependencies:
|
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
53
|
version: '2.0'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: bundler
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '2.0'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '2.0'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rake
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '13.0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '13.0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: rspec
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '3.0'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '3.0'
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: asciidoctor
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: '2.0'
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: '2.0'
|
|
111
54
|
description: CLI tool for creating multiple GitHub issues from a single YAML file
|
|
112
55
|
(IMYML format). Define all your issues in one place, apply defaults, and post them
|
|
113
56
|
to GitHub in bulk.
|
|
@@ -145,8 +88,7 @@ metadata:
|
|
|
145
88
|
homepage_uri: https://github.com/DocOps/issuer
|
|
146
89
|
source_code_uri: https://github.com/DocOps/issuer
|
|
147
90
|
changelog_uri: https://github.com/DocOps/issuer/blob/main/CHANGELOG.md
|
|
148
|
-
documentation_uri: https://gemdocs.org/gems/issuer/0.
|
|
149
|
-
post_install_message:
|
|
91
|
+
documentation_uri: https://gemdocs.org/gems/issuer/0.3.0
|
|
150
92
|
rdoc_options: []
|
|
151
93
|
require_paths:
|
|
152
94
|
- lib
|
|
@@ -161,8 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
161
103
|
- !ruby/object:Gem::Version
|
|
162
104
|
version: '0'
|
|
163
105
|
requirements: []
|
|
164
|
-
rubygems_version: 3.
|
|
165
|
-
signing_key:
|
|
106
|
+
rubygems_version: 3.7.2
|
|
166
107
|
specification_version: 4
|
|
167
108
|
summary: Bulk GitHub issue creator from YAML definitions
|
|
168
109
|
test_files: []
|