carthage_cache 0.4.1 → 0.5.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/.gitignore +1 -0
- data/README.md +37 -1
- data/carthage_cache.gemspec +1 -1
- data/lib/carthage_cache/application.rb +3 -2
- data/lib/carthage_cache/archive_installer.rb +8 -2
- data/lib/carthage_cache/configuration.rb +12 -2
- data/lib/carthage_cache/configuration_validator.rb +20 -2
- data/lib/carthage_cache/repository.rb +25 -1
- data/lib/carthage_cache/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66392e9c9f8b79620a85307d4c543f3f6ff4204c
|
4
|
+
data.tar.gz: 04ca97e2e59edeb04445c9ae7a36abcb972e667d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a39c50a039f20336f3e4b6aa8c07a5e46a93da7dffd40ee5198fc79b41feb3edec343ff34dbb33d481625a05c8106e8e98f0464c5d39de7f05d963f63dace33
|
7
|
+
data.tar.gz: 715a6a13f71f284a854051a24fb64624b265b6c09c0b7e5acbe758129205fb3211bee9f945df60443c8e84c19f386fe2ea03796880c1ec13ced910f7354ffa09
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -48,6 +48,11 @@ You can also set your credentials using the following environmental variables
|
|
48
48
|
* `AWS_ACCESS_KEY_ID`
|
49
49
|
* `AWS_SECRET_ACCESS_KEY`
|
50
50
|
|
51
|
+
Or if you prefer using [AWS Named Profiles](http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-multiple-profiles), you can use the following environmental variables instead
|
52
|
+
|
53
|
+
* `AWS_REGION`
|
54
|
+
* `AWS_PROFILE`
|
55
|
+
|
51
56
|
### AWS S3 bucket
|
52
57
|
|
53
58
|
CarthageCache will assume there is a bucket named `carthage-cache`. You can change the bucket to be used by using the option `-b` or `--bucket-name`.
|
@@ -85,7 +90,7 @@ Create a policy with the following permisions:
|
|
85
90
|
]
|
86
91
|
}
|
87
92
|
```
|
88
|
-
Don't forget to attach the policy to the group.
|
93
|
+
Don't forget to attach the policy to the group and make sure to replace `autogenerated-id` with an ID that should be unique. You can generate a new policy using AWS policy generator and replace the content with the previous snippet keeping the SID field.
|
89
94
|
|
90
95
|
## Usage
|
91
96
|
|
@@ -145,6 +150,37 @@ For more information run the help command
|
|
145
150
|
carthage_cache help
|
146
151
|
```
|
147
152
|
|
153
|
+
### OSS project
|
154
|
+
|
155
|
+
In an OSS project you wouldn't store AWS credentials anywhere since anyone can have access, even if you have a build like travis that supports for encrypted variables but these are not available in your contributors pull requests build.
|
156
|
+
|
157
|
+
In order allow your build to run in these circumstances, you can avoid defining these variables
|
158
|
+
|
159
|
+
* `AWS_ACCESS_KEY_ID`
|
160
|
+
* `AWS_SECRET_ACCESS_KEY`
|
161
|
+
* `AWS_PROFILE`
|
162
|
+
|
163
|
+
And **carthage_cache** will work in read-only mode, you wont be able to publish new items but your build will still be able to fetch the cached dependencies.
|
164
|
+
|
165
|
+
The only requirement is to make the action `s3:GetObject` avaible for any anonymous user in your S3 Bucket
|
166
|
+
|
167
|
+
```
|
168
|
+
{
|
169
|
+
"Version":"2012-10-17",
|
170
|
+
"Statement":[
|
171
|
+
{
|
172
|
+
"Sid":"AddPerm",
|
173
|
+
"Effect":"Allow",
|
174
|
+
"Principal": "*",
|
175
|
+
"Action":["s3:GetObject"],
|
176
|
+
"Resource":["arn:aws:s3:::examplebucket/*"]
|
177
|
+
}
|
178
|
+
]
|
179
|
+
}
|
180
|
+
```
|
181
|
+
|
182
|
+
> Please know that this will make all your dependencies **PUBLIC** and accessible for anyone, so if you have sensitive information or propietary code there you should avoid this configuration.
|
183
|
+
|
148
184
|
### Project's root directory
|
149
185
|
|
150
186
|
The `carthage_cache` command assumes that the project's root directory is the current working directory and that the `Cartfile.resolved` file is located in the project's root directory. All `carthage_cache` accept an optional argument to set the project's root directory. For example
|
data/carthage_cache.gemspec
CHANGED
@@ -30,6 +30,6 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency "pry"
|
31
31
|
spec.add_development_dependency "codeclimate-test-reporter"
|
32
32
|
|
33
|
-
spec.add_dependency "aws-sdk", "~> 2.
|
33
|
+
spec.add_dependency "aws-sdk", "~> 2.0"
|
34
34
|
spec.add_dependency "commander", "~> 4.3"
|
35
35
|
end
|
@@ -12,11 +12,12 @@ module CarthageCache
|
|
12
12
|
attr_reader :project
|
13
13
|
attr_reader :config
|
14
14
|
|
15
|
-
def initialize(project_path, verbose, config, repository:
|
15
|
+
def initialize(project_path, verbose, config, repository: AWSRepository, terminal: Terminal, swift_version_resolver: SwiftVersionResolver)
|
16
16
|
@terminal = terminal.new(verbose)
|
17
17
|
@archiver = Archiver.new
|
18
18
|
@config = Configurator.new(@terminal, project_path, config).config
|
19
|
-
|
19
|
+
clazz = @config.read_only? ? HTTPRepository : repository
|
20
|
+
@repository = clazz.new(@config.bucket_name, @config.hash_object[:aws_s3_client_options])
|
20
21
|
@project = Project.new(project_path, CACHE_DIR_NAME, @terminal, @config.tmpdir, swift_version_resolver.new)
|
21
22
|
end
|
22
23
|
|
@@ -31,8 +31,14 @@ module CarthageCache
|
|
31
31
|
|
32
32
|
def download_archive
|
33
33
|
archive_path = File.join(project.tmpdir, project.archive_filename)
|
34
|
-
|
35
|
-
|
34
|
+
|
35
|
+
if File.exist?(archive_path)
|
36
|
+
terminal.puts "Archive with key '#{archive_path}' already downloaded in local cache."
|
37
|
+
else
|
38
|
+
terminal.puts "Downloading archive with key '#{archive_path}'."
|
39
|
+
repository.download(project.archive_filename, archive_path)
|
40
|
+
end
|
41
|
+
|
36
42
|
archive_path
|
37
43
|
end
|
38
44
|
|
@@ -16,6 +16,10 @@ module CarthageCache
|
|
16
16
|
ConfigurationValidator.new(config).valid?
|
17
17
|
end
|
18
18
|
|
19
|
+
def self.read_only?(config)
|
20
|
+
ConfigurationValidator.new(config).read_only?
|
21
|
+
end
|
22
|
+
|
19
23
|
def self.parse(str)
|
20
24
|
new(YAML.load(str))
|
21
25
|
end
|
@@ -25,9 +29,10 @@ module CarthageCache
|
|
25
29
|
aws_s3_client_options: {
|
26
30
|
region: ENV['AWS_REGION'],
|
27
31
|
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
|
28
|
-
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
32
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
|
33
|
+
profile: ENV['AWS_PROFILE']
|
29
34
|
},
|
30
|
-
tmpdir: Dir.
|
35
|
+
tmpdir: File.join(Dir.home, 'Library', 'Caches')
|
31
36
|
})
|
32
37
|
end
|
33
38
|
|
@@ -35,6 +40,7 @@ module CarthageCache
|
|
35
40
|
config_key :aws_region
|
36
41
|
config_key :aws_access_key_id
|
37
42
|
config_key :aws_secret_access_key
|
43
|
+
config_key :aws_profile
|
38
44
|
config_key :tmpdir
|
39
45
|
|
40
46
|
attr_reader :hash_object
|
@@ -51,6 +57,10 @@ module CarthageCache
|
|
51
57
|
self.class.valid?(self)
|
52
58
|
end
|
53
59
|
|
60
|
+
def read_only?
|
61
|
+
self.class.read_only?(self)
|
62
|
+
end
|
63
|
+
|
54
64
|
def merge(c)
|
55
65
|
if c.is_a?(Hash)
|
56
66
|
@hash_object = hash_object.merge(c)
|
@@ -69,16 +69,30 @@ module CarthageCache
|
|
69
69
|
validate.valid?
|
70
70
|
end
|
71
71
|
|
72
|
+
def read_only?
|
73
|
+
(config.aws_access_key_id.nil? || config.aws_secret_access_key.nil?) && config.aws_profile.nil?
|
74
|
+
end
|
75
|
+
|
72
76
|
def validate
|
73
77
|
return missing_bucket_name unless has_bucket_name?
|
74
78
|
return missing_aws_region unless has_aws_region?
|
75
|
-
|
76
|
-
return
|
79
|
+
|
80
|
+
return missing_aws_access_key_id if is_missing_aws_access_key_id?
|
81
|
+
return missing_aws_secret_access_key if is_missing_aws_secret_access_key?
|
82
|
+
|
77
83
|
ValidationResult.valid
|
78
84
|
end
|
79
85
|
|
80
86
|
private
|
81
87
|
|
88
|
+
def is_missing_aws_access_key_id?
|
89
|
+
!has_aws_profile? && !has_aws_access_key_id? && has_aws_secret_access_key?
|
90
|
+
end
|
91
|
+
|
92
|
+
def is_missing_aws_secret_access_key?
|
93
|
+
!has_aws_profile? && has_aws_access_key_id? && !has_aws_secret_access_key?
|
94
|
+
end
|
95
|
+
|
82
96
|
def has_bucket_name?
|
83
97
|
config.bucket_name
|
84
98
|
end
|
@@ -95,6 +109,10 @@ module CarthageCache
|
|
95
109
|
config.aws_secret_access_key
|
96
110
|
end
|
97
111
|
|
112
|
+
def has_aws_profile?
|
113
|
+
config.aws_profile
|
114
|
+
end
|
115
|
+
|
98
116
|
def missing_bucket_name
|
99
117
|
ValidationResult.invalid(MissingConfigurationKey.missing_bucket_name)
|
100
118
|
end
|
@@ -2,7 +2,7 @@ require "aws-sdk"
|
|
2
2
|
|
3
3
|
module CarthageCache
|
4
4
|
|
5
|
-
class
|
5
|
+
class AWSRepository
|
6
6
|
|
7
7
|
attr_reader :client
|
8
8
|
attr_reader :bucket_name
|
@@ -31,4 +31,28 @@ module CarthageCache
|
|
31
31
|
|
32
32
|
end
|
33
33
|
|
34
|
+
class HTTPRepository
|
35
|
+
|
36
|
+
attr_reader :base_url
|
37
|
+
|
38
|
+
def initialize(bucket_name, client_options = {})
|
39
|
+
region = client_options[:region]
|
40
|
+
bucket_name = bucket_name
|
41
|
+
@base_url = "https://s3-#{region}.amazonaws.com/#{bucket_name}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def archive_exist?(archive_filename)
|
45
|
+
system "wget", "--method=HEAD", "#{base_url}/#{archive_filename}", "-q"
|
46
|
+
end
|
47
|
+
|
48
|
+
def download(archive_filename, destination_path)
|
49
|
+
system "wget", "--output-document=#{destination_path}", "#{base_url}/#{archive_filename}", "-q"
|
50
|
+
end
|
51
|
+
|
52
|
+
def upload(archive_filename, archive_path)
|
53
|
+
raise "carthage_cache is working in read-only mode. Please configure AWS credentials first"
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
34
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: carthage_cache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guido Marucci Blas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 2.
|
89
|
+
version: '2.0'
|
90
90
|
type: :runtime
|
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: 2.
|
96
|
+
version: '2.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: commander
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|