cartage 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d1f67642374f3f5997dd5d735d20b33e8e035c5c
4
+ data.tar.gz: 64cd9abc15c2bf0a2e8097545a1013d434b38e6b
5
+ SHA512:
6
+ metadata.gz: 5939952a64d810668aeec416727bdaadda5011d594115719bbfd5aaf3af3ee86d89614dd3689d7cfc30c41a76b459e7de1a40c811f13285c5eb56b8e101d1d42
7
+ data.tar.gz: dfd005d425fff150f5b465c1a88af03f6e2df935a3c2152f0607e84265524d44a6ef90d8dcb3c59b28e0463d2ded90ae9ece49a58dcf87803fe91e87b8e9b4d3
@@ -0,0 +1,8 @@
1
+ # -*- ruby -*-
2
+
3
+ require "autotest/restart"
4
+
5
+ Autotest.add_hook :initialize do |at|
6
+ # .minitest.rb ensures that the gem version of minitest is used.
7
+ at.testlib = ".minitest.rb"
8
+ end
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,2 @@
1
+ gem "minitest"
2
+ require "minitest/autorun"
@@ -0,0 +1,36 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ rvm:
5
+ - "2.2"
6
+ - "2.1"
7
+ - 2.0.0
8
+ - ruby-head
9
+ - jruby-head
10
+ - jruby-9.0.0.0.pre1
11
+ - rbx-2
12
+ matrix:
13
+ allow_failures:
14
+ - rvm: rbx-2
15
+ - rvm: jruby-head
16
+ - rvm: jruby-9.0.0.0.pre1
17
+ - rvm: ruby-head
18
+ gemfile:
19
+ - Gemfile
20
+ before_script:
21
+ - |
22
+ case "${TRAVIS_RUBY_VERSION}" in
23
+ rbx*)
24
+ gem install psych
25
+ ;;
26
+ esac
27
+ - rake travis:before -t
28
+ script: rake travis
29
+ after_script:
30
+ - rake travis:after -t
31
+ notifications:
32
+ email:
33
+ recipients:
34
+ - aziegler@kineticcafe.com
35
+ on_success: change
36
+ on_failure: always
@@ -0,0 +1,271 @@
1
+ = An Example cartage.yml
2
+
3
+ The best way to understand how to configure Cartage is to see an annotated
4
+ example of a +cartage.yml+ file.
5
+
6
+ == Secrets and cartage.yml
7
+
8
+ The items in the main part of the Cartage configuration are *not* generally
9
+ secret, but they are also not typically things that would be set in a static
10
+ configuration file. The main value that would probably be set under most
11
+ circumstances is the +name+ value.
12
+
13
+ Because Cartage reads its configuration through ERB, the following structure is
14
+ recommended for +config/cartage.yml+.
15
+
16
+ ---
17
+ name: my-application
18
+
19
+ # This must not be indented for it to work.
20
+ <% if File.exist?('config/ansible/cartage.yml') %>
21
+ <%= File.read('config/ansible/cartage.yml') %>
22
+ <% end %>
23
+ <% if File.exist?('config/local/cartage.yml') %>
24
+ <%= File.read('config/local/cartage.yml') %>
25
+ <% end %>
26
+
27
+ == Main Cartage Configuration Options
28
+
29
+ === +name+
30
+
31
+ The name of the application. Optional, defaults to the basename of the origin
32
+ Git URL. Overridden with <tt>cartage --name NAME</tt>.
33
+
34
+ name: my-application
35
+
36
+ === +target+
37
+
38
+ The target path for the Cartage package. Optional and defaults to
39
+ <tt>./tmp</tt>. Overridden with <tt>cartage --target PATH</tt>.
40
+
41
+ target: tmp/cartage
42
+
43
+ === +root_path+
44
+
45
+ The root path of the application. Optional, defaults to the top of the Git
46
+ repository (<tt>git rev-parse --show-cdup</tt>). Overridden with <tt>cartage
47
+ --root-path ROOT_PATH</tt>.
48
+
49
+ root_path: .
50
+
51
+ === +timestamp+
52
+
53
+ The timestamp for the final package (which is
54
+ <tt><em>name</em>-<em>timestamp</em></tt>). Optional, defaults to the current
55
+ time in UTC. Overridden with <tt>cartage --timestamp TIMESTAMP</tt>. This
56
+ value is *not* validated to be a time value when supplied.
57
+
58
+ timestamp: not-a-timestamp
59
+
60
+ === +bundle_cache+
61
+
62
+ The bundle cache path, where the package’s <tt>vendor-bundle.tar.bz2</tt>
63
+ will be stored between builds. Optional, defaults to <tt>./tmp</tt>.
64
+ Overridden with <tt>cartage --bundle-cache BUNDLE_CACHE</tt>.
65
+
66
+ bundle_cache: tmp/cache
67
+
68
+ === +without+
69
+
70
+ The groups to exclude from <tt>bundle install</tt>. Optional, defaults to <tt>[
71
+ "development", "test"]</tt>. Overridden with <tt>cartage --without
72
+ group1,group2</tt>.
73
+
74
+ without:
75
+ - development
76
+ - test
77
+ - other
78
+
79
+ === +plugins+
80
+
81
+ A dictionary that contains all plug-in configuration, keyed by plug-in name.
82
+
83
+ == Cartage Plug-In Configuration Options
84
+
85
+ === cartage-s3
86
+
87
+ Cartage-s3 needs to know where to put the completed package and how to log into
88
+ the selected storage provider.
89
+
90
+ ==== +path+
91
+
92
+ The path to the cartage S3 bucket or directory (for another service that
93
+ Fog::Storage supports). This has no default and is overridden with <tt>cartage
94
+ s3 --path PATH</tt>.
95
+
96
+ plugins:
97
+ s3:
98
+ path: cartage-bucket
99
+
100
+ ==== +credentials+
101
+
102
+ The credentials dictionary passed to Fog::Storage for uploads. Each provider
103
+ has different keys. If present, this will dictionary be used in preference to
104
+ <tt>cartage s3</tt> flags <tt>--key-id</tt>, <tt>--secret-key</tt>, and
105
+ <tt>--region</tt> as those work *only* with Amazon AWS S3.
106
+
107
+ ===== AWS
108
+
109
+ AWS S3 storage connections need +provider+, +aws_access_key_id+,
110
+ +aws_secret_access_key+, and +region+.
111
+
112
+ plugins:
113
+ s3:
114
+ credentials:
115
+ provider: AWS
116
+ aws_access_key_id: YOUR_AWS_ACCESS_KEY_ID
117
+ aws_secret_access_key: YOUR_AWS_SECRET_ACCESS_KEY
118
+ region: us-west-2
119
+
120
+ ===== Rackspace
121
+
122
+ Rackspace storage connections need +provider+, +rackspace_username+,
123
+ +rackspace_api_key+, and optionally +rackspace_auth_url+.
124
+
125
+ plugins:
126
+ s3:
127
+ credentials:
128
+ provider: Rackspace
129
+ rackspace_username: RACKSPACE_USERNAME
130
+ rackspace_api_key: RACKSPACE_API_KEY
131
+ rackspace_auth_url: lon.auth.api.rackspacecloud.com
132
+
133
+ ===== Google
134
+
135
+ Google storage connections need +provider+, +google_storage_access_key_id+, and
136
+ +google_storage_secret_access_key+.
137
+
138
+ plugins:
139
+ s3:
140
+ credentials:
141
+ provider: Google
142
+ google_storage_access_key_id: YOUR_SECRET_ACCESS_KEY_ID
143
+ google_storage_secret_access_key: YOUR_SECRET_ACCESS_KEY
144
+
145
+ === cartage-remote
146
+
147
+ Cartage-remote needs to know where its remote build is going to run and how to
148
+ authenticate. It may also be told *what* to run. For cartage-remote 1.0, the
149
+ +remote+ configuration section is *required* (at least the +server+ key).
150
+
151
+ ==== +server+
152
+
153
+ The name of the build server. This field is required and can show up in two
154
+ different formats. The first is as a string matching
155
+ <tt>[user@]host[:port]</tt>.
156
+
157
+ plugins:
158
+ remote:
159
+ server: build@my-build-machine:2222
160
+
161
+ The second is as a dictionary with +user+, +host+, and +port+ keys.
162
+
163
+ plugins:
164
+ remote:
165
+ server:
166
+ user: build
167
+ host: my-build-machine
168
+ port: 2222
169
+
170
+ ==== +keys+
171
+
172
+ The SSH key(s) used to connect to the server. Optional, and cartage-remote will
173
+ use <tt>~/.ssh/*id_[rd]sa</tt> to find keys if this is not provided. The first
174
+ format is as a dictionary, embedding private keys directly in the configuration
175
+ file.
176
+
177
+ plugins:
178
+ remote:
179
+ keys:
180
+ custom: |
181
+ -----BEGIN RSA PRIVATE KEY-----
182
+ ...
183
+ -----END RSA PRIVATE KEY-----
184
+
185
+ The second form is as an array of glob patterns to match key files.
186
+
187
+ plugins:
188
+ remote:
189
+ keys:
190
+ - "config/secrets/*id_[rd]sa"
191
+ - "~/.ssh/*id_[rd]sa"
192
+
193
+ The third form is as a single glob pattern to match key files or a specific key
194
+ file.
195
+
196
+ plugins:
197
+ remote:
198
+ keys: "config/secrets/*id_[rd]sa"
199
+
200
+ ==== +build+
201
+
202
+ The build script that will be run on the remote server. This is optional with a
203
+ reasonable default, below.
204
+
205
+ #!/bin/bash
206
+ set -e
207
+ if [ -f Gemfile ]; then
208
+ bundle install --path %<remote_bundle>s
209
+ bundle exec cartage build \
210
+ --config-file %<config_file>s \
211
+ --target %<project_path>s
212
+ else
213
+ cartage build --config-file %<config_file>s \
214
+ --target %<project_path>s
215
+ fi
216
+
217
+ An example with an alternate build script that uses cartage-s3 to upload.
218
+
219
+ plugins:
220
+ remote:
221
+ build: |
222
+ #!/bin/bash
223
+ set -e
224
+ if [ -f Gemfile ]; then
225
+ bundle install --path %<remote_bundle>s
226
+ bundle exec cartage s3 \
227
+ --config-file %<config_file>s \
228
+ --target %<project_path>s \
229
+ --verbose
230
+ else
231
+ cartage build \
232
+ --config-file %<config_file>s \
233
+ --target %<project_path>s \
234
+ --verbose
235
+ fi
236
+
237
+ ==== +prebuild+
238
+
239
+ The prebuild script that will be run on the local system. This is optional with
240
+ a reasonable default, below:
241
+
242
+ #!/bin/bash
243
+ ssh-keyscan -H %<remote_host>s >> ~/.ssh/known_hosts
244
+
245
+ An example with a slightly extended example is below. It is strongly
246
+ recommended that the <tt>ssh-keyscan</tt> step be run in all prebuild scripts
247
+ as cartage-remote runs SSH in a paranoid mode.
248
+
249
+ plugins:
250
+ remote:
251
+ prebuild: |
252
+ #!/bin/bash
253
+ ssh-keyscan -H %<remote_host>s >> ~/.ssh/known_hosts
254
+ echo 'Prebuild complete'
255
+
256
+ ==== +postbuild+
257
+
258
+ The postbuild script that will be run on the local system. This is optional
259
+ with no default (no post-build actions).
260
+
261
+ An example that posts a message to Slack is below.
262
+
263
+ plugins:
264
+ remote:
265
+ postbuild: |
266
+ #!/bin/bash
267
+ t="token=SLACK_TOKEN"
268
+ c="channel=%23ci"
269
+ d=MYDOMAIN
270
+ u="https://${d}.slack.com/services/hooks/slackbot?${t}&${c}"
271
+ curl --data "Build %<name>s-%<timestamp>s complete." ${u}
@@ -0,0 +1,66 @@
1
+ == Contributing
2
+
3
+ We value any contribution to cartage you can provide: a bug report, a feature
4
+ request, or code contributions.
5
+
6
+ Cartage is reasonably complex code, so there are a few guidelines:
7
+
8
+ * Changes *will* *not* be accepted without tests. The test suite is written
9
+ with {Minitest}[https://github.com/seattlerb/minitest].
10
+ * Match our coding style.
11
+ * Use a thoughtfully-named topic branch that contains your change. Rebase your
12
+ commits into logical chunks as necessary.
13
+ * Use {quality commit messages}[http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html].
14
+ * Do not change the version number; when your patch is accepted and a release
15
+ is made, the version will be updated at that point.
16
+ * Submit a GitHub pull request with your changes.
17
+ * New behaviours and features are probably better created as cartage plugins.
18
+ If they are best suited for the core Cartage features, they require new or
19
+ updated documentation.
20
+
21
+ === Test Dependencies
22
+
23
+ Cartage uses Ryan Davis’s {Hoe}[https://github.com/seattlerb/hoe] to manage the
24
+ release process, and it adds a number of rake tasks. You will mostly be
25
+ interested in:
26
+
27
+ $ rake
28
+
29
+ which runs the tests the same way that:
30
+
31
+ $ rake test
32
+ $ rake travis
33
+
34
+ will do.
35
+
36
+ To assist with the installation of the development dependencies for
37
+ cartage, I have provided the simplest possible Gemfile pointing to
38
+ the (generated) +cartage.gemspec+ file. This will permit you to do:
39
+
40
+ $ bundle install
41
+
42
+ to get the development dependencies. If you aleady have +hoe+ installed, you
43
+ can accomplish the same thing with:
44
+
45
+ $ rake newb
46
+
47
+ This task will install any missing dependencies, run the tests/specs, and
48
+ generate the RDoc.
49
+
50
+ === Workflow
51
+
52
+ Here's the most direct way to get your work merged into the project:
53
+
54
+ * Fork the project.
55
+ * Clone down your fork (<tt>git clone git://github.com/KineticCafe/cartage.git</tt>).
56
+ * Create a topic branch to contain your change (<tt>git checkout -b my\_awesome\_feature</tt>).
57
+ * Hack away, add tests. Not necessarily in that order.
58
+ * Make sure everything still passes by running +rake+.
59
+ * If necessary, rebase your commits into logical chunks, without errors.
60
+ * Push the branch up (<tt>git push origin my\_awesome\_feature</tt>).
61
+ * Create a pull request against KineticCafe/cartage and describe
62
+ what your change does and the why you think it should be merged.
63
+
64
+ === Contributors
65
+
66
+ * Austin Ziegler created Cartage.
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ # -*- ruby -*-
2
+
3
+ # NOTE: This file is not the canonical source of dependencies. Edit the
4
+ # Rakefile, instead.
5
+
6
+ source "https://rubygems.org/"
7
+ gemspec
8
+
9
+ # vim: syntax=ruby
@@ -0,0 +1,5 @@
1
+ === 1.0 / 2015-03-24
2
+
3
+ * 1 major enhancement
4
+
5
+ * Birthday!
@@ -0,0 +1,27 @@
1
+ == Licence
2
+
3
+ This software is available under an MIT-style licence.
4
+
5
+ * Copyright 2015 Kinetic Cafe
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
8
+ this software and associated documentation files (the "Software"), to deal in
9
+ the Software without restriction, including without limitation the rights to
10
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
11
+ of the Software, and to permit persons to whom the Software is furnished to do
12
+ so, subject to the following conditions:
13
+
14
+ * The names of its contributors may not be used to endorse or promote
15
+ products derived from this software without specific prior written
16
+ permission.
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
@@ -0,0 +1,24 @@
1
+ .autotest
2
+ .gemtest
3
+ .minitest.rb
4
+ .travis.yml
5
+ Cartage.yml.rdoc
6
+ Contributing.rdoc
7
+ Gemfile
8
+ History.rdoc
9
+ Licence.rdoc
10
+ Manifest.txt
11
+ README.rdoc
12
+ Rakefile
13
+ bin/cartage
14
+ cartage.yml.sample
15
+ lib/cartage.rb
16
+ lib/cartage/command.rb
17
+ lib/cartage/config.rb
18
+ lib/cartage/manifest.rb
19
+ lib/cartage/manifest/commands.rb
20
+ lib/cartage/pack_command.rb
21
+ lib/cartage/plugin.rb
22
+ test/minitest_config.rb
23
+ test/test_cartage.rb
24
+ test/test_cartage_config.rb