class Traefik < Formula desc "Modern reverse proxy" homepage "https://traefik.io/" url "https://github.com/containous/traefik/releases/download/v2.1.2/traefik-v2.1.2.src.tar.gz" version "2.1.2" sha256 "e907cc84b2444aac12b8eb44ff53fbfbddfe6a54329f8c5db289498c6f1fd039" head "https://github.com/containous/traefik.git" bottle do cellar :any_skip_relocation sha256 "397485601bf9da6346232422d5a11810d32a7fe4fe850b164ac89f140381d9c9" => :catalina sha256 "cddde377a6128da0d3ba3191ab7a0e13f03ad2005613d0e7797956e64bd34c22" => :mojave sha256 "95dd97c2677c77dfab627c0de9b2edd1741d4548168e0ff3875504f0af4d672f" => :high_sierra end depends_on "go" => :build depends_on "go-bindata" => :build def install system "go", "generate" system "go", "build", "-ldflags", "-s -w -X github.com/containous/traefik/v2/pkg/version.Version=#{version}", "-trimpath", "-o", bin/"traefik", "./cmd/traefik" prefix.install_metafiles end plist_options :manual => "traefik" def plist <<~EOS KeepAlive Label #{plist_name} ProgramArguments #{opt_bin}/traefik --configfile=#{etc/"traefik/traefik.toml"} EnvironmentVariables RunAtLoad WorkingDirectory #{var} StandardErrorPath #{var}/log/traefik.log StandardOutPath #{var}/log/traefik.log EOS end test do require "socket" ui_server = TCPServer.new(0) http_server = TCPServer.new(0) ui_port = ui_server.addr[1] http_port = http_server.addr[1] ui_server.close http_server.close (testpath/"traefik.toml").write <<~EOS [global] checkNewVersion = false sendAnonymousUsage = false [serversTransport] insecureSkipVerify = true [entryPoints] [entryPoints.http] address = ":#{http_port}" [entryPoints.traefik] address = ":#{ui_port}" [log] level = "ERROR" format = "common" [accessLog] format = "common" [api] insecure = true dashboard = true debug = true EOS begin pid = fork do exec bin/"traefik", "--configfile=#{testpath}/traefik.toml" end sleep 5 cmd_http = "curl -sIm3 -XGET http://localhost:#{http_port}/" assert_match /404 Not Found/m, shell_output(cmd_http) sleep 1 cmd_ui = "curl -sIm3 -XGET http://localhost:#{ui_port}/dashboard/" assert_match /200 OK/m, shell_output(cmd_ui) ensure Process.kill("HUP", pid) end assert_match version.to_s, shell_output("#{bin}/traefik version 2>&1") end end