sleet 0.4.3 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +16 -1
- data/docs/README.md +26 -9
- data/lib/sleet.rb +1 -0
- data/lib/sleet/branch.rb +1 -1
- data/lib/sleet/cli.rb +13 -0
- data/lib/sleet/config.rb +13 -1
- data/lib/sleet/fetch_command.rb +0 -1
- data/lib/sleet/job_fetcher.rb +0 -4
- data/lib/sleet/local_repo.rb +75 -0
- data/lib/sleet/repo.rb +17 -60
- data/lib/sleet/version.rb +1 -1
- data/sleet.gemspec +2 -2
- metadata +15 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8805bb18d2e088cf5f63494b42e29e4e05afcd187917c8260823911242d5910b
|
4
|
+
data.tar.gz: 3611f50834801d5c2330a1f30a249faf89985bc0675a1d4b00911c25405565ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92c65ac25258e338d9e86af77142a172621af44ea3ab9aad61bf91924c2e4a3f8fe15c0428c5acce1c80412e20789c8a8aadfe9e02644aeccaa54888b829038d
|
7
|
+
data.tar.gz: eaf9852bceea8250b85a499af61dda56463aeb6fd85ea1b49c0566b0b99c65ff09ba9ea02a9e0200b13a268960c211402892b2b88d38ce70d06f6db324334ca1
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## [v0.
|
3
|
+
## [v0.5.0](https://github.com/coreyja/sleet/tree/v0.5.0) (2020-06-13)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/coreyja/sleet/compare/v0.4.3...v0.5.0)
|
6
|
+
|
7
|
+
**Closed issues:**
|
8
|
+
|
9
|
+
- Add Support for Forked Repos in Github [\#41](https://github.com/coreyja/sleet/issues/41)
|
10
|
+
|
11
|
+
**Merged pull requests:**
|
12
|
+
|
13
|
+
- Support PR builds from forked repos!!! ✨ [\#77](https://github.com/coreyja/sleet/pull/77) ([smudge](https://github.com/smudge))
|
14
|
+
- Update rugged requirement from \>= 0.26, \< 0.100 to \>= 0.26, \< 1.1 [\#76](https://github.com/coreyja/sleet/pull/76) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview))
|
15
|
+
- Update rugged requirement from \>= 0.26, \< 0.29 to \>= 0.26, \< 0.100 [\#75](https://github.com/coreyja/sleet/pull/75) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview))
|
16
|
+
- Update thor requirement from ~\> 0.20.0 to \>= 0.20, \< 1.1 [\#70](https://github.com/coreyja/sleet/pull/70) ([dependabot-preview[bot]](https://github.com/apps/dependabot-preview))
|
17
|
+
|
18
|
+
## [v0.4.3](https://github.com/coreyja/sleet/tree/v0.4.3) (2020-03-07)
|
4
19
|
|
5
20
|
[Full Changelog](https://github.com/coreyja/sleet/compare/v0.4.2...v0.4.3)
|
6
21
|
|
data/docs/README.md
CHANGED
@@ -95,31 +95,31 @@ To view your current configuration use the `sleet config` command which will giv
|
|
95
95
|
|
96
96
|
These are the options that are currently supported
|
97
97
|
|
98
|
-
####
|
98
|
+
#### `--source_dir`
|
99
99
|
|
100
|
-
Alias: s
|
100
|
+
Alias: `s`
|
101
101
|
|
102
102
|
This is the directory of the source git repo. If a `source_dir` is NOT given we look up from the current directory for the nearest git repo.
|
103
103
|
|
104
|
-
####
|
104
|
+
#### `--input_file`
|
105
105
|
|
106
|
-
Alias: i
|
106
|
+
Alias: `i`
|
107
107
|
|
108
108
|
This is the name of the Rspec Circle Persistance File in CircleCI. The default is `.rspec_example_statuses`
|
109
109
|
|
110
110
|
This will match if the full path on CircleCI ends in the given name.
|
111
111
|
|
112
|
-
####
|
112
|
+
#### `--output_file`
|
113
113
|
|
114
|
-
Alias: o
|
114
|
+
Alias: `o`
|
115
115
|
|
116
116
|
This is the name for the output file, on your local system. It is relative to the `source_dir`.
|
117
117
|
|
118
118
|
Will be IGNORED if `workflows` is provided.
|
119
119
|
|
120
|
-
####
|
120
|
+
#### `--workflows`
|
121
121
|
|
122
|
-
Alias: w
|
122
|
+
Alias: `w`
|
123
123
|
|
124
124
|
If you are using workflows in CircleCI, then this is for you! You need to tell `Sleet` which build(s) to look in, and where each output should be saved.
|
125
125
|
The input is a hash, where the key is the build name and the value is the `output_file` for that build. Sleet supports saving the artifacts to multiple builds, meaning it can support a mono-repo setup.
|
@@ -133,7 +133,6 @@ This command will pick the `test` build and save its artifacts to the `.rspec_ex
|
|
133
133
|
```
|
134
134
|
sleet fetch --workflows test:.rspec_example_statuses
|
135
135
|
```
|
136
|
-
|
137
136
|
MonoRepo Demo:
|
138
137
|
|
139
138
|
If you have a mono-repo that contains 3 sub-dirs. `foo`, `bar` and `baz`. And each one has an accompanying build. We can process all these sub-dirs at once with the following workflow command.
|
@@ -141,3 +140,21 @@ If you have a mono-repo that contains 3 sub-dirs. `foo`, `bar` and `baz`. And ea
|
|
141
140
|
```
|
142
141
|
sleet fetch --workflows foo-test:foo/.rpsec_example_statuses bar-test:bar/.rspec_example_statuses baz-specs:baz/spec/examples.txt
|
143
142
|
```
|
143
|
+
|
144
|
+
#### `--username`
|
145
|
+
|
146
|
+
Alias: `u`
|
147
|
+
|
148
|
+
This is the GitHub username that is referenced by the CircleCI build. By default, Sleet will base this on your upstream git remote.
|
149
|
+
|
150
|
+
#### `--project`
|
151
|
+
|
152
|
+
Alias: `p`
|
153
|
+
|
154
|
+
This is the GitHub project that is referenced by the CircleCI build. By default, Sleet will base this on your upstream git remote.
|
155
|
+
|
156
|
+
#### `--branch`
|
157
|
+
|
158
|
+
Alias: `b`
|
159
|
+
|
160
|
+
This is the remote branch that is referenced by the CircleCI build. Sleet will attempt to guess this by default, but if you are pushing to a forked repo, you may need to specify a different branch name (e.g. "pull/1234").
|
data/lib/sleet.rb
CHANGED
data/lib/sleet/branch.rb
CHANGED
data/lib/sleet/cli.rb
CHANGED
@@ -4,6 +4,10 @@ module Sleet
|
|
4
4
|
class Cli < Thor
|
5
5
|
default_task :fetch
|
6
6
|
|
7
|
+
def self.exit_on_failure?
|
8
|
+
true
|
9
|
+
end
|
10
|
+
|
7
11
|
desc 'fetch', 'Fetch and Aggregate RSpec Persistance Files from CircleCI'
|
8
12
|
long_desc <<~LONGDESC
|
9
13
|
`sleet fetch` will find build(s) in CircleCI for the current branch, and
|
@@ -20,6 +24,15 @@ module Sleet
|
|
20
24
|
option :output_file, type: :string, aliases: [:o], desc: <<~DESC
|
21
25
|
This is the name for the output file, on your local system. It is relative to the source_dir. Will be IGNORED if workflows is provided.
|
22
26
|
DESC
|
27
|
+
option :username, type: :string, aliases: [:u], desc: <<~DESC
|
28
|
+
This is the GitHub username that is referenced by the CircleCI build. By default, Sleet will base this on your upstream git remote.
|
29
|
+
DESC
|
30
|
+
option :project, type: :string, aliases: [:p], desc: <<~DESC
|
31
|
+
This is the GitHub project that is referenced by the CircleCI build. By default, Sleet will base this on your upstream git remote.
|
32
|
+
DESC
|
33
|
+
option :branch, type: :string, aliases: [:b], desc: <<~DESC
|
34
|
+
This is the remote branch that is referenced by the CircleCI build. Sleet will attempt to guess this by default, but if you are pushing to a forked repo, you may need to specify a different branch name (e.g. "pull/1234").
|
35
|
+
DESC
|
23
36
|
option :workflows, type: :hash, aliases: [:w], desc: <<~DESC
|
24
37
|
To use Sleet with CircleCI Workflows you need to tell Sleet which build(s) to look in, and where each output should be saved. The input is a hash, where the key is the build name and the value is the output_file for that build. Sleet supports saving the artifacts to multiple builds, meaning it can support a mono-repo setup.
|
25
38
|
DESC
|
data/lib/sleet/config.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Sleet
|
4
|
-
class Config
|
4
|
+
class Config # rubocop:disable Metrics/ClassLength
|
5
5
|
OPTION_FILENAME = '.sleet.yml'
|
6
6
|
HIDDEN_UNLESS_IN_CLI_OPTIONS = %w[show_sensitive print_config].freeze
|
7
7
|
ConfigOption = Struct.new(:value, :source)
|
@@ -23,6 +23,18 @@ module Sleet
|
|
23
23
|
options_hash[:output_file]
|
24
24
|
end
|
25
25
|
|
26
|
+
def username
|
27
|
+
options_hash[:username]
|
28
|
+
end
|
29
|
+
|
30
|
+
def project
|
31
|
+
options_hash[:project]
|
32
|
+
end
|
33
|
+
|
34
|
+
def branch
|
35
|
+
options_hash[:branch]
|
36
|
+
end
|
37
|
+
|
26
38
|
def workflows
|
27
39
|
options_hash[:workflows]
|
28
40
|
end
|
data/lib/sleet/fetch_command.rb
CHANGED
data/lib/sleet/job_fetcher.rb
CHANGED
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sleet
|
4
|
+
class LocalRepo
|
5
|
+
REMOTE_BRANCH_REGEX = %r{^([^\/.]+)\/(.+)}.freeze
|
6
|
+
CURRENT_BRANCH_REGEX = %r{^refs\/heads\/}.freeze
|
7
|
+
GITHUB_MATCH_REGEX = %r{github.com[:\/](.+)\/(.+)\.git}.freeze
|
8
|
+
|
9
|
+
def initialize(source_dir:)
|
10
|
+
@source_dir = source_dir
|
11
|
+
end
|
12
|
+
|
13
|
+
def username
|
14
|
+
validate!
|
15
|
+
|
16
|
+
github_match[1]
|
17
|
+
end
|
18
|
+
|
19
|
+
def project
|
20
|
+
validate!
|
21
|
+
|
22
|
+
github_match[2]
|
23
|
+
end
|
24
|
+
|
25
|
+
def branch_name
|
26
|
+
validate!
|
27
|
+
|
28
|
+
current_branch.upstream.name.match(REMOTE_BRANCH_REGEX)[2]
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :source_dir
|
34
|
+
|
35
|
+
def current_branch_name
|
36
|
+
@current_branch_name ||= repo.head.name.sub(CURRENT_BRANCH_REGEX, '')
|
37
|
+
end
|
38
|
+
|
39
|
+
def current_branch
|
40
|
+
@current_branch ||= repo.branches[current_branch_name]
|
41
|
+
end
|
42
|
+
|
43
|
+
def github_match
|
44
|
+
@github_match ||= GITHUB_MATCH_REGEX.match(current_branch.remote.url)
|
45
|
+
end
|
46
|
+
|
47
|
+
def repo
|
48
|
+
@repo ||= Rugged::Repository.new(source_dir)
|
49
|
+
end
|
50
|
+
|
51
|
+
def validate!
|
52
|
+
return if @validated
|
53
|
+
|
54
|
+
must_be_on_branch!
|
55
|
+
must_have_an_upstream_branch!
|
56
|
+
upstream_remote_must_be_github!
|
57
|
+
@validated = true
|
58
|
+
end
|
59
|
+
|
60
|
+
def must_be_on_branch!
|
61
|
+
!current_branch.nil? ||
|
62
|
+
raise(Error, 'Not on a branch')
|
63
|
+
end
|
64
|
+
|
65
|
+
def must_have_an_upstream_branch!
|
66
|
+
!current_branch.remote.nil? ||
|
67
|
+
raise(Error, "No upstream branch set for the current branch of #{repo.current_branch_name}")
|
68
|
+
end
|
69
|
+
|
70
|
+
def upstream_remote_must_be_github!
|
71
|
+
!github_match.nil? ||
|
72
|
+
raise(Error, 'Upstream remote is not GitHub')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
data/lib/sleet/repo.rb
CHANGED
@@ -2,87 +2,44 @@
|
|
2
2
|
|
3
3
|
module Sleet
|
4
4
|
class Repo
|
5
|
-
REMOTE_BRANCH_REGEX = %r{^([^\/.]+)\/(.+)}.freeze
|
6
|
-
CURRENT_BRANCH_REGEX = %r{^refs\/heads\/}.freeze
|
7
|
-
GITHUB_MATCH_REGEX = %r{github.com[:\/](.+)\/(.+)\.git}.freeze
|
8
|
-
|
9
5
|
def self.from_config(config)
|
6
|
+
local_repo = Sleet::LocalRepo.new(source_dir: config.source_dir)
|
7
|
+
|
10
8
|
new(
|
11
|
-
|
12
|
-
|
9
|
+
circle_ci_token: config.circle_ci_token,
|
10
|
+
username: config.username || local_repo.username,
|
11
|
+
project: config.project || local_repo.project,
|
12
|
+
branch_name: config.branch || local_repo.branch_name
|
13
13
|
)
|
14
14
|
end
|
15
15
|
|
16
|
-
def initialize(
|
17
|
-
@repo = repo
|
16
|
+
def initialize(circle_ci_token:, username:, project:, branch_name:)
|
18
17
|
@circle_ci_token = circle_ci_token
|
18
|
+
@github_user = username
|
19
|
+
@github_repo = project
|
20
|
+
@branch_name = branch_name
|
19
21
|
end
|
20
22
|
|
21
|
-
def
|
22
|
-
|
23
|
-
must_have_an_upstream_branch!
|
24
|
-
upstream_remote_must_be_github!
|
25
|
-
end
|
26
|
-
|
27
|
-
def branch
|
28
|
-
@branch ||= Sleet::Branch.new(
|
23
|
+
def build_for(build_num)
|
24
|
+
Sleet::Build.new(
|
29
25
|
circle_ci_token: circle_ci_token,
|
30
26
|
github_user: github_user,
|
31
27
|
github_repo: github_repo,
|
32
|
-
|
28
|
+
build_num: build_num
|
33
29
|
)
|
34
30
|
end
|
35
31
|
|
36
|
-
def
|
37
|
-
Sleet::
|
32
|
+
def branch
|
33
|
+
@branch ||= Sleet::Branch.new(
|
38
34
|
circle_ci_token: circle_ci_token,
|
39
35
|
github_user: github_user,
|
40
36
|
github_repo: github_repo,
|
41
|
-
|
37
|
+
branch: branch_name
|
42
38
|
)
|
43
39
|
end
|
44
40
|
|
45
41
|
private
|
46
42
|
|
47
|
-
attr_reader :
|
48
|
-
|
49
|
-
def remote_branch
|
50
|
-
current_branch.upstream.name.match(REMOTE_BRANCH_REGEX)[2]
|
51
|
-
end
|
52
|
-
|
53
|
-
def github_user
|
54
|
-
github_match[1]
|
55
|
-
end
|
56
|
-
|
57
|
-
def github_repo
|
58
|
-
github_match[2]
|
59
|
-
end
|
60
|
-
|
61
|
-
def current_branch_name
|
62
|
-
repo.head.name.sub(CURRENT_BRANCH_REGEX, '')
|
63
|
-
end
|
64
|
-
|
65
|
-
def current_branch
|
66
|
-
repo.branches[current_branch_name]
|
67
|
-
end
|
68
|
-
|
69
|
-
def github_match
|
70
|
-
@github_match ||= GITHUB_MATCH_REGEX.match(current_branch.remote.url)
|
71
|
-
end
|
72
|
-
|
73
|
-
def must_be_on_branch!
|
74
|
-
!current_branch.nil? ||
|
75
|
-
raise(Error, 'Not on a branch')
|
76
|
-
end
|
77
|
-
|
78
|
-
def must_have_an_upstream_branch!
|
79
|
-
!current_branch.remote.nil? ||
|
80
|
-
raise(Error, "No upstream branch set for the current branch of #{repo.current_branch_name}")
|
81
|
-
end
|
82
|
-
|
83
|
-
def upstream_remote_must_be_github!
|
84
|
-
!github_match.nil? ||
|
85
|
-
raise(Error, 'Upstream remote is not GitHub')
|
86
|
-
end
|
43
|
+
attr_reader :circle_ci_token, :github_user, :github_repo, :branch_name
|
87
44
|
end
|
88
45
|
end
|
data/lib/sleet/version.rb
CHANGED
data/sleet.gemspec
CHANGED
@@ -28,9 +28,9 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_dependency 'colorize', '~> 0.8.1'
|
29
29
|
spec.add_dependency 'faraday', '>= 0.13.1', '< 1.1.0'
|
30
30
|
spec.add_dependency 'rspec', '~> 3.0'
|
31
|
-
spec.add_dependency 'rugged', '>= 0.26', '<
|
31
|
+
spec.add_dependency 'rugged', '>= 0.26', '< 1.1'
|
32
32
|
spec.add_dependency 'terminal-table', '~> 1.8'
|
33
|
-
spec.add_dependency 'thor', '
|
33
|
+
spec.add_dependency 'thor', '>= 0.20', '< 1.1'
|
34
34
|
|
35
35
|
spec.add_development_dependency 'gem-release', '= 2.1.1'
|
36
36
|
spec.add_development_dependency 'github_changelog_generator', '~> 1.14'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sleet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Corey Alexander
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
version: '0.26'
|
68
68
|
- - "<"
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
70
|
+
version: '1.1'
|
71
71
|
type: :runtime
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -77,7 +77,7 @@ dependencies:
|
|
77
77
|
version: '0.26'
|
78
78
|
- - "<"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
80
|
+
version: '1.1'
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: terminal-table
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,16 +96,22 @@ dependencies:
|
|
96
96
|
name: thor
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
98
98
|
requirements:
|
99
|
-
- - "
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0.20'
|
102
|
+
- - "<"
|
100
103
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
104
|
+
version: '1.1'
|
102
105
|
type: :runtime
|
103
106
|
prerelease: false
|
104
107
|
version_requirements: !ruby/object:Gem::Requirement
|
105
108
|
requirements:
|
106
|
-
- - "
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0.20'
|
112
|
+
- - "<"
|
107
113
|
- !ruby/object:Gem::Version
|
108
|
-
version:
|
114
|
+
version: '1.1'
|
109
115
|
- !ruby/object:Gem::Dependency
|
110
116
|
name: gem-release
|
111
117
|
requirement: !ruby/object:Gem::Requirement
|
@@ -231,6 +237,7 @@ files:
|
|
231
237
|
- lib/sleet/error.rb
|
232
238
|
- lib/sleet/fetch_command.rb
|
233
239
|
- lib/sleet/job_fetcher.rb
|
240
|
+
- lib/sleet/local_repo.rb
|
234
241
|
- lib/sleet/repo.rb
|
235
242
|
- lib/sleet/rspec_file_merger.rb
|
236
243
|
- lib/sleet/version.rb
|