chef-dk 1.6.11 → 2.0.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +25 -38
  3. data/Gemfile.lock +199 -199
  4. data/README.md +4 -2
  5. data/Rakefile +1 -2
  6. data/acceptance/Gemfile +1 -1
  7. data/acceptance/Gemfile.lock +23 -21
  8. data/chef-dk.gemspec +4 -6
  9. data/lib/chef-dk/builtin_commands.rb +1 -1
  10. data/lib/chef-dk/chef_runner.rb +1 -1
  11. data/lib/chef-dk/cli.rb +1 -0
  12. data/lib/chef-dk/command/generate.rb +5 -2
  13. data/lib/chef-dk/command/generator_commands/helpers.rb +36 -0
  14. data/lib/chef-dk/command/generator_commands/{lwrp.rb → resource.rb} +4 -4
  15. data/lib/chef-dk/command/update.rb +11 -18
  16. data/lib/chef-dk/command/verify.rb +1 -16
  17. data/lib/chef-dk/commands_map.rb +3 -3
  18. data/lib/chef-dk/policyfile/artifactory_cookbook_source.rb +102 -0
  19. data/lib/chef-dk/policyfile/cookbook_location_specification.rb +2 -2
  20. data/lib/chef-dk/policyfile/cookbook_sources.rb +1 -0
  21. data/lib/chef-dk/policyfile/dsl.rb +10 -0
  22. data/lib/chef-dk/policyfile/solution_dependencies.rb +15 -1
  23. data/lib/chef-dk/policyfile_lock.rb +1 -1
  24. data/lib/chef-dk/policyfile_services/install.rb +30 -2
  25. data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +1 -0
  26. data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +1 -0
  27. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +2 -2
  28. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +3 -0
  29. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-project.toml +1 -1
  30. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +1 -0
  31. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +2 -1
  32. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +1 -0
  33. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +1 -0
  34. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +1 -0
  35. data/lib/chef-dk/skeletons/code_generator/metadata.rb +3 -2
  36. data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +1 -1
  37. data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +1 -0
  38. data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +7 -12
  39. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +1 -0
  40. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +1 -0
  41. data/lib/chef-dk/skeletons/code_generator/recipes/helpers.rb +21 -0
  42. data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +1 -0
  43. data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +1 -0
  44. data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +1 -0
  45. data/lib/chef-dk/skeletons/code_generator/recipes/{lwrp.rb → resource.rb} +1 -11
  46. data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +3 -3
  47. data/lib/chef-dk/skeletons/code_generator/templates/default/helpers.rb.erb +39 -0
  48. data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +1 -1
  49. data/lib/chef-dk/skeletons/code_generator/templates/default/resource.rb.erb +1 -0
  50. data/lib/chef-dk/version.rb +2 -2
  51. data/omnibus_overrides.rb +14 -12
  52. data/spec/unit/command/generator_commands/cookbook_spec.rb +7 -1
  53. data/spec/unit/command/generator_commands/helpers_spec.rb +31 -0
  54. data/spec/unit/command/generator_commands/{lwrp_spec.rb → resource_spec.rb} +5 -5
  55. data/spec/unit/command/install_spec.rb +2 -2
  56. data/spec/unit/command/update_spec.rb +11 -3
  57. data/spec/unit/command/verify_spec.rb +2 -1
  58. data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -0
  59. data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +1 -1
  60. data/spec/unit/policyfile/solution_dependencies_spec.rb +25 -0
  61. data/spec/unit/policyfile_demands_spec.rb +2 -1
  62. data/spec/unit/policyfile_lock_build_spec.rb +23 -21
  63. data/spec/unit/policyfile_lock_install_spec.rb +2 -2
  64. data/spec/unit/policyfile_lock_validation_spec.rb +3 -3
  65. data/spec/unit/policyfile_services/export_repo_spec.rb +6 -6
  66. data/spec/unit/policyfile_services/install_spec.rb +1 -1
  67. data/spec/unit/policyfile_services/update_spec.rb +143 -0
  68. data/tasks/announce.rb +3 -2
  69. data/tasks/dependencies.rb +35 -111
  70. data/tasks/github_changelog_generator.rb +0 -3
  71. data/tasks/templates/prerelease.md.erb +1 -1
  72. data/tasks/templates/release.md.erb +1 -1
  73. metadata +20 -38
  74. data/lib/chef-dk/skeletons/code_generator/templates/default/provider.rb.erb +0 -0
  75. data/spec/unit/gemfile_util_spec.rb +0 -41
  76. data/spec/unit/helpers_spec.rb +0 -120
  77. data/spec/unit/tasks/helpers_spec.rb +0 -75
  78. data/tasks/bin/bundle-platform +0 -19
  79. data/tasks/bin/create-override-gemfile +0 -110
  80. data/tasks/bundle.rb +0 -96
  81. data/tasks/bundle_util.rb +0 -110
  82. data/tasks/gemfile_util.rb +0 -435
  83. data/tasks/helpers.rb +0 -47
  84. data/version_policy.rb +0 -142
@@ -480,8 +480,8 @@ REVISION_STRING
480
480
  <<-REVISION_STRING
481
481
  name:custom_identifier
482
482
  run-list-item:recipe[foo]
483
- cookbook:foo;id:1.0.0
484
483
  cookbook:bar;id:0.1.0
484
+ cookbook:foo;id:1.0.0
485
485
  default_attributes:{}
486
486
  override_attributes:{}
487
487
  REVISION_STRING
@@ -502,15 +502,6 @@ REVISION_STRING
502
502
 
503
503
  "cookbook_locks" => {
504
504
 
505
- "foo" => {
506
- "version" => "1.0.0",
507
- "identifier" => "1.0.0",
508
- "dotted_decimal_identifier" => "1.0.0",
509
- "cache_key" => "foo-1.0.0",
510
- "origin" => nil,
511
- "source_options" => nil,
512
- },
513
-
514
505
  "bar" => {
515
506
  "version" => "0.1.0",
516
507
  "identifier" => "0.1.0",
@@ -528,6 +519,16 @@ REVISION_STRING
528
519
  },
529
520
  "source_options" => nil,
530
521
  },
522
+
523
+ "foo" => {
524
+ "version" => "1.0.0",
525
+ "identifier" => "1.0.0",
526
+ "dotted_decimal_identifier" => "1.0.0",
527
+ "cache_key" => "foo-1.0.0",
528
+ "origin" => nil,
529
+ "source_options" => nil,
530
+ },
531
+
531
532
  },
532
533
 
533
534
  "default_attributes" => {},
@@ -603,10 +604,10 @@ name:basic_example
603
604
  run-list-item:recipe[foo]
604
605
  run-list-item:recipe[bar]
605
606
  run-list-item:recipe[baz::non_default]
606
- cookbook:foo;id:#{cookbook_foo_cksum}
607
607
  cookbook:bar;id:#{cookbook_bar_cksum}
608
608
  cookbook:baz;id:#{cookbook_baz_cksum}
609
609
  cookbook:dep_of_bar;id:#{cookbook_dep_of_bar_cksum}
610
+ cookbook:foo;id:#{cookbook_foo_cksum}
610
611
  default_attributes:{}
611
612
  override_attributes:{}
612
613
  REVISION_STRING
@@ -627,15 +628,6 @@ REVISION_STRING
627
628
 
628
629
  "cookbook_locks" => {
629
630
 
630
- "foo" => {
631
- "version" => "1.0.0",
632
- "identifier" => cookbook_foo_cksum,
633
- "dotted_decimal_identifier" => cookbook_foo_cksum_dotted,
634
- "origin" => "https://community.chef.io/api/cookbooks/foo/1.0.0",
635
- "cache_key" => "foo-1.0.0",
636
- "source_options" => nil,
637
- },
638
-
639
631
  "bar" => {
640
632
  "version" => "0.1.0",
641
633
  "identifier" => cookbook_bar_cksum,
@@ -673,6 +665,16 @@ REVISION_STRING
673
665
 
674
666
  },
675
667
 
668
+ "foo" => {
669
+ "version" => "1.0.0",
670
+ "identifier" => cookbook_foo_cksum,
671
+ "dotted_decimal_identifier" => cookbook_foo_cksum_dotted,
672
+ "origin" => "https://community.chef.io/api/cookbooks/foo/1.0.0",
673
+ "cache_key" => "foo-1.0.0",
674
+ "source_options" => nil,
675
+ },
676
+
677
+
676
678
  },
677
679
 
678
680
  "default_attributes" => {},
@@ -945,8 +947,8 @@ name:my-policyfile
945
947
  run-list-item:recipe[foo::default]
946
948
  run-list-item:recipe[bar::default]
947
949
  named-run-list:rl2;run-list-item:recipe[bar::default]
948
- cookbook:foo;id:#{cookbook_foo_cksum}
949
950
  cookbook:bar;id:#{cookbook_bar_cksum}
951
+ cookbook:foo;id:#{cookbook_foo_cksum}
950
952
  default_attributes:#{canonicalized_default_attrs}
951
953
  override_attributes:#{canonicalized_override_attrs}
952
954
  REVISION_STRING
@@ -96,8 +96,8 @@ describe ChefDK::PolicyfileLock, "installing cookbooks from a lockfile" do
96
96
  cookbook_lock = policyfile_lock.cookbook_locks["local-cookbook"]
97
97
  expect(cookbook_lock.name).to eq("local-cookbook")
98
98
  expect(cookbook_lock.version).to eq("2.3.4")
99
- expect(cookbook_lock.identifier).to eq("fab501cfaf747901bd82c1bc706beae7dc3a350c")
100
- expect(cookbook_lock.dotted_decimal_identifier).to eq("70567763561641081.489844270461035.258281553147148")
99
+ expect(cookbook_lock.identifier).to eq("1e9dfd1134735385b425c056cb5decef9081b92c")
100
+ expect(cookbook_lock.dotted_decimal_identifier).to eq("8617959542256467.37634246136220509.260513665759532")
101
101
  expect(cookbook_lock.source).to eq("local-cookbook")
102
102
  expect(cookbook_lock.source_options).to eq({ path: "local-cookbook" })
103
103
  expect(cookbook_lock.cookbook_location_spec.version_constraint).to eq(Semverse::Constraint.new("= 2.3.4"))
@@ -199,7 +199,7 @@ E
199
199
  it "updates the content identifier" do
200
200
  old_id = lock_generator.lock_data_for("local-cookbook").identifier
201
201
  expect(cookbook_lock_data.identifier).to_not eq(old_id)
202
- expect(cookbook_lock_data.identifier).to eq("d71622904ed89b1e0066bb4ae823b2a7b49a615a")
202
+ expect(cookbook_lock_data.identifier).to eq("5a2b09f9d5e6e8a1a2d811c41d58ed200599adbe")
203
203
  end
204
204
 
205
205
  it "has an updated version and identifier" do
@@ -267,7 +267,7 @@ E
267
267
  old_id = lock_generator.lock_data_for("local-cookbook").identifier
268
268
 
269
269
  expect(cookbook_lock_data.identifier).to_not eq(old_id)
270
- expect(cookbook_lock_data.identifier).to eq("08a96e3afbd1eaa1183a2dde8687ca29dbddc94b")
270
+ expect(cookbook_lock_data.identifier).to eq("0f62422f744d173c35a3e74f1a8c76c8b92908c2")
271
271
  end
272
272
 
273
273
  it "has an updated identifier but not an updated version" do
@@ -305,7 +305,7 @@ E
305
305
  old_id = lock_generator.lock_data_for("local-cookbook").identifier
306
306
 
307
307
  expect(cookbook_lock_data.identifier).to_not eq(old_id)
308
- expect(cookbook_lock_data.identifier).to eq("da6a1c0f8791df713b7ff8c27285fbe7923901cc")
308
+ expect(cookbook_lock_data.identifier).to eq("af5e1252307bdf99b878ca5ede3c40e24ee9e45a")
309
309
  end
310
310
 
311
311
  it "has an updated identifier but not an updated version" do
@@ -106,7 +106,7 @@ describe ChefDK::PolicyfileServices::ExportRepo do
106
106
 
107
107
  let(:local_cookbook_path) { File.join(fixtures_path, "local_path_cookbooks/local-cookbook") }
108
108
 
109
- let(:revision_id) { "60e5ad638dce219d8f87d589463ec4a9884007ba5e2adbb4c0a7021d67204f1a" }
109
+ let(:revision_id) { "7da81d2c7bb97f904637f97e7f8b487fa4bb1ed682edea7087743dec84c254ec" }
110
110
 
111
111
  let(:lockfile_content) do
112
112
  <<-E
@@ -119,8 +119,8 @@ describe ChefDK::PolicyfileServices::ExportRepo do
119
119
  "cookbook_locks": {
120
120
  "local-cookbook": {
121
121
  "version": "2.3.4",
122
- "identifier": "fab501cfaf747901bd82c1bc706beae7dc3a350c",
123
- "dotted_decimal_identifier": "70567763561641081.489844270461035.258281553147148",
122
+ "identifier": "1e9dfd1134735385b425c056cb5decef9081b92c",
123
+ "dotted_decimal_identifier": "42704157235437826.6970356709321892.63549625984142",
124
124
  "source": "#{local_cookbook_path}",
125
125
  "cache_key": null,
126
126
  "scm_info": null,
@@ -168,7 +168,7 @@ E
168
168
  context "when the given 'export_dir' is a directory" do
169
169
 
170
170
  it "sets the archive file location to $policy_name-$revision.tgz" do
171
- expected = File.join(export_dir, "install-example-60e5ad638dce219d8f87d589463ec4a9884007ba5e2adbb4c0a7021d67204f1a.tgz")
171
+ expected = File.join(export_dir, "install-example-7da81d2c7bb97f904637f97e7f8b487fa4bb1ed682edea7087743dec84c254ec.tgz")
172
172
  expect(export_service.archive_file_location).to eq(expected)
173
173
  end
174
174
 
@@ -215,7 +215,7 @@ E
215
215
  expected << Pathname.new("metadata.json")
216
216
  end
217
217
 
218
- let(:cookbook_with_version) { "local-cookbook-fab501cfaf747901bd82c1bc706beae7dc3a350c" }
218
+ let(:cookbook_with_version) { "local-cookbook-1e9dfd1134735385b425c056cb5decef9081b92c" }
219
219
 
220
220
  let(:exported_cookbook_root) { Pathname.new(File.join(export_dir, "cookbook_artifacts", cookbook_with_version)) }
221
221
 
@@ -422,7 +422,7 @@ CONFIG
422
422
  let(:archive) { true }
423
423
 
424
424
  let(:expected_archive_path) do
425
- File.join(export_dir, "install-example-60e5ad638dce219d8f87d589463ec4a9884007ba5e2adbb4c0a7021d67204f1a.tgz")
425
+ File.join(export_dir, "install-example-7da81d2c7bb97f904637f97e7f8b487fa4bb1ed682edea7087743dec84c254ec.tgz")
426
426
  end
427
427
 
428
428
  it "exports the repo as a tgz archive" do
@@ -128,7 +128,7 @@ E
128
128
 
129
129
  it "prints the lockfile's revision id" do
130
130
  install_service.run
131
- expect(ui.output).to include("Policy revision id: 60e5ad638dce219d8f87d589463ec4a9884007ba5e2adbb4c0a7021d67204f1a")
131
+ expect(ui.output).to include("Policy revision id: 7da81d2c7bb97f904637f97e7f8b487fa4bb1ed682edea7087743dec84c254ec")
132
132
  end
133
133
 
134
134
  end
@@ -0,0 +1,143 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2014 Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'spec_helper'
19
+ require "chef-dk/policyfile_services/install"
20
+ require "chef-dk/policyfile/cookbook_sources"
21
+
22
+
23
+ describe ChefDK::PolicyfileServices::Install do
24
+
25
+ include ChefDK::Helpers
26
+
27
+ let(:working_dir) do
28
+ path = File.join(tempdir, "policyfile_services_test_working_dir")
29
+ Dir.mkdir(path)
30
+ path
31
+ end
32
+
33
+ let(:policyfile_rb_explicit_name) { nil }
34
+
35
+ let(:policyfile_rb_name) { policyfile_rb_explicit_name || "Policyfile.rb" }
36
+
37
+ let(:policyfile_rb_path) { File.join(working_dir, policyfile_rb_name) }
38
+
39
+ let(:policyfile_lock_name) { "Policyfile.lock.json" }
40
+
41
+ let(:policyfile_lock_path) { File.join(working_dir, policyfile_lock_name) }
42
+
43
+ let(:ui) { TestHelpers::TestUI.new }
44
+
45
+ let(:install_service) { described_class.new(policyfile: policyfile_rb_name, ui: ui, root_dir: working_dir, overwrite: true) }
46
+
47
+ let(:storage_config) do
48
+ ChefDK::Policyfile::StorageConfig.new( cache_path: nil, relative_paths_root: local_cookbooks_root )
49
+ end
50
+
51
+ let(:policyfile_content) do
52
+ <<-EOH
53
+ default_source :community
54
+ name 'install-example'
55
+
56
+ run_list 'top-level'
57
+
58
+ cookbook 'top-level'
59
+ cookbook 'top-level-bis'
60
+ cookbook 'b', '>= 1.2.3'
61
+ EOH
62
+ end
63
+
64
+ def cookbook_lock(name, version)
65
+ {
66
+ "version" => version,
67
+ "identifier" => Digest::SHA256.new.hexdigest(version),
68
+ "dotted_decimal_identifier" => "55385045718000942.66835911167097593.12604218968062",
69
+ "cache_key" => "#{name}-#{version}-supermarket.chef.io",
70
+ "origin" => "https://supermarket.chef.io:443/api/v1/cookbooks/#{name}/versions/#{version}/download",
71
+ "source_options" => {
72
+ "artifactserver" => "https://supermarket.chef.io:443/api/v1/cookbooks/#{name}/versions/#{version}/download",
73
+ "version" => version
74
+ }
75
+ }
76
+ end
77
+
78
+ let(:policyfile_lock_content) do
79
+ {
80
+ "revision_id" => "b33cb73a52bee7254eb53138ee44",
81
+ "name" => "install-example",
82
+ "run_list" => [ "recipe[top-level::default]" ],
83
+ "cookbook_locks" => {
84
+ "top-level" => cookbook_lock("top-level", "1.2.0"),
85
+ "a" => cookbook_lock("a", "2.1.0"),
86
+ "b" => cookbook_lock("b", "1.2.3"),
87
+ "top-level-bis" => cookbook_lock("top-level-bis", "1.0.0")
88
+ },
89
+ "default_attributes" => {},
90
+ "override_attributes" => {},
91
+ "solution_dependencies" => {
92
+ "Policyfile" => [
93
+ [ "top-level", "= 1.2.0" ],
94
+ [ "a", "= 2.1.0" ],
95
+ [ "b", "= 1.2.3" ],
96
+ [ "top-level-bis", "= 1.0.0" ],
97
+ ],
98
+ "dependencies" => {
99
+ "top-level (1.2.0)" => [ [ "a", "~> 2.1" ], [ "b", "~> 1.0" ] ],
100
+ "a (2.1.0)" => [],
101
+ "b (1.2.3)" => [],
102
+ "top-level-bis (1.0.0)" => []
103
+ }
104
+ }
105
+ }.to_json
106
+ end
107
+
108
+
109
+ context "when given one cookbook to update" do
110
+ before(:each) do
111
+ # stub access to Policyfile.rb and Policyfile.lock.json
112
+ expect(File).to receive(:exist?).at_least(:once).with(policyfile_rb_path).and_return(true)
113
+ expect(File).to receive(:exist?).at_least(:once).with(policyfile_lock_path).and_return(true)
114
+
115
+ expect(IO).to receive(:read).with(policyfile_rb_path).and_return(policyfile_content)
116
+ expect(IO).to receive(:read).with(policyfile_lock_path).and_return(policyfile_lock_content)
117
+
118
+
119
+ # lock generation is a no-op. Its behavior is already tested
120
+ # elsewhere. We only check constraints changes
121
+ expect(install_service).to receive(:generate_lock_and_install)
122
+
123
+ expect { install_service.run(["top-level"]) }.not_to raise_error
124
+ end
125
+ it "allows update on cookbook to update" do
126
+ expect(install_service.policyfile_compiler.dsl.cookbook_location_specs["top-level"].version_constraint.to_s).to eq(">= 0.0.0")
127
+ end
128
+
129
+ it "does not update unrelated cookbooks" do
130
+ expect(install_service.policyfile_compiler.dsl.cookbook_location_specs["top-level-bis"].version_constraint.to_s).to eq("= 1.0.0")
131
+ end
132
+
133
+ it "allows update on dependencies" do
134
+ expect(install_service.policyfile_compiler.dsl.cookbook_location_specs["a"]).to be_nil
135
+ end
136
+
137
+ it "preserves existing constraints from Policyfile" do
138
+ expect(install_service.policyfile_compiler.dsl.cookbook_location_specs["b"].version_constraint.to_s).to eq(">= 1.2.3")
139
+ end
140
+
141
+ end
142
+
143
+ end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright (c) 2016-2017, Chef Software Inc.
2
+ # Copyright:: Copyright (c) 2016 Chef Software Inc.
3
3
  # License:: Apache License, Version 2.0
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,6 +24,7 @@ class ReleaseAnnouncement
24
24
 
25
25
  def initialize(version, date, type)
26
26
  @version = version
27
+ @maj_minor = version.split(".")[0..1].join(".")
27
28
  @date = Date.parse(date) unless date.nil?
28
29
  @release_notes = release_notes_from_file
29
30
  @type = type
@@ -40,7 +41,7 @@ class ReleaseAnnouncement
40
41
  end
41
42
 
42
43
  def release_notes_from_file
43
- File.read("RELEASE_NOTES.md").match(/^# ChefDK #{@version} Release Notes\n\n(.*)/m)[1]
44
+ File.read("RELEASE_NOTES.md").match(/^# ChefDK #{@maj_minor} Release Notes\n\n(.*)/m)[1]
44
45
  end
45
46
  end
46
47
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright (c) 2016 Chef Software Inc.
2
+ # Copyright:: Copyright (c) 2016-2017, Chef Software Inc.
3
3
  # License:: Apache License, Version 2.0
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,151 +15,75 @@
15
15
  # limitations under the License.
16
16
  #
17
17
 
18
- require_relative "bundle_util"
19
- require_relative "bundle"
20
- require_relative "../version_policy"
21
- require_relative "helpers"
22
-
23
18
  desc "Tasks to update and check dependencies"
24
19
  namespace :dependencies do
25
20
 
26
21
  # Running update_ci on your local system wont' work. The best way to update
27
22
  # dependencies locally is by running the dependency update script.
28
- desc "Update all dependencies."
23
+ desc "Update all dependencies. dependencies:update to update as little as possible."
29
24
  task :update do |t, rake_args|
25
+ # FIXME: probably broken, and needs less indirection
30
26
  system("#{File.join(Dir.pwd, "ci", "dependency_update.sh")}")
31
27
  end
32
28
 
33
29
  desc "Force update (when adding new gems to Gemfiles)"
34
30
  task :force_update do |t, rake_args|
31
+ # FIXME: probably broken, and needs less indirection
35
32
  FileUtils.rm_f(File.join(Dir.pwd, ".bundle", "config"))
36
33
  system("#{File.join(Dir.pwd, "ci", "dependency_update.sh")}")
37
34
  end
38
35
 
39
36
  # Update all dependencies to the latest constraint-matching version
40
- desc "Update all dependencies. (CI Only)"
37
+ desc "Update all dependencies. dependencies:update to update as little as possible (CI-only)."
41
38
  task :update_ci => %w{
42
- dependencies:update_stable_channel_gems
43
39
  dependencies:update_gemfile_lock
44
- dependencies:update_omnibus_overrides
45
40
  dependencies:update_omnibus_gemfile_lock
46
41
  dependencies:update_acceptance_gemfile_lock
47
42
  }
48
43
 
49
- desc "Update Gemfile.lock and all Gemfile.<platform>.locks."
50
- task :update_gemfile_lock do |t, rake_args|
51
- Rake::Task["bundle:update"].invoke
52
- end
53
-
54
- def gemfile_lock_task(task_name, dirs: [], other_platforms: true, leave_frozen: true)
55
- dirs.each do |dir|
56
- desc "Update #{dir}/Gemfile.lock."
57
- task task_name do |t, rake_args|
58
- extend BundleUtil
59
- puts ""
60
- puts "-------------------------------------------------------------------"
61
- puts "Updating #{dir}/Gemfile.lock ..."
62
- puts "-------------------------------------------------------------------"
63
- with_bundle_unfrozen(cwd: dir, leave_frozen: leave_frozen) do
64
- bundle "install", cwd: dir, delete_gemfile_lock: true
65
- if other_platforms
66
- # Include all other supported platforms into the lockfile as well
67
- platforms.each do |platform|
68
- bundle "lock", cwd: dir, platform: platform
69
- end
70
- end
44
+ def bundle_update_locked_multiplatform_task(task_name, dir)
45
+ desc "Update #{dir}/Gemfile.lock."
46
+ task task_name do
47
+ Dir.chdir(dir) do
48
+ Bundler.with_clean_env do
49
+ rm_f "#{dir}/Gemfile.lock"
50
+ sh "bundle lock --update --add-platform ruby"
51
+ sh "bundle lock --update --add-platform x64-mingw32"
52
+ sh "bundle lock --update --add-platform x86-mingw32"
71
53
  end
72
54
  end
73
55
  end
74
56
  end
75
57
 
76
- def berksfile_lock_task(task_name, dirs: [])
77
- dirs.each do |dir|
78
- desc "Update #{dir}/Berksfile.lock."
79
- task task_name do |t, rake_args|
80
- extend BundleUtil
81
- puts ""
82
- puts "-------------------------------------------------------------------"
83
- puts "Updating #{dir}/Berksfile.lock ..."
84
- puts "-------------------------------------------------------------------"
85
- if File.exist?("#{project_root}/#{dir}/Berksfile.lock")
86
- File.delete("#{project_root}/#{dir}/Berksfile.lock")
87
- end
88
- Dir.chdir("#{project_root}/#{dir}") do
89
- Bundler.with_clean_env do
90
- sh "bundle exec berks install"
91
- end
58
+ def bundle_update_task(task_name, dir)
59
+ desc "Update #{dir}/Gemfile.lock."
60
+ task task_name do
61
+ Dir.chdir(dir) do
62
+ Bundler.with_clean_env do
63
+ sh "bundle update"
92
64
  end
93
65
  end
94
66
  end
95
67
  end
96
68
 
97
- include RakeDependenciesTaskHelpers
98
-
99
- gemfile_lock_task :update_omnibus_gemfile_lock, dirs: %w{omnibus}
100
- gemfile_lock_task :update_acceptance_gemfile_lock, dirs: %w{acceptance},
101
- other_platforms: false, leave_frozen: false
102
-
103
- desc "Update gems to the versions specified by the stable channel."
104
- task :update_stable_channel_gems do |t, rake_args|
105
- extend BundleUtil
106
- puts ""
107
- puts "-------------------------------------------------------------------"
108
- puts "Updating Gemfile ..."
109
- puts "-------------------------------------------------------------------"
110
-
111
- # Modify the gemfile to pin to stable chef
112
- gemfile_path = File.join(project_root, "Gemfile")
113
- gemfile = IO.read(gemfile_path)
114
- update_gemfile_from_stable(gemfile, "chef", "chef", "v")
115
- update_gemfile_from_stable(gemfile, "push-jobs-client", "opscode-pushy-client")
116
-
117
- if gemfile != IO.read(gemfile_path)
118
- puts "Writing modified #{gemfile_path} ..."
119
- IO.write(gemfile_path, gemfile)
120
- end
121
- end
122
-
123
- desc "Update omnibus overrides, including versions in version_policy.rb and latest version of gems: #{OMNIBUS_RUBYGEMS_AT_LATEST_VERSION.keys}."
124
- task :update_omnibus_overrides do |t, rake_args|
125
- puts ""
126
- puts "-------------------------------------------------------------------"
127
- puts "Updating omnibus_overrides.rb ..."
128
- puts "-------------------------------------------------------------------"
129
-
130
- # Generate the new overrides file
131
- overrides = "# DO NOT EDIT. Generated by \"rake dependencies\". Edit version_policy.rb instead.\n"
132
-
133
- # Replace the bundler and rubygems versions
134
- OMNIBUS_RUBYGEMS_AT_LATEST_VERSION.each do |override_name, gem_name|
135
- # Get the latest bundler version
136
- puts "Running gem list -r #{gem_name} ..."
137
- gem_list = `gem list -r #{gem_name}`
138
- unless gem_list =~ /^#{gem_name}\s*\(([^)]*)\)$/
139
- raise "gem list -r #{gem_name} failed with output:\n#{gem_list}"
69
+ def berks_update_task(task_name, dir)
70
+ desc "Update #{dir}/Berksfile.lock."
71
+ task task_name do
72
+ FileUtils.rm_f("#{dir}/Berksfile.lock")
73
+ Dir.chdir(dir) do
74
+ Bundler.with_clean_env do
75
+ sh "bundle exec berks install"
76
+ end
140
77
  end
141
-
142
- # Emit it
143
- puts "Latest version of #{gem_name} is #{$1}"
144
- overrides << "override #{override_name.inspect}, version: #{$1.inspect}\n"
145
- end
146
-
147
- # Add explicit overrides
148
- OMNIBUS_OVERRIDES.each do |override_name, version|
149
- overrides << "override #{override_name.inspect}, version: #{version.inspect}\n"
150
- end
151
-
152
- # Write the file out (if changed)
153
- overrides_path = File.expand_path("../../omnibus_overrides.rb", __FILE__)
154
- if overrides != IO.read(overrides_path)
155
- puts "Overrides changed!"
156
- puts `git diff #{overrides_path}`
157
- puts "Writing modified #{overrides_path} ..."
158
- IO.write(overrides_path, overrides)
159
78
  end
160
79
  end
80
+
81
+ bundle_update_locked_multiplatform_task :update_gemfile_lock, "."
82
+ bundle_update_locked_multiplatform_task :update_omnibus_gemfile_lock, "omnibus"
83
+ bundle_update_task :update_acceptance_gemfile_lock, "acceptance"
161
84
  end
85
+
162
86
  desc "Update all dependencies and check for outdated gems."
163
- task :dependencies_ci => [ "dependencies:update_ci", "bundle:outdated" ]
87
+ task :dependencies_ci => [ "dependencies:update_ci" ]
164
88
  task :dependencies => [ "dependencies:update" ]
165
- task :update => [ "dependencies:update", "bundle:outdated" ]
89
+ task :update => [ "dependencies:update" ]