diff --git a/Rakefile b/Rakefile index 6720f2ed6..c81b8003d 100644 --- a/Rakefile +++ b/Rakefile @@ -20,3 +20,4 @@ require_relative "tasks/version" require_relative "tasks/bundle" require_relative "tasks/dependencies" require_relative "tasks/github_changelog_generator" +require_relative "tasks/announce" diff --git a/tasks/announce.rb b/tasks/announce.rb new file mode 100644 index 000000000..99b9045c4 --- /dev/null +++ b/tasks/announce.rb @@ -0,0 +1,58 @@ +# +# Copyright:: Copyright (c) 2016 Chef Software Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require "date" +require "erb" + +class ReleaseAnnouncement + include ERB::Util + attr_accessor :type, :version, :maj_minor, :date, :release_notes + + def initialize(version, date, type) + @version = version + @maj_minor = version.split(".")[0..1].join(".") + @date = Date.parse(date) unless date.nil? + @release_notes = release_notes_from_file + @type = type + end + + def render + puts "-" * 30 + puts ERB.new(template_for(@type)).result(binding) + puts "-" * 30 + end + + def template_for(type) + File.read("tasks/templates/#{type}.md.erb") + end + + def release_notes_from_file + File.read("RELEASE_NOTES.md").match(/^# ChefDK #{@maj_minor} Release notes\n\n(.*)/m)[1] + end +end + +namespace :announce do + desc "Generate the Prerelease Announcement (version: X.Y.Z, release_date: YYYY-MM-DD)" + task :prerelease, :version, :release_date do |t, args| + ReleaseAnnouncement.new(args[:version], args[:release_date], "prerelease").render + end + + desc "Generate the Release Announcement (version: X.Y.Z)" + task :release, :version do |t, args| + ReleaseAnnouncement.new(args[:version], nil, "release").render + end +end diff --git a/tasks/templates/prerelease.md.erb b/tasks/templates/prerelease.md.erb new file mode 100644 index 000000000..f6e277f4d --- /dev/null +++ b/tasks/templates/prerelease.md.erb @@ -0,0 +1,35 @@ +Ohai Chefs! + +We have selected <%= @version %> as our ChefDK v<%= @maj_minor %> release candidate which is scheduled for release on <%= @date.strftime('%A %B %-d, %Y') %>. + +# Release Highlights + +<%= @release_notes %> + +Please see the [CHANGELOG](https://github.com/chef/chef-dk/blob/master/CHANGELOG.md) for the complete list of changes. + +# Get the Build +As always, you can download binaries directly from [downloads.chef.io](https://downloads.chef.io/chef-dk) or by using the new `milib-install` command line utility available in ChefDK 0.19.6 or greater. + +```shell +$ mixlib-install download chefdk -v <%= @version %> -c current +``` + +Alternatively, you can install ChefDK using one of the following command options: + +```shell +# In Shell +$ curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P chefdk -v <%= @version %> -c current + +# In Windows Powershell +. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -project chefdk -version <%= @version %> -channel current +``` + +If you want to give this version a spin in Test Kitchen, create or add the following to a `.kitchen.local.yml` file: + +```yaml +provisioner: + product_name: chefdk + channel: current + product_version: <%= @version %> +``` diff --git a/tasks/templates/release.md.erb b/tasks/templates/release.md.erb new file mode 100644 index 000000000..3dd96b28c --- /dev/null +++ b/tasks/templates/release.md.erb @@ -0,0 +1,34 @@ +Ohai Chefs! + +We're happy to announce the release of ChefDK v<%= @maj_minor %>! + +# Release Highlights + +<%= @release_notes %> + +Please see the [CHANGELOG](https://github.com/chef/chef-dk/blob/master/CHANGELOG.md) for the complete list of changes. + +# Get the Build +As always, you can download binaries directly from [downloads.chef.io](https://downloads.chef.io/chef-dk) or by using the new `milib-install` command line utility available in ChefDK 0.19.6 or greater. + +```shell +$ mixlib-install download chefdk -v <%= @version %> +``` + +Alternatively, you can install ChefDK using one of the following command options: + +```shell +# In Shell +$ curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P chefdk -v <%= @version %> + +# In Windows Powershell +. { iwr -useb https://omnitruck.chef.io/install.ps1 } | iex; install -project chefdk -version <%= @version %> +``` + +If you want to give this version a spin in Test Kitchen, create or add the following to a `.kitchen.local.yml` file: + +```yaml +provisioner: + product_name: chefdk + product_version: <%= @version %> +```