homebrew_automation 0.1.5 → 0.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9a3d541470864fdabac7601c9b4bca62c97f3b8a94f1af65d8dd36ab5bdd93d9
4
- data.tar.gz: 23d0c6a2f2e625ace46a36bbdf18b13cd43611e66bf52655ea098208bf5d1dc0
3
+ metadata.gz: 7857fc3a55cf794b0138e422f94c7ca6d259ba9cca51df74c46a07c2986231bb
4
+ data.tar.gz: d2c5d3a431e0983dafbd8d3504bfea58b6e2c4673272260f18a69ffba8fe3d76
5
5
  SHA512:
6
- metadata.gz: 175915af38029378ecdc8b78fd463eb55e14e34d6d18222479f2feca5883c8f6f46341a68bba2ab44125b16121ec38392e0caaae973c45b32e86622dc69dea76
7
- data.tar.gz: 362510628786c45559de477492efb7857ada4b3bd6b6973733c662b5307f0e550a2f515c87f80b2cde57a2cbc65c13fe5dde16a02fdc844c225aabb16aeb0871
6
+ metadata.gz: 8a6ee4421b0b4a460b6cd6fc818b1e72952fdd1e0d17522cb1ec0787d28e66b05dbfae92bd21638c68a7a1a2c305a4fe52c4ff2dec52a0e35883836311879371
7
+ data.tar.gz: e0c4ae780bc69a17951f9d248a0b29e99a03f06f2f2343332f11d5693d343ab182fd18549a3f8cf3dcfc3d99efb2a080efba81fb25ab10e0b0243874ccc3bac3
@@ -11,6 +11,10 @@ module HomebrewAutomation::Bintray
11
11
  # As per Bintray, a +Version+ is part of a +Package+ is part of a +Repository+.
12
12
  class Version
13
13
 
14
+ # The file to upload already exists on Bintray
15
+ class FileAlreadyExists < StandardError
16
+ end
17
+
14
18
  # @param client [Client] Connection to Bintray servers
15
19
  # @param repo_name [String]
16
20
  # @param package_name [String]
@@ -39,12 +43,21 @@ module HomebrewAutomation::Bintray
39
43
  # @param filename [String]
40
44
  # @param content [String] the bytes in the file
41
45
  def upload_file!(filename, content)
42
- @client.upload_file(
43
- @repo_name,
44
- @package_name,
45
- @version_name,
46
- filename,
47
- content)
46
+ begin
47
+ @client.upload_file(
48
+ @repo_name,
49
+ @package_name,
50
+ @version_name,
51
+ filename,
52
+ content)
53
+ rescue RestClient::ExceptionWithResponse => e
54
+ case e.response.code
55
+ when 409
56
+ raise FileAlreadyExists
57
+ else
58
+ raise e
59
+ end
60
+ end
48
61
  end
49
62
 
50
63
  # Download metadata about files that exist on Bintray for this +Version+
@@ -1,103 +1,116 @@
1
1
 
2
2
  require 'json'
3
3
 
4
+ require_relative './brew.rb'
5
+
4
6
  module HomebrewAutomation
5
7
 
6
- # A representation of a binary build of a Homebrew package
8
+ # Metadata for building a Bottle for a Homebrew package
7
9
  class Bottle
8
10
 
11
+ class Error < StandardError
12
+ end
13
+
14
+ # @param tap_name [String] For use with +brew tap+
9
15
  # @param tap_url [String] Something suitable for +git clone+, e.g. +git@github.com:easoncxz/homebrew-tap.git+ or +/some/path/to/my-git-repo+
10
16
  # @param formula_name [String] As known by Homebrew
11
17
  # @param os_name [String] As known by Homebrew, e.g. +el_capitan+
12
- # @param filename [String] ???
13
- # @param content [String] ???
14
18
  # @param keep_tmp [Boolean] pass +--keep-tmp+ to +brew+
19
+ # @param brew [Brew] Homebrew effects
20
+ # @param bottle_finder [Bottle] Bottle-related filesystem effects
15
21
  def initialize(
22
+ tap_name,
16
23
  tap_url,
17
24
  formula_name,
18
25
  os_name,
19
- filename: nil,
20
- content: nil,
21
- keep_tmp: false)
26
+ keep_tmp: false,
27
+ brew: Brew,
28
+ bottle_finder: Bottle)
29
+ @tap_name = tap_name
22
30
  @tap_url = tap_url
23
31
  @formula_name = formula_name
24
32
  @os_name = os_name
25
- @filename = filename
26
- @minus_minus = nil # https://github.com/Homebrew/brew/pull/4612
27
- @content = content
28
33
  @keep_tmp = keep_tmp
34
+ @brew = brew
35
+ @bottle_finder = bottle_finder
29
36
  end
30
37
 
31
- # Takes ages to run, just like if done manually
32
- #
33
- # @raise [StandardError]
34
- # @return [nil]
35
- def build
36
- complain unless system 'brew', 'tap', tmp_tap_name, @tap_url
37
- maybe_keep_tmp = @keep_tmp ? ['--keep-tmp'] : []
38
- install_cmd = ['brew', 'install', '--verbose'] + maybe_keep_tmp + ['--build-bottle', fully_qualified_formula_name]
39
- complain unless system(*install_cmd)
40
- complain unless system 'brew', 'bottle', '--verbose', '--json', '--no-rebuild', fully_qualified_formula_name
41
- end
42
-
43
- # Read and analyse metadata JSON file
44
- # @return [Array<(String, String)>] {#minus_minus} and {#filename}
45
- def locate_tarball
46
- json_filename = Dir['*.bottle.json'].first
47
- unless json_filename
48
- build
49
- return locate_tarball
50
- end
51
- json = JSON.parse(File.read(json_filename))
52
- focus = json || complain
53
- focus = focus[json.keys.first] || complain
54
- focus = focus['bottle'] || complain
55
- focus = focus['tags'] || complain
56
- focus = focus[@os_name] || complain
57
- @minus_minus, @filename = focus['local_filename'], focus['filename']
58
- end
59
-
60
- # The +brew bottle+ original output filename
38
+ # Build the bottle and get a binary tarball suitable for upload to Bintray
61
39
  #
62
- # See https://github.com/Homebrew/brew/pull/4612 for details.
40
+ # Unless you've already run +brew install --build-bottle+ on that Formula
41
+ # on your system before, the returned effect would take ages to run (looking
42
+ # at about 30-60 minutes).
63
43
  #
64
- # @return [String]
65
- def minus_minus
66
- @minus_minus || locate_tarball.first
67
- end
68
-
69
- # Filename of a Bottle tarball suitable for writing into a Formula file
70
- #
71
- # @return [String]
72
- def filename
73
- @filename || locate_tarball.last
44
+ # @yieldparam filename [String] A filename to tell Bintray which Homebrew can
45
+ # recognise
46
+ # @yieldparam contents [String] The data of the binary Bottle tarball, as if
47
+ # read via {File#read}
48
+ # @return [NilClass]
49
+ # @raise [Error]
50
+ def build!(&block)
51
+ raise Error, "Bottle#build! expects a block" unless block
52
+ call_brew! do
53
+ json_str = @bottle_finder.read_json!
54
+ (minus_minus, filename) = parse_for_tarball_path(json_str)
55
+ contents = @bottle_finder.read_tarball! minus_minus
56
+ block.call(filename, contents)
57
+ end
74
58
  end
75
59
 
76
- # @return [String] {#content}
77
- def load_tarball_from_disk
78
- File.rename minus_minus, filename
79
- @content = File.read filename
60
+ def self.read_json!
61
+ json_filename = Dir['*.bottle.json'].first
62
+ File.read(json_filename)
80
63
  end
81
64
 
82
- # @return [String] bytes of the tarball of this Bottle
83
- def content
84
- @content || load_tarball_from_disk
65
+ def self.read_tarball!(minus_minus)
66
+ File.read(minus_minus)
85
67
  end
86
68
 
87
69
  private
88
70
 
89
- # A name for the temporary tap; doesn't really matter what this is.
90
- def tmp_tap_name
91
- 'easoncxz/tmp-tap'
71
+ # tap, install, and bottle
72
+ def call_brew!(&block)
73
+ tapped = false
74
+ begin
75
+ @brew.tap!(@tap_name, @tap_url)
76
+ tapped = true
77
+ @brew.install!(
78
+ %w[--verbose --build-bottle] + if @keep_tmp then %w[--keep-tmp] else [] end,
79
+ fully_qualified_formula_name)
80
+ @brew.bottle!(
81
+ %w[--verbose --json --no-rebuild],
82
+ fully_qualified_formula_name)
83
+ block.call
84
+ ensure
85
+ @brew.untap! @tap_name if tapped
86
+ end
92
87
  end
93
88
 
94
- def fully_qualified_formula_name
95
- tmp_tap_name + '/' + @formula_name
89
+ # pure-ish; raises exception
90
+ #
91
+ # @return [Tuple<String, String>] +[minus_minus, filename]+
92
+ def parse_for_tarball_path(json_str)
93
+ begin
94
+ focus = JSON.parse(json_str)
95
+ [fully_qualified_formula_name, 'bottle', 'tags', @os_name].each do |key|
96
+ focus = focus[key]
97
+ if focus.nil?
98
+ raise BottleError.new "unexpected JSON structure, couldn't find key: #{key}"
99
+ end
100
+ end
101
+ # https://github.com/Homebrew/brew/pull/4612
102
+ minus_minus, filename = focus['local_filename'], focus['filename']
103
+ if minus_minus.nil? || filename.nil?
104
+ raise BottleError.new "unexpected JSON structure, couldn't find both `local_filename` and `filename` keys: #{minus_minus.inspect}, #{filename.inspect}"
105
+ end
106
+ [minus_minus, filename]
107
+ rescue JSON::ParserError => e
108
+ raise BottleError.new "error parsing JSON: #{e}"
109
+ end
96
110
  end
97
111
 
98
- def complain
99
- puts "HEY! Something has gone wrong and I need to complain. Stacktrace follows:"
100
- puts caller
112
+ def fully_qualified_formula_name
113
+ @tap_name + '/' + @formula_name
101
114
  end
102
115
 
103
116
  end
@@ -0,0 +1,50 @@
1
+
2
+ module HomebrewAutomation
3
+
4
+ # Homebrew effects
5
+ class Brew
6
+
7
+ class Error < StandardError
8
+ end
9
+
10
+ # +brew tap "$name" "$url"+
11
+ #
12
+ # @param name [String]
13
+ # @param url [String]
14
+ def self.tap!(name, url)
15
+ checked('brew', 'tap', name, url)
16
+ end
17
+
18
+ # +brew untap "$name"+
19
+ #
20
+ # @param name [String]
21
+ def self.untap!(name)
22
+ checked('brew', 'untap', name)
23
+ end
24
+
25
+ # +brew install [opts] "$fully_qualified_formula_name"+
26
+ #
27
+ # @param opts [Array<String>]
28
+ # @param fully_qualified_formula_name [String]
29
+ def self.install!(opts, fully_qualified_formula_name)
30
+ checked('brew', 'install', *opts, fully_qualified_formula_name)
31
+ end
32
+
33
+ # +brew bottle [opts] "$fully_qualified_formula_name"+
34
+ #
35
+ # @param opts [Array<String>]
36
+ # @param fully_qualified_formula_name [String]
37
+ def self.bottle!(opts, fully_qualified_formula_name)
38
+ checked('brew', 'bottle', *opts, fully_qualified_formula_name)
39
+ end
40
+
41
+ private_class_method def self.checked(*args)
42
+ result = system(*args)
43
+ unless result
44
+ raise BrewError.new("Command failed: #{args}")
45
+ end
46
+ result
47
+ end
48
+
49
+ end
50
+ end
@@ -21,19 +21,21 @@ class HomebrewAutomation::CLI::WorkflowCommands < Thor
21
21
  class_option :bintray_repo
22
22
  class_option :bintray_package
23
23
  class_option :bintray_version
24
- class_option :keep_tap_repo, :type => :boolean
25
24
 
26
25
  desc 'build-and-upload', 'Build binary tarball from source tarball, then upload to Bintray'
27
26
  long_desc <<-HERE_HERE
28
27
  Since we're uploading to Bintray, we need a Bintray API KEY at `bintray_token`.
29
28
  HERE_HERE
29
+ option :keep_tap_repo, :type => :boolean
30
30
  option :keep_brew_tmp, :type => :boolean
31
31
  def build_and_upload
32
- workflow.build_and_upload_bottle(
32
+ workflow.build_and_upload_bottle!(
33
33
  sdist,
34
34
  tap,
35
+ git,
35
36
  formula_name,
36
37
  bintray_version,
38
+ keep_tap_repo: options[:keep_tap_repo],
37
39
  keep_homebrew_tmp: options[:keep_brew_tmp])
38
40
  end
39
41
 
@@ -45,7 +47,11 @@ class HomebrewAutomation::CLI::WorkflowCommands < Thor
45
47
  Tap repo on Github via a Github OAuth token via `tap_token`.
46
48
  HERE_HERE
47
49
  def gather_and_publish
48
- workflow.gather_and_publish_bottles(sdist, tap, formula_name, bintray_version)
50
+ workflow.gather_and_publish_bottles!(
51
+ sdist,
52
+ tap,
53
+ formula_name,
54
+ bintray_version)
49
55
  end
50
56
 
51
57
  private
@@ -57,16 +63,15 @@ class HomebrewAutomation::CLI::WorkflowCommands < Thor
57
63
  options[:source_tag])
58
64
  end
59
65
 
60
- def keep_tap_repo?
61
- options[:keep_tap_repo]
62
- end
63
-
64
66
  def tap
65
67
  HomebrewAutomation::Tap.new(
66
68
  options[:tap_user],
67
69
  options[:tap_repo],
68
- options[:tap_token],
69
- keep_submodule: keep_tap_repo?)
70
+ options[:tap_token])
71
+ end
72
+
73
+ def git
74
+ HomebrewAutomation::Git
70
75
  end
71
76
 
72
77
  # DOC: default values here
@@ -0,0 +1,116 @@
1
+
2
+ require 'fileutils'
3
+
4
+ module HomebrewAutomation
5
+
6
+ # Git effects
7
+ class Git
8
+
9
+ class Error < StandardError
10
+ end
11
+
12
+ class << self
13
+
14
+ # Set Git user's name and email
15
+ #
16
+ # Reads environment variables:
17
+ # - TRAVIS_GIT_USER_NAME
18
+ # - TRAVIS_GIT_USER_EMAIL
19
+ #
20
+ # If either env var is not set, do nothing.
21
+ #
22
+ # @return [NilClass]
23
+ def config!
24
+ name = ENV['TRAVIS_GIT_USER_NAME']
25
+ email = ENV['TRAVIS_GIT_USER_EMAIL']
26
+ if name && email
27
+ raise_unless 'git', 'config', '--global', 'user.name', name
28
+ raise_unless 'git', 'config', '--global', 'user.email', email
29
+ end
30
+ end
31
+
32
+ # Just +git clone+ the given URL
33
+ #
34
+ # @param url [String] git-friendly URL; could be filesystem path
35
+ # @param dir [String] optionally specify target dir name
36
+ # @return [NilClass]
37
+ def clone!(url, dir: nil)
38
+ if dir
39
+ raise_unless 'git', 'clone', url, dir
40
+ else
41
+ raise_unless 'git', 'clone', url
42
+ end
43
+ end
44
+
45
+ # Like {#clone!} , but allows you to do something inside
46
+ # the newly cloned directory, pushd-style.
47
+ #
48
+ # @see clone!
49
+ # @param url [String]
50
+ # @param dir [String]
51
+ # @param keep_dir [Boolean]
52
+ # @yieldparam dir [String] name of freshly cloned dir
53
+ # @yieldreturn [a] anything
54
+ # @return [a]
55
+ def with_clone!(url, dir, keep_dir: false, &block)
56
+ begin
57
+ clone! url, dir: dir
58
+ if block
59
+ Dir.chdir dir do
60
+ block.call(File.realpath '.')
61
+ end
62
+ else
63
+ puts "Strange, you're calling Git#with_clone! without a block."
64
+ end
65
+ nil
66
+ ensure
67
+ FileUtils.remove_dir(dir) unless keep_dir
68
+ end
69
+ end
70
+
71
+ # +git commit --allow-empty -am "$msg"+
72
+ #
73
+ # @param msg [String] Git commit message
74
+ # @return [NilClass]
75
+ def commit_am!(msg)
76
+ raise_unless 'git', 'commit', '--allow-empty', '-am', msg
77
+ end
78
+
79
+ # Just +git push+
80
+ #
81
+ # @return [NilClass]
82
+ def push!
83
+ raise_unless 'git', 'push'
84
+ end
85
+
86
+ private
87
+
88
+ def raise_unless(*args)
89
+ begin
90
+ result = system(*args)
91
+ unless result
92
+ raise Error, "Git command failed: #{args}"
93
+ end
94
+ result
95
+ end
96
+ end
97
+
98
+ # Impure
99
+ def complain_unless(*args)
100
+ result = system(*args)
101
+ unless result
102
+ puts "Git command errored: #{args}"
103
+ puts caller
104
+ end
105
+ result
106
+ end
107
+
108
+ def silently(*args)
109
+ system(*args)
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+
116
+ end
@@ -9,11 +9,11 @@ module HomebrewAutomation
9
9
  # Return a macOS version name in a convention recognised by Homebrew, in
10
10
  # particular by the Formula/Bottle DSL.
11
11
  #
12
- # @return [String]
13
- def self.identify_version
12
+ # @return [String | NilClass]
13
+ def self.identify_version!
14
14
  version =
15
15
  begin
16
- `sw_vers -productVersion`
16
+ `sw_vers -productVersion`.chomp
17
17
  rescue Errno::ENOENT # if we're not on a Mac
18
18
  nil
19
19
  end
@@ -6,27 +6,23 @@ module HomebrewAutomation
6
6
  # A representation of a Github repo that acts as a Homebrew Tap.
7
7
  class Tap
8
8
 
9
- # Assign params to attributes.
10
- #
11
9
  # See {#user}, {#repo}, {#token}.
12
- #
13
- # @param keep_submodule [Boolean] Avoid deleting the cloned tap Git repo
14
- # directory when possible
15
- def initialize(user, repo, token, keep_submodule: false)
10
+ def initialize(user, repo, token)
11
+ @user = user
16
12
  @repo = repo
13
+ @token = token
17
14
  @url = "https://#{token}@github.com/#{user}/#{repo}.git"
18
- @keep_submodule = keep_submodule
19
15
  end
20
16
 
21
- # Github repo name, as appears in Github URLs
17
+ # Github username
22
18
  #
23
19
  # @return [String]
24
- attr_reader :repo
20
+ attr_reader :user
25
21
 
26
- # Repo URL, as expected by Git
22
+ # Github repo name, as appears in Github URLs
27
23
  #
28
24
  # @return [String]
29
- attr_reader :url
25
+ attr_reader :repo
30
26
 
31
27
  # Github OAuth token
32
28
  #
@@ -35,37 +31,27 @@ module HomebrewAutomation
35
31
  # @return [String]
36
32
  attr_reader :token
37
33
 
38
- # +pushd+ into a fresh clone, call the block, then clean-up.
39
- #
40
- # Haskell-y type: +forall a. &Block (() -> a) -> a+
34
+ # Repo URL, as expected by Git
41
35
  #
42
- # @yield [String] Basename of the Tap repo directory we've just chdir'd into
43
- # @return Whatever the block returns
44
- def with_git_clone(&block)
45
- begin
46
- _git_clone
47
- Dir.chdir @repo, &block
48
- ensure
49
- _remove_git_submodule unless @keep_submodule
50
- end
51
- end
36
+ # @return [String]
37
+ attr_reader :url
52
38
 
53
39
  # Overwrite the specified Formula file, in-place, on-disk
54
40
  #
55
- # Haskell-y type: <tt>(String, &Block (Formula -> Formula)) -> nil</tt>
41
+ # A directory named +Formula+ is assumed to be on +Dir.pwd+.
56
42
  #
57
43
  # If no block is passed, then this tries to find the formula file, but then
58
- # does nothing.
44
+ # makes no changes to that Formula.
59
45
  #
60
46
  # @param formula [String] Part of the name to the file within the +Formula+
61
47
  # directory inside the Tap repo's directory, excluding the +.rb+ suffix.
62
- # @yield [Formula]
63
- # @return [Formula] as returned from the block,
64
- # assuming it obediantly returns a {Formula}.
65
- def on_formula(formula, &block)
66
- name = "#{formula}.rb" # DOC
48
+ # @yieldparam formula [Formula] existing Formula
49
+ # @yieldreturn [Formula] after your modifications
50
+ # @return [Formula] new Formula
51
+ def on_formula!(formula, &block)
52
+ name = "#{formula}.rb"
67
53
  block ||= ->(n) { n }
68
- Dir.chdir 'Formula' do # DOC
54
+ Dir.chdir 'Formula' do
69
55
  File.open name, 'r' do |old_file|
70
56
  File.open "#{name}.new", 'w' do |new_file|
71
57
  new_file.write(
@@ -78,54 +64,6 @@ module HomebrewAutomation
78
64
  end
79
65
  end
80
66
 
81
- # Set Git user's name and email
82
- #
83
- # Reads environment variables:
84
- # - TRAVIS_GIT_USER_NAME
85
- # - TRAVIS_GIT_USER_EMAIL
86
- #
87
- # If either env var is not set, do nothing.
88
- def git_config
89
- name = ENV['TRAVIS_GIT_USER_NAME']
90
- email = ENV['TRAVIS_GIT_USER_EMAIL']
91
- if name && email
92
- system 'git', 'config', '--global', 'user.name', name
93
- system 'git', 'config', '--global', 'user.email', email
94
- end
95
- end
96
-
97
- # Just +git commit -am "$msg"+
98
- #
99
- # @param msg [String] Git commit message
100
- # @raise [StandardError]
101
- def git_commit_am(msg)
102
- complain unless system "git", "commit", "-am", msg
103
- end
104
-
105
- # Just +git push+
106
- #
107
- # @raise [StandardError]
108
- def git_push
109
- complain unless system "git", "push"
110
- end
111
-
112
- # @raise [StandardError]
113
- def _git_clone
114
- complain unless system "git", "clone", @url
115
- end
116
-
117
- # @raise [StandardError]
118
- def _remove_git_submodule
119
- complain unless system "rm", "-rf", @repo
120
- end
121
-
122
- private
123
-
124
- def complain
125
- puts "HEY! Something has gone wrong and I need to complain. Stacktrace follows:"
126
- puts caller
127
- end
128
-
129
67
  end
130
68
 
131
69
  end
@@ -2,6 +2,6 @@
2
2
  module HomebrewAutomation
3
3
 
4
4
  # Yep.
5
- VERSION = '0.1.5'
5
+ VERSION = '0.1.6'
6
6
 
7
7
  end
@@ -1,7 +1,6 @@
1
1
 
2
2
  require_relative './mac_os.rb'
3
- require_relative './bintray.rb'
4
- require_relative './source_dist.rb'
3
+ require_relative './bottle.rb'
5
4
 
6
5
  module HomebrewAutomation
7
6
 
@@ -18,25 +17,45 @@ module HomebrewAutomation
18
17
  # @param tap [Tap]
19
18
  # @param formula_name [String] the name of the formula in the Tap
20
19
  # @param bversion [Bintray::Version]
20
+ #
21
+ # @param mac_os [Class] the MacOS class
22
+ # @param bottle [Class] the Bottle class
23
+ # @param keep_homebrew_tmp [Boolean] keep the HOMEBREW_TEMP directory
24
+ #
21
25
  # @return [Bottle]
22
- def build_and_upload_bottle(sdist, tap, formula_name, bversion, keep_homebrew_tmp: false)
23
- os_name = MacOS.identify_version
24
- tap.with_git_clone do
25
- tap.on_formula(formula_name) do |formula|
26
+ def build_and_upload_bottle!(
27
+ sdist,
28
+ tap,
29
+ git,
30
+ formula_name,
31
+ bversion,
32
+ mac_os: MacOS,
33
+ bottle: Bottle,
34
+ keep_tap_repo: false,
35
+ keep_homebrew_tmp: false)
36
+ os_name = mac_os.identify_version!
37
+ git.with_clone!(tap.url, tap.repo, keep_dir: keep_tap_repo) do |cloned_dir|
38
+ tap.on_formula! formula_name do |formula|
26
39
  formula.put_sdist(sdist.url, sdist.sha256)
27
40
  end
28
- tap.git_commit_am "Throwaway commit; just for building bottles"
29
-
30
- local_tap_url = File.realpath('.')
31
- bottle = Bottle.new(local_tap_url, formula_name, os_name, keep_tmp: keep_homebrew_tmp)
32
- bottle.build
33
-
34
- # Bintray auto-creates Versions on file-upload.
35
- # Re-creating an existing Version results in a 409.
36
- #bversion.create!
37
- bversion.upload_file!(bottle.filename, bottle.content)
38
-
39
- bottle
41
+ git.commit_am! "Throwaway commit; just for building bottles"
42
+ bot = bottle.new(
43
+ 'homebrew-automation/tmp-tap',
44
+ cloned_dir,
45
+ formula_name,
46
+ os_name,
47
+ keep_tmp: keep_homebrew_tmp)
48
+ bot.build! do |filename, contents|
49
+ # Bintray auto-creates Versions on file-upload.
50
+ # Re-creating an existing Version results in a 409.
51
+ #bversion.create!
52
+ begin
53
+ bversion.upload_file!(filename, contents)
54
+ rescue Bintray::Version::FileAlreadyExists
55
+ puts "A file with the same name as the one you're uploading already exits on Bintray"
56
+ end
57
+ end
58
+ bot
40
59
  end
41
60
  end
42
61
 
@@ -51,10 +70,10 @@ module HomebrewAutomation
51
70
  # @param tap [Tap]
52
71
  # @param formula_name [String] the name of the formula in the Tap
53
72
  # @param bversion [Bintray::Version]
54
- # @return [Formula]
55
- def gather_and_publish_bottles(sdist, tap, formula_name, bversion)
56
- tap.with_git_clone do
57
- tap.on_formula(formula_name) do |formula|
73
+ # @return [NilClass]
74
+ def gather_and_publish_bottles!(sdist, tap, formula_name, bversion)
75
+ git.with_clone!(tap.url, tap.repo) do
76
+ tap.on_formula! formula_name do |formula|
58
77
  bottles = bversion.gather_bottles
59
78
  bottles.reduce(
60
79
  formula.
@@ -64,10 +83,11 @@ module HomebrewAutomation
64
83
  f.put_bottle(os, checksum)
65
84
  end
66
85
  end
67
- tap.git_config
68
- tap.git_commit_am "Add bottles for #{formula_name}@#{bversion.version_name}"
69
- tap.git_push
86
+ git.config!
87
+ git.commit_am! "Add bottles for #{formula_name}@#{bversion.version_name}"
88
+ git.push!
70
89
  end
90
+ nil
71
91
  end
72
92
 
73
93
  end
@@ -4,6 +4,7 @@
4
4
  require_relative 'homebrew_automation/bintray.rb'
5
5
  require_relative 'homebrew_automation/bottle.rb'
6
6
  require_relative 'homebrew_automation/formula.rb'
7
+ require_relative 'homebrew_automation/git.rb'
7
8
  require_relative 'homebrew_automation/mac_os.rb'
8
9
  require_relative 'homebrew_automation/source_dist.rb'
9
10
  require_relative 'homebrew_automation/tap.rb'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: homebrew_automation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - easoncxz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-30 00:00:00.000000000 Z
11
+ date: 2019-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -149,11 +149,13 @@ files:
149
149
  - lib/homebrew_automation/bintray/client.rb
150
150
  - lib/homebrew_automation/bintray/version.rb
151
151
  - lib/homebrew_automation/bottle.rb
152
+ - lib/homebrew_automation/brew.rb
152
153
  - lib/homebrew_automation/cli.rb
153
154
  - lib/homebrew_automation/cli/cli.rb
154
155
  - lib/homebrew_automation/cli/formula_commands.rb
155
156
  - lib/homebrew_automation/cli/workflow_commands.rb
156
157
  - lib/homebrew_automation/formula.rb
158
+ - lib/homebrew_automation/git.rb
157
159
  - lib/homebrew_automation/mac_os.rb
158
160
  - lib/homebrew_automation/source_dist.rb
159
161
  - lib/homebrew_automation/tap.rb