rake_dependencies 0.15.0 → 0.15.1
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/Gemfile.lock +1 -1
- data/README.md +221 -7
- data/lib/rake_dependencies/tasks/all.rb +57 -47
- data/lib/rake_dependencies/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2459e767c6d75e7403a8acaf2762bea9724a2ab7
|
4
|
+
data.tar.gz: 256c57de9efcd14a7f93d1e52d60a4acaa97434d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa689ac1ddb647cf51b4fd8ce01be49a04df862a213c72952feaa3e3721a288e0871eeb8f00852a93398cd49066a4f060f08c27d2e58ec879756af6542a9975f
|
7
|
+
data.tar.gz: a90d311a420ee48c4de850a52aa781450af3c76bc707cc643acc140073774634f86aa4d6a00762959024acae39f0aa8170074e1d56f0edbd48f9a1534793dcac
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# RakeDependencies
|
2
2
|
|
3
|
-
Rake tasks for managing
|
3
|
+
Rake tasks for managing binary dependencies used within a build.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -20,20 +20,234 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
RakeDependencies provides a suite of tasklibs for downloading and extracting a
|
24
|
+
distribution of some dependency. The simplest way to configure all of these
|
25
|
+
tasks is via the `RakeDependencies::Tasks::All` tasklib. The following provides
|
26
|
+
an example usage with terraform as the target dependency:
|
24
27
|
|
28
|
+
```ruby
|
29
|
+
RakeDependencies::Tasks::All.new do |t|
|
30
|
+
t.namespace = :terraform
|
31
|
+
t.dependency = 'terraform'
|
32
|
+
t.version = '0.9.0'
|
33
|
+
t.path = File.join('vendor', 'terraform')
|
34
|
+
t.type = :zip
|
35
|
+
|
36
|
+
t.os_ids = {mac: 'darwin', linux: 'linux'}
|
37
|
+
|
38
|
+
t.uri_template =
|
39
|
+
'https://releases.hashicorp.com/terraform/<%= @version %>/' +
|
40
|
+
'terraform_<%= @version %>_<%= @os_id %>_amd64<%= @ext %>'
|
41
|
+
t.file_name_template =
|
42
|
+
'terraform_<%= @version %>_<%= @os_id %>_amd64<%= @ext %>'
|
43
|
+
|
44
|
+
t.needs_fetch = lambda do |parameters|
|
45
|
+
terraform_binary = File.join(
|
46
|
+
parameters[:path], parameters[:binary_directory], 'terraform')
|
47
|
+
|
48
|
+
!(File.exist?(terraform_binary) &&
|
49
|
+
`#{terraform_binary} -version`.lines.first =~ /#{parameters[:version]}/)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
With this in place, a number of tasks will be defined:
|
55
|
+
```bash
|
56
|
+
> rake -T
|
57
|
+
rake terraform:clean # Clean vendored terraform
|
58
|
+
rake terraform:download # Download terraform distribution
|
59
|
+
rake terraform:ensure # Ensure terraform present
|
60
|
+
rake terraform:extract # Extract terraform archive
|
61
|
+
rake terraform:fetch # Fetch terraform
|
62
|
+
```
|
63
|
+
|
64
|
+
The tasks perform the following:
|
65
|
+
* `<ns>:clean` - recursively deletes the directory containing the dependency
|
66
|
+
* `<ns>:download` - downloads the distribution from the provided path into the
|
67
|
+
dependency directory
|
68
|
+
* `<ns>:extract` - extracts, in the case of a compressed archive, or copies, in
|
69
|
+
the case of an uncompressed distribution, the binaries into the binary
|
70
|
+
directory under the dependency directory
|
71
|
+
* `<ns>:fetch` - downloads then extracts
|
72
|
+
* `<ns>:ensure` - checks whether the dependency needs to be fetched and cleans
|
73
|
+
and fetches if necessary
|
74
|
+
|
75
|
+
With these tasks defined, any task that requires the dependency to be present
|
76
|
+
should depend on `<ns>:ensure`. Continuing the terraform example:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
task :provision_database => ['terraform:ensure'] do
|
80
|
+
sh('vendor/terraform/bin/terraform apply infra/database')
|
81
|
+
end
|
82
|
+
```
|
83
|
+
|
84
|
+
The `RakeDependencies::Tasks::All` tasklib supports the following configuration
|
85
|
+
parameters:
|
86
|
+
|
87
|
+
| Name | Description | Default | Required |
|
88
|
+
|-------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------------------------|:--------:|
|
89
|
+
| `namespace` | The namespace in which to define the tasks | - | no |
|
90
|
+
| `dependency` | The name of the dependency, used in status reporting | - | yes |
|
91
|
+
| `version` | The version of the dependency to manage, only required if used in templates or `needs_fetch` | - | no |
|
92
|
+
| `path` | The path in which to install the dependency | - | yes |
|
93
|
+
| `type` | The archive type of the distribution, one of `:zip`, `:tar_gz`, `:tgz` or `:uncompressed` | `:zip` | yes |
|
94
|
+
| `os_ids` | A map of platforms to OS identifiers to use in templates, containing entries for `:mac` and `:linux` | `{:mac: 'mac', :linux: 'linux'}` | yes |
|
95
|
+
| `distribution_directory` | The name of the directory under the supplied path into which to download the distribution | `'dist'` | yes |
|
96
|
+
| `binary_directory` | The name of the directory under the supplied path into which to extract/copy the binaries | `'bin'` | yes |
|
97
|
+
| `uri_template` | A template for the URI of the distribution | - | yes |
|
98
|
+
| `file_name_template` | A template for the name of the downloaded file | - | yes |
|
99
|
+
| `target_name_template` | A template for the name of the binary after extraction/copying | - | no |
|
100
|
+
| `strip_path_template` | A template for the path to strip within an archive before extracting | - | no |
|
101
|
+
| `needs_fetch` | A lambda taking a parameter map that should return `true` if the dependency needs to be fetched, `false` otherwise | Will always return `true` | no |
|
102
|
+
| `clean_task_name` | The name of the clean task, required if it should be different from the default | `:clean` | yes |
|
103
|
+
| `download_task_name` | The name of the download task, required if it should be different from the default | `:download` | yes |
|
104
|
+
| `extract_task_name` | The name of the extract task, required if it should be different from the default | `:extract` | yes |
|
105
|
+
| `fetch_task_name` | The name of the fetch task, required if it should be different from the default | `:fetch` | yes |
|
106
|
+
| `ensure_task_name` | The name of the ensure task, required if it should be different from the default | `:ensure` | yes |
|
107
|
+
|
108
|
+
Notes:
|
109
|
+
* Each of the templates will have the following instance variables in scope when
|
110
|
+
rendered:
|
111
|
+
* `@version`: the supplied version string
|
112
|
+
* `@platform`: the platform on which the task is executing, on of `:mac` or
|
113
|
+
`:linux`
|
114
|
+
* `@os_id`: the OS identifier derived from the platform on which the task is
|
115
|
+
executing and the provided `os_ids` map
|
116
|
+
* `@ext`: the file extension corresponding to the provided `type`, one of
|
117
|
+
`.zip`, `.tar.gz`, `.tgz` or empty string for uncompressed files
|
118
|
+
* The `needs_fetch` lambda will receive a map with the following entries:
|
119
|
+
* `path`: the supplied path
|
120
|
+
* `version`: the supplied version string
|
121
|
+
* `binary_directory`: the supplied or default binary directory
|
122
|
+
|
123
|
+
The `RakeDependencies::Tasks::All` tasklib uses each of the following tasklibs
|
124
|
+
in its definition:
|
125
|
+
* `RakeDependencies::Tasks::Clean`
|
126
|
+
* `RakeDependencies::Tasks::Download`
|
127
|
+
* `RakeDependencies::Tasks::Extract`
|
128
|
+
* `RakeDependencies::Tasks::Fetch`
|
129
|
+
* `RakeDependencies::Tasks::Ensure`
|
130
|
+
|
131
|
+
### `RakeDependencies::Tasks::Clean`
|
132
|
+
|
133
|
+
The `RakeDependencies::Tasks::Clean` tasklib supports the following
|
134
|
+
configuration parameters:
|
135
|
+
|
136
|
+
| Name | Description | Default | Required |
|
137
|
+
|--------------|---------------------------------------------------------------------------|----------------------------------|:--------:|
|
138
|
+
| `name` | The name of the task, required if it should be different from the default | `:clean` | yes |
|
139
|
+
| `path` | The path in which the dependency is installed | - | yes |
|
140
|
+
| `dependency` | The name of the dependency, used in status reporting | - | yes |
|
141
|
+
|
142
|
+
### `RakeDependencies::Tasks::Download`
|
143
|
+
|
144
|
+
The `RakeDependencies::Tasks::Download` tasklib supports the following
|
145
|
+
configuration parameters:
|
146
|
+
|
147
|
+
| Name | Description | Default | Required |
|
148
|
+
|--------------------------|------------------------------------------------------------------------------------------------------|----------------------------------|:--------:|
|
149
|
+
| `name` | The name of the task, required if it should be different from the default | `:download` | yes |
|
150
|
+
| `dependency` | The name of the dependency, used in status reporting | - | yes |
|
151
|
+
| `version` | The version of the dependency to manage, only required if used in templates | - | no |
|
152
|
+
| `path` | The path in which to install the dependency | - | yes |
|
153
|
+
| `type` | The archive type of the distribution, one of `:zip`, `:tar_gz`, `:tgz` or `:uncompressed` | `:zip` | yes |
|
154
|
+
| `os_ids` | A map of platforms to OS identifiers to use in templates, containing entries for `:mac` and `:linux` | `{:mac: 'mac', :linux: 'linux'}` | yes |
|
155
|
+
| `distribution_directory` | The name of the directory under the supplied path into which to download the distribution | `'dist'` | yes |
|
156
|
+
| `uri_template` | A template for the URI of the distribution | - | yes |
|
157
|
+
| `file_name_template` | A template for the name of the downloaded file | - | yes |
|
158
|
+
|
159
|
+
Notes:
|
160
|
+
* The templates have the same instance variables in scope when rendered as
|
161
|
+
mentioned above.
|
162
|
+
|
163
|
+
### `RakeDependencies::Tasks::Extract`
|
164
|
+
|
165
|
+
The `RakeDependencies::Tasks::Extract` tasklib supports the following
|
166
|
+
configuration parameters:
|
167
|
+
|
168
|
+
| Name | Description | Default | Required |
|
169
|
+
|--------------------------|------------------------------------------------------------------------------------------------------|------------------------------------|:--------:|
|
170
|
+
| `name` | The name of the task, required if it should be different from the default | `:extract` | yes |
|
171
|
+
| `dependency` | The name of the dependency, used in status reporting | - | yes |
|
172
|
+
| `version` | The version of the dependency to manage, only required if used in templates | - | no |
|
173
|
+
| `path` | The path in which to install the dependency | - | yes |
|
174
|
+
| `type` | The archive type of the distribution, one of `:zip`, `:tar_gz`, `:tgz` or `:uncompressed` | `:zip` | yes |
|
175
|
+
| `os_ids` | A map of platforms to OS identifiers to use in templates, containing entries for `:mac` and `:linux` | `{:mac: 'mac', :linux: 'linux'}` | yes |
|
176
|
+
| `extractors` | A map of archive types to extractor classes, see notes for further details | Extractors for all supported types | yes |
|
177
|
+
| `distribution_directory` | The name of the directory under the supplied path into which the distribution was downloaded | `'dist'` | yes |
|
178
|
+
| `binary_directory` | The name of the directory under the supplied path into which to extract/copy the binaries | `'bin'` | yes |
|
179
|
+
| `file_name_template` | A template for the name of the downloaded file | - | yes |
|
180
|
+
| `target_name_template` | A template for the name to give the binary after extraction/copying | - | no |
|
181
|
+
| `strip_path_template` | A template for the path to strip within an archive before extracting | - | no |
|
182
|
+
|
183
|
+
Notes:
|
184
|
+
* The templates have the same instance variables in scope when rendered as
|
185
|
+
mentioned above.
|
186
|
+
* The extractors map has entries for the following keys:
|
187
|
+
* `:zip`: An extractor class for zip files
|
188
|
+
* `:tar_gz`: An extractor class for tar.gz files
|
189
|
+
* `:tgz`: An alias for `:tar_gz` using the same extractor class
|
190
|
+
* `:uncompressed`: An extractor class that copies the source to the
|
191
|
+
destination
|
192
|
+
* The extractor map can be overridden but should include entries for all of the
|
193
|
+
above.
|
194
|
+
|
195
|
+
### `RakeDependencies::Tasks::Fetch`
|
196
|
+
|
197
|
+
The `RakeDependencies::Tasks::Fetch` tasklib supports the following
|
198
|
+
configuration parameters:
|
199
|
+
|
200
|
+
| Name | Description | Default | Required |
|
201
|
+
|---------------------|---------------------------------------------------------------------------|--------------------------------|:--------:|
|
202
|
+
| `name` | The name of the task, required if it should be different from the default | `:fetch` | yes |
|
203
|
+
| `dependency` | The name of the dependency, used in status reporting | - | yes |
|
204
|
+
| `download_task` | The full name including namespaces of the download task | `<current-namespace>:download` | yes |
|
205
|
+
| `extract_task` | The full name including namespaces of the extract task | `<current-namespace>:extract` | yes |
|
206
|
+
|
207
|
+
### `RakeDependencies::Tasks::Ensure`
|
208
|
+
|
209
|
+
The `RakeDependencies::Tasks::Fetch` tasklib supports the following
|
210
|
+
configuration parameters:
|
211
|
+
|
212
|
+
| Name | Description | Default | Required |
|
213
|
+
|--------------------|-----------------------------------------------------------------------------------------------------------------------|--------------------------------|:--------:|
|
214
|
+
| `name` | The name of the task, required if it should be different from the default | `:fetch` | yes |
|
215
|
+
| `dependency` | The name of the dependency, used in status reporting | - | yes |
|
216
|
+
| `version` | The version of the dependency to manage, only required if used in templates | - | no |
|
217
|
+
| `path` | The path in which to install the dependency | - | yes |
|
218
|
+
| `binary_directory` | The name of the directory under the supplied path into which to extract/copy the binaries | `'bin'` | yes |
|
219
|
+
| `needs_fetch` | A lambda taking a parameter map that should return `true` if the dependency needs to be fetched, `false` otherwise | Will always return `true` | no |
|
220
|
+
| `clean_task` | The full name including namespaces of the clean task | `<current-namespace>:clean` | yes |
|
221
|
+
| `download_task` | The full name including namespaces of the download task | `<current-namespace>:download` | yes |
|
222
|
+
| `extract_task` | The full name including namespaces of the extract task | `<current-namespace>:extract` | yes |
|
223
|
+
|
224
|
+
Notes:
|
225
|
+
* The templates have the same instance variables in scope when rendered as
|
226
|
+
mentioned above.
|
227
|
+
* The needs_fetch method receives the same parameter map as mentioned above.
|
228
|
+
|
25
229
|
## Development
|
26
230
|
|
27
|
-
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
231
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
232
|
+
run `rake spec` to run the tests. You can also run `bin/console` for an
|
233
|
+
interactive prompt that will allow you to experiment.
|
28
234
|
|
29
|
-
To install this gem onto your local machine, run `bundle exec rake install`. To
|
235
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To
|
236
|
+
release a new version, update the version number in `version.rb`, and then run
|
237
|
+
`bundle exec rake release`, which will create a git tag for the version, push
|
238
|
+
git commits and tags, and push the `.gem` file to
|
239
|
+
[rubygems.org](https://rubygems.org).
|
30
240
|
|
31
241
|
## Contributing
|
32
242
|
|
33
|
-
Bug reports and pull requests are welcome on GitHub at
|
243
|
+
Bug reports and pull requests are welcome on GitHub at
|
244
|
+
https://github.com/tobyclemson/rake_dependencies. This project is intended to
|
245
|
+
be a safe, welcoming space for collaboration, and contributors are expected to
|
246
|
+
adhere to the [Contributor Covenant](http://contributor-covenant.org) code of
|
247
|
+
conduct.
|
34
248
|
|
35
249
|
|
36
250
|
## License
|
37
251
|
|
38
|
-
The gem is available as open source under the terms of the
|
39
|
-
|
252
|
+
The gem is available as open source under the terms of the
|
253
|
+
[MIT License](http://opensource.org/licenses/MIT).
|
@@ -36,68 +36,78 @@ module RakeDependencies
|
|
36
36
|
alias namespace= containing_namespace=
|
37
37
|
|
38
38
|
def define
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
t.dependency = dependency
|
44
|
-
t.path = path
|
39
|
+
if containing_namespace
|
40
|
+
namespace containing_namespace do
|
41
|
+
define_tasks
|
45
42
|
end
|
46
|
-
|
47
|
-
|
43
|
+
else
|
44
|
+
define_tasks
|
45
|
+
end
|
46
|
+
end
|
48
47
|
|
49
|
-
|
50
|
-
t.version = version
|
51
|
-
t.path = path
|
52
|
-
t.type = type
|
48
|
+
private
|
53
49
|
|
54
|
-
|
50
|
+
def define_tasks
|
51
|
+
Clean.new do |t|
|
52
|
+
t.name = clean_task_name
|
55
53
|
|
56
|
-
|
54
|
+
t.dependency = dependency
|
55
|
+
t.path = path
|
56
|
+
end
|
57
|
+
Download.new do |t|
|
58
|
+
t.name = download_task_name
|
57
59
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
t.name = extract_task_name
|
60
|
+
t.dependency = dependency
|
61
|
+
t.version = version
|
62
|
+
t.path = path
|
63
|
+
t.type = type
|
63
64
|
|
64
|
-
|
65
|
-
t.version = version
|
66
|
-
t.path = path
|
67
|
-
t.type = type
|
65
|
+
t.os_ids = os_ids
|
68
66
|
|
69
|
-
|
67
|
+
t.distribution_directory = distribution_directory
|
70
68
|
|
71
|
-
|
72
|
-
|
69
|
+
t.uri_template = uri_template
|
70
|
+
t.file_name_template = file_name_template
|
71
|
+
end
|
72
|
+
Extract.new do |t|
|
73
|
+
t.name = extract_task_name
|
73
74
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
Fetch.new do |t|
|
79
|
-
t.name = fetch_task_name
|
75
|
+
t.dependency = dependency
|
76
|
+
t.version = version
|
77
|
+
t.path = path
|
78
|
+
t.type = type
|
80
79
|
|
81
|
-
|
80
|
+
t.os_ids = os_ids
|
82
81
|
|
83
|
-
|
84
|
-
|
85
|
-
end
|
86
|
-
Ensure.new do |t|
|
87
|
-
t.name = ensure_task_name
|
82
|
+
t.distribution_directory = distribution_directory
|
83
|
+
t.binary_directory = binary_directory
|
88
84
|
|
89
|
-
|
90
|
-
|
91
|
-
|
85
|
+
t.file_name_template = file_name_template
|
86
|
+
t.strip_path_template = strip_path_template
|
87
|
+
t.target_name_template = target_name_template
|
88
|
+
end
|
89
|
+
Fetch.new do |t|
|
90
|
+
t.name = fetch_task_name
|
92
91
|
|
93
|
-
|
92
|
+
t.dependency = dependency
|
94
93
|
|
95
|
-
|
94
|
+
t.download_task = download_task_name
|
95
|
+
t.extract_task = extract_task_name
|
96
|
+
end
|
97
|
+
Ensure.new do |t|
|
98
|
+
t.name = ensure_task_name
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
100
|
+
t.dependency = dependency
|
101
|
+
t.version = version
|
102
|
+
t.path = path
|
103
|
+
|
104
|
+
t.binary_directory = binary_directory
|
105
|
+
|
106
|
+
t.needs_fetch = needs_fetch
|
107
|
+
|
108
|
+
t.clean_task = clean_task_name
|
109
|
+
t.download_task = download_task_name
|
110
|
+
t.extract_task = extract_task_name
|
101
111
|
end
|
102
112
|
end
|
103
113
|
end
|