wooga_wooget 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.travis.yml +20 -0
  4. data/Gemfile +3 -0
  5. data/Licence.md +21 -0
  6. data/README.md +48 -0
  7. data/Rakefile +80 -0
  8. data/bin/wooget +5 -0
  9. data/lib/wooget.rb +57 -0
  10. data/lib/wooget/build/build_info.rb +64 -0
  11. data/lib/wooget/build/builder.rb +285 -0
  12. data/lib/wooget/cli.rb +293 -0
  13. data/lib/wooget/nuget.rb +96 -0
  14. data/lib/wooget/paket.rb +81 -0
  15. data/lib/wooget/project.rb +42 -0
  16. data/lib/wooget/releasing.rb +112 -0
  17. data/lib/wooget/template/files/README.md.erb +20 -0
  18. data/lib/wooget/template/files/RELEASE_NOTES.md.erb +2 -0
  19. data/lib/wooget/template/files/assemblyinfo.erb +36 -0
  20. data/lib/wooget/template/files/class.erb +15 -0
  21. data/lib/wooget/template/files/csproj.erb +56 -0
  22. data/lib/wooget/template/files/gitignore.erb +13 -0
  23. data/lib/wooget/template/files/metafile.cs.erb +11 -0
  24. data/lib/wooget/template/files/paket.binary.template.erb +17 -0
  25. data/lib/wooget/template/files/paket.dependencies.erb +13 -0
  26. data/lib/wooget/template/files/paket.references.erb +2 -0
  27. data/lib/wooget/template/files/paket.template.erb +22 -0
  28. data/lib/wooget/template/files/sln.erb +32 -0
  29. data/lib/wooget/template/files/test_file.erb +19 -0
  30. data/lib/wooget/template/files/tests_assemblyinfo.erb +36 -0
  31. data/lib/wooget/template/files/tests_csproj.erb +67 -0
  32. data/lib/wooget/template/files/unity_paket.dependencies.erb +12 -0
  33. data/lib/wooget/template/unity.rb +73 -0
  34. data/lib/wooget/template/visual_studio.rb +56 -0
  35. data/lib/wooget/template/wooget_conf.json +13 -0
  36. data/lib/wooget/third_party/paket.bootstrapper.exe +0 -0
  37. data/lib/wooget/third_party/paket.exe +0 -0
  38. data/lib/wooget/third_party/paket.targets +36 -0
  39. data/lib/wooget/third_party/paket.unity3d.bootstrapper.exe +0 -0
  40. data/lib/wooget/third_party/paket.unity3d.exe +0 -0
  41. data/lib/wooget/util/build_error.rb +8 -0
  42. data/lib/wooget/util/misc.rb +91 -0
  43. data/lib/wooget/util/package_list_formatter.rb +59 -0
  44. data/lib/wooget/version.rb +22 -0
  45. data/tests/nuget_feed.xml +3439 -0
  46. data/tests/nuget_package.xml +49 -0
  47. data/tests/nuget_test.rb +27 -0
  48. data/tests/package_test.rb +72 -0
  49. data/tests/unity_test.rb +12 -0
  50. data/wiki/bootstrap.png +0 -0
  51. data/wiki/compiling.png +0 -0
  52. data/wiki/create.png +0 -0
  53. data/wiki/install.png +0 -0
  54. data/wiki/list.png +0 -0
  55. data/wiki/monodevelop.png +0 -0
  56. data/wiki/release.png +0 -0
  57. data/wiki/stupidmenu.png +0 -0
  58. data/wooget.gemspec +33 -0
  59. metadata +244 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 450aa53eefa1765b437a8b823aa27835643009bf
4
+ data.tar.gz: 335ec5c8076deb9f1341acd7bad251cbc28d7014
5
+ SHA512:
6
+ metadata.gz: bfc196dd5fda2c08b5fa808c51184efda609addb607d6b08b84434c02e779177485427f98ee28b55399a710873ea24f0c802d780d4560fbcb4462a2b3542879b
7
+ data.tar.gz: 2e72bbf5999f23f711478fbf741ef85fde6a5cf2045483a3f2a5e0fdf13ccb9c4788068e1076db67a7c35e139e8580caee95f0c579fffc4b856bfc72f1c7cc04
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ Gemfile.lock
2
+ /pkg
3
+ .idea
4
+ scrap/
5
+ .DS_Store
data/.travis.yml ADDED
@@ -0,0 +1,20 @@
1
+ sudo: false
2
+ language: ruby
3
+
4
+ script: bundle exec ruby tests/package_test.rb
5
+
6
+ rvm:
7
+ - 2.3.0
8
+ - 2.2
9
+ - 2.1
10
+ - 2.0
11
+ - ruby-head
12
+ - rbx-2
13
+ - jruby-head
14
+ - jruby-9000
15
+
16
+ cache:
17
+ - bundler
18
+
19
+ # matrix:
20
+ # fast_finish: true
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Licence.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2016 Wooga
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # wooget
2
+
3
+ A cli which allows [Unity3d](http://www.unity3d.com) projects to work with NuGet packages.
4
+
5
+ ## Features
6
+
7
+ * Configures Unity3d to work with NuGet
8
+ * Install and update packages
9
+ * List and search available packages
10
+ * Create, Build, Test and Release new NuGet packages
11
+
12
+ > Checkout [the wiki](https://github.com/wooga/wooget/wiki/) for more information
13
+
14
+ ## Install
15
+
16
+ ```ruby
17
+ gem sources -a http://gem.sdk.wooga.com/
18
+ gem install wooga_wooget
19
+ ```
20
+
21
+ > If you are working at wooga, you will need to copy the internal repo configuration from https://github.com/wooga/wdk-docs/wiki to ~/.wooget
22
+
23
+ ## Usage
24
+
25
+ ```
26
+ Commands:
27
+ wooget bootstrap # setup environment / project for wooget usage
28
+ wooget build --version=VERSION # build the packages in the current dir
29
+ wooget create PACKAGE_NAME # create a new package
30
+ wooget help [COMMAND] # Describe available commands or one specific command
31
+ wooget install # install packages into this unity project
32
+ wooget list # list available packages + version
33
+ wooget paket ARGS # call bundled version of paket and pass args
34
+ wooget paket_unity3d ARGS # call bundled version of paket.unity3d and pass args
35
+ wooget prerelease # prerelease package in current dir
36
+ wooget release # release package in current dir
37
+ wooget search # search packages by a regex
38
+ wooget test # run package tests in mono
39
+ wooget update # update packages into this unity project
40
+
41
+ Options:
42
+ -v, [--verbose], [--no-verbose] # Spit out tons of logging info
43
+ -q, [--quiet], [--no-quiet] # Suppress stdout
44
+ [--path=PATH] # Path to the project you want to install things into
45
+ # Default: /Users/donaldhutchison/workspace/wooget
46
+
47
+ ```
48
+
data/Rakefile ADDED
@@ -0,0 +1,80 @@
1
+ # # #
2
+ # Get gemspec info
3
+ require 'octokit'
4
+ require 'json'
5
+ require 'httpclient'
6
+
7
+ gemspec_file = Dir['*.gemspec'].first
8
+ gemspec = eval File.read(gemspec_file), binding, gemspec_file
9
+ info = "#{gemspec.name} | #{gemspec.version} | " \
10
+ "#{gemspec.runtime_dependencies.size} dependencies | " \
11
+ "#{gemspec.files.size} files"
12
+
13
+
14
+ # # #
15
+ # Gem build and install task
16
+
17
+ desc info
18
+ task :gem do
19
+ %w(pry-byebug binding.pry).each do |dbg|
20
+ files = `ack -ir #{dbg} lib`
21
+ abort "debuggin statements left in! - #{files}" if $?.exitstatus == 0
22
+ end
23
+
24
+ puts info + "\n\n"
25
+ print " "; sh "gem build #{gemspec_file}"
26
+ FileUtils.mkdir_p 'pkg'
27
+ FileUtils.mv "#{gemspec.name}-#{gemspec.version}.gem", 'pkg'
28
+ end
29
+
30
+ desc "create github release"
31
+ task :github_release => :gem do
32
+ name = "#{gemspec.name}-#{gemspec.version}"
33
+ access_token = JSON.parse(File.open(File.expand_path("~/.wooget")).read)["credentials"]["github_token"]
34
+
35
+ #create github release
36
+ puts "Preparing github release #{name}"
37
+ git_url = `git remote get-url origin`.chomp.chomp ".git"
38
+ url = git_url.split(":").last
39
+ repo_name = url.split('/').last(2).join("/")
40
+
41
+ client = Octokit::Client.new access_token: access_token
42
+
43
+ release_options = {
44
+ draft: true,
45
+ name: gemspec.version,
46
+ body: "Release #{gemspec.version}"
47
+ }
48
+
49
+ release = client.create_release repo_name, name, release_options
50
+ #puts "uploading assets"
51
+ #client.upload_asset release.url, "pkg/#{name}", {content_type: "application/x-gzip" }
52
+ puts "publishing.."
53
+ client.update_release release.url, {draft: false}
54
+ puts "done"
55
+ end
56
+
57
+ task :install => :gem do
58
+ puts
59
+ sh %{gem install --no-document pkg/#{gemspec.name}-#{gemspec.version}.gem}
60
+ end
61
+
62
+ #internal only
63
+ desc "push to gem.sdk.wooga.com"
64
+ task :inabox => :gem do
65
+ client = HTTPClient.new ""
66
+ name = "#{gemspec.name}-#{gemspec.version}.gem"
67
+ resp = client.post "http://gem.sdk.wooga.com/upload", {'file'=> File.open(File.join("pkg",name))}
68
+ puts "response from gem.sdk.wooga.com #{resp.body}"
69
+ end
70
+
71
+ desc "build, push to gem server and create github release"
72
+ task :release =>[:gem, :inabox, :github_release]
73
+
74
+ # # #
75
+ # Start an IRB session with the gem loaded
76
+
77
+ desc "#{gemspec.name} | IRB"
78
+ task :irb do
79
+ sh "irb -I ./lib -r #{gemspec.name.gsub '-','/'}"
80
+ end
data/bin/wooget ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'wooget'
4
+
5
+ Wooget::CLI.start ARGV
data/lib/wooget.rb ADDED
@@ -0,0 +1,57 @@
1
+ require_relative "wooget/version"
2
+ require_relative "wooget/cli"
3
+ require_relative "wooget/releasing"
4
+ require_relative "wooget/build/build_info"
5
+ require_relative "wooget/build/builder"
6
+ require_relative "wooget/project"
7
+ require_relative "wooget/paket"
8
+ require_relative "wooget/nuget"
9
+ require_relative "wooget/util/misc"
10
+ require_relative "wooget/util/package_list_formatter"
11
+ require_relative "wooget/template/visual_studio"
12
+ require_relative "wooget/template/unity"
13
+ require_relative "wooget/util/build_error"
14
+
15
+
16
+
17
+ # Gem.find_files("wooget/**/*.rb").each { |path| require path }
18
+
19
+ require 'logger'
20
+
21
+ module Wooget
22
+ @@log = Logger.new(STDOUT)
23
+ @@log.level = Logger::Severity::ERROR
24
+ @@log.formatter = proc do |severity, datetime, progname, msg|
25
+ msg = msg + "\n" unless msg.end_with? "\n"
26
+ msg.start_with?("[quiet]") ? "#{msg.sub("[quiet]","")}" : "[#{severity} #{datetime}] : #{msg}"
27
+ end
28
+
29
+ @@credentials = {username: "", password: "", github_token: ""}
30
+ @@repos = {:default => "legacy"}
31
+
32
+ def self.log
33
+ @@log
34
+ end
35
+
36
+ def self.log= log
37
+ @@log = log
38
+ end
39
+
40
+ def self.credentials
41
+ @@credentials
42
+ end
43
+
44
+ def self.no_status_log msg
45
+ @@log.debug "[quiet]"+msg.uncolorize
46
+ end
47
+
48
+ def self.repos
49
+ @@repos
50
+ end
51
+
52
+ #default repositiory to use
53
+ def self.repo
54
+ @@repos[:default]
55
+ end
56
+ end
57
+
@@ -0,0 +1,64 @@
1
+ require 'shellwords'
2
+
3
+ module Wooget
4
+ module Build
5
+ class BuildInfo
6
+ attr_accessor :template_files, :output_dir, :version, :release_notes, :project_root
7
+ attr_reader :package_ids
8
+
9
+ def initialize template_files=[], output_dir=Dir.pwd, version="919.919.919", release_notes="no notes!", project_root=Dir.pwd
10
+
11
+ @template_files = template_files
12
+ @output_dir = output_dir
13
+ @version = version
14
+ @release_notes = release_notes
15
+
16
+ @invalid_reason = []
17
+ @project_root = project_root
18
+ @package_ids = get_ids
19
+ end
20
+
21
+ def package_names
22
+ @package_ids.map { |id| [id, @version, "nupkg"].join "." }
23
+ end
24
+
25
+ def invalid_reason
26
+ @invalid_reason.join ", "
27
+ end
28
+
29
+ def valid?
30
+ valid = true
31
+
32
+ unless Util.valid_version_string? @version
33
+ @invalid_reason << "Invalid version string #{@version}"
34
+ valid = false
35
+ end
36
+
37
+ unless @template_files.length > 0
38
+ @invalid_reason << "No template files provided"
39
+ valid = false
40
+ end
41
+
42
+ valid
43
+ end
44
+
45
+ def build_name
46
+ "#{File.basename(@project_root).downcase}-#{version}".shellescape
47
+ end
48
+
49
+ def needs_dll_build?
50
+ @template_files.map { |f| Util.file_contains? File.join(project_root, f), "type project" }.any?
51
+ end
52
+
53
+ private
54
+ def get_ids
55
+ @template_files.map do |template|
56
+ package_path = template
57
+ package_path = File.join(project_root, template) unless Pathname(template).absolute?
58
+
59
+ File.read(package_path).scan(/id (.*)/).flatten.first
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,285 @@
1
+ require 'octokit'
2
+ module Wooget
3
+ module Build
4
+ class Builder < Thor
5
+ class_option :git, desc: "Use git functionality", type: :boolean, default: true
6
+ class_option :git_push, desc: "Auto push to git", type: :boolean, default: true
7
+ class_option :git_release, desc: "Create github release", type: :boolean, default: true
8
+ class_option :native, desc: "Invoke native build functionality", type: :boolean, default: true
9
+ no_commands do
10
+ def perform_build build_info
11
+ setup_failure_reason = setup build_info
12
+ return setup_failure_reason unless setup_failure_reason.nil?
13
+
14
+ build_result = create_packages(build_info)
15
+ return if build_result == :fail
16
+
17
+ built_packages = build_info.package_names.map { |p| File.join(options[:output_dir], p) }
18
+
19
+ #dirty hack to prevent unit test versions being pushed
20
+ if build_info.version == "919.919.919"
21
+ Wooget.log.warn "Test packages detected! aborting push"
22
+ return build_info.package_names
23
+ end
24
+
25
+ post_build build_info, built_packages
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ def setup build_info
32
+ build_native_extensions if options[:native]
33
+ end
34
+
35
+ def post_build build_info, built_packages
36
+ push_packages(built_packages)
37
+
38
+ if options[:git]
39
+ _, exit_status = Util.run_cmd "git rev-parse --is-inside-work-tree", options[:path]
40
+ if exit_status == 0
41
+
42
+ commit_and_push build_info if options[:git_push]
43
+ github_release build_info, built_packages if options[:git_release]
44
+
45
+ else
46
+ Wooget.log.warn "Git requested, but #{options[:path]} doesn't appear to be a git repo"
47
+ end
48
+ end
49
+
50
+ build_info.package_names
51
+ end
52
+
53
+ def commit_and_push build_info
54
+ Util.run_cmd "git commit -am '#{build_info.build_name}'"
55
+ Util.run_cmd "git tag '#{build_info.build_name}'"
56
+ Util.run_cmd "git push origin --tags"
57
+ Util.run_cmd "git push origin"
58
+ end
59
+
60
+ def github_release build_info, built_packages
61
+ if Wooget.credentials[:github_token].nil? or Wooget.credentials[:github_token].empty?
62
+ Wooget.log.error "Github Release Error - Couldn't find a value for github_token in the provided config"
63
+ return
64
+ end
65
+
66
+ #getting the github repo name from the url
67
+ #there must be a better way, but who cares
68
+ git_url = `git remote get-url origin`.chomp.chomp ".git"
69
+ url = git_url.split(":").last
70
+ repo_name = url.split('/').last(2).join("/")
71
+
72
+ Wooget.log.info "Connecting to github with access token.."
73
+ client = Octokit::Client.new access_token: Wooget.credentials[:github_token]
74
+
75
+ release_options = {
76
+ draft: true,
77
+ name: build_info.build_name,
78
+ body: build_info.release_notes
79
+ }
80
+
81
+ Wooget.log.info "Creating release '#{release_options[:name]}' on repo #{repo_name}"
82
+ release = client.create_release repo_name, build_info.build_name, release_options
83
+ Wooget.log.info "Uploading assets..."
84
+ built_packages.each { |package| client.upload_asset release.url, package, {content_type: "application/zip" }}
85
+ Wooget.log.info "Publishing release.."
86
+ client.update_release release.url, {draft: false}
87
+ end
88
+
89
+ def build_native_extensions
90
+ build_script_path = File.join(options[:path], "build.sh")
91
+ return unless File.exists? build_script_path
92
+
93
+ Wooget.log.info "External build script found - executing #{build_script_path}..."
94
+ stdout, status = Util.run_cmd("sh #{build_script_path}") { |p| Wooget.no_status_log("build.sh > "+p) }
95
+ raise BuildError "Native Build Error: #{stdout}" unless status == 0
96
+ end
97
+
98
+ def create_packages(build_info)
99
+ dll_build build_info if build_info.needs_dll_build?
100
+
101
+ update_metadata build_info
102
+
103
+ pack_options = {
104
+ output: options[:output_dir],
105
+ version: build_info.version,
106
+ release_notes: build_info.release_notes.shellescape,
107
+ path: build_info.project_root
108
+ }
109
+
110
+ stdout, status = Paket.pack pack_options
111
+ unless status == 0
112
+ Wooget.log.error "Pack error: #{stdout.join}"
113
+ return :fail
114
+ end
115
+
116
+ nil
117
+ end
118
+
119
+ def dll_build build_info
120
+ slns = Dir[File.join(build_info.project_root, "**/*.sln")]
121
+ abort "Can't find sln file for building test artifacts" if slns.empty?
122
+
123
+ slns.each do |sln|
124
+ next if Util.is_a_unity_project_dir(File.dirname(sln)) #don't build unity's sln file
125
+
126
+ build_log, exitstatus = Util.run_cmd("xbuild #{File.expand_path(sln)} /t:Rebuild /p:Configuration=Release") { |log| Wooget.no_status_log log }
127
+
128
+ raise BuildError, build_log.join unless exitstatus == 0
129
+ end
130
+ end
131
+
132
+ def push_packages(built_packages)
133
+ if options[:push]
134
+ built_packages.each do |p|
135
+ if options[:confirm]
136
+ next unless yes?("Release #{p} to #{Wooget.repo}?")
137
+ end
138
+
139
+ auth = ""
140
+ if Wooget.repo == Wooget.repos[:public]
141
+ auth = Wooget.credentials[:nuget]
142
+ else
143
+ auth = "#{Wooget.credentials[:username]}:#{Wooget.credentials[:password]}"
144
+ end
145
+
146
+ Paket.push auth, Wooget.repo, p
147
+ end
148
+ end
149
+ end
150
+
151
+ def update_metadata build_info
152
+
153
+ meta_files = Dir.glob(File.join(options[:path],"src", "**/*_meta.cs"))
154
+
155
+ build_info.package_ids.each do |id|
156
+ meta_files << Dir.glob(File.join(options[:path],"src", "**/*#{id.split(".").join("_")}*"))
157
+ end
158
+
159
+ meta_files.flatten!
160
+ meta_files.uniq!
161
+
162
+ meta_files.each do |file|
163
+ file_contents = File.open(file).each_line.to_a
164
+ file_contents.map! do |line|
165
+ if line =~ /public static readonly string version/
166
+ " public static readonly string version = \"#{build_info.version}\";\n"
167
+ else
168
+ line
169
+ end
170
+ end
171
+ File.open(file, "w") { |f| f << file_contents.join }
172
+ end
173
+ end
174
+ end
175
+
176
+ class PrereleaseBuilder < Builder
177
+ private
178
+ def setup build_info
179
+ self.options = Thor::CoreExt::HashWithIndifferentAccess.new(options)
180
+ options[:stage] = "Prerelease"
181
+
182
+ fail_msg = check_prerelease_preconditions build_info
183
+ abort "Prerelease fail - '#{fail_msg}'" if fail_msg
184
+
185
+ set_prerelease_dependencies build_info
186
+
187
+ super
188
+ end
189
+
190
+ def check_prerelease_preconditions build_info
191
+ return "#{options[:path]} doesn't appear to be a valid package dir" unless Util.is_a_wooget_package_dir options[:path]
192
+ return "Not a prerelease version - \"#{build_info.version}\" found in RELEASE_NOTES.md" unless build_info.version =~ /prerelease/
193
+ end
194
+
195
+ def set_prerelease_dependencies build_info
196
+ paket_dependencies = []
197
+ File.open(File.join(options[:path], "paket.dependencies")).each do |line|
198
+ if line.match(/^\s*nuget\s+([\w\.]+)\s*$/)
199
+ paket_dependencies << line.chomp + " prerelease\n"
200
+ else
201
+ paket_dependencies << line
202
+ end
203
+ end
204
+
205
+ Wooget.log.debug "Writing out #{paket_dependencies.join} to paket.dependencies"
206
+
207
+ File.open(File.join(options[:path], "paket.dependencies"), "w") { |f| f << paket_dependencies.join }
208
+
209
+ #add prerelease to the dependencies section of paket.template files
210
+ build_info.template_files.each do |template|
211
+ paket_template = []
212
+ dependencies_section = false
213
+
214
+ File.open(File.join(options[:path], template)).each do |line|
215
+
216
+ if dependencies_section
217
+ #if this line is not indented we have left the dependencies section
218
+ unless line.match /^\s+/
219
+ dependencies_section = false
220
+ paket_template << line
221
+ next
222
+ end
223
+
224
+ #otherwise we append prerelease version tests (unless it's there already)
225
+ unless line.match />= 0.0.0-prerelease/
226
+ paket_template << "#{line.chomp} >= 0.0.0-prerelease\n"
227
+ next
228
+ end
229
+ end
230
+
231
+ if !dependencies_section and line.match /^dependencies/
232
+ dependencies_section = true
233
+ end
234
+
235
+ paket_template << line
236
+ end
237
+
238
+ Wooget.log.debug "Writing out #{paket_template.join} to #{template}"
239
+
240
+ File.open(File.join(options[:path], template), "w") { |f| f << paket_template.join }
241
+ end
242
+ end
243
+ end
244
+
245
+ class ReleaseBuilder < Builder
246
+ private
247
+ def setup build_info
248
+ self.options = Thor::CoreExt::HashWithIndifferentAccess.new(options)
249
+ options[:stage] = "Release"
250
+
251
+ fail_msg = check_release_preconditions build_info
252
+ abort "Prerelease fail - '#{fail_msg}'" if fail_msg
253
+
254
+ set_release_dependencies build_info
255
+
256
+ super
257
+ end
258
+
259
+ def set_release_dependencies build_info
260
+ #remove prerelease references from dependencies and template
261
+ files = build_info.template_files + %w(paket.dependencies)
262
+ files.map! { |f| f.start_with?("/") ? f : File.join(options[:path], f) }
263
+
264
+ files.each do |file|
265
+ release_dependencies = []
266
+ File.open(file).each do |line|
267
+ release_dependencies << line.sub(/\s*[>=]{1}\s*.*(prerelease)|prerelease/, "")
268
+ end
269
+
270
+ Wooget.log.debug "Writing out #{release_dependencies.join} to #{file}"
271
+
272
+ File.open(file, "w") { |f| f << release_dependencies.join }
273
+ end
274
+ end
275
+
276
+ #
277
+ # sets prerelease dependencies on paket files and creates prerelease template
278
+
279
+ def check_release_preconditions build_info
280
+ return "#{options[:path]} doesn't appear to be a valid package dir" unless Util.is_a_wooget_package_dir options[:path]
281
+ return "Not a full release - #{build_info.version}" if build_info.version =~ /prerelease/
282
+ end
283
+ end
284
+ end
285
+ end