From 10c0dc82d8bedb9fe2527b94f8819c406ca9cf91 Mon Sep 17 00:00:00 2001 From: markkrj Date: Wed, 30 Jun 2021 02:00:18 +0800 Subject: [PATCH] Fix homebrew tap by removing head and shipping compiled binaries (#136) fixes #135 This fix Homebrew tap by removing the head method and shipping only pre-compiled binaries, as you guys already ship binaries for most (all?) supported platforms. Also, for gitea.rb and tea.rb, I removed the curl for fetching files checksum, because for every install, it runs `curl` 5 times, slowing the install. So, I created a script to bump versions to latest and fix sha256 checksum in the formula files. I created also an gitea-head and tea-head formulae to download latest pre-compiled binaries for head, and here we are fetching checksum by `curl`, as I imagine, it is not common/recommended scenario. IMO, this is the best possible approach for shipping binaries from a custom tap. Co-authored-by: Marcos de Oliveira Reviewed-on: https://gitea.com/gitea/homebrew-gitea/pulls/136 Reviewed-by: techknowlogick Co-authored-by: markkrj Co-committed-by: markkrj --- bump_version.sh | 27 +++++++++++++++++ gitea-head.rb | 32 ++++++++++++++++++++ gitea.rb | 77 ++++++++++++++++++------------------------------- tea-head.rb | 31 ++++++++++++++++++++ tea.rb | 76 ++++++++++++++++-------------------------------- 5 files changed, 143 insertions(+), 100 deletions(-) create mode 100755 bump_version.sh create mode 100644 gitea-head.rb create mode 100644 tea-head.rb diff --git a/bump_version.sh b/bump_version.sh new file mode 100755 index 0000000..d9f241b --- /dev/null +++ b/bump_version.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +binaries="tea gitea" +for bin in ${binaries};do + file="${bin}.rb" + case "$bin" in + tea) + git_url="https://gitea.com/gitea/tea" + supported_os="linux-386 linux-amd64 linux-arm64 darwin-amd64";; + gitea) + git_url="https://github.com/go-gitea/gitea" + supported_os="linux-386 linux-amd64 linux-arm64 darwin-10.12-amd64 darwin-10.12-arm64";; + *) + >&2 echo "Error: unrecognized binary ($bin)" + exit 1;; + esac + latest=$(curl -sL -o /dev/null -w %{url_effective} "${git_url}/releases/latest") + version="${latest##*/v}" + + file_url="https://dl.gitea.io/${bin}/${version}" + for os in ${supported_os}; do + sha256_file="${bin}-${version}-${os}.xz.sha256" + sha256=$(curl -sL "${file_url}/${sha256_file}" | awk '{print$1}') + sed -r "s/^(\s+when \"${os}\" then).*/\1 \"${sha256}\"/" -i "${file}" + done + sed -r "s/^(\s+version).*/\1 \"${version}\"/" -i "${file}" +done diff --git a/gitea-head.rb b/gitea-head.rb new file mode 100644 index 0000000..b734e7f --- /dev/null +++ b/gitea-head.rb @@ -0,0 +1,32 @@ +class GiteaHead < Formula + desc "Git with a cup of tea, painless self-hosted git service" + homepage "https://gitea.io" + version "main" + + os = OS.mac? ? "darwin-10.12" : "linux" + arch = case Hardware::CPU.arch + when :i386 then "386" + when :x86_64 then "amd64" + when :arm64 then "arm64" + else + raise "gitea: Unsupported system architecture #{Hardware::CPU.arch}" + end + + @@filename = "gitea-#{version}-#{os}-#{arch}" + @@url = "https://dl.gitea.io/gitea/#{version}/#{@@filename}.xz" + @@sha256 = %x[ curl -sL #{@@url}.sha256 ].split.first + + url @@url + sha256 @@sha256 + + conflicts_with "gitea", because: "both install gitea binaries" + bottle :unneeded + def install + filename = GiteaHead.class_variable_get("@@filename") + bin.install filename => "gitea" + end + + test do + system "#{bin}/gitea", "--version" + end +end diff --git a/gitea.rb b/gitea.rb index fa1ae74..6183e77 100644 --- a/gitea.rb +++ b/gitea.rb @@ -1,58 +1,37 @@ class Gitea < Formula - homepage "https://github.com/go-gitea/gitea" + desc "Git with a cup of tea, painless self-hosted git service" + homepage "https://gitea.io" + version "1.14.3" - def self.bin_filename(version) - os = OS.mac? ? "darwin-10.12" : "linux" + os = OS.mac? ? "darwin-10.12" : "linux" + arch = case Hardware::CPU.arch + when :i386 then "386" + when :x86_64 then "amd64" + when :arm64 then "arm64" + else + raise "gitea: Unsupported system architecture #{Hardware::CPU.arch}" + end - arch = case Hardware::CPU.arch - when :i386 then "386" - when :x86_64 then "amd64" - when :arm64 then "arm64" - else - raise "Gitea: Unsupported system architecture #{Hardware::CPU.arch}" - end + @@filename = "gitea-#{version}-#{os}-#{arch}" + @@url = "https://dl.gitea.io/gitea/#{version}/#{@@filename}.xz" + @@sha256 = case "#{os}-#{arch}" + when "linux-386" then "c34f9c6cc5150334b2d85b0db319e035c93abf380c545e7561f5472089d320ed" + when "linux-amd64" then "38d358d135e37aac6c783fe1f6ebe97fd29782b5c1f69d15418d746d41aa6ab9" + when "linux-arm64" then "0a4751b54f3a89db1f5cb488da0d6eb80b92c559400fe8369a4a8f1ea3460e3f" + when "darwin-10.12-amd64" then "40a3188ef4b498141786af2243403c92b9bed1d476c370faa42aa5b5fb95433d" + when "darwin-10.12-arm64" then "71fed124fde0da8443569398e57f96353302dbe08c1bfd68657a02c98235f624" + else + raise "gitea: Unsupported system #{os}-#{arch}" + end - "gitea-#{version}-#{os}-#{arch}" - end - - def self.bin_url(version) - "https://dl.gitea.io/gitea/#{version}/#{bin_filename(version)}" - end - - stable do - version "1.14.3" - url Gitea.bin_url(version) - sha256 `curl -sL #{url}.sha256`.split(" ").first - end - - head do - version "main" - url Gitea.bin_url(version) - sha256 `curl -sL #{url}.sha256`.split(" ").first - end - - head do - url "https://github.com/go-gitea/gitea.git", :branch => "main" - depends_on "go" => :build - end + url @@url + sha256 @@sha256 + conflicts_with "gitea-head", because: "both install gitea binaries" + bottle :unneeded def install - if build.head? - mkdir_p buildpath/File.join("src", "code.gitea.io") - ln_s buildpath, buildpath/File.join("src", "code.gitea.io", "gitea") - - ENV.append_path "PATH", File.join(buildpath, "bin") - - ENV["GOPATH"] = buildpath - ENV["GOHOME"] = buildpath - ENV["TAGS"] = "bindata sqlite sqlite_unlock_notify" - - system "cd src/code.gitea.io/gitea && make build" - - bin.install "#{buildpath}/gitea" => "gitea" - else - bin.install "#{buildpath}/#{Gitea.bin_filename(version)}" => "gitea" - end + filename = Gitea.class_variable_get("@@filename") + bin.install filename => "gitea" end test do diff --git a/tea-head.rb b/tea-head.rb new file mode 100644 index 0000000..f96a319 --- /dev/null +++ b/tea-head.rb @@ -0,0 +1,31 @@ +class TeaHead < Formula + desc "A command line tool to interact with Gitea servers" + homepage "https://gitea.com/gitea/tea" + version "0.7.0" + + os = OS.mac? ? "darwin" : "linux" + arch = case Hardware::CPU.arch + when :x86_64 then "amd64" + when :arm64 then "arm64" + else + raise "tea: Unsupported system architecture #{Hardware::CPU.arch}" + end + + @@filename = "tea-#{version}-#{os}-#{arch}" + @@url = "https://dl.gitea.io/tea/#{version}/#{@@filename}.xz" + @@sha256 = %x[ curl -sL #{@@url}.sha256 ].split.first + + url @@url + sha256 @@sha256 + + conflicts_with "tea", because: "both install tea binaries" + bottle :unneeded + def install + filename = TeaHead.class_variable_get("@@filename") + bin.install filename => "tea" + end + + test do + system "#{bin}/tea", "--version" + end +end diff --git a/tea.rb b/tea.rb index bded4c8..d623e81 100644 --- a/tea.rb +++ b/tea.rb @@ -1,63 +1,37 @@ -require "formula" - class Tea < Formula + desc "A command line tool to interact with Gitea servers" homepage "https://gitea.com/gitea/tea" - head "https://gitea.com/gitea/tea.git" + version "0.7.0" - def self.bin_filename(version) - os = OS.mac? ? "darwin" : "linux" + os = OS.mac? ? "darwin" : "linux" + arch = case Hardware::CPU.arch + when :x86_64 then "amd64" + when :arm64 then "arm64" + else + raise "tea: Unsupported system architecture #{Hardware::CPU.arch}" + end - arch = case Hardware::CPU.arch - when :x86_64 then "amd64" - when :arm64 then "arm64" - else - raise "tea: Unsupported system architecture #{Hardware::CPU.arch}" - end + @@filename = "tea-#{version}-#{os}-#{arch}" + @@url = "https://dl.gitea.io/tea/#{version}/#{@@filename}.xz" + @@sha256 = case "#{os}-#{arch}" + when "linux-amd64" then "c49ef093f649a9ea74fb16954a51626ebd1b494c9143b000dad5fc935cb62527" + when "linux-arm64" then "6497398cefed6536cb2f524a93b38edbf8e7635d01bed12e18334430a4fcb9c0" + when "darwin-amd64" then "245cf071858c25ee594bbfec0cc0bcc19ae9219de09d8221daa660cb82592e4b" + else + raise "tea: Unsupported system #{os}-#{arch}" + end - "tea-#{version}-#{os}-#{arch}" - end + url @@url + sha256 @@sha256 - def self.bin_url(version) - "https://dl.gitea.io/tea/#{version}/#{bin_filename(version)}" - end - - stable do - version "0.7.0" - url Tea.bin_url(version) - sha256 `curl -sL ${url}.sha256`.split(" ").first - end - - head do - version "master" - url Tea.bin_url(version) - sha256 `curl -sL ${url}.sha256`.split(" ").first - end - - head do - url "https://gitea.com/gitea/tea.git", :branch => "master" - depends_on "go" => :build + conflicts_with "tea-head", because: "both install tea binaries" + bottle :unneeded + def install + filename = Tea.class_variable_get("@@filename") + bin.install filename => "tea" end test do system "#{bin}/tea", "--version" end - - def install - case - when build.head? - mkdir_p buildpath/File.join("src", "code.gitea.io") - ln_s buildpath, buildpath/File.join("src", "code.gitea.io", "tea") - - ENV.append_path "PATH", File.join(buildpath, "bin") - - ENV["GOPATH"] = buildpath - ENV["GOHOME"] = buildpath - - system "cd src/code.gitea.io/tea && make build" - - bin.install "#{buildpath}/tea" => "tea" - else - bin.install "#{buildpath}/#{Tea.bin_filename(version)}" => "tea" - end - end end