-require 'rake'
-require 'rspec/core/rake_task'
-require 'yaml'
+# frozen_string_literal: true
-task :default => [:spec]
+require 'puppet_litmus/rake_tasks' if Bundler.rubygems.find_name('puppet_litmus').any?
+require 'puppetlabs_spec_helper/rake_tasks'
+require 'puppet-syntax/tasks/puppet-syntax'
+require 'puppet_blacksmith/rake_tasks' if Bundler.rubygems.find_name('puppet-blacksmith').any?
+require 'github_changelog_generator/task' if Bundler.rubygems.find_name('github_changelog_generator').any?
+require 'puppet-strings/tasks' if Bundler.rubygems.find_name('puppet-strings').any?
+require 'puppet_pot_generator/rake_tasks'
-desc "Run all module spec tests (Requires rspec-puppet gem)"
-RSpec::Core::RakeTask.new(:spec) do |t|
- t.rspec_opts = ['--color']
- t.pattern = 'spec/{classes,defines,unit}/**/*_spec.rb'
+def changelog_user
+ return unless Rake.application.top_level_tasks.include? "changelog"
+ returnVal = nil || JSON.load(File.read('metadata.json'))['author']
+ raise "unable to find the changelog_user in .sync.yml, or the author in metadata.json" if returnVal.nil?
+ puts "GitHubChangelogGenerator user:#{returnVal}"
+ returnVal
end
-# This is a helper for the self-symlink entry of fixtures.yml
-def source_dir
- File.dirname(__FILE__)
-end
+def changelog_project
+ return unless Rake.application.top_level_tasks.include? "changelog"
-def fixtures(category)
- begin
- fixtures = YAML.load_file(".fixtures.yml")["fixtures"]
- rescue Errno::ENOENT
- return {}
- end
+ returnVal = nil
+ returnVal ||= begin
+ metadata_source = JSON.load(File.read('metadata.json'))['source']
+ metadata_source_match = metadata_source && metadata_source.match(%r{.*\/([^\/]*?)(?:\.git)?\Z})
- if not fixtures
- abort("malformed fixtures.yml")
+ metadata_source_match && metadata_source_match[1]
end
- result = {}
- if fixtures.include? category
- fixtures[category].each do |fixture, source|
- target = "spec/fixtures/modules/#{fixture}"
- real_source = eval('"'+source+'"')
- result[real_source] = target
- end
- end
- return result
-end
+ raise "unable to find the changelog_project in .sync.yml or calculate it from the source in metadata.json" if returnVal.nil?
-desc "Create the fixtures directory"
-task :spec_prep do
- fixtures("repositories").each do |repo, target|
- File::exists?(target) || system("git clone #{repo} #{target}")
- end
-
- fixtures("symlinks").each do |source, target|
- File::exists?(target) || FileUtils::ln_s(source, target)
- end
+ puts "GitHubChangelogGenerator project:#{returnVal}"
+ returnVal
end
-desc "Clean up the fixtures directory"
-task :spec_clean do
- fixtures("repositories").each do |repo, target|
- FileUtils::rm_rf(target)
- end
-
- fixtures("symlinks").each do |source, target|
- FileUtils::rm(target)
- end
+def changelog_future_release
+ return unless Rake.application.top_level_tasks.include? "changelog"
+ returnVal = "v%s" % JSON.load(File.read('metadata.json'))['version']
+ raise "unable to find the future_release (version) in metadata.json" if returnVal.nil?
+ puts "GitHubChangelogGenerator future_release:#{returnVal}"
+ returnVal
end
-task :spec_full do
- Rake::Task[:spec_prep].invoke
- Rake::Task[:spec].invoke
- Rake::Task[:spec_clean].invoke
-end
+PuppetLint.configuration.send('disable_relative')
-desc "Build puppet module package"
-task :build do
- # This will be deprecated once puppet-module is a face.
- begin
- Gem::Specification.find_by_name('puppet-module')
- rescue Gem::LoadError, NoMethodError
- require 'puppet/face'
- pmod = Puppet::Face['module', :current]
- pmod.build('./')
+if Bundler.rubygems.find_name('github_changelog_generator').any?
+ GitHubChangelogGenerator::RakeTask.new :changelog do |config|
+ raise "Set CHANGELOG_GITHUB_TOKEN environment variable eg 'export CHANGELOG_GITHUB_TOKEN=valid_token_here'" if Rake.application.top_level_tasks.include? "changelog" and ENV['CHANGELOG_GITHUB_TOKEN'].nil?
+ config.user = "#{changelog_user}"
+ config.project = "#{changelog_project}"
+ config.future_release = "#{changelog_future_release}"
+ config.exclude_labels = ['maintenance']
+ config.header = "# Change log\n\nAll notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org)."
+ config.add_pr_wo_labels = true
+ config.issues = false
+ config.merge_prefix = "### UNCATEGORIZED PRS; LABEL THEM ON GITHUB"
+ config.configure_sections = {
+ "Changed" => {
+ "prefix" => "### Changed",
+ "labels" => ["backwards-incompatible"],
+ },
+ "Added" => {
+ "prefix" => "### Added",
+ "labels" => ["enhancement", "feature"],
+ },
+ "Fixed" => {
+ "prefix" => "### Fixed",
+ "labels" => ["bug", "documentation", "bugfix"],
+ },
+ }
+ end
+else
+ desc 'Generate a Changelog from GitHub'
+ task :changelog do
+ raise <<EOM
+The changelog tasks depends on recent features of the github_changelog_generator gem.
+Please manually add it to your .sync.yml for now, and run `pdk update`:
+---
+Gemfile:
+ optional:
+ ':development':
+ - gem: 'github_changelog_generator'
+ version: '~> 1.15'
+ condition: "Gem::Version.new(RUBY_VERSION.dup) >= Gem::Version.new('2.3.0')"
+EOM
end
end
-desc "Check puppet manifests with puppet-lint"
-task :lint do
- # This requires pull request: https://github.com/rodjek/puppet-lint/pull/81
- system("puppet-lint manifests")
- system("puppet-lint tests")
-end