pennyworth-tool 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18cdb5dccb2f673a4029dc4f45e3b049f96a0130
4
- data.tar.gz: f952088833be3609eed50a02ca5fd6d8da82da86
3
+ metadata.gz: a540a31b068d26b1deebf691d65d60f94dcc343a
4
+ data.tar.gz: da36dd75b9c759acec70e477bafce396ebe5982a
5
5
  SHA512:
6
- metadata.gz: a83b696bb62a459c2f09a6e64f9a1a330555a7b2ceb5b7d9f57b31de83d458c2f78e51f50030ccb1ef83fb9a0212dcbb794e402868024b34f0693064c533ffc3
7
- data.tar.gz: 00e4ae58c2b9e4ec3ac12c4cbd16b3ff7d4b1e7318f72c7ca7c5cc8e00ae3ca33cb96a5dded7ab30c556701ec318e5e27cc3fe708d9c1f1f9a06e242fd1341d2
6
+ metadata.gz: 44914ae8d8bc9d39451349fa82df0f59e64bc59bef3ad3a3ff384707423362ff5923fdaed46c8720d25abd45baa33cce5396b2c7ab72794528a1cc81906b85c2
7
+ data.tar.gz: 95a678007e0dd64a1957faeb4a62aea969569ed31810255ae6d3120101d376007d02f0912b70476767b550db0663c9a44c8a88c6f515e1cce419621fa057d754
data/NEWS ADDED
@@ -0,0 +1,6 @@
1
+ # Pennyworth Release Notes
2
+
3
+
4
+ ## Version 0.1.0 - Thu May 28 10:27:38 CEST 2015 - mamorales@suse.de
5
+
6
+ * Add release script
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Pennyworth
2
2
 
3
3
  [![Code Climate](https://codeclimate.com/github/SUSE/pennyworth/badges/gpa.svg)](https://codeclimate.com/github/SUSE/pennyworth)
4
+ [![Gem Version](https://badge.fury.io/rb/pennyworth-tool.svg)](http://badge.fury.io/rb/pennyworth-tool)
4
5
 
5
6
  Pennyworth is a tool for running integration tests inside a network of virtual
6
7
  machines. It allows the user to define virtual machines, build them as Vagrant
@@ -27,7 +28,7 @@ the environment of the integration tests.
27
28
 
28
29
  ## Installation
29
30
 
30
- Pennyworth is tested on [openSUSE 13.2](https://en.opensuse.org/Portal:13.2)
31
+ Pennyworth is tested on [openSUSE 13.2](https://en.opensuse.org/Portal:13.2)
31
32
  and [SUSE Linux Enterprise Server 12](https://www.suse.com/products/server/).
32
33
  It may not work with other openSUSE versions, Linux distributions, or
33
34
  operating systems.
data/Rakefile CHANGED
@@ -15,7 +15,12 @@
15
15
  # To contact SUSE about this file by physical or electronic mail,
16
16
  # you may find current contact information at www.suse.com
17
17
 
18
+ require_relative "lib/pennyworth/constants"
19
+ require_relative "lib/pennyworth/version"
20
+ require_relative "tools/release"
18
21
  require "rspec/core/rake_task"
22
+ require "cheetah"
23
+ require "packaging"
19
24
 
20
25
  RSpec::Core::RakeTask.new
21
26
 
@@ -31,3 +36,21 @@ namespace :gem do
31
36
  system "gem build pennyworth.gemspec"
32
37
  end
33
38
  end
39
+
40
+ desc "Release a new version ('type' is either 'major', 'minor 'or 'patch')"
41
+ task :release, [:type] do |task, args|
42
+ unless ["major", "minor", "patch"].include?(args[:type])
43
+ puts "Please specify a valid release type (major, minor or patch)."
44
+ exit 1
45
+ end
46
+
47
+ new_version = Release.generate_release_version(args[:type])
48
+ release = Release.new(version: new_version)
49
+
50
+ # Check syntax, git and CI state
51
+ Rake::Task['check:committed'].invoke
52
+ Rake::Task['check:syntax'].invoke
53
+ release.check
54
+
55
+ release.publish
56
+ end
@@ -0,0 +1,19 @@
1
+ # Copyright (c) 2013-2015 SUSE LLC
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of version 3 of the GNU General Public License as
5
+ # published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ # GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License
13
+ # along with this program; if not, contact SUSE LLC.
14
+ #
15
+ # To contact SUSE about this file by physical or electronic mail,
16
+ # you may find current contact information at www.suse.com
17
+ module Pennyworth
18
+ ROOT = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."))
19
+ end
@@ -17,6 +17,6 @@
17
17
 
18
18
  module Pennyworth
19
19
 
20
- VERSION = "0.0.1"
20
+ VERSION = "0.1.0"
21
21
 
22
22
  end
data/pennyworth.gemspec CHANGED
@@ -37,14 +37,15 @@ Gem::Specification.new do |s|
37
37
  helpers are provided.
38
38
  EOT
39
39
 
40
+ s.required_ruby_version = ">= 2.0.0"
40
41
  s.required_rubygems_version = ">= 1.3.6"
41
42
  s.rubyforge_project = "pennyworth"
42
43
 
43
- s.add_dependency "gli", "~> 2.11.0"
44
- s.add_dependency "cheetah"
45
- s.add_dependency "colorize"
46
- s.add_dependency "nokogiri"
47
- s.add_dependency "ruby-libvirt", "~> 0.4.0"
44
+ s.add_dependency "gli", "~> 2.11"
45
+ s.add_dependency "cheetah", "~> 0.4"
46
+ s.add_dependency "colorize", "~> 0.7"
47
+ s.add_dependency "nokogiri", "~> 1.6"
48
+ s.add_dependency "ruby-libvirt", "~> 0.4"
48
49
 
49
50
  s.files = `git ls-files`.split("\n")
50
51
  s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
data/tools/release.rb ADDED
@@ -0,0 +1,107 @@
1
+ # encoding:utf-8
2
+
3
+ # Copyright (c) 2013-2015 SUSE LLC
4
+ #
5
+ # This program is free software; you can redistribute it and/or
6
+ # modify it under the terms of version 3 of the GNU General Public License as
7
+ # published by the Free Software Foundation.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, contact SUSE LLC.
16
+ #
17
+ # To contact SUSE about this file by physical or electronic mail,
18
+ # you may find current contact information at www.suse.com
19
+ require_relative "release_checks"
20
+ class Release
21
+ include ReleaseChecks
22
+
23
+ def initialize(opts = {})
24
+ @options = {
25
+ version: generate_development_version
26
+ }.merge(opts)
27
+ @release_version = @options[:version]
28
+ @tag = "v#{@release_version}"
29
+ @release_time = Time.now.strftime("%a %b %d %H:%M:%S %Z %Y")
30
+ @mail = Cheetah.run(["git", "config", "user.email"], stdout: :capture).chomp
31
+ @gemspec = Gem::Specification.load("pennyworth.gemspec")
32
+ end
33
+
34
+ # Commit version changes, tag release and push changes upstream.
35
+ def publish
36
+ set_version
37
+ finalize_news_file
38
+
39
+ commit
40
+ end
41
+
42
+ # Calculates the next version number according to the release type (:major, :minor or :patch)
43
+ def self.generate_release_version(release_type)
44
+ current_version = Pennyworth::VERSION
45
+ major, minor, patch = current_version.scan(/(\d+)\.(\d+)\.(\d+)/).first.map(&:to_i)
46
+
47
+ case release_type
48
+ when "patch"
49
+ patch += 1
50
+ when "minor"
51
+ patch = 0
52
+ minor += 1
53
+ when "major"
54
+ patch = 0
55
+ minor = 0
56
+ major += 1
57
+ end
58
+
59
+ "#{major}.#{minor}.#{patch}"
60
+ end
61
+
62
+ private
63
+
64
+ def set_version
65
+ Dir.chdir(Pennyworth::ROOT) do
66
+ command = [
67
+ "sed",
68
+ "-i",
69
+ "s/VERSION.*=.*/VERSION = \"#{@release_version}\"/",
70
+ "lib/pennyworth/version.rb"
71
+ ]
72
+ Cheetah.run command
73
+ end
74
+ end
75
+
76
+ def finalize_news_file
77
+ file = File.join(Pennyworth::ROOT, "NEWS")
78
+ content = File.read(file)
79
+ # All changes for the next release are directly added below the headline
80
+ # by the developers without adding a version line.
81
+ # Since the version line is automatically added during release by this
82
+ # method we can check for new bullet points since the last release.
83
+ if content.scan(/# Pennyworth .*$\n+## Version /).empty?
84
+ header = "\n\n\n## Version #{@release_version} - #{@release_time} - #{@mail}\n\n"
85
+ content = content.sub(/\n+/, header)
86
+ File.write(file, content)
87
+ else
88
+ fail("No new changelog items for this version")
89
+ end
90
+ end
91
+
92
+ def commit
93
+ Cheetah.run "git", "commit", "-a", "-m", "package #{@release_version}"
94
+ Cheetah.run "git", "tag", "-a", @tag, "-m", "Tag version #{@release_version}"
95
+ Cheetah.run "git", "push"
96
+ Cheetah.run "git", "push", "--tags"
97
+ end
98
+
99
+ def generate_development_version
100
+ # The development version RPMs have the following version number scheme:
101
+ # <base version>.<timestamp><os>git<short git hash>
102
+ timestamp = Time.now.strftime("%Y%m%dT%H%M%SZ")
103
+ commit_id = Cheetah.run("git", "rev-parse", "--short", "HEAD", stdout: :capture).chomp
104
+
105
+ "#{Pennyworth::VERSION}.#{timestamp}git#{commit_id}"
106
+ end
107
+ end
@@ -0,0 +1,35 @@
1
+ # Copyright (c) 2013-2015 SUSE LLC
2
+ #
3
+ # This program is free software; you can redistribute it and/or
4
+ # modify it under the terms of version 3 of the GNU General Public License as
5
+ # published by the Free Software Foundation.
6
+ #
7
+ # This program is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
+ # GNU General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU General Public License
13
+ # along with this program; if not, contact SUSE LLC.
14
+ #
15
+ # To contact SUSE about this file by physical or electronic mail,
16
+ # you may find current contact information at www.suse.com
17
+ module ReleaseChecks
18
+ def check
19
+ check_tag
20
+ end
21
+
22
+ private
23
+
24
+ def fail(msg)
25
+ puts msg
26
+ exit 1
27
+ end
28
+
29
+ def check_tag
30
+ Cheetah.run("git", "fetch", "--tags")
31
+ existing_tag = Cheetah.run("git", "tag", "-l", @tag, stdout: :capture)
32
+
33
+ fail "Tag #{@tag} already exists. Abort." unless existing_tag.empty?
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pennyworth-tool
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - SUSE
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-27 00:00:00.000000000 Z
11
+ date: 2015-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -16,70 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.11.0
19
+ version: '2.11'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.11.0
26
+ version: '2.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: cheetah
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '0.4'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '0.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: colorize
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '0.7'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '0.7'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: nokogiri
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.6'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1.6'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: ruby-libvirt
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.4.0
75
+ version: '0.4'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.4.0
82
+ version: '0.4'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: ronn
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -127,6 +127,7 @@ files:
127
127
  - CONTRIBUTING.md
128
128
  - COPYING
129
129
  - Gemfile
130
+ - NEWS
130
131
  - README.md
131
132
  - Rakefile
132
133
  - bin/pennyworth
@@ -156,6 +157,7 @@ files:
156
157
  - lib/pennyworth/commands/shutdown_command.rb
157
158
  - lib/pennyworth/commands/status_command.rb
158
159
  - lib/pennyworth/commands/up_command.rb
160
+ - lib/pennyworth/constants.rb
159
161
  - lib/pennyworth/exceptions.rb
160
162
  - lib/pennyworth/helper.rb
161
163
  - lib/pennyworth/host_config.rb
@@ -230,6 +232,8 @@ files:
230
232
  - spec/vagrant_runner_spec.rb
231
233
  - spec/vagrant_spec.rb
232
234
  - spec/vm_spec.rb
235
+ - tools/release.rb
236
+ - tools/release_checks.rb
233
237
  homepage: https://github.com/SUSE/pennyworth
234
238
  licenses:
235
239
  - GPL-3.0
@@ -242,7 +246,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
242
246
  requirements:
243
247
  - - ">="
244
248
  - !ruby/object:Gem::Version
245
- version: '0'
249
+ version: 2.0.0
246
250
  required_rubygems_version: !ruby/object:Gem::Requirement
247
251
  requirements:
248
252
  - - ">="