dpl 1.10.17.travis.6637.6 → 2.0.0.alpha.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.
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
+ ```