lib/iapi-idlc-sdk-pfm/command/generator_commands/skeletons/code_generator/recipes/build_cookbook.rb
context = ChefDK::Generator.context delivery_project_dir = context.delivery_project_dir pipeline = context.pipeline dot_delivery_dir = File.join(delivery_project_dir, '.delivery') config_json = File.join(dot_delivery_dir, 'config.json') project_toml = File.join(dot_delivery_dir, 'project.toml') generator_desc('Ensuring delivery configuration') directory dot_delivery_dir cookbook_file config_json do source 'delivery-config.json' not_if { File.exist?(config_json) } end # Adding a new prototype file for delivery-cli local commands cookbook_file project_toml do source 'delivery-project.toml' not_if { File.exist?(project_toml) } end generator_desc('Ensuring correct delivery build cookbook content') build_cookbook_dir = File.join(dot_delivery_dir, 'build_cookbook') # cookbook root dir directory build_cookbook_dir # metadata.rb template "#{build_cookbook_dir}/metadata.rb" do source 'build_cookbook/metadata.rb.erb' helpers(ChefDK::Generator::TemplateHelper) action :create_if_missing end # README cookbook_file "#{build_cookbook_dir}/README.md" do source 'build_cookbook/README.md' action :create_if_missing end # LICENSE template "#{build_cookbook_dir}/LICENSE" do source "LICENSE.#{context.license}.erb" helpers(ChefDK::Generator::TemplateHelper) action :create_if_missing end # chefignore cookbook_file "#{build_cookbook_dir}/chefignore" # Berksfile template "#{build_cookbook_dir}/Berksfile" do source 'build_cookbook/Berksfile.erb' helpers(ChefDK::Generator::TemplateHelper) action :create_if_missing end # Recipes directory "#{build_cookbook_dir}/recipes" %w(default deploy functional lint provision publish quality security smoke syntax unit).each do |phase| template "#{build_cookbook_dir}/recipes/#{phase}.rb" do source 'build_cookbook/recipe.rb.erb' helpers(ChefDK::Generator::TemplateHelper) variables phase: phase action :create_if_missing end end # Test Kitchen build node cookbook_file "#{build_cookbook_dir}/.kitchen.yml" do source 'build_cookbook/.kitchen.yml' end directory "#{build_cookbook_dir}/data_bags/keys" do recursive true end file "#{build_cookbook_dir}/data_bags/keys/delivery_builder_keys.json" do content '{"id": "delivery_builder_keys"}' end directory "#{build_cookbook_dir}/secrets" file "#{build_cookbook_dir}/secrets/fakey-mcfakerton" directory "#{build_cookbook_dir}/test/fixtures/cookbooks/test/recipes" do recursive true end file "#{build_cookbook_dir}/test/fixtures/cookbooks/test/metadata.rb" do content %(name 'test' version '0.1.0') end cookbook_file "#{build_cookbook_dir}/test/fixtures/cookbooks/test/recipes/default.rb" do source 'build_cookbook/test-fixture-recipe.rb' end # Construct git history as if we did all the work in a feature branch which we # merged into master at the end, which looks like this: # # ``` # git log --graph --oneline # * 5fec5bd Merge branch 'add-delivery-configuration' # |\ # | * 967bb9f Add generated delivery build cookbook # | * 1558e0a Add generated delivery configuration # |/ # * db22790 Add generated cookbook content # ``` # if context.have_git && context.delivery_project_git_initialized && !context.skip_git_init generator_desc('Adding delivery configuration to feature branch') execute('git-create-feature-branch') do command('git checkout -t -b add-delivery-configuration') cwd delivery_project_dir not_if 'git branch |grep "add-delivery-configuration"' end execute('git-add-delivery-config-json') do command('git add .delivery/config.json') cwd delivery_project_dir only_if 'git status -u --porcelain |grep ".delivery/config.json"' end # Adding the new prototype file to the feature branch # so it gets checked in with the delivery config commit execute('git-add-delivery-project-toml') do command('git add .delivery/project.toml') cwd delivery_project_dir only_if 'git status -u --porcelain |grep ".delivery/project.toml"' end execute('git-commit-delivery-config') do command('git commit -m "Add generated delivery configuration"') cwd delivery_project_dir only_if 'git status -u --porcelain | egrep "config.json|project.toml"' end generator_desc('Adding build cookbook to feature branch') execute('git-add-delivery-build-cookbook-files') do command('git add .delivery') cwd delivery_project_dir only_if 'git status -u --porcelain |grep ".delivery"' end execute('git-commit-delivery-build-cookbook') do command('git commit -m "Add generated delivery build cookbook"') cwd delivery_project_dir only_if 'git status -u --porcelain |grep ".delivery"' end execute("git-return-to-#{pipeline}-branch") do command("git checkout #{pipeline}") cwd delivery_project_dir end generator_desc('Merging delivery content feature branch to master') execute('git-merge-delivery-config-branch') do command('git merge --no-ff add-delivery-configuration') cwd delivery_project_dir end execute('git-remove-delivery-config-branch') do command('git branch -D add-delivery-configuration') cwd delivery_project_dir end end