Files
IoTManager/lib/ModbusMaster/Rakefile
Dmitry Borisenko 3d1f1ec524 modbus support
2020-09-18 02:26:34 +03:00

219 lines
6.2 KiB
Ruby

# 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