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
@@ -0,0 +1,67 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
+ <PropertyGroup>
5
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7
+ <ProjectGuid>{<%= options[:tests][:guid] %>}</ProjectGuid>
8
+ <OutputType>Library</OutputType>
9
+ <AppDesignerFolder>Properties</AppDesignerFolder>
10
+ <RootNamespace><%= options[:name].split(".").first %></RootNamespace>
11
+ <AssemblyName><%= options[:name] %>.Tests</AssemblyName>
12
+ <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
13
+ <FileAlignment>512</FileAlignment>
14
+ </PropertyGroup>
15
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
16
+ <DebugSymbols>true</DebugSymbols>
17
+ <DebugType>full</DebugType>
18
+ <Optimize>false</Optimize>
19
+ <OutputPath>bin\Debug\</OutputPath>
20
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
21
+ <ErrorReport>prompt</ErrorReport>
22
+ <WarningLevel>4</WarningLevel>
23
+ </PropertyGroup>
24
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
25
+ <DebugType>pdbonly</DebugType>
26
+ <Optimize>true</Optimize>
27
+ <OutputPath>bin\Release\</OutputPath>
28
+ <DefineConstants>TRACE</DefineConstants>
29
+ <ErrorReport>prompt</ErrorReport>
30
+ <WarningLevel>4</WarningLevel>
31
+ </PropertyGroup>
32
+ <ItemGroup>
33
+ <Reference Include="System" />
34
+ <Reference Include="System.Core" />
35
+ <Reference Include="System.Xml.Linq" />
36
+ <Reference Include="System.Data.DataSetExtensions" />
37
+ <Reference Include="System.Data" />
38
+ <Reference Include="System.Xml" />
39
+ </ItemGroup>
40
+ <ItemGroup>
41
+ <Compile Include="Properties\AssemblyInfo.cs" />
42
+ <% if options[:tests][:files] %>
43
+ <% options[:tests][:files].each do |file|%>
44
+ <%= %(<Compile Include="#{file}"/>) %>
45
+ <% end %>
46
+ <% end -%>
47
+ </ItemGroup>
48
+ <% if options[:tests][:projects] %>
49
+ <% options[:tests][:projects].each do |project| %>
50
+ <ItemGroup>
51
+ <ProjectReference Include="<%= project[:relative_location] %>">
52
+ <Project>{<%= project[:guid] %>}</Project>
53
+ <Name><%= project[:name] %></Name>
54
+ </ProjectReference>
55
+ </ItemGroup>
56
+ <% end %>
57
+ <% end %>
58
+
59
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
60
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
61
+ Other similar extension points exist, see Microsoft.Common.targets.
62
+ <Target Name="BeforeBuild">
63
+ </Target>
64
+ <Target Name="AfterBuild">
65
+ </Target>
66
+ -->
67
+ </Project>
@@ -0,0 +1,12 @@
1
+ //remove the below line if you want to manually manage your paket.unity3d.references file
2
+ //[!automanage!]
3
+
4
+ //legacy wooga repo
5
+ source https://wooga.artifactoryonline.com/wooga/api/nuget/nuget-private username: "%USERNAME%" password: "%PASSWORD%"
6
+
7
+ //private wooga repos
8
+ source https://wooga.artifactoryonline.com/wooga/api/nuget/sdk-main username: "%USERNAME%" password: "%PASSWORD%"
9
+ source https://wooga.artifactoryonline.com/wooga/api/nuget/sdk-universe username: "%USERNAME%" password: "%PASSWORD%"
10
+
11
+ //public nuget repo
12
+ source https://nuget.org/api/v2
@@ -0,0 +1,73 @@
1
+ module Wooget
2
+ class Unity < Thor
3
+ attr_accessor :options
4
+ include Thor::Actions
5
+
6
+ class_option :path, desc: "Path to unity project root", default: Dir.pwd
7
+
8
+ def self.source_root
9
+ File.join(File.dirname(__FILE__), "files")
10
+ end
11
+
12
+ desc "bootstrap", "Add required files to unity project for wooget usage"
13
+
14
+ def bootstrap
15
+
16
+ dependencies_path = File.join(options[:path], "paket.dependencies")
17
+ if File.exists?(dependencies_path)
18
+ set_wooga_sources dependencies_path
19
+ else
20
+ template("unity_paket.dependencies.erb", File.join(options[:path], "paket.dependencies"))
21
+ end
22
+
23
+ required_files = %w(paket.lock paket.unity3d.references).select { |f| not File.exists?(File.join(options[:path], f)) }
24
+ required_files.each { |f| create_file File.join(options[:path], f) }
25
+ end
26
+
27
+
28
+ #todo: move things below into paket.rb and convert paket.rb to be thor task
29
+
30
+ desc "install PACKAGE_ID", "Install specific package into unity project"
31
+
32
+ def install package
33
+ unless Util.file_contains? File.join(options[:path], "paket.dependencies"), "nuget #{package}"
34
+
35
+ package.split(",").each do |pkg|
36
+ append_to_file File.join(options[:path], "paket.dependencies"), "\nnuget #{pkg}"
37
+ end
38
+ end
39
+
40
+ generate_references
41
+ end
42
+
43
+ desc "generate_references", "Generate the paket.unity3d.references file from paket.dependency contents"
44
+
45
+ def generate_references
46
+ unless Paket.should_generate_unity3d_references? options[:path]
47
+ Wooget.log.debug "automanage tag not found - skipping `paket.unity3d.references` generation"
48
+ return
49
+ end
50
+
51
+ to_install = File.open(File.join(options[:path], "paket.dependencies")).readlines.select { |l| l =~ /^\s*nuget \w+/ }
52
+ to_install.map! { |d| d.match(/nuget (\S+)/)[1] }
53
+
54
+ File.open(File.join(options[:path], "paket.unity3d.references"), "w") do |f|
55
+ to_install.each { |dep| f.puts(dep) }
56
+ end
57
+ end
58
+
59
+ no_commands do
60
+ def set_wooga_sources dependencies_path
61
+ lines = File.open(dependencies_path).readlines
62
+ lines.delete_if {|line| line =~ /wooga\.artifactoryonline\.com\/wooga/}
63
+
64
+ wooga_sources = ['source https://wooga.artifactoryonline.com/wooga/api/nuget/nuget-private username: "%USERNAME%" password: "%PASSWORD%"',
65
+ 'source https://wooga.artifactoryonline.com/wooga/api/nuget/sdk-main username: "%USERNAME%" password: "%PASSWORD%"',
66
+ 'source https://wooga.artifactoryonline.com/wooga/api/nuget/sdk-universe username: "%USERNAME%" password: "%PASSWORD%"'].map {|l| l + "\n"}
67
+
68
+ lines.insert(1, wooga_sources)
69
+ File.open(dependencies_path,"w") {|f| f << lines.join}
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,56 @@
1
+ module Wooget
2
+ module Templates
3
+ class VisualStudio < Thor
4
+ attr_accessor :options
5
+ include Thor::Actions
6
+ add_runtime_options!
7
+
8
+ def self.source_root
9
+ File.join(File.dirname(__FILE__), "files")
10
+ end
11
+
12
+ desc "create_project options", "create a wooget package tree"
13
+
14
+ def create_project options={}
15
+ raise "name not provided" unless options[:name]
16
+
17
+ @options = options #needed for erb binding
18
+ @options[:guid] ||= `uuidgen`.chomp
19
+
20
+ #src project defaults
21
+ if @options[:src]
22
+ @options[:src][:guid] ||= `uuidgen`.chomp
23
+ @options[:src][:name] ||= options[:name]
24
+ @options[:src][:files]||= []
25
+ @options[:src][:files] << "DummyClass.cs"
26
+ end
27
+
28
+ template("assemblyinfo.erb", "#{options[:name]}/src/#{options[:name]}/Properties/AssemblyInfo.cs")
29
+ template("class.erb", "#{options[:name]}/src/#{options[:name]}/DummyClass.cs")
30
+ template("csproj.erb", "#{options[:name]}/src/#{options[:name]}/#{options[:name]}.csproj")
31
+ create_file("#{options[:name]}/src/#{options[:name]}/#{options[:name]}.csproj.paket.references", "Wooga.Unity.DLLs")
32
+ template("paket.binary.template.erb", "#{options[:name]}/src/#{options[:name]}/#{options[:name]}.csproj.paket.template")
33
+
34
+ if @options[:tests]
35
+ @options[:tests][:guid] ||= `uuidgen`.chomp
36
+ @options[:tests][:files]||= []
37
+ @options[:tests][:name] ||= options[:name]
38
+ @options[:tests][:files] << "DummyTest.cs"
39
+
40
+ #referencing src project from test project
41
+ @options[:tests][:projects]||= []
42
+ src_project = {:guid => @options[:src][:guid], :name => @options[:src][:name], :relative_location => "../src/#{options[:name]}/#{options[:name]}.csproj"}
43
+ @options[:tests][:projects] << src_project
44
+
45
+ template("test_file.erb", "#{options[:name]}/tests/DummyTest.cs")
46
+ template("tests_csproj.erb", "#{options[:name]}/tests/#{options[:name]}.Tests.csproj")
47
+ template("tests_assemblyinfo.erb", "#{options[:name]}/tests/Properties/AssemblyInfo.cs")
48
+ template("paket.references.erb", "#{options[:name]}/tests/paket.references")
49
+ end
50
+
51
+ template("sln.erb", "#{options[:name]}/src/#{options[:name]}.sln")
52
+
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,13 @@
1
+ {
2
+ "credentials": {
3
+ "username": "",
4
+ "password": "",
5
+ "github_token":"",
6
+ "nuget":""
7
+ },
8
+ "repos":
9
+ {
10
+ "public":"https://www.nuget.org/api/v2/package",
11
+ "default":"https://www.nuget.org/api/v2/package"
12
+ }
13
+ }
Binary file
@@ -0,0 +1,36 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <PropertyGroup>
4
+ <!-- Enable the restore command to run before builds -->
5
+ <RestorePackages Condition=" '$(RestorePackages)' == '' ">true</RestorePackages>
6
+ <!-- Download Paket.exe if it does not already exist -->
7
+ <DownloadPaket Condition=" '$(DownloadPaket)' == '' ">true</DownloadPaket>
8
+ <PaketToolsPath>$(MSBuildThisFileDirectory)</PaketToolsPath>
9
+ <PaketRootPath>$(MSBuildThisFileDirectory)..\</PaketRootPath>
10
+ </PropertyGroup>
11
+ <PropertyGroup>
12
+ <!-- Paket command -->
13
+ <PaketExePath Condition=" '$(PaketExePath)' == '' ">$(PaketToolsPath)paket.exe</PaketExePath>
14
+ <PaketBootStrapperExePath Condition=" '$(PaketBootStrapperExePath)' == '' ">$(PaketToolsPath)paket.bootstrapper.exe</PaketBootStrapperExePath>
15
+ <PaketCommand Condition=" '$(OS)' == 'Windows_NT'">"$(PaketExePath)"</PaketCommand>
16
+ <PaketCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(PaketExePath)</PaketCommand>
17
+ <PaketBootStrapperCommand Condition=" '$(OS)' == 'Windows_NT'">"$(PaketBootStrapperExePath)"</PaketBootStrapperCommand>
18
+ <PaketBootStrapperCommand Condition=" '$(OS)' != 'Windows_NT' ">mono --runtime=v4.0.30319 $(PaketBootStrapperExePath)</PaketBootStrapperCommand>
19
+ <!-- Commands -->
20
+ <RestoreCommand>$(PaketCommand) restore</RestoreCommand>
21
+ <DownloadPaketCommand>$(PaketBootStrapperCommand)</DownloadPaketCommand>
22
+ <!-- We need to ensure packages are restored prior to assembly resolve -->
23
+ <BuildDependsOn Condition="$(RestorePackages) == 'true'">RestorePackages; $(BuildDependsOn);</BuildDependsOn>
24
+ </PropertyGroup>
25
+ <Target Name="CheckPrerequisites">
26
+ <!-- Raise an error if we're unable to locate paket.exe -->
27
+ <Error Condition="'$(DownloadPaket)' != 'true' AND !Exists('$(PaketExePath)')" Text="Unable to locate '$(PaketExePath)'" />
28
+ <MsBuild Targets="DownloadPaket" Projects="$(MSBuildThisFileFullPath)" Properties="Configuration=NOT_IMPORTANT;DownloadPaket=$(DownloadPaket)" />
29
+ </Target>
30
+ <Target Name="DownloadPaket">
31
+ <Exec Command="$(DownloadPaketCommand)" Condition=" '$(DownloadPaket)' == 'true' AND !Exists('$(PaketExePath)')" />
32
+ </Target>
33
+ <Target Name="RestorePackages" DependsOnTargets="CheckPrerequisites">
34
+ <Exec Command="$(RestoreCommand)" WorkingDirectory="$(PaketRootPath)" />
35
+ </Target>
36
+ </Project>
@@ -0,0 +1,8 @@
1
+ module Wooget
2
+ class BuildError < StandardError
3
+ end
4
+
5
+ class RepoError < StandardError
6
+
7
+ end
8
+ end
@@ -0,0 +1,91 @@
1
+ require 'pty'
2
+
3
+ module Wooget
4
+ module Util
5
+ def self.author
6
+ `git config user.name || getent passwd $(id -un) | cut -d : -f 5 | cut -d , -f 1`.chomp
7
+ end
8
+
9
+ def self.is_a_wooget_package_dir path
10
+ contents = Dir[File.join(path, "*")]
11
+ contents.map! { |c| File.basename(c) }
12
+
13
+ contents.include?("paket.dependencies") and contents.include?("RELEASE_NOTES.md")
14
+ end
15
+
16
+ def self.is_a_unity_project_dir path
17
+ contents = Dir[File.join(path, "*")]
18
+ contents.map! { |c| File.basename(c) }
19
+ contents.include?("Assets") and contents.include?("ProjectSettings")
20
+ end
21
+
22
+ #
23
+ #runs a command in a separate process and working dir, takes a block which is yielded on every line of stdout
24
+ #returns [[stdout], exit_status]
25
+ def self.run_cmd cmd, path=Dir.pwd
26
+ Wooget.log.debug "Running `#{cmd}` in path #{File.expand_path(path)}"
27
+
28
+ cmd_output = []
29
+ shutdown = -> {Wooget.log.error "Trying to shutdown child before pid recieved"}
30
+ begin
31
+ Signal.trap("INT") do
32
+ shutdown.call()
33
+ end
34
+
35
+ PTY.spawn("cd #{path} && #{cmd}") do |stdout, stdin, pid|
36
+ shutdown = -> {Process.kill(9, pid)}
37
+
38
+ begin
39
+ stdout.each do |line|
40
+ cmd_output << line.uncolorize
41
+ yield line if block_given?
42
+ end
43
+ rescue Errno::EIO
44
+ #This means the process has finished giving output
45
+ ensure
46
+ Process.wait(pid)
47
+ end
48
+ end
49
+ rescue PTY::ChildExited => e
50
+ #Child process exited
51
+
52
+ end
53
+
54
+
55
+ exit_status = $?.exitstatus
56
+ [cmd_output, exit_status]
57
+ end
58
+
59
+ def self.file_contains? filename, string
60
+ File.foreach(filename).grep(/#{Regexp.escape(string)}/).any?
61
+ end
62
+
63
+ def self.valid_version_string? version
64
+ !version.match(/(\d+\.\d+\.\d+)-?(\w*)/).nil?
65
+ end
66
+
67
+ end
68
+ end
69
+
70
+ class String
71
+ REGEXP_PATTERN = /\033\[([0-9]+);([0-9]+);([0-9]+)m(.+?)\033\[0m|([^\033]+)/m
72
+
73
+ #get rid of goddamn ansi control codes
74
+ def uncolorize
75
+ result = self.scan(REGEXP_PATTERN).inject("") do |str, match|
76
+ str << (match[3] || match[4])
77
+ end
78
+
79
+ #more ansi control codes that the above doesn't pickup
80
+ result.gsub(/\[(?:[A-Z0-9]{1,2}[nmKM]?)|\[(?:\?.*[=<>])|(?:;\d+[nmKM]?)/, '')
81
+ end
82
+
83
+ #convert to snake case
84
+ def snake_case
85
+ self.gsub(/::/, '/').
86
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
87
+ gsub(/([a-z\d])([A-Z])/, '\1_\2').
88
+ tr("-", "_").
89
+ downcase
90
+ end
91
+ end
@@ -0,0 +1,59 @@
1
+ module Wooget
2
+ class PackageListFormatter
3
+ def self.format_list package_hash, format, show_binary=false
4
+
5
+ package_hash.values.each {|list| Package.process_binary_packages(list)}
6
+
7
+ case format
8
+ when "shell", :shell
9
+ output = ""
10
+ package_hash.each do |repo, packages|
11
+ output << "### #{repo.upcase}\n"
12
+ packages.each do |package|
13
+ next if package.is_binary and not show_binary
14
+
15
+ output << " #{package.package_id} #{"(B)" if package.has_binary and not show_binary} - #{package.version} \n"
16
+ end
17
+ output << "\n"
18
+ end
19
+ output << "- (B) : binary variant available"
20
+ output
21
+ when "json", :json
22
+
23
+ unless show_binary
24
+ package_hash.each do |_,packages|
25
+ packages.delete_if {|p| p.is_binary}
26
+ end
27
+ end
28
+ package_hash.to_json
29
+ end
30
+ end
31
+
32
+ def self.format_package package_hash, format, package_id=false
33
+ package_hash.values.each {|list| Package.process_binary_packages(list)}
34
+
35
+ package = nil
36
+ package_hash.each do |_, packages|
37
+ package = packages.find {|p| p.package_id == package_id}
38
+ break if package
39
+ end
40
+
41
+ return "Package '#{package_id}' not found in repos - #{package_hash.keys.join(",")}" unless package
42
+
43
+ case format
44
+ when "shell", :shell
45
+ output = ""
46
+ output << "### #{package.package_id}\n"
47
+ %i(version authors created last_updated summary description project_url release_notes
48
+ is_latest_version url has_binary dependencies download_count tags).each do |prop|
49
+ output << "## #{prop.capitalize}\n"
50
+ output << " " +package.send(prop).to_s + "\n"
51
+
52
+ end
53
+ output
54
+ when "json", :json
55
+ package.to_json
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,22 @@
1
+
2
+ Encoding.default_external = Encoding::UTF_8
3
+ Encoding.default_internal = Encoding::UTF_8
4
+
5
+ module Wooget
6
+ VERSION = "2.1.1".freeze
7
+
8
+ POST_INSTALL= '
9
+ _ _
10
+ __ _____ ___ __ _ ___| |_| |
11
+ \ \ /\ / / _ \ / _ \ / _` |/ _ \ __| |
12
+ \ V V / (_) | (_) | (_| | __/ |_|_|
13
+ \_/\_/ \___/ \___/ \__, |\___|\__(_)
14
+ |___/
15
+
16
+ ' + "unity package manager cli version #{VERSION}!
17
+
18
+ "
19
+
20
+
21
+ end
22
+