carthage_cache 0.2.2 → 0.3.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
  SHA1:
3
- metadata.gz: 2089e06c1e9dd96ac5b71936112aad082d5486bb
4
- data.tar.gz: 901326e842a9972dbc4b21482a454f5003d7cca6
3
+ metadata.gz: 8c1088f79834754ab5253f660ae875d825eb7c4e
4
+ data.tar.gz: ac83ce8bce893e65bcc95113ae9a2da2e1562894
5
5
  SHA512:
6
- metadata.gz: f60a957f58db7ebaebec335b7e043f09efd79a61a599d52ad438d41818367e46db0088a3be09d9eaa466a8f45d7e2e63c5e9477344b3e93e79386abba9a46cc7
7
- data.tar.gz: ce5d76ee4e9f936cc95d02f2028abab5d102f4ad58a36d219c1f9ed25a3129d31b9ff864e5e41ea93611e11e5f4bed2f312e70835a6d1112f1974975cfa90c77
6
+ metadata.gz: 1ed7c130a44dc91ac3dc85c31123e9cccc1a0ee104af3cc55a96253ea13140ad0a3bac2ef29b3401f7805057e743310c1df4472f7ed0a1cdf06ceccc71a45e36
7
+ data.tar.gz: f38f45564c0044d742307ae36dc18bd10703599d3c1202817ba1c1155931d48817eed3da047069276923a967f88216b484d25881d21a2400069db7da056eb213
data/.gitignore CHANGED
@@ -7,3 +7,4 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+ Carthage/
data/.travis.yml CHANGED
@@ -3,7 +3,6 @@ os:
3
3
  language: ruby
4
4
  cache: bundler
5
5
  rvm:
6
- - head
7
6
  - 2.2.2
8
7
  # OS X 10.9.5-10.10.0 (2.0.0-p481)
9
8
  - system
@@ -14,4 +13,8 @@ branches:
14
13
  only:
15
14
  - master
16
15
 
17
- before_install: gem install bundler -v 1.10.6
16
+ before_install: sudo gem install bundler
17
+
18
+ addons:
19
+ code_climate:
20
+ repo_token: 6220ef8896c380cb590d4640621d1fc4c0d6d36ccc24d3d818cfba76bbd50014
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # CarthageCache
2
2
 
3
+ [![Build Status](https://travis-ci.org/guidomb/carthage_cache.svg?branch=master)](https://travis-ci.org/guidomb/carthage_cache)
3
4
  [![Code Climate](https://codeclimate.com/github/guidomb/carthage_cache/badges/gpa.svg)](https://codeclimate.com/github/guidomb/carthage_cache)
4
5
  [![Test Coverage](https://codeclimate.com/github/guidomb/carthage_cache/badges/coverage.svg)](https://codeclimate.com/github/guidomb/carthage_cache/coverage)
5
6
  [![Gem Version](https://badge.fury.io/rb/carthage_cache.svg)](https://badge.fury.io/rb/carthage_cache)
@@ -10,7 +11,8 @@ Most libraries don't provide pre-compiled binaries, `.framework` files, in their
10
11
 
11
12
  When you add slow building environments like Travis CI to the mix, a project bootstrap could take around 25 minutes just to build all your dependencies. Which is a lot for every push or pull request. You want your build and test to run really fast.
12
13
 
13
- CarthageCache generates a hash key based on the content of your `Cartfile.resolved` and checks if there is a cache archive (a zip file of your `Carthage/Build` directory) associated to that hash. If there is one it will download it and install it in your project avoiding the need to run `carthage bootstrap`.
14
+ CarthageCache generates a hash key based on the content of your `Cartfile.resolved` and the current
15
+ installed version of Swift. Then it checks if there is a cache archive (a zip file of your `Carthage/Build` directory) associated to that hash. If there is one it will download it and install it in your project avoiding the need to run `carthage bootstrap`.
14
16
 
15
17
  ## Installation
16
18
 
@@ -50,6 +52,41 @@ You can also set your credentials using the following environmental variables
50
52
 
51
53
  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`.
52
54
 
55
+ ### IAM Policy
56
+
57
+ Once you create the bucket, you will need to create a user. Go to the IAM section and create a new user. Create a new group, and add the new user to that group.
58
+ Create a policy with the following permisions:
59
+ ```
60
+ {
61
+ "Version": "2012-10-17",
62
+ "Statement": [
63
+ {
64
+ "Sid": "autogenerated-id",
65
+ "Effect": "Allow",
66
+ "Action": [
67
+ "s3:ListBucket"
68
+ ],
69
+ "Resource": [
70
+ "arn:aws:s3:::carthage-cache"
71
+ ]
72
+ },
73
+ {
74
+ "Sid": "autogenerated-id",
75
+ "Effect": "Allow",
76
+ "Action": [
77
+ "s3:DeleteObject",
78
+ "s3:GetObject",
79
+ "s3:PutObject"
80
+ ],
81
+ "Resource": [
82
+ "arn:aws:s3:::carthage-cache/*"
83
+ ]
84
+ }
85
+ ]
86
+ }
87
+ ```
88
+ Don't forget to attach the policy to the group.
89
+
53
90
  ## Usage
54
91
 
55
92
  If you want to bootstrap a project from cache and if there is none then fallback to Carthage.
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency "rake", "~> 10.0"
29
29
  spec.add_development_dependency "rspec"
30
30
  spec.add_development_dependency "pry"
31
+ spec.add_development_dependency "codeclimate-test-reporter"
31
32
 
32
33
  spec.add_dependency "aws-sdk", "~> 2.2.3"
33
34
  spec.add_dependency "commander", "~> 4.3.8"
data/exe/carthage_cache CHANGED
@@ -45,7 +45,7 @@ command :install do |c|
45
45
  c.description = 'Installs the cache archive for the current Cartfile.resolved.'
46
46
  c.action do |args, options|
47
47
  app = CarthageCache::Application.new(args.first || ".", verbose, config)
48
- app.install_archive
48
+ exit 1 unless app.install_archive
49
49
  end
50
50
  end
51
51
 
@@ -10,54 +10,10 @@ require "carthage_cache/terminal"
10
10
  require "carthage_cache/configuration"
11
11
  require "carthage_cache/configurator"
12
12
  require "carthage_cache/configurator_wizard"
13
+ require "carthage_cache/shell_command_executor.rb"
14
+ require "carthage_cache/application.rb"
15
+ require "carthage_cache/swift_version_resolver.rb"
13
16
 
14
17
  module CarthageCache
15
18
 
16
- class Application
17
-
18
- CACHE_DIR_NAME = "carthage_cache"
19
-
20
- attr_reader :terminal
21
- attr_reader :archiver
22
- attr_reader :repository
23
- attr_reader :project
24
- attr_reader :config
25
-
26
- def initialize(project_path, verbose, config)
27
- @terminal = Terminal.new(verbose)
28
- @archiver = Archiver.new
29
- @config = Configurator.new(project_path, config).config
30
- @repository = Repository.new(@config.bucket_name, @config.hash_object[:aws_s3_client_options])
31
- @project = Project.new(project_path, CACHE_DIR_NAME, terminal)
32
- end
33
-
34
- def archive_exist?
35
- repository.archive_exist?(project.archive_filename)
36
- end
37
-
38
- def install_archive
39
- if archive_exist?
40
- archive_installer.install
41
- else
42
- terminal.puts "There is no cached archive for the current Cartfile.resolved file."
43
- exit 1
44
- end
45
- end
46
-
47
- def create_archive(force = false)
48
- archive_builder.build if force || !archive_exist?
49
- end
50
-
51
- private
52
-
53
- def archive_installer
54
- @archive_installer ||= ArchiveInstaller.new(terminal, repository, archiver, project)
55
- end
56
-
57
- def archive_builder
58
- @archive_builder ||= ArchiveBuilder.new(terminal, repository, archiver, project)
59
- end
60
-
61
- end
62
-
63
19
  end
@@ -0,0 +1,51 @@
1
+ module CarthageCache
2
+
3
+ class Application
4
+
5
+ CACHE_DIR_NAME = "carthage_cache"
6
+
7
+ attr_reader :terminal
8
+ attr_reader :archiver
9
+ attr_reader :repository
10
+ attr_reader :project
11
+ attr_reader :config
12
+
13
+ def initialize(project_path, verbose, config, repository: Repository, terminal: Terminal, swift_version_resolver: SwiftVersionResolver)
14
+ @terminal = terminal.new(verbose)
15
+ @archiver = Archiver.new
16
+ @config = Configurator.new(project_path, config).config
17
+ @repository = repository.new(@config.bucket_name, @config.hash_object[:aws_s3_client_options])
18
+ @project = Project.new(project_path, CACHE_DIR_NAME, terminal, @config.tmpdir, swift_version_resolver.new)
19
+ end
20
+
21
+ def archive_exist?
22
+ repository.archive_exist?(project.archive_filename)
23
+ end
24
+
25
+ def install_archive
26
+ if archive_exist?
27
+ archive_installer.install
28
+ true
29
+ else
30
+ terminal.puts "There is no cached archive for the current Cartfile.resolved file."
31
+ false
32
+ end
33
+ end
34
+
35
+ def create_archive(force = false)
36
+ archive_builder.build if force || !archive_exist?
37
+ end
38
+
39
+ private
40
+
41
+ def archive_installer
42
+ @archive_installer ||= ArchiveInstaller.new(terminal, repository, archiver, project)
43
+ end
44
+
45
+ def archive_builder
46
+ @archive_builder ||= ArchiveBuilder.new(terminal, repository, archiver, project)
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -2,13 +2,19 @@ module CarthageCache
2
2
 
3
3
  class Archiver
4
4
 
5
+ attr_reader :executor
6
+
7
+ def initialize(executor = ShellCommandExecutor.new)
8
+ @executor = executor
9
+ end
10
+
5
11
  def archive(archive_path, destination_path)
6
12
  files = Dir.entries(archive_path).select { |x| !x.start_with?(".") }
7
- `cd #{archive_path} && zip -r -X #{File.expand_path(destination_path)} #{files.join(' ')} > /dev/null`
13
+ executor.execute("cd #{archive_path} && zip -r -X #{File.expand_path(destination_path)} #{files.join(' ')} > /dev/null")
8
14
  end
9
15
 
10
16
  def unarchive(archive_path, destination_path)
11
- `unzip -o #{archive_path} -d #{destination_path} > /dev/null`
17
+ executor.execute("unzip -o #{archive_path} -d #{destination_path} > /dev/null")
12
18
  end
13
19
 
14
20
  end
@@ -6,18 +6,23 @@ module CarthageCache
6
6
 
7
7
  attr_reader :file_path
8
8
 
9
- def initialize(file_path)
9
+ def initialize(file_path, swift_version_resolver = SwiftVersionResolver.new)
10
10
  @file_path = file_path
11
+ @swift_version_resolver = swift_version_resolver
11
12
  end
12
13
 
13
14
  def digest
14
- @digest ||= Digest::SHA256.hexdigest(content)
15
+ @digest ||= Digest::SHA256.hexdigest(content + "#{swift_version}")
15
16
  end
16
17
 
17
18
  def content
18
19
  @content ||= File.read(file_path)
19
20
  end
20
21
 
22
+ def swift_version
23
+ @swift_version ||= @swift_version_resolver.swift_version
24
+ end
25
+
21
26
  end
22
27
 
23
28
  end
@@ -32,7 +32,8 @@ module CarthageCache
32
32
  region: ENV['AWS_REGION'],
33
33
  access_key_id: ENV['AWS_ACCESS_KEY_ID'],
34
34
  secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
35
- }
35
+ },
36
+ tmpdir: Dir.tmpdir
36
37
  })
37
38
  end
38
39
 
@@ -40,6 +41,7 @@ module CarthageCache
40
41
  config_key :aws_region
41
42
  config_key :aws_access_key_id
42
43
  config_key :aws_secret_access_key
44
+ config_key :tmpdir
43
45
 
44
46
  attr_reader :hash_object
45
47
 
@@ -6,12 +6,14 @@ module CarthageCache
6
6
  attr_reader :project_path
7
7
  attr_reader :cache_dir_name
8
8
  attr_reader :terminal
9
+ attr_reader :tmpdir_base_path
9
10
 
10
- def initialize(project_path, cache_dir_name, terminal)
11
+ def initialize(project_path, cache_dir_name, terminal, tmpdir, swift_version_resolver = SwiftVersionResolver.new)
11
12
  @project_path = project_path
12
13
  @cache_dir_name = cache_dir_name
13
14
  @terminal = terminal
14
- @cartfile = CartfileResolvedFile.new(cartfile_resolved_path)
15
+ @tmpdir_base_path = tmpdir
16
+ @cartfile = CartfileResolvedFile.new(cartfile_resolved_path, swift_version_resolver)
15
17
  end
16
18
 
17
19
  def archive_filename
@@ -37,7 +39,7 @@ module CarthageCache
37
39
  end
38
40
 
39
41
  def create_tmpdir
40
- dir = File.join(Dir.tmpdir, cache_dir_name)
42
+ dir = File.join(tmpdir_base_path, cache_dir_name)
41
43
  unless File.exist?(dir)
42
44
  terminal.vputs "Creating carthage cache directory at '#{dir}'."
43
45
  FileUtils.mkdir_p(dir)
@@ -0,0 +1,11 @@
1
+ module CarthageCache
2
+
3
+ class ShellCommandExecutor
4
+
5
+ def execute(command)
6
+ `#{command}`
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -0,0 +1,17 @@
1
+ module CarthageCache
2
+
3
+ class SwiftVersionResolver
4
+
5
+ def initialize(executor = ShellCommandExecutor.new)
6
+ @executor = executor
7
+ end
8
+
9
+ def swift_version
10
+ output = @executor.execute('xcrun swift -version').chomp
11
+ version_string = /(\d+\.)?(\d+\.)?(\d+)/.match(output).to_s
12
+ Gem::Version.new(version_string)
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -1,3 +1,3 @@
1
1
  module CarthageCache
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  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.2.2
4
+ version: 0.3.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-02-11 00:00:00.000000000 Z
11
+ date: 2016-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: codeclimate-test-reporter
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: aws-sdk
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -119,6 +133,7 @@ files:
119
133
  - carthage_cache.gemspec
120
134
  - exe/carthage_cache
121
135
  - lib/carthage_cache.rb
136
+ - lib/carthage_cache/application.rb
122
137
  - lib/carthage_cache/archive_builder.rb
123
138
  - lib/carthage_cache/archive_installer.rb
124
139
  - lib/carthage_cache/archiver.rb
@@ -129,6 +144,8 @@ files:
129
144
  - lib/carthage_cache/description.rb
130
145
  - lib/carthage_cache/project.rb
131
146
  - lib/carthage_cache/repository.rb
147
+ - lib/carthage_cache/shell_command_executor.rb
148
+ - lib/carthage_cache/swift_version_resolver.rb
132
149
  - lib/carthage_cache/terminal.rb
133
150
  - lib/carthage_cache/version.rb
134
151
  homepage: https://github.com/guidomb/carthage_cache