|
- # encoding: utf-8
- #
- # Copyright:: 2009-2016 Doc Walker
- #
- # 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 'git'
- require 'github_changelog_generator/task'
- require 'rake'
- require 'rubygems'
- require 'rake/version_task' # gem install version
- require 'version'
-
- # requires additional packages on MacOS (including Homebrew):
- # $ /usr/bin/ruby -e "$(curl -fsSL \
- # https://raw.githubusercontent.com/Homebrew/install/master/install)"
- # $ brew install doxygen # generates documentation from source code
- # $ brew cask install mactex # MacTeX
-
- Rake::VersionTask.new do |task|
- # prevent auto-commit on version bump
- task.with_git = false
- end
-
- # adjust as appropriate
- CWD = File.expand_path(File.dirname(__FILE__))
- DOXYFILE = 'Doxyfile'
- GITHUB_USERNAME = '4-20ma'
- GITHUB_REPO = 'ModbusMaster'
- HEADER_FILE = "#{GITHUB_REPO}.h"
- CHANGELOG_FILE = 'CHANGELOG.md'
- PROPERTIES_FILE = 'library.properties'
- VERSION_FILE = Version.version_file('').basename.to_s
-
-
- task :default => :info
-
- desc 'Display instructions for public release'
- task :info do
- puts <<-EOF.gsub(/^\s{2}/, '')
-
- Instructions for public release
-
- - Update version, as appropriate:
-
- $ rake version:bump # or
- $ rake version:bump:minor # or
- $ rake version:bump:major # or
- edit 'VERSION' file directly
-
- - Prepare release date, 'CHANGELOG.md' file, documentation:
-
- $ rake prepare
-
- - Review changes to 'CHANGELOG.md' file
- This file is assembled using git commit messages; review for completeness.
-
- - Review html documentation files
- These files are assembled using source code Doxygen tags; review for
- for completeness.
-
- - Add & commit source files, tag, push to origin/master;
- add & commit documentation files, push to origin/gh-pages:
-
- $ rake release
-
- EOF
- end # task :info
-
-
- desc "Prepare #{CHANGELOG_FILE} for release"
- task :prepare => 'prepare:default'
-
- namespace :prepare do
- task :default => [
- :release_date,
- :library_properties,
- :changelog,
- :documentation
- ]
-
- desc 'Prepare documentation'
- task :documentation do
- version = Version.current.to_s
-
- # update parameters in Doxyfile
- file = File.join(CWD, 'doc', DOXYFILE)
-
- contents = IO.read(file)
- contents.sub!(/(^PROJECT_NUMBER\s*=)(.*)$/) do |match|
- "#{$1} v#{version}"
- end # contents.sub!(...)
- IO.write(file, contents)
-
- # chdir to doc/ and call doxygen to update documentation
- Dir.chdir(to = File.join(CWD, 'doc'))
- system('doxygen', DOXYFILE)
-
- # chdir to doc/latex and call doxygen to update documentation
- Dir.chdir(from = File.join(CWD, 'doc', 'latex'))
- system('make')
-
- # move/rename file to 'extras/GITHUB_REPO reference-x.y.pdf'
- to = File.join(CWD, 'extras')
- FileUtils.mv(File.join(from, 'refman.pdf'),
- File.join(to, "#{GITHUB_REPO} reference-#{version}.pdf"))
- end # task :documentation
-
- desc 'Prepare release history'
- GitHubChangelogGenerator::RakeTask.new(:changelog) do |config|
- config.add_issues_wo_labels = false
- config.add_pr_wo_labels = false
- config.enhancement_labels = [
- 'Type: Enhancement'
- ]
- config.bug_labels = ['Type: Bug']
- config.exclude_labels = ['Type: Question']
- config.header = '# ModbusMaster CHANGELOG'
- config.include_labels = [
- 'Type: Bug',
- 'Type: Enhancement',
- 'Type: Feature Request',
- 'Type: Maintenance'
- ]
- # config.since_tag = '0.1.0'
- config.future_release = "v#{Version.current.to_s}"
- config.user = GITHUB_USERNAME
- config.project = GITHUB_REPO
- end # GitHubChangelogGenerator::RakeTask.new
-
- desc 'Update version in library properties file'
- task :library_properties do
- version = Version.current.to_s
-
- file = File.join(CWD, PROPERTIES_FILE)
-
- contents = IO.read(file)
- contents.sub!(/(version=\s*)(.*)$/) do |match|
- "#{$1}#{version}"
- end # contents.sub!(...)
- IO.write(file, contents)
- end # task :library_properties
-
- desc 'Update release date in header file'
- task :release_date do
- file = File.join(CWD, 'src', HEADER_FILE)
-
- contents = IO.read(file)
- contents.sub!(/(\\date\s*)(.*)$/) do |match|
- "#{$1}#{Time.now.strftime('%-d %b %Y')}"
- end # contents.sub!(...)
- IO.write(file, contents)
- end # task :release_date
-
- end # namespace :prepare
-
-
- desc 'Release source & documentation'
- task :release => 'release:default'
-
- namespace :release do
- task :default => [:source, :documentation]
-
- desc 'Commit documentation changes related to version bump'
- task :documentation do
- version = Version.current.to_s
- cwd = File.expand_path(File.join(File.dirname(__FILE__), 'doc', 'html'))
- g = Git.open(cwd)
-
- # `git add .`
- g.add
-
- # remove each deleted item
- g.status.deleted.each do |item|
- g.remove(item[0])
- end # g.status.deleted.each
-
- # commit changes if items added, changed, or deleted
- if g.status.added.size > 0 || g.status.changed.size > 0 ||
- g.status.deleted.size > 0 then
- message = "Update documentation for v#{version}"
- puts g.commit(message)
- else
- puts "No changes to commit v#{version}"
- end # if g.status.added.size > 0 || g.status.changed.size > 0...
-
- g.push('origin', 'gh-pages')
- end # task :documentation
-
- desc 'Commit source changes related to version bump'
- task :source do
- version = Version.current.to_s
- `git add \
- doc/#{DOXYFILE} \
- "extras/#{GITHUB_REPO} reference-#{version}.pdf" \
- src/#{HEADER_FILE} \
- #{CHANGELOG_FILE} \
- #{PROPERTIES_FILE} \
- #{VERSION_FILE} \
- `
- `git commit -m 'Version bump to v#{version}'`
- `git tag -a -f -m 'Version v#{version}' v#{version}`
- `git push origin master`
- `git push --tags`
- end # task :source
-
- end # namespace :release
|