vagrant-google 0.1.4 → 0.1.5.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.