vagrant-google 0.1.4 → 0.1.5.rc1

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.
@@ -13,6 +13,6 @@
13
13
  # limitations under the License.
14
14
  module VagrantPlugins
15
15
  module Google
16
- VERSION = "0.1.4"
16
+ VERSION = "0.1.5.rc1"
17
17
  end
18
18
  end
data/locales/en.yml CHANGED
@@ -4,17 +4,15 @@ en:
4
4
  The machine is already created.
5
5
  launching_instance: |-
6
6
  Launching an instance with the following settings...
7
- launch_vpc_warning: |-
8
- Warning! You're launching this instance into a VPC without an
9
- elastic IP. Please verify you're properly connected to a VPN so
10
- you can access this machine, otherwise Vagrant will not be able
11
- to SSH into it.
12
7
  not_created: |-
13
8
  Instance is not created. Please run `vagrant up` first.
14
9
  ready: |-
15
10
  Machine is booted and ready for use!
16
11
  ready_ssh: |-
17
12
  Machine is ready for SSH access!
13
+ rsync_not_found_warning: |-
14
+ Warning! Folder sync disabled because the rsync binary is missing.
15
+ Make sure rsync is installed and the binary can be found in the PATH.
18
16
  rsync_folder: |-
19
17
  Rsyncing folder: %{hostpath} => %{guestpath}
20
18
  terminating: |-
@@ -30,12 +28,12 @@ en:
30
28
  will_not_destroy: |-
31
29
  The instance '%{name}' will not be destroyed, since the confirmation
32
30
  was declined.
33
-
31
+ #-------------------------------------------------------------------------------
32
+ # Translations for config validation errors
33
+ #-------------------------------------------------------------------------------
34
34
  config:
35
35
  google_client_email_required: |-
36
36
  A Google Service Account client email is required via "google_client_email"
37
- machine_required: |-
38
- An MACHINE_TYPE must be configured via "machine"
39
37
  private_key_missing: |-
40
38
  The specified private key for Google could not be found
41
39
  zone_required: |-
@@ -43,10 +41,18 @@ en:
43
41
  name_required: |-
44
42
  An instance name must be specified via "name"
45
43
  google_key_location_required: |-
46
- A private key pathname is required via "google_key_location"
44
+ A private key pathname is required via:
45
+ "google_json_key_location" (for JSON keys)
46
+ or
47
+ "google_key_location" (for P12 keys)
48
+ google_duplicate_key_location: |-
49
+ Both "google_json_key_location" and "google_key_location" are specified.
50
+ Config must specify only one key location.
47
51
  google_project_id_required: |-
48
52
  A Google Cloud Project ID is required via "google_project_id"
49
-
53
+ #-------------------------------------------------------------------------------
54
+ # Translations for exception classes
55
+ #-------------------------------------------------------------------------------
50
56
  errors:
51
57
  fog_error: |-
52
58
  There was an error talking to Google. The error message is shown
@@ -65,7 +71,15 @@ en:
65
71
  Host path: %{hostpath}
66
72
  Guest path: %{guestpath}
67
73
  Error: %{stderr}
68
-
74
+ external_ip_error: |-
75
+ Specified external IP address is invalid or already in use.
76
+ IP address requested: %{externalip}
77
+ disk_type_error: |-
78
+ Specified disk type is not available in the region selected.
79
+ Disk type requested: %{disktype}
80
+ #-------------------------------------------------------------------------------
81
+ # Translations for machine states
82
+ #-------------------------------------------------------------------------------
69
83
  states:
70
84
  short_not_created: |-
71
85
  not created
@@ -0,0 +1,38 @@
1
+ namespace :acceptance do
2
+
3
+ desc "shows components that can be tested separately"
4
+ task :components do
5
+ exec("bundle exec vagrant-spec components")
6
+ end
7
+
8
+ desc "runs acceptance tests using vagrant-spec"
9
+ task :run do
10
+
11
+ puts "NOTE: For acceptance tests to be functional, correct ssh key needs to be added to GCE metadata."
12
+
13
+ if !ENV["GOOGLE_JSON_KEY_LOCATION"] && !ENV["GOOGLE_KEY_LOCATION"]
14
+ abort ("Environment variables GOOGLE_JSON_KEY_LOCATION or GOOGLE_KEY_LOCATION are not set. Aborting.")
15
+ end
16
+
17
+ if !ENV["GOOGLE_PROJECT_ID"]
18
+ abort ("Environment variable GOOGLE_PROJECT_ID is not set. Aborting.")
19
+ end
20
+
21
+ if !ENV["GOOGLE_CLIENT_EMAIL"]
22
+ abort ("Environment variable GOOGLE_CLIENT_EMAIL is not set. Aborting.")
23
+ end
24
+
25
+ if !ENV["GOOGLE_SSH_USER"]
26
+ puts "WARNING: GOOGLE_SSH_USER variable is not set. Will try to start tests using insecure Vagrant private key."
27
+ end
28
+
29
+ components = %w(
30
+ provisioner/shell
31
+ ).map{ |s| "provider/google/#{s}" }
32
+
33
+ command = "bundle exec vagrant-spec test --components=#{components.join(" ")}"
34
+ puts command
35
+ puts
36
+ exec(command)
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ # This installs the tasks that help with gem creation and
2
+ # publishing.
3
+ Bundler::GemHelper.install_tasks
data/tasks/test.rake ADDED
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+ require 'rspec/core/rake_task'
3
+
4
+ namespace :test do
5
+ RSpec::Core::RakeTask.new(:unit) do |t|
6
+ t.pattern = "test/unit/**/*_test.rb"
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ require "vagrant-spec/acceptance"
2
+ require_relative "shared/context_google"
@@ -0,0 +1,3 @@
1
+ shared_context "provider-context/google" do
2
+
3
+ end
data/test/unit/base.rb ADDED
@@ -0,0 +1,19 @@
1
+ require "rubygems"
2
+ require "rspec/autorun"
3
+
4
+ # Require Vagrant itself so we can reference the proper
5
+ # classes to test.
6
+ require "vagrant"
7
+ require "vagrant-google"
8
+
9
+ # Add the test directory to the load path
10
+ $:.unshift File.expand_path("../../", __FILE__)
11
+
12
+ # Do not buffer output
13
+ $stdout.sync = true
14
+ $stderr.sync = true
15
+
16
+ # Configure RSpec
17
+ RSpec.configure do |c|
18
+ c.formatter = :progress
19
+ end
@@ -11,6 +11,8 @@
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
+ require File.expand_path("../../base", __FILE__)
15
+
14
16
  require "vagrant-google/config"
15
17
 
16
18
  describe VagrantPlugins::Google::Config do
@@ -30,11 +32,13 @@ describe VagrantPlugins::Google::Config do
30
32
  t = Time.now
31
33
 
32
34
  its("name") { should == "i-#{t.year}#{t.month.to_s.rjust(2,'0')}#{t.day.to_s.rjust(2,'0')}#{t.hour.to_s.rjust(2,'0')}" }
33
- its("image") { should == "debian-7-wheezy-v20140926" }
35
+ its("image") { should == "debian-7-wheezy-v20150127" }
34
36
  its("zone") { should == "us-central1-f" }
35
37
  its("network") { should == "default" }
36
38
  its("machine_type") { should == "n1-standard-1" }
37
39
  its("disk_size") { should == 10 }
40
+ its("disk_name") { should be_nil }
41
+ its("disk_type") { should == "pd-standard" }
38
42
  its("instance_ready_timeout") { should == 20 }
39
43
  its("metadata") { should == {} }
40
44
  its("tags") { should == [] }
@@ -45,8 +49,8 @@ describe VagrantPlugins::Google::Config do
45
49
  # simple boilerplate test, so I cut corners here. It just sets
46
50
  # each of these attributes to "foo" in isolation, and reads the value
47
51
  # and asserts the proper result comes back out.
48
- [:name, :image, :zone, :instance_ready_timeout, :machine_type, :disk_size,
49
- :network, :metadata].each do |attribute|
52
+ [:name, :image, :zone, :instance_ready_timeout, :machine_type, :disk_size, :disk_name, :disk_type,
53
+ :network, :metadata, :can_ip_forward, :external_ip, :autodelete_disk].each do |attribute|
50
54
 
51
55
  it "should not default #{attribute} if overridden" do
52
56
  instance.send("#{attribute}=".to_sym, "foo")
@@ -66,12 +70,14 @@ describe VagrantPlugins::Google::Config do
66
70
 
67
71
  its("google_client_email") { should be_nil }
68
72
  its("google_key_location") { should be_nil }
73
+ its("google_json_key_location") { should be_nil }
69
74
  end
70
75
 
71
76
  context "with Google credential environment variables" do
72
77
  before :each do
73
78
  ENV.stub(:[]).with("GOOGLE_CLIENT_EMAIL").and_return("client_id_email")
74
79
  ENV.stub(:[]).with("GOOGLE_KEY_LOCATION").and_return("/path/to/key")
80
+ ENV.stub(:[]).with("GOOGLE_JSON_KEY_LOCATION").and_return("/path/to/json/key")
75
81
  end
76
82
 
77
83
  subject do
@@ -82,6 +88,31 @@ describe VagrantPlugins::Google::Config do
82
88
 
83
89
  its("google_client_email") { should == "client_id_email" }
84
90
  its("google_key_location") { should == "/path/to/key" }
91
+ its("google_json_key_location") { should == "/path/to/json/key" }
92
+ end
93
+
94
+ context "With both Google credential environment variables" do
95
+ before :each do
96
+ ENV.stub(:[]).with("GOOGLE_CLIENT_EMAIL").and_return("client_id_email")
97
+ ENV.stub(:[]).with("GOOGLE_KEY_LOCATION").and_return("/path/to/key")
98
+ ENV.stub(:[]).with("GOOGLE_JSON_KEY_LOCATION").and_return("/path/to/json/key")
99
+ end
100
+
101
+ it "Should return duplicate key location errors" do
102
+ instance.finalize!
103
+ expect(instance.validate("foo")["Google Provider"][1]).to include("en.vagrant_google.config.google_duplicate_key_location")
104
+ end
105
+ end
106
+
107
+ context "With none of the Google credential environment variables set" do
108
+ before :each do
109
+ ENV.stub(:[]).with("GOOGLE_CLIENT_EMAIL").and_return("client_id_email")
110
+ end
111
+
112
+ it "Should return no key set errors" do
113
+ instance.finalize!
114
+ expect(instance.validate("foo")["Google Provider"][1]).to include("en.vagrant_google.config.google_key_location_required")
115
+ end
85
116
  end
86
117
  end
87
118
 
@@ -89,9 +120,13 @@ describe VagrantPlugins::Google::Config do
89
120
  let(:config_image) { "foo" }
90
121
  let(:config_machine_type) { "foo" }
91
122
  let(:config_disk_size) { 99 }
123
+ let(:config_disk_name) { "foo" }
124
+ let(:config_disk_type) { "foo" }
92
125
  let(:config_name) { "foo" }
93
126
  let(:config_zone) { "foo" }
94
127
  let(:config_network) { "foo" }
128
+ let(:can_ip_forward) { true }
129
+ let(:external_ip) { "foo" }
95
130
 
96
131
  def set_test_values(instance)
97
132
  instance.name = config_name
@@ -99,7 +134,11 @@ describe VagrantPlugins::Google::Config do
99
134
  instance.image = config_image
100
135
  instance.machine_type = config_machine_type
101
136
  instance.disk_size = config_disk_size
137
+ instance.disk_name = config_disk_name
138
+ instance.disk_type = config_disk_type
102
139
  instance.zone = config_zone
140
+ instance.can_ip_forward = can_ip_forward
141
+ instance.external_ip = external_ip
103
142
  end
104
143
 
105
144
  it "should raise an exception if not finalized" do
@@ -123,8 +162,12 @@ describe VagrantPlugins::Google::Config do
123
162
  its("image") { should == config_image }
124
163
  its("machine_type") { should == config_machine_type }
125
164
  its("disk_size") { should == config_disk_size }
165
+ its("disk_name") { should == config_disk_name }
166
+ its("disk_type") { should == config_disk_type }
126
167
  its("network") { should == config_network }
127
168
  its("zone") { should == config_zone }
169
+ its("can_ip_forward") { should == can_ip_forward }
170
+ its("external_ip") { should == external_ip }
128
171
  end
129
172
 
130
173
  context "with a specific config set" do
@@ -147,8 +190,12 @@ describe VagrantPlugins::Google::Config do
147
190
  its("image") { should == config_image }
148
191
  its("machine_type") { should == config_machine_type }
149
192
  its("disk_size") { should == config_disk_size }
193
+ its("disk_name") { should == config_disk_name }
194
+ its("disk_type") { should == config_disk_type }
150
195
  its("network") { should == config_network }
151
196
  its("zone") { should == zone_name }
197
+ its("can_ip_forward") { should == can_ip_forward }
198
+ its("external_ip") { should == external_ip }
152
199
  end
153
200
 
154
201
  describe "inheritance of parent config" do
@@ -1,11 +1,11 @@
1
1
  # Copyright 2013 Google Inc. All Rights Reserved.
2
- #
2
+ #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
5
5
  # You may obtain a copy of the License at
6
- #
6
+ #
7
7
  # http://www.apache.org/licenses/LICENSE-2.0
8
- #
8
+ #
9
9
  # Unless required by applicable law or agreed to in writing, software
10
10
  # distributed under the License is distributed on an "AS IS" BASIS,
11
11
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
19
19
  s.name = "vagrant-google"
20
20
  s.version = VagrantPlugins::Google::VERSION
21
21
  s.platform = Gem::Platform::RUBY
22
- s.authors = "Eric Johnson"
23
- s.email = "erjohnso@google.com"
22
+ s.authors = ["Eric Johnson", "Artem Yakimenko"]
23
+ s.email = "vagrant-google@google.com"
24
24
  s.homepage = "http://www.vagrantup.com"
25
25
  s.summary = "Vagrant provider plugin for Google Compute Engine."
26
26
  s.description = "Enables Vagrant to manage Google Compute Engine instances."
@@ -28,16 +28,14 @@ Gem::Specification.new do |s|
28
28
  s.required_rubygems_version = ">= 1.3.6"
29
29
  s.rubyforge_project = "vagrant-google"
30
30
 
31
- s.add_runtime_dependency "fog", "~> 1.22"
31
+ s.add_runtime_dependency "fog", "1.29"
32
32
  s.add_runtime_dependency "google-api-client"
33
33
  #s.add_runtime_dependency "pry"
34
34
  #s.add_runtime_dependency "pry-nav"
35
35
  #s.add_runtime_dependency "rb-readline"
36
36
 
37
37
  s.add_development_dependency "rake"
38
- s.add_development_dependency "rspec-core", "~> 2.12.2"
39
- s.add_development_dependency "rspec-expectations", "~> 2.12.1"
40
- s.add_development_dependency "rspec-mocks", "~> 2.12.1"
38
+ s.add_development_dependency "rspec", "~> 2.14.0"
41
39
 
42
40
  # The following block of code determines the files that should be included
43
41
  # in the gem. It does this by reading all the files in the directory where
@@ -0,0 +1,10 @@
1
+ require_relative "test/acceptance/base"
2
+
3
+ Vagrant::Spec::Acceptance.configure do |c|
4
+ c.component_paths << File.expand_path("../test/acceptance", __FILE__)
5
+ c.skeleton_paths << File.expand_path("../test/acceptance/skeletons", __FILE__)
6
+
7
+ c.provider "google",
8
+ box: "https://github.com/mitchellh/vagrant-google/raw/master/google-test.box",
9
+ contexts: ["provider-context/google"]
10
+ end
metadata CHANGED
@@ -1,173 +1,141 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-google
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
5
- prerelease:
4
+ version: 0.1.5.rc1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Eric Johnson
8
+ - Artem Yakimenko
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-10-16 00:00:00.000000000 Z
12
+ date: 2015-05-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
16
16
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
17
  requirements:
19
- - - ~>
18
+ - - '='
20
19
  - !ruby/object:Gem::Version
21
- version: '1.22'
20
+ version: '1.29'
22
21
  type: :runtime
23
22
  prerelease: false
24
23
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
24
  requirements:
27
- - - ~>
25
+ - - '='
28
26
  - !ruby/object:Gem::Version
29
- version: '1.22'
27
+ version: '1.29'
30
28
  - !ruby/object:Gem::Dependency
31
29
  name: google-api-client
32
30
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
31
  requirements:
35
- - - ! '>='
32
+ - - '>='
36
33
  - !ruby/object:Gem::Version
37
34
  version: '0'
38
35
  type: :runtime
39
36
  prerelease: false
40
37
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
38
  requirements:
43
- - - ! '>='
39
+ - - '>='
44
40
  - !ruby/object:Gem::Version
45
41
  version: '0'
46
42
  - !ruby/object:Gem::Dependency
47
43
  name: rake
48
44
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
45
  requirements:
51
- - - ! '>='
46
+ - - '>='
52
47
  - !ruby/object:Gem::Version
53
48
  version: '0'
54
49
  type: :development
55
50
  prerelease: false
56
51
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
52
  requirements:
59
- - - ! '>='
53
+ - - '>='
60
54
  - !ruby/object:Gem::Version
61
55
  version: '0'
62
56
  - !ruby/object:Gem::Dependency
63
- name: rspec-core
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ~>
68
- - !ruby/object:Gem::Version
69
- version: 2.12.2
70
- type: :development
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ~>
76
- - !ruby/object:Gem::Version
77
- version: 2.12.2
78
- - !ruby/object:Gem::Dependency
79
- name: rspec-expectations
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ~>
84
- - !ruby/object:Gem::Version
85
- version: 2.12.1
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ~>
92
- - !ruby/object:Gem::Version
93
- version: 2.12.1
94
- - !ruby/object:Gem::Dependency
95
- name: rspec-mocks
57
+ name: rspec
96
58
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
59
  requirements:
99
60
  - - ~>
100
61
  - !ruby/object:Gem::Version
101
- version: 2.12.1
62
+ version: 2.14.0
102
63
  type: :development
103
64
  prerelease: false
104
65
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
66
  requirements:
107
67
  - - ~>
108
68
  - !ruby/object:Gem::Version
109
- version: 2.12.1
69
+ version: 2.14.0
110
70
  description: Enables Vagrant to manage Google Compute Engine instances.
111
- email: erjohnso@google.com
71
+ email: vagrant-google@google.com
112
72
  executables: []
113
73
  extensions: []
114
74
  extra_rdoc_files: []
115
75
  files:
116
- - Rakefile
117
- - README.md
118
- - vagrant-google.gemspec
119
- - locales/en.yml
120
76
  - CHANGELOG.md
121
- - LICENSE
122
- - CONTRIB.md
123
77
  - Gemfile
78
+ - LICENSE
79
+ - README.md
80
+ - Rakefile
81
+ - example_boxes/README.md
82
+ - example_boxes/gce-test/metadata.json
83
+ - example_boxes/gce/metadata.json
84
+ - google-test.box
85
+ - google.box
86
+ - lib/vagrant-google.rb
124
87
  - lib/vagrant-google/action.rb
125
- - lib/vagrant-google/action/run_instance.rb
126
- - lib/vagrant-google/action/timed_provision.rb
127
- - lib/vagrant-google/action/terminate_instance.rb
128
- - lib/vagrant-google/action/read_ssh_info.rb
129
- - lib/vagrant-google/action/message_not_created.rb
130
88
  - lib/vagrant-google/action/connect_google.rb
131
89
  - lib/vagrant-google/action/is_created.rb
90
+ - lib/vagrant-google/action/message_already_created.rb
91
+ - lib/vagrant-google/action/message_not_created.rb
132
92
  - lib/vagrant-google/action/message_will_not_destroy.rb
133
- - lib/vagrant-google/action/warn_networks.rb
93
+ - lib/vagrant-google/action/read_ssh_info.rb
134
94
  - lib/vagrant-google/action/read_state.rb
95
+ - lib/vagrant-google/action/run_instance.rb
135
96
  - lib/vagrant-google/action/sync_folders.rb
136
- - lib/vagrant-google/action/message_already_created.rb
97
+ - lib/vagrant-google/action/terminate_instance.rb
98
+ - lib/vagrant-google/action/timed_provision.rb
99
+ - lib/vagrant-google/action/warn_networks.rb
137
100
  - lib/vagrant-google/config.rb
101
+ - lib/vagrant-google/errors.rb
138
102
  - lib/vagrant-google/plugin.rb
139
- - lib/vagrant-google/version.rb
140
103
  - lib/vagrant-google/provider.rb
141
- - lib/vagrant-google/errors.rb
142
104
  - lib/vagrant-google/util/timer.rb
143
- - lib/vagrant-google.rb
144
- - example_box/README.md
145
- - example_box/metadata.json
146
- - google.box
147
- - spec/vagrant-google/config_spec.rb
105
+ - lib/vagrant-google/version.rb
106
+ - locales/en.yml
107
+ - tasks/acceptance.rake
108
+ - tasks/bundler.rake
109
+ - tasks/test.rake
110
+ - test/acceptance/base.rb
111
+ - test/acceptance/shared/context_google.rb
112
+ - test/unit/base.rb
113
+ - test/unit/common/config_test.rb
114
+ - vagrant-google.gemspec
115
+ - vagrant-spec.config.rb
148
116
  - .gitignore
117
+ - .ruby-version
149
118
  homepage: http://www.vagrantup.com
150
119
  licenses: []
120
+ metadata: {}
151
121
  post_install_message:
152
122
  rdoc_options: []
153
123
  require_paths:
154
124
  - lib
155
125
  required_ruby_version: !ruby/object:Gem::Requirement
156
- none: false
157
126
  requirements:
158
- - - ! '>='
127
+ - - '>='
159
128
  - !ruby/object:Gem::Version
160
129
  version: '0'
161
130
  required_rubygems_version: !ruby/object:Gem::Requirement
162
- none: false
163
131
  requirements:
164
- - - ! '>='
132
+ - - '>='
165
133
  - !ruby/object:Gem::Version
166
134
  version: 1.3.6
167
135
  requirements: []
168
136
  rubyforge_project: vagrant-google
169
- rubygems_version: 1.8.23
137
+ rubygems_version: 2.0.14
170
138
  signing_key:
171
- specification_version: 3
139
+ specification_version: 4
172
140
  summary: Vagrant provider plugin for Google Compute Engine.
173
141
  test_files: []
data/CONTRIB.md DELETED
@@ -1,64 +0,0 @@
1
- # How to become a contributor and submit your own code
2
-
3
- ## Contributor License Agreements
4
-
5
- We'd love to accept your sample apps and patches! Before we can take them, we
6
- have to jump a couple of legal hurdles.
7
-
8
- Please fill out either the individual or corporate Contributor License Agreement
9
- (CLA).
10
-
11
- * If you are an individual writing original source code and you're sure you
12
- own the intellectual property, then you'll need to sign an [individual CLA]
13
- (https://developers.google.com/open-source/cla/individual).
14
- * If you work for a company that wants to allow you to contribute your work,
15
- then you'll need to sign a [corporate CLA]
16
- (https://developers.google.com/open-source/cla/corporate).
17
-
18
- Follow either of the two links above to access the appropriate CLA and
19
- instructions for how to sign and return it. Once we receive it, we'll be able to
20
- accept your pull requests.
21
-
22
- ## Contributing A Patch
23
-
24
- 1. Submit an issue describing your proposed change to the repo in question.
25
- 1. The repo owner will respond to your issue promptly.
26
- 1. If your proposed change is accepted, and you haven't already done so, sign a
27
- Contributor License Agreement (see details above).
28
- 1. Fork the desired repo, develop and test your code changes.
29
- 1. Ensure that your code adheres to the existing style in the sample to which
30
- you are contributing. Refer to the
31
- [Google Cloud Platform Samples Style Guide]
32
- (https://github.com/GoogleCloudPlatform/Template/wiki/style.html) for the
33
- recommended coding standards for this organization.
34
- 1. Ensure that your code has an appropriate set of unit tests which all pass.
35
- 1. Submit a pull request.
36
-
37
- ## Contributing A New Sample App
38
-
39
- 1. Submit an issue to the GoogleCloudPlatform/Template repo describing your
40
- proposed sample app.
41
- 1. The Template repo owner will respond to your enhancement issue promptly.
42
- Instructional value is the top priority when evaluating new app proposals for
43
- this collection of repos.
44
- 1. If your proposal is accepted, and you haven't already done so, sign a
45
- Contributor License Agreement (see details above).
46
- 1. Create your own repo for your app following this naming convention:
47
- * {product}-{app-name}-{language}
48
- * products: appengine, compute, storage, bigquery, prediction, cloudsql
49
- * example: appengine-guestbook-python
50
- * For multi-product apps, concatenate the primary products, like this:
51
- compute-appengine-demo-suite-python.
52
- * For multi-language apps, concatenate the primary languages like this:
53
- appengine-sockets-python-java-go.
54
-
55
- 1. Clone the README.md, CONTRIB.md and LICENSE files from the
56
- GoogleCloudPlatform/Template repo.
57
- 1. Ensure that your code adheres to the existing style in the sample to which
58
- you are contributing. Refer to the
59
- [Google Cloud Platform Samples Style Guide]
60
- (https://github.com/GoogleCloudPlatform/Template/wiki/style.html) for the
61
- recommended coding standards for this organization.
62
- 1. Ensure that your code has an appropriate set of unit tests which all pass.
63
- 1. Submit a request to fork your repo in GoogleCloudPlatform organizationt via
64
- your proposal issue.