Skip to content
This repository has been archived by the owner on Feb 9, 2025. It is now read-only.

Commit

Permalink
Merge pull request #539 from Homebrew/more-sorbet
Browse files Browse the repository at this point in the history
Bump files to Sorbet `typed: strict`
  • Loading branch information
issyl0 authored Jan 2, 2025
2 parents 06022cb + 59cf4ac commit 86bee01
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 12 deletions.
28 changes: 18 additions & 10 deletions cmd/formula-analytics.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# typed: strict
# frozen_string_literal: true

require "abstract_command"
Expand Down Expand Up @@ -52,19 +53,21 @@ class FormulaAnalyticsCmd < AbstractCommand
named_args :none
end

REPO_ROOT = Pathname.new("#{File.dirname(__FILE__)}/..").expand_path.freeze
VENDOR_RUBY = (REPO_ROOT/"vendor/ruby").freeze
VENDOR_PYTHON = (REPO_ROOT/"vendor/python").freeze
BUNDLER_SETUP = (VENDOR_RUBY/"bundler/setup.rb").freeze
PYTHON_VERSION = (REPO_ROOT/".python-version").read.chomp.freeze
FIRST_INFLUXDB_ANALYTICS_DATE = Date.new(2023, 03, 27).freeze
REPO_ROOT = T.let(Pathname.new("#{File.dirname(__FILE__)}/..").expand_path.freeze, Pathname)
VENDOR_RUBY = T.let((REPO_ROOT/"vendor/ruby").freeze, Pathname)
VENDOR_PYTHON = T.let((REPO_ROOT/"vendor/python").freeze, Pathname)
BUNDLER_SETUP = T.let((VENDOR_RUBY/"bundler/setup.rb").freeze, Pathname)
PYTHON_VERSION = T.let((REPO_ROOT/".python-version").read.chomp.freeze, String)
FIRST_INFLUXDB_ANALYTICS_DATE = T.let(Date.new(2023, 03, 27).freeze, Date)

sig { override.void }
def run
setup_ruby
setup_python
influx_analytics(args)
end

sig { void }
def setup_ruby
Homebrew.install_bundler!
REPO_ROOT.cd do
Expand All @@ -78,6 +81,7 @@ def setup_ruby
require_relative BUNDLER_SETUP
end

sig { void }
def setup_python
odie <<~EOS if which("python#{PYTHON_VERSION}").nil?
Python #{PYTHON_VERSION} is required. Try:
Expand All @@ -101,13 +105,14 @@ def setup_python
end

ENV["PATH"] = "#{venv_root}/bin:#{ENV.fetch("PATH")}"
ENV["__PYVENV_LAUNCHER__"] = venv_python # support macOS framework Pythons
ENV["__PYVENV_LAUNCHER__"] = venv_python.to_s # support macOS framework Pythons

require "pycall"
PyCall.init(venv_python)
require_relative "../lib/pycall-setup"
end

sig { params(args: Homebrew::Cmd::FormulaAnalyticsCmd::Args).void }
def influx_analytics(args)
require "utils/analytics"
require "json"
Expand All @@ -126,7 +131,7 @@ def influx_analytics(args)
database: Utils::Analytics::INFLUX_BUCKET,
)

max_days_ago = (Date.today - FIRST_INFLUXDB_ANALYTICS_DATE).to_i
max_days_ago = (Date.today - FIRST_INFLUXDB_ANALYTICS_DATE).to_s.to_i
days_ago = (args.days_ago || 30).to_i
if days_ago > max_days_ago
opoo "Analytics started #{FIRST_INFLUXDB_ANALYTICS_DATE}. `--days-ago` set to maximum value."
Expand Down Expand Up @@ -213,14 +218,14 @@ def influx_analytics(args)
raise
end

json = {
json = T.let({
category:,
total_items: 0,
start_date: Date.today - days_ago.to_i,
end_date: Date.today,
total_count: 0,
items: [],
}
}, T::Hash[Symbol, T.untyped])

batches.each do |batch|
batch.to_pylist.each do |record|
Expand Down Expand Up @@ -356,14 +361,17 @@ def influx_analytics(args)
end
end

sig { params(count: Integer).returns(String) }
def format_count(count)
count.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse
end

sig { params(percent: Float).returns(String) }
def format_percent(percent)
format("%<percent>.2f", percent:).gsub(/\.00$/, "")
end

sig { params(dimension: String).returns(T.nilable(String)) }
def format_os_version_dimension(dimension)
return if dimension.blank?

Expand Down
56 changes: 56 additions & 0 deletions cmd/formula-analytics.rbi
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# typed: strict

class Homebrew::Cmd::FormulaAnalyticsCmd
sig { returns(Homebrew::Cmd::FormulaAnalyticsCmd::Args) }
def args; end
end

class Homebrew::Cmd::FormulaAnalyticsCmd::Args < Homebrew::CLI::Args
sig { returns(T::Boolean) }
def all_core_formulae_json?; end

sig { returns(T::Boolean) }
def brew_command_run?; end

sig { returns(T::Boolean) }
def brew_command_run_options?; end

sig { returns(T::Boolean) }
def brew_test_bot_test?; end

sig { returns(T::Boolean) }
def build_error?; end

sig { returns(T::Boolean) }
def cask_install?; end

sig { returns(T.nilable(String)) }
def days_ago; end

sig { returns(T::Boolean) }
def homebrew_devcmdrun_developer?; end

sig { returns(T::Boolean) }
def homebrew_os_arch_ci?; end

sig { returns(T::Boolean) }
def homebrew_prefixes?; end

sig { returns(T::Boolean) }
def homebrew_versions?; end

sig { returns(T::Boolean) }
def install?; end

sig { returns(T::Boolean) }
def install_on_request?; end

sig { returns(T::Boolean) }
def json?; end

sig { returns(T::Boolean) }
def os_version?; end

sig { returns(T::Boolean) }
def setup?; end
end
4 changes: 4 additions & 0 deletions cmd/generate-analytics-api.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# typed: strict
# frozen_string_literal: true

require "abstract_command"
Expand Down Expand Up @@ -28,6 +29,7 @@ class GenerateAnalyticsApiCmd < AbstractCommand
named_args :none
end

sig { params(category_name: String, data_source: T.nilable(String)).returns(String) }
def analytics_json_template(category_name, data_source: nil)
data_source = "#{data_source}: true" if data_source

Expand All @@ -41,6 +43,7 @@ def analytics_json_template(category_name, data_source: nil)
EOS
end

sig { params(args: String).returns(String) }
def run_formula_analytics(*args)
puts "brew formula-analytics #{args.join(" ")}"

Expand All @@ -61,6 +64,7 @@ def run_formula_analytics(*args)
result
end

sig { override.void }
def run
safe_system HOMEBREW_BREW_FILE, "formula-analytics", "--setup"

Expand Down
8 changes: 6 additions & 2 deletions lib/pycall-setup.rbi
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# typed: true

module InfluxDBClient3; end
class InfluxDBClient3
def self.initialize(*args); end

def query(*args); end
end

module PyCall
def self.init(*args); end
Expand All @@ -11,5 +15,5 @@ module PyCall
def self.import(*args); end
end

class PyError; end # rubocop:disable Lint/EmptyClass
PyError = Class.new(StandardError).freeze
end

0 comments on commit 86bee01

Please sign in to comment.