dpl 1.10.17.travis.6637.6 → 2.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +74 -0
  3. data/CONTRIBUTING.md +392 -0
  4. data/Gemfile +17 -3
  5. data/Gemfile.lock +373 -0
  6. data/LICENSE +16 -19
  7. data/NOTES.md +275 -0
  8. data/README.md +1977 -707
  9. data/Rakefile +2 -2
  10. data/bin/dpl +7 -3
  11. data/lib/dpl.rb +20 -0
  12. data/lib/dpl/assets/atlas/install +19 -0
  13. data/lib/dpl/assets/dpl/README.erb.md +133 -0
  14. data/lib/dpl/assets/dpl/git_ssh +2 -0
  15. data/lib/dpl/assets/git/detect_private_key +8 -0
  16. data/lib/dpl/assets/hephy/filter_log +3 -0
  17. data/lib/dpl/assets/pypi/install +4 -0
  18. data/lib/dpl/assets/scalingo/install +6 -0
  19. data/lib/dpl/cli.rb +36 -48
  20. data/lib/dpl/ctx.rb +2 -0
  21. data/lib/dpl/ctx/bash.rb +543 -0
  22. data/lib/dpl/ctx/test.rb +242 -0
  23. data/lib/dpl/helper/assets.rb +36 -0
  24. data/lib/dpl/helper/cmd.rb +167 -0
  25. data/lib/dpl/helper/config_file.rb +47 -0
  26. data/lib/dpl/helper/env.rb +39 -0
  27. data/lib/dpl/helper/interpolate.rb +126 -0
  28. data/lib/dpl/helper/memoize.rb +20 -0
  29. data/lib/dpl/helper/squiggle.rb +22 -0
  30. data/lib/dpl/helper/zip.rb +69 -0
  31. data/lib/dpl/provider.rb +562 -234
  32. data/lib/dpl/provider/dsl.rb +369 -0
  33. data/lib/dpl/provider/examples.rb +128 -0
  34. data/lib/dpl/provider/status.rb +59 -0
  35. data/lib/dpl/providers.rb +40 -0
  36. data/lib/dpl/providers/anynines.rb +65 -0
  37. data/lib/dpl/providers/atlas.rb +49 -0
  38. data/lib/dpl/providers/azure_web_apps.rb +59 -0
  39. data/lib/dpl/providers/bintray.rb +313 -0
  40. data/lib/dpl/providers/bluemixcloudfoundry.rb +92 -0
  41. data/lib/dpl/providers/boxfuse.rb +48 -0
  42. data/lib/dpl/providers/cargo.rb +19 -0
  43. data/lib/dpl/providers/chef_supermarket.rb +128 -0
  44. data/lib/dpl/providers/cloud66.rb +40 -0
  45. data/lib/dpl/providers/cloudfiles.rb +56 -0
  46. data/lib/dpl/providers/cloudfoundry.rb +81 -0
  47. data/lib/dpl/providers/codedeploy.rb +179 -0
  48. data/lib/dpl/providers/datica.rb +60 -0
  49. data/lib/dpl/providers/elasticbeanstalk.rb +195 -0
  50. data/lib/dpl/providers/engineyard.rb +107 -0
  51. data/lib/dpl/providers/firebase.rb +41 -0
  52. data/lib/dpl/providers/gae.rb +74 -0
  53. data/lib/dpl/providers/gcs.rb +105 -0
  54. data/lib/dpl/providers/hackage.rb +47 -0
  55. data/lib/dpl/providers/hephy.rb +101 -0
  56. data/lib/dpl/providers/heroku.rb +111 -0
  57. data/lib/dpl/providers/heroku/api.rb +119 -0
  58. data/lib/dpl/providers/heroku/git.rb +50 -0
  59. data/lib/dpl/providers/lambda.rb +202 -0
  60. data/lib/dpl/providers/launchpad.rb +74 -0
  61. data/lib/dpl/providers/netlify.rb +30 -0
  62. data/lib/dpl/providers/npm.rb +88 -0
  63. data/lib/dpl/providers/openshift.rb +46 -0
  64. data/lib/dpl/providers/opsworks.rb +142 -0
  65. data/lib/dpl/providers/packagecloud.rb +190 -0
  66. data/lib/dpl/providers/pages.rb +17 -0
  67. data/lib/dpl/providers/pages/api.rb +102 -0
  68. data/lib/dpl/providers/pages/git.rb +251 -0
  69. data/lib/dpl/providers/puppetforge.rb +44 -0
  70. data/lib/dpl/providers/pypi.rb +120 -0
  71. data/lib/dpl/providers/releases.rb +214 -0
  72. data/lib/dpl/providers/rubygems.rb +89 -0
  73. data/lib/dpl/providers/s3.rb +243 -0
  74. data/lib/dpl/providers/scalingo.rb +63 -0
  75. data/lib/dpl/providers/script.rb +28 -0
  76. data/lib/dpl/providers/snap.rb +59 -0
  77. data/lib/dpl/providers/surge.rb +55 -0
  78. data/lib/dpl/providers/testfairy.rb +93 -0
  79. data/lib/dpl/providers/transifex.rb +66 -0
  80. data/lib/dpl/support/aws_sdk_patch.rb +23 -0
  81. data/lib/dpl/support/gems.rb +69 -0
  82. data/lib/dpl/support/gstore_patch.rb +6 -0
  83. data/lib/dpl/support/version.rb +83 -0
  84. data/lib/dpl/version.rb +2 -2
  85. metadata +98 -169
  86. data/.coveralls.yml +0 -1
  87. data/.github/CONTRIBUTING.md +0 -173
  88. data/.github/stale.yml +0 -53
  89. data/.gitignore +0 -13
  90. data/.rspec +0 -2
  91. data/.travis.yml +0 -56
  92. data/dpl-anynines.gemspec +0 -3
  93. data/dpl-atlas.gemspec +0 -3
  94. data/dpl-azure_webapps.gemspec +0 -3
  95. data/dpl-bintray.gemspec +0 -3
  96. data/dpl-bitballoon.gemspec +0 -3
  97. data/dpl-bluemix_cloud_foundry.gemspec +0 -3
  98. data/dpl-boxfuse.gemspec +0 -3
  99. data/dpl-cargo.gemspec +0 -3
  100. data/dpl-catalyze.gemspec +0 -3
  101. data/dpl-chef_supermarket.gemspec +0 -20
  102. data/dpl-cloud66.gemspec +0 -3
  103. data/dpl-cloud_files.gemspec +0 -3
  104. data/dpl-cloud_foundry.gemspec +0 -3
  105. data/dpl-code_deploy.gemspec +0 -3
  106. data/dpl-deis.gemspec +0 -3
  107. data/dpl-elastic_beanstalk.gemspec +0 -3
  108. data/dpl-engine_yard.gemspec +0 -3
  109. data/dpl-firebase.gemspec +0 -3
  110. data/dpl-gae.gemspec +0 -3
  111. data/dpl-gcs.gemspec +0 -3
  112. data/dpl-hackage.gemspec +0 -3
  113. data/dpl-hephy.gemspec +0 -3
  114. data/dpl-heroku.gemspec +0 -3
  115. data/dpl-lambda.gemspec +0 -3
  116. data/dpl-launchpad.gemspec +0 -3
  117. data/dpl-npm.gemspec +0 -3
  118. data/dpl-openshift.gemspec +0 -3
  119. data/dpl-ops_works.gemspec +0 -3
  120. data/dpl-packagecloud.gemspec +0 -3
  121. data/dpl-pages.gemspec +0 -3
  122. data/dpl-puppet_forge.gemspec +0 -3
  123. data/dpl-pypi.gemspec +0 -3
  124. data/dpl-releases.gemspec +0 -8
  125. data/dpl-rubygems.gemspec +0 -3
  126. data/dpl-s3.gemspec +0 -3
  127. data/dpl-scalingo.gemspec +0 -3
  128. data/dpl-script.gemspec +0 -3
  129. data/dpl-snap.gemspec +0 -3
  130. data/dpl-surge.gemspec +0 -3
  131. data/dpl-testfairy.gemspec +0 -3
  132. data/dpl-transifex.gemspec +0 -3
  133. data/dpl.gemspec +0 -3
  134. data/gemspec_helper.rb +0 -51
  135. data/lib/dpl/error.rb +0 -3
  136. data/notes/engine_yard.md +0 -1
  137. data/notes/heroku.md +0 -3
  138. data/spec/cli_spec.rb +0 -36
  139. data/spec/provider_spec.rb +0 -191
  140. data/spec/spec_helper.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: 66a68e212d9b05796d391861c8c82cbfcdba7d8834921af238fb2e662a55e2cb
4
- data.tar.gz: 6299cd7b6fd51ff21bcf420d9b8d694122fc0f1af6e6e8379a356f778b2dc712
2
+ SHA1:
3
+ metadata.gz: 519a5f3a45594b98b9cea78a174915cb82e8ed49
4
+ data.tar.gz: '04381cd09207b9b35e2e0c4ff01a266eb198cc90'
5
5
  SHA512:
6
- metadata.gz: cfe5d441ecc3438640c1e1cc486261308e2d9d545f334aaf6d2f69952a53498e7d117620706fc817151368e0f9282bbb6abd9233de149760c2882c6dc11c6abf
7
- data.tar.gz: 44e8b8ef04b215d0f42e79e61d5fa59e230baadd2e2fcbc14fb8cdb9148c1005092fb86c49310e479debb12cd6b4dd9b424e825febe14c859fa5042243be917a
6
+ metadata.gz: 13c81c90f3bebfe9d92f9617b0360fac5d37cb74cc6d8ced73dc0f41a07ab4b5805164e5eb0189b4833029b758555906b81b4702e61beadaec8f8526c03fe77b
7
+ data.tar.gz: 15a8ecbd8a12c78cfffba74f0e3dad2757051beba9f8d0b26bd7001b58b856b6ff536028677257e4d19b446dfa7e775f9ca5ada924a03fdc9daf01eed827fdce
data/CHANGELOG.md ADDED
@@ -0,0 +1,74 @@
1
+ # Changelog
2
+
3
+ ## dpl v2.0.0-alpha.1 (eta 2019-08-28)
4
+
5
+ * Default to not cleaning the git working directory, but accept `--cleanup` in order to clean up the git working directory.
6
+ * Support a maturity model using dev, alpha, beta, stable.
7
+ * Use Ruby's `DidYouMean` in order to suggest provider names if the given name is not valid.
8
+ * Use `~/.dpl` rather than `./.dpl` as a directory to store assets, and remove `~/.dpl` before the process terminates.
9
+ * Use the AWS SDK v3 for AWS providers.
10
+ * Fix git-ssh to work with non-standard ssh ports (used by all providers that rely on Git).
11
+
12
+ ### bintray
13
+ * List files in the downloads list if specified in the descriptor file.
14
+
15
+ ### chef-supermarket
16
+ * Read the cookbook name a given metadata.json or metadata.rb file if not given as `--name`.
17
+ * Use `--name` and `--category`, but keep `--cookbook_name` and `--cookbook_category` as deprecated aliases.
18
+
19
+ ### cloudfoundry
20
+ * Accept `--v3` in order to use the `v3-push` command.
21
+
22
+ ### codedeploy
23
+ * Accept `--file_exist_behavior` in order to specify how to handle files that already exist in a deployment target location.
24
+
25
+ ### elasticbeanstalk
26
+ * Accept `--label` and `--description` in order to define these attributes.
27
+ * Remove non-printable unicode chars from the version description.
28
+ * Accept `--debug` in order to list files added to the zip archive.
29
+ * Honor `.ebignore` in order to exclude files from being added to the zip file.
30
+
31
+ ### engineyard
32
+ * Use `ey-core` as CLI tooling.
33
+
34
+ ### firebase
35
+ * Accept `--only` in order to restrict the resources to deploy.
36
+ * Accpet `--force` in order to delete functions missing from the current working directory.
37
+ * Add `node_modules/.bin` to the `PATH` in case users have `firebase` in that directory.
38
+
39
+ ### gae
40
+ * Accept multiple values on on `--config`.
41
+
42
+ ### hackage
43
+ * Accept `--publish` in order to publish a package.
44
+
45
+ ### lambda
46
+ * Accept `--layers` to deploy function layers.
47
+ * Do not require a role and handler name when functions are only being updated.
48
+ * Use the correct handler name separators for dotnet, go, and java runtimes.
49
+
50
+ ### npm
51
+ * Accept `--registry` in order to specify the target registry.
52
+ * Accept `--src` in order to specify a directory or tarball to publish.
53
+ * Accept `auth` as an `--auth_method` in order to force writing the token to `_auth` in `~/.npmrc`.
54
+
55
+ ### pages
56
+ * Accept a `--deploy_key` as an alternative to the GitHub token (expects a path to a file).
57
+ * Accept a commit message on `--commit_message`, allow interpolating variables (e.g. as `$TRAVIS_BUILD_NUMBER`).
58
+ * Check if the target branch already exists and preserves git history by default. `--no-keep_history` can be passed in order to erase history on the target branch.
59
+ * Include symbolic links.
60
+ * Add an alternative strategy for deploying via GitHub's pages HTTP API
61
+
62
+ ### pypi
63
+ * Accept `--no-remove_build_dir` in order to skip removing the build dir (`./dist`).
64
+ * Run `twine check dist/*` by default, and accept `--no-twine_check` for opting out.
65
+
66
+ ### releases
67
+ * Accept a path to a file containing release notes on `--release_notes_file`.
68
+ * Use `--release_notes` for passing the release notes content, keep `--body` as a deprecated alias.
69
+
70
+ ### s3
71
+ * Accept `--no-overwrite` in order to not overwrite existing files.
72
+ * Accept `--force_path_style` in order to use the bucket name on the path, rather than the subcomain
73
+ * Print out dots instead of filenames by default, and accept `--verbose` for printing out all filenames uploaded.
74
+ * Use `application/octet-stream` as a default content type if a content type cannot be determined.
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,392 @@
1
+ # Contributing to Dpl
2
+
3
+ ## Table of Contents
4
+
5
+ * [Resources](#resources)
6
+ * [Navigating the Codebase](#navigating-the-codebase)
7
+ * [Lifecycle of the Deployment Process](#lifecycle-of-the-deployment-process)
8
+ * [Deployment Tooling](#deployment-tooling)
9
+ * [Runtime Dependencies](#runtime-dependencies)
10
+ * [Unit Tests](#unit-tests)
11
+ * [Runtime Dependency Installation Tests](#runtime-dependency-installation-tests)
12
+ * [Integration Tests](#integration-tests)
13
+ * [Testing Dpl Branches or Forks on Travis CI](#testing-dpl-branches-or-forks-on-travis-ci)
14
+ * [Code Conventions](#code-conventions)
15
+ * [Naming Conventions](#naming-conventions)
16
+ * [Updating the README](#updating-the-readme)
17
+
18
+ Dpl is a central component in Travis CI, and has been around for a long time.
19
+
20
+ This library always has been a community effort first. There probably is not a
21
+ single person in the world who is very familiar with all deployment providers
22
+ supported by Dpl.
23
+
24
+ *Thank you all for this!*
25
+
26
+ This document is for you if you are looking to contribute to dpl, be it by
27
+ adding a new deployment provider, fixing a bug, or adding a new feature.
28
+
29
+ Dpl has a [code of conduct](CODE_OF_CONDUCT.md), please follow it in all
30
+ interactions with the project.
31
+
32
+ Dpl is written in Ruby, and we assume that you familiarize yourself with our
33
+ documentation as much as needed.
34
+
35
+ ## Resources
36
+
37
+ Hopefully helpful resources are:
38
+
39
+ * This [document](CONTRIBUTING.md)
40
+ * The [dpl README](README.md)
41
+ * The [dpl API docs](https://www.rubydoc.info/github/travis-ci/dpl) on rubydocs.info
42
+ * The [cl README](https://github.com/svenfuchs/cl/blob/master/README.md)
43
+
44
+ ## Navigating the Codebase
45
+
46
+ All provider specific classes live in [dpl/providers](lib/dpl/providers).
47
+ These represent the CLI commands that are executed when the command line
48
+ exectuable `dpl` is run with a given provider name as the first argument.
49
+
50
+ Each provider is a subclass of `Dpl::Provider`, which is defined in
51
+ [dpl/provider.rb](lib/dpl/provider.rb). The provider base class itself
52
+ subclasses from `Cl::Cmd`, so it represents an executable sub command of the
53
+ main command `dpl`.
54
+
55
+ For instance, the command `dpl s3 --bucket bucket` instantiates and runs the
56
+ provider class [S3](lib/dpl/providers/s3.rb).
57
+
58
+ The class `Cl::Cmd` contributes the command line options parser, and its
59
+ class level DSL. Please see the [cl README](https://github.com/svenfuchs/cl/blob/master/README.md)
60
+ for this DSL, and the [S3 provider](/lib/dpl/provider/s3.rb)
61
+ for an example how dpl uses it.
62
+
63
+ The class `Dpl::Provider` adds, amongst other things, the order of stages
64
+ (methods) that make up the deployment process:
65
+
66
+ * `init`
67
+ * `install`
68
+ * `login`
69
+ * `setup`
70
+ * `validate`
71
+ * `prepare`
72
+ * `deploy`
73
+ * `finish`
74
+
75
+ Implementors of concrete provider classes may or may not choose to implement
76
+ any of these instance methods according to their needs, and semantics of their
77
+ tooling and service providers. Please refer to [Dpl::Provider](/lib/dpl/provider.rb)
78
+ for details.
79
+
80
+ The DSL that is used to declare features, dependencies, environment integration
81
+ etc. on the concrete provider classes is defined in the module
82
+ `Dpl::Provider::DSL`, in [dpl/provider/dsl](/lib/dpl/provider/dsl.rb).
83
+
84
+ Also of interest is [Dpl::Ctx::Bash](/lib/dpl/ctx/bash.rb),
85
+ the Bash execution context, that runs shell commands, installs dependencies
86
+ etc. (while the `Test` context class is used for testing in order to keep your
87
+ development machine clean and safe when you run tests locally).
88
+
89
+ ```
90
+ lib
91
+ └── dpl
92
+ ├── assets # Stores larger shell scripts
93
+ ├── ctx
94
+ │   ├── bash.rb # Bash execution context
95
+ │   └── test.rb # Test execution context
96
+ ├── provider.rb # Base class for all providers
97
+ ├── provider
98
+ │   ├── dsl.rb # DSL for defining providers
99
+ │   └── example.rb # Generating example commands for help output
100
+ └── providers
101
+    ├── anynines.rb # Concrete providers
102
+    ├── atlas.rb
103
+    ├── azure_webapps.rb
104
+    ├── bintray.rb
105
+    ├── bitballoon.rb
106
+    └── ⋮
107
+ ```
108
+
109
+ ## Lifecycle of the Deployment Process
110
+
111
+ When a provider class is instantiated and run it will go through a number
112
+ of stages that make up the deployment process.
113
+
114
+ These are documented in [dpl/provider.rb](/lib/dpl/provider.rb).
115
+ If you are adding a new deployment provider please familiarize youself with
116
+ this lifecycle.
117
+
118
+ Feel free to pick and interpret these stages according to the needs and
119
+ semantics of the service provider you are adding. By no means do all of these
120
+ stages have to be filled in or implmented. The `Provider` base class checks for
121
+ these methods, and runs them, if present, so that implementors can choose
122
+ semantically fitting names for their providers.
123
+
124
+ ## Deployment Tooling
125
+
126
+ If you are adding a new deployment provider please choose the tooling you are
127
+ going to use carefully.
128
+
129
+ Dpl is a long lived library, and it has outlived many tools that once were
130
+ supported, and no longer are. Thus tooling stability is a major concern for
131
+ this project.
132
+
133
+ Ideally use official CLI tooling supported by the company who's service
134
+ provider you are about to add. Often, such CLI tools can be installed via
135
+ standard package managers, or manually downloaded using `curl` and installed
136
+ with a few simple Bash commands.
137
+
138
+ Such CLI tooling is preferrable over Ruby gem runtime dependencies as they can
139
+ be executed in a child process, and won't introduce any dependency resolution
140
+ problems later on.
141
+
142
+ If no such CLI is available, or it does not look well supported, and your
143
+ provider implementation needs to talk to an external HTTP API then please consider
144
+ using [Net::HTTP](https://ruby-doc.org/stdlib-2.6.3/libdoc/net/http/rdoc/Net/HTTP.html)
145
+ from Ruby's standard library.
146
+
147
+ If you absolutely have to rely on a runtime Ruby gem dependency, such as a
148
+ provider client implementation, please only do so if the gem is supported by
149
+ the respective company officially. We may choose to reject including runtime
150
+ dependencies that do not look stable or widely supported.
151
+
152
+ ## Runtime Dependencies
153
+
154
+ Runtime dependencies can be declared on the provider class using the
155
+ [DSL](lib/dpl/provider/dsl.rb).
156
+
157
+ In the case of APT, NPM, and Pip dependencies these will be installed via
158
+ shell commands at the beginning of the deployment process.
159
+
160
+ Ruby gem dependencies will be installed using Bundler's [inline API](https://github.com/bundler/bundler/blob/master/lib/bundler/inline.rb),
161
+ at the beginning of the deployment process, so they are available in the same
162
+ Ruby process from then on.
163
+
164
+ ## Unit Tests
165
+
166
+ `Dpl` uses [RSpec](https://github.com/rspec) for tests. The specs reside in
167
+ `spec`, and each provider class has a corresponding file
168
+ `spec/dpl/providers/*_spec.rb` to hold tests.
169
+
170
+ Provider tests should be implemented on an input/output acceptance level, as
171
+ much as possible.
172
+
173
+ They use a [Ctx::Test](blob/masterlib/dpl/ctx/test.rb) execution context in
174
+ order to avoid running actual shell commands, or actually installing
175
+ dependencies at test time. There are custom [RSpec matchers](spec/support/matchers)
176
+ in place that help with making assertions against this execution context.
177
+
178
+ If your provider has to talk to an external HTTP API then ideally use
179
+ [Webmock](https://github.com/bblimke/webmock) to stub external requests. If by
180
+ any means possible try to avoid mocking or stubbing Ruby client classes (this
181
+ is not always possible, but should be considered).
182
+
183
+ ### Running Unit Tests Locally
184
+
185
+ You can run the unit test suite locally as follows:
186
+
187
+ ```
188
+ bundle install
189
+ bundle exec rspec
190
+ ```
191
+
192
+ In order to execute tests only for a certain provider you can run:
193
+
194
+ ```
195
+ bundle exec rspec spec/dpl/providers/[provider]_spec.rb
196
+ ```
197
+
198
+ In order to execute a single test or group of tests add a line number like so:
199
+
200
+ ```
201
+ bundle exec rspec spec/dpl/providers/[provider]_spec.rb:25
202
+ ```
203
+
204
+ These tests can be run safely on any development machine, anywhere.
205
+
206
+ ## Runtime Dependency Installation Tests
207
+
208
+ We additionally run tests that exercise runtime dependency installation on
209
+ Travis CI.
210
+
211
+ These live in [.travis/test_install.rb](.travis/test_install.rb). It is not
212
+ advisable to run these tests outside of an ephemeral VM or container that can
213
+ be safely discarded, as they are going to leave various artifacts around.
214
+
215
+ ## Integration Tests
216
+
217
+ In order to ensure proper integration with the service providers supported
218
+ we also periodically run a test suite that exercises actual deployments to
219
+ these providers.
220
+
221
+ These tests live in [.travis/providers](/.travis/providers), and the are
222
+ triggered using the script [trigger](/.travis/trigger).
223
+
224
+ An integration test consists of:
225
+
226
+ * A setup script that creates an application (or artifact) to deploy (or
227
+ upload).
228
+ * A YAML config snippet that configures and triggers the deployment as part of
229
+ a build on Travis CI.
230
+ * A test script that tests if the deployment was successful.
231
+
232
+ For example:
233
+
234
+ * [github-pages/prepare](/.travis/providers/github-pages/prepare)
235
+ creates a minimal Git repository that serves an `index.html` on GitHub Pages in a temporary directory.
236
+ * [github-pages/travis.yml](/.travis/providers/github-pages/travis.yml)
237
+ configures the build to use Dpl 2.0 to deploy this repository to GitHub Pages.
238
+ * [github-pages/test](/.travis/providers/github-pages/test)
239
+ tests if the deployment was successful.
240
+
241
+ The tests can be run on Travis CI individually, or combined, by triggering a
242
+ build via our API, using the script [.travis/trigger](/.travis/trigger).
243
+ This takes a provider name as an argument, and requires a Travis CI API token.
244
+
245
+ For example, this triggers a build that executes the GitHub Pages test on
246
+ Travis CI:
247
+
248
+ ```
249
+ .travis/trigger github-pages --token [token]
250
+ ```
251
+
252
+ The token can also be set as an environment variable:
253
+
254
+ ```
255
+ export TRAVIS_API_TOKEN=[token]
256
+ .travis/trigger github-pages
257
+ ```
258
+
259
+ The `trigger` script accepts multiple provider names as arguments. If no
260
+ arguments are given then tests for all providers will be run.
261
+
262
+ ### Integration Test Configuration
263
+
264
+ In the build config YAML snippet make sure to use the branch of your fork for the
265
+ deployment tooling, and allow the deployment to run on your branch:
266
+
267
+ ```yaml
268
+ deploy:
269
+ - provider: [name]
270
+ edge:
271
+ source: [your-login]/dpl
272
+ branch: [your-branch]
273
+ on:
274
+ branch: [your-branch]
275
+ ```
276
+
277
+ Ideally use credentials for an isolated account on the service you are deploying to.
278
+ This is generally good practice, and way you can hand things off to someone else.
279
+
280
+ In order to get things working encrypt the credentials against your fork, and
281
+ add them to the build config YAML snippet. If you are in the root directory
282
+ of your fork then this command should do the trick:
283
+
284
+ ```
285
+ travis encrypt password=[password]
286
+ ```
287
+
288
+ If you do not have the `travis` CLI installed you can install it using:
289
+
290
+ ```
291
+ gem install travis
292
+ ```
293
+
294
+ When you add encrypted credentials to the build config YAML snippet also add a comment
295
+ that allows others to identify the account used. E.g:
296
+
297
+ ```yaml
298
+ deploy:
299
+ - provider: pages
300
+ github_token:
301
+ # personal access token with repo scope on the account [name]
302
+ secure: "[encrypted token]"
303
+ ```
304
+
305
+ Open a pull request. In order for us to merge your test, and get it working on
306
+ our repository you will need to re-encrypt the credentials against
307
+ `travis-ci/dpl`, like so:
308
+
309
+ ```
310
+ travis encrypt -r travis-ci/dpl password=[password]
311
+ ```
312
+
313
+ Whatever minimal deployment you can get working is be a great contribution.
314
+ Even if for some reason it proves hard to test the deployment in an automated
315
+ fashion, but you have a successful deployment that can be verified manually,
316
+ please still open a pull request, and talk to us. Any test is better than no
317
+ test.
318
+
319
+ ## Testing Dpl Branches or Forks on Travis CI
320
+
321
+ It is possible to test a new deployment provider or new functionality of dpl on
322
+ Travis CI. In order to do so, add proper configuraiton on the `edge` key to
323
+ your `.travis.yml` like so:
324
+
325
+ ```yaml
326
+ deploy:
327
+ provider: [name]
328
+ edge:
329
+ source: [github-handle]/dpl
330
+ branch: [branch]
331
+ on:
332
+ branch: TEST_BRANCH # or all_branches: true
333
+ ⋮ # rest of your provider's configuration
334
+ ```
335
+
336
+ This builds the `dpl` gem on the Travis CI build environment from your
337
+ repository, on the given branch. Then it installs the gem built from this code
338
+ base, and uses it to run your deployment.
339
+
340
+ When submitting a pull request, please be sure to run at least one deployment
341
+ with the new configuration, and provide a link to the build in your pull
342
+ request.
343
+
344
+ ## Code Conventions
345
+
346
+ Dpl does not follow any strict code styleguide.
347
+
348
+ Please take a look around other providers, and try to follow a similar code
349
+ style to what you find.
350
+
351
+ Try to use the [DSL](/lib/dpl/provider/dsl.rb) as much
352
+ as possible. It keeps the code declarative and readable, so that people not
353
+ familiar with Ruby or programming in general can still follow it, and make
354
+ sense of it.
355
+
356
+ If you find yourself trying to achieve something that should be, but is not
357
+ supported by the DSL please [open an issue](https://github.com/travis-ci/dpl/issues/new)
358
+ about it.
359
+
360
+ If you are rather unfamiliar with Ruby, and have trouble following our code
361
+ style then please submit your pull request anyway, or get in touch, so we can
362
+ help.
363
+
364
+ ## Naming Conventions
365
+
366
+ Dpl uses constant names following Ruby naming conventions. I.e. constant
367
+ names use `CamelCase`, and they live in files named in `snake_case.rb`.
368
+
369
+ If you pick such names for a new provider please try to follow these
370
+ conventions.
371
+
372
+ Real world service provider or company names do not always translate to such
373
+ conventional Ruby names one-to-one. That is ok, they don't have to. These Ruby
374
+ constant names are representations of real world service and company names in
375
+ Ruby code.
376
+
377
+ Other Ruby libraries often (not always) follow a similar thinking. E.g.
378
+ even though Amazon Web Services brand name is `AWS` the module name
379
+ they chose in their [aws-sdk](https://github.com/aws/aws-sdk-ruby) is
380
+ `Aws`, not `AWS`.
381
+
382
+ ## Updating the README
383
+
384
+ The [README](/README.md) is generated from a
385
+ [template](/lib/dpl/assets/dpl/README.erb.md).
386
+
387
+ In order to update the README please edit the template, and run:
388
+
389
+ ```
390
+ gem install ffi-icu
391
+ bin/readme > README.md
392
+ ```