wooga_wooget 2.1.2 → 2.4.0

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.
data/.travis.yml CHANGED
@@ -1,20 +1,10 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
 
4
- script: bundle exec ruby tests/package_test.rb
5
-
6
4
  rvm:
7
5
  - 2.3.0
8
6
  - 2.2
9
7
  - 2.1
10
8
  - 2.0
11
- - ruby-head
12
- - rbx-2
13
- - jruby-head
14
- - jruby-9000
15
-
16
- cache:
17
- - bundler
18
9
 
19
- # matrix:
20
- # fast_finish: true
10
+ before_install: gem install bundler -v 1.14.3
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # wooget
2
2
 
3
+ [![Build Status](https://travis-ci.org/wooga/wooget.svg?branch=master)](https://travis-ci.org/wooga/wooget) [![Code Climate](https://lima.codeclimate.com/github/wooga/wooget/badges/gpa.svg)](https://lima.codeclimate.com/github/wooga/wooget) [![Test Coverage](https://lima.codeclimate.com/github/wooga/wooget/badges/coverage.svg)](https://lima.codeclimate.com/github/wooga/wooget/coverage) [![Issue Count](https://lima.codeclimate.com/github/wooga/wooget/badges/issue_count.svg)](https://lima.codeclimate.com/github/wooga/wooget)
4
+
3
5
  A cli which allows [Unity3d](http://www.unity3d.com) projects to work with NuGet packages.
4
6
 
5
7
  ## Features
data/Rakefile CHANGED
@@ -10,6 +10,14 @@ info = "#{gemspec.name} | #{gemspec.version} | " \
10
10
  "#{gemspec.runtime_dependencies.size} dependencies | " \
11
11
  "#{gemspec.files.size} files"
12
12
 
13
+ require "bundler/gem_tasks"
14
+ require "rspec/core/rake_task"
15
+
16
+ RSpec::Core::RakeTask.new(:spec)
17
+ task :default => :spec do
18
+ `bundle exec codeclimate-test-reporter`
19
+ end
20
+
13
21
 
14
22
  # # #
15
23
  # Gem build and install task
data/bin/console ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require_relative "../lib/wooget"
5
+
6
+ require "irb"
7
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bin/wooget CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'wooget'
3
+ require "bundler/setup"
4
+ require_relative '../lib/wooget'
4
5
 
5
6
  begin
6
7
  Wooget::CLI.start ARGV
@@ -8,5 +9,7 @@ rescue Wooget::WoogetError => e
8
9
  $stderr.puts e.message
9
10
  exit e.exit_code
10
11
  rescue => e
11
- abort e.message
12
+ $stderr.puts e.message
13
+ $stderr.puts e.backtrace * "\n"
14
+ exit e.exit_code
12
15
  end
data/exe/wooget ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'wooget'
4
+
5
+ begin
6
+ Wooget::CLI.start ARGV
7
+ rescue Wooget::WoogetError => e
8
+ $stderr.puts e.message
9
+ exit e.exit_code
10
+ rescue => e
11
+ abort e.message
12
+ end
data/lib/wooget.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require_relative "wooget/version"
2
2
  require_relative "wooget/cli"
3
+ require_relative "wooget/github"
3
4
  require_relative "wooget/releasing"
4
5
  require_relative "wooget/build/build_info"
5
6
  require_relative "wooget/build/builder"
@@ -11,7 +12,7 @@ require_relative "wooget/util/package_list_formatter"
11
12
  require_relative "wooget/template/visual_studio"
12
13
  require_relative "wooget/template/unity"
13
14
  require_relative "wooget/util/build_error"
14
-
15
+ require_relative "wooget/default"
15
16
 
16
17
 
17
18
  # Gem.find_files("wooget/**/*.rb").each { |path| require path }
@@ -26,8 +27,8 @@ module Wooget
26
27
  msg.start_with?("[quiet]") ? "#{msg.sub("[quiet]","")}" : "[#{severity} #{datetime}] : #{msg}"
27
28
  end
28
29
 
29
- @@credentials = {username: "", password: "", github_token: ""}
30
- @@repos = {:default => "legacy"}
30
+ @@credentials = Default.credentials
31
+ @@repos = Default.repos
31
32
 
32
33
  def self.log
33
34
  @@log
@@ -26,6 +26,14 @@ module Wooget
26
26
  @invalid_reason.join ", "
27
27
  end
28
28
 
29
+ def version_name
30
+ @version.split("-").first
31
+ end
32
+
33
+ def prerelease?
34
+ !(@version !~ /prerelease/)
35
+ end
36
+
29
37
  def valid?
30
38
  valid = true
31
39
 
@@ -1,4 +1,6 @@
1
1
  require 'octokit'
2
+ require 'time'
3
+
2
4
  module Wooget
3
5
  module Build
4
6
  class Builder < Thor
@@ -52,38 +54,29 @@ module Wooget
52
54
 
53
55
  def commit_and_push build_info
54
56
  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 tag '#{build_info.version}'"
58
+ # Util.run_cmd "git push origin --tags"
57
59
  Util.run_cmd "git push origin"
58
60
  end
59
61
 
60
62
  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
+ if ENV['OCTOKIT_ACCESS_TOKEN'].nil? and (Wooget.credentials[:github_token].nil? or Wooget.credentials[:github_token].empty?)
64
+ Wooget.log.error "Github Release Error - Couldn't find a value for github_token in the provided config or environment"
63
65
  return
64
66
  end
65
67
 
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("/")
68
+ access_token = Wooget.credentials[:github_token]
69
+ if access_token.empty?
70
+ access_token = nil
71
+ end
71
72
 
72
- Wooget.log.info "Connecting to github with access token.."
73
- client = Octokit::Client.new access_token: Wooget.credentials[:github_token]
73
+ github = Wooget::Github.new(options[:path], access_token)
74
74
 
75
- release_options = {
76
- draft: true,
77
- name: build_info.build_name,
78
- body: build_info.release_notes
75
+ github.do_release build_info.version, built_packages, **{
76
+ name: build_info.version_name,
77
+ body: build_info.release_notes,
78
+ prerelease: build_info.prerelease?
79
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
80
  end
88
81
 
89
82
  def build_native_extensions
data/lib/wooget/cli.rb CHANGED
@@ -32,6 +32,9 @@ module Wooget
32
32
  option :version, desc:"Version number to prepend to release notes", type: :string, required: true
33
33
  option :output, desc: "Dir to place built packages", type: :string, default: "bin"
34
34
  option :release_notes, desc: "Release notes to include in the package", type: :string, default: ""
35
+ option :git, desc: "Use git functionality", type: :boolean, default: true
36
+ option :git_push, desc: "Auto push to git", type: :boolean, default: true
37
+ option :git_release, desc: "Create github release", type: :boolean, default: true
35
38
  option :native, desc: "Invoke native build functionality", type: :boolean, default: true
36
39
  def build
37
40
  package_release_checks
@@ -53,7 +56,10 @@ module Wooget
53
56
  release_notes: options[:release_notes],
54
57
  templates: templates,
55
58
  path: options[:path],
56
- native: options[:native]
59
+ native: options[:native],
60
+ git: options[:git],
61
+ git_push: options[:git_push],
62
+ git_release: options[:git_release],
57
63
  }
58
64
 
59
65
  built_packages = invoke "wooget:packager:build", [], build_options
@@ -61,11 +67,32 @@ module Wooget
61
67
  p "#{built_packages.join " & "} built to #{File.expand_path File.join(options[:path],options[:output])}" if built_packages
62
68
  end
63
69
 
70
+ desc "build-name", "Prints the build name for the current dir"
71
+ def build_name
72
+ build_name = invoke "wooget:packager:build_name", [], options
73
+ p build_name
74
+ end
75
+
76
+ desc "version", "Prints the wooget's version information"
77
+ def version
78
+ puts "wooget version #{Wooget::VERSION}"
79
+ end
80
+ map %w(-v --version) => :version
81
+
82
+ option :include_version_identifier, desc: "Return version with version identifier", type: :boolean, default: false
83
+ desc "latest-version", "return latest version of package"
84
+ def latest_version
85
+ version = invoke "wooget:packager:latest_version", [], options
86
+ p version
87
+ end
88
+
64
89
  option :repo, desc: "Which repo to use"
65
90
  option :push, desc: "Should built package be pushed to repo", default: true, type: :boolean
66
91
  option :confirm, desc: "Ask for confirmation before pushing", default: true, type: :boolean
67
92
  option :output, desc: "Dir to place built packages", type: :string, default: "bin"
68
93
  option :git, desc: "Use git functionality", type: :boolean, default: true
94
+ option :git_push, desc: "Auto push to git", type: :boolean, default: true
95
+ option :git_release, desc: "Create github release", type: :boolean, default: true
69
96
  option :native, desc: "Invoke native build functionality", type: :boolean, default: true
70
97
  desc "release", "release package in current dir"
71
98
 
@@ -82,6 +109,8 @@ module Wooget
82
109
  option :confirm, desc: "Ask for confirmation before pushing", default: true, type: :boolean
83
110
  option :output, desc: "Dir to place built packages", type: :string, default: "bin"
84
111
  option :git, desc: "Use git functionality", type: :boolean, default: true
112
+ option :git_push, desc: "Auto push to git", type: :boolean, default: true
113
+ option :git_release, desc: "Create github release", type: :boolean, default: true
85
114
  option :native, desc: "Invoke native build functionality", type: :boolean, default: true
86
115
  desc "prerelease", "prerelease package in current dir"
87
116
 
@@ -257,6 +286,8 @@ module Wooget
257
286
  Wooget.repos[:default] = overridden_repo
258
287
  end
259
288
 
289
+ #override settings with values from environment
290
+
260
291
  Wooget.log.debug "Acting as #{Wooget.credentials[:username]}"
261
292
  Wooget.log.debug "Default repo is #{Wooget.repo}"
262
293
  end
@@ -0,0 +1,36 @@
1
+ module Wooget
2
+ module Default
3
+
4
+ DEFAULT_REPO = "legacy".freeze
5
+
6
+ class << self
7
+ def github_token
8
+ ENV['GITHUB_TOKEN'] || ENV['OCTOKIT_ACCESS_TOKEN']
9
+ end
10
+
11
+ def user_name
12
+ ENV['WOOGET_USERNAME'] || ENV['WOOGET_USR']
13
+ end
14
+
15
+ def user_password
16
+ ENV['WOOGET_PASSWORD'] || ENV['WOOGET_PSW']
17
+ end
18
+
19
+ def default_repo
20
+ ENV['WOOGET_DEFAULT_REPO'] || DEFAULT_REPO
21
+ end
22
+
23
+ def credentials
24
+ {
25
+ "username" => user_name,
26
+ "password" => user_password,
27
+ "github_token" => github_token
28
+ }
29
+ end
30
+
31
+ def repos
32
+ { default: default_repo }
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,109 @@
1
+ require 'octokit'
2
+
3
+ module Wooget
4
+
5
+ class Github
6
+
7
+ attr_reader :working_dir, :git_command
8
+ attr_accessor :access_token, :logger
9
+
10
+ def initialize(working_dir=Dir.pwd, access_token=nil, logger=nil)
11
+ @working_dir = working_dir
12
+ @git_command = "git -C #{working_dir}"
13
+ @github_client = nil
14
+ @access_token = access_token
15
+ @logger = (logger.nil?) ? Wooget.log : logger
16
+ end
17
+
18
+ def github_client
19
+ if @github_client.nil?
20
+ token = @access_token
21
+ if ENV['OCTOKIT_ACCESS_TOKEN'] and token.nil?
22
+ token = ENV['OCTOKIT_ACCESS_TOKEN']
23
+ end
24
+
25
+ unless token.nil?
26
+ @github_client = Octokit::Client.new access_token: token
27
+ end
28
+ end
29
+
30
+ @github_client
31
+ end
32
+
33
+ def repo
34
+ if @repo.nil?
35
+ @repo = Octokit::Repository.new repo_name
36
+ end
37
+ @repo
38
+ end
39
+
40
+ def repo_name
41
+ remote_url = `#{git_command} config --get remote.origin.url`.strip.chomp '.git'
42
+ remote_url.split(':').last.split('/')[-2..-1].join('/')
43
+ end
44
+
45
+ def inside_working_tree?
46
+ inside_working_tree = `#{git_command} rev-parse --is-inside-work-tree`.strip
47
+ inside_working_tree.eql? "true"
48
+ end
49
+
50
+ def current_commit_sha
51
+ `#{git_command} rev-parse --verify HEAD`.strip
52
+ end
53
+
54
+ def do_release release_name, artifacts=nil, **options
55
+ release_status = true
56
+ options = {} if options.nil?
57
+ artifacts = [] if artifacts.nil?
58
+
59
+ default_options = {
60
+ target_commitish: current_commit_sha(),
61
+ name: release_name,
62
+ body: "",
63
+ prerelease: false
64
+ }
65
+
66
+ options = default_options.merge! options
67
+ options[:draft] = true
68
+
69
+ logger.info "Check releases"
70
+ releases = github_client.releases(repo).map {|release| release.name }
71
+ unless releases.include? release_name
72
+ create_release release_name, artifacts, options
73
+ else
74
+ logger.error "Release #{options[:name]} already exist"
75
+ release_status = false
76
+ end
77
+ release_status
78
+ end
79
+
80
+ def create_release tag_name, artifacts=nil, options
81
+ logger.info "Creating release '#{options[:name]}' on repo #{repo_name}"
82
+ release = github_client.create_release repo, tag_name, options
83
+
84
+ logger.info "Uploading assets..." unless artifacts.empty?
85
+ artifacts.each { |artifact|
86
+ logger.info "--> Upload asset: #{artifact}"
87
+ github_client.upload_asset release.url, artifact, {content_type: "application/zip" }
88
+ }
89
+
90
+ logger.info "Publishing release.."
91
+ github_client.update_release release.url, {draft: false}
92
+ end
93
+
94
+ def create_tag tag_name, sha=nil, message=nil
95
+ sha = current_commit_sha if sha.nil?
96
+ message = tag_name if message.nil?
97
+
98
+ commit = github_client.commit(repo, sha).commit
99
+
100
+ #TODO check if sha is upstream available
101
+ user = commit.author.name
102
+ email = commit.author.email
103
+
104
+ logger.info "Create tag #{tag_name} with info from last committer"
105
+ t = github_client.create_tag repo, tag_name, message, sha ,"commit", user, email, Time.now.iso8601
106
+ github_client.create_ref repo, "tags/#{t.tag}", t.sha
107
+ end
108
+ end
109
+ end
@@ -66,6 +66,22 @@ module Wooget
66
66
  builder.perform_build build_info
67
67
  end
68
68
 
69
+ option :include_version_identifier, desc: "Return version with version identifier", type: :boolean, default: false
70
+ desc "latest-version", "return latest version of package"
71
+ def latest_version
72
+ version, version_identifier = get_version_from_release_notes
73
+ if(options[:include_version_identifier])
74
+ version = version + "-" + version_identifier unless version_identifier.empty?
75
+ end
76
+ version
77
+ end
78
+
79
+ desc "build-name", "Prints the build name for the current dir"
80
+ def build_name
81
+ build_info = get_build_info_from_template_files
82
+ build_info.build_name
83
+ end
84
+
69
85
  private
70
86
 
71
87
  def clean
@@ -3,7 +3,7 @@ Encoding.default_external = Encoding::UTF_8
3
3
  Encoding.default_internal = Encoding::UTF_8
4
4
 
5
5
  module Wooget
6
- VERSION = "2.1.2".freeze
6
+ VERSION = "2.4.0".freeze
7
7
 
8
8
  POST_INSTALL= '
9
9
  _ _