github_runner_matrix: split into separate files

This commit is contained in:
Carlo Cabrera 2023-04-07 19:10:28 +08:00
parent 5ecd24ba20
commit 3d5218892d
No known key found for this signature in database
GPG Key ID: C74D447FC549A1D0
4 changed files with 104 additions and 68 deletions

View File

@ -0,0 +1,35 @@
# typed: strict
# frozen_string_literal: true
require "linux_runner_spec"
require "macos_runner_spec"
class GitHubRunner < T::Struct
extend T::Sig
const :platform, Symbol
const :arch, Symbol
const :spec, T.any(LinuxRunnerSpec, MacOSRunnerSpec)
const :macos_version, T.nilable(OS::Mac::Version)
prop :active, T::Boolean, default: false
sig { returns(T::Boolean) }
def macos?
platform == :macos
end
sig { returns(T::Boolean) }
def linux?
platform == :linux
end
sig { returns(T::Boolean) }
def x86_64?
arch == :x86_64
end
sig { returns(T::Boolean) }
def arm64?
arch == :arm64
end
end

View File

@ -2,63 +2,7 @@
# frozen_string_literal: true # frozen_string_literal: true
require "test_runner_formula" require "test_runner_formula"
require "github_runner"
class LinuxRunnerSpec < T::Struct
extend T::Sig
const :name, String
const :runner, String
const :container, T::Hash[Symbol, String]
const :workdir, String
const :timeout, Integer
const :cleanup, T::Boolean
sig {
returns({
name: String,
runner: String,
container: T::Hash[Symbol, String],
workdir: String,
timeout: Integer,
cleanup: T::Boolean,
})
}
def to_h
{
name: name,
runner: runner,
container: container,
workdir: workdir,
timeout: timeout,
cleanup: cleanup,
}
end
end
class MacOSRunnerSpec < T::Struct
extend T::Sig
const :name, String
const :runner, String
const :cleanup, T::Boolean
sig { returns({ name: String, runner: String, cleanup: T::Boolean }) }
def to_h
{
name: name,
runner: runner,
cleanup: cleanup,
}
end
end
class GitHubRunner < T::Struct
const :platform, Symbol
const :arch, Symbol
const :spec, T.any(LinuxRunnerSpec, MacOSRunnerSpec)
const :macos_version, T.nilable(OS::Mac::Version)
prop :active, T::Boolean, default: false
end
class GitHubRunnerMatrix class GitHubRunnerMatrix
extend T::Sig extend T::Sig
@ -91,7 +35,7 @@ class GitHubRunnerMatrix
# rubocop:enable Style/MutableConstant # rubocop:enable Style/MutableConstant
sig { returns(T::Array[GitHubRunner]) } sig { returns(T::Array[GitHubRunner]) }
attr_reader :available_runners attr_reader :runners
sig { sig {
params( params(
@ -105,19 +49,21 @@ class GitHubRunnerMatrix
@deleted_formulae = T.let(deleted_formulae, MaybeStringArray) @deleted_formulae = T.let(deleted_formulae, MaybeStringArray)
@dependent_matrix = T.let(dependent_matrix, T::Boolean) @dependent_matrix = T.let(dependent_matrix, T::Boolean)
@available_runners = T.let([], T::Array[GitHubRunner]) @runners = T.let([], T::Array[GitHubRunner])
generate_available_runners! generate_runners!
freeze freeze
end end
sig { returns(T::Array[RunnerSpecHash]) } sig { returns(T::Array[RunnerSpecHash]) }
def active_runner_specs_hash def active_runner_specs_hash
@available_runners.select(&:active) runners.select(&:active)
.map(&:spec) .map(&:spec)
.map(&:to_h) .map(&:to_h)
end end
private
sig { returns(LinuxRunnerSpec) } sig { returns(LinuxRunnerSpec) }
def linux_runner_spec def linux_runner_spec
linux_runner = ENV.fetch("HOMEBREW_LINUX_RUNNER") linux_runner = ENV.fetch("HOMEBREW_LINUX_RUNNER")
@ -157,10 +103,10 @@ class GitHubRunnerMatrix
end end
sig { void } sig { void }
def generate_available_runners! def generate_runners!
return if @available_runners.present? return if @runners.present?
@available_runners << create_runner(:linux, :x86_64, linux_runner_spec) @runners << create_runner(:linux, :x86_64, linux_runner_spec)
github_run_id = ENV.fetch("GITHUB_RUN_ID") github_run_id = ENV.fetch("GITHUB_RUN_ID")
github_run_attempt = ENV.fetch("GITHUB_RUN_ATTEMPT") github_run_attempt = ENV.fetch("GITHUB_RUN_ATTEMPT")
@ -175,7 +121,7 @@ class GitHubRunnerMatrix
runner: "#{version}#{ephemeral_suffix}", runner: "#{version}#{ephemeral_suffix}",
cleanup: false, cleanup: false,
) )
@available_runners << create_runner(:macos, :x86_64, spec, macos_version) @runners << create_runner(:macos, :x86_64, spec, macos_version)
next unless macos_version >= :big_sur next unless macos_version >= :big_sur
@ -187,8 +133,10 @@ class GitHubRunnerMatrix
end end
spec = MacOSRunnerSpec.new(name: "macOS #{version}-arm64", runner: runner, cleanup: cleanup) spec = MacOSRunnerSpec.new(name: "macOS #{version}-arm64", runner: runner, cleanup: cleanup)
@available_runners << create_runner(:macos, :arm64, spec, macos_version) @runners << create_runner(:macos, :arm64, spec, macos_version)
end end
@runners.freeze
end end
sig { params(runner: GitHubRunner).returns(T::Boolean) } sig { params(runner: GitHubRunner).returns(T::Boolean) }

View File

@ -0,0 +1,34 @@
# typed: strict
# frozen_string_literal: true
class LinuxRunnerSpec < T::Struct
extend T::Sig
const :name, String
const :runner, String
const :container, T::Hash[Symbol, String]
const :workdir, String
const :timeout, Integer
const :cleanup, T::Boolean
sig {
returns({
name: String,
runner: String,
container: T::Hash[Symbol, String],
workdir: String,
timeout: Integer,
cleanup: T::Boolean,
})
}
def to_h
{
name: name,
runner: runner,
container: container,
workdir: workdir,
timeout: timeout,
cleanup: cleanup,
}
end
end

View File

@ -0,0 +1,19 @@
# typed: strict
# frozen_string_literal: true
class MacOSRunnerSpec < T::Struct
extend T::Sig
const :name, String
const :runner, String
const :cleanup, T::Boolean
sig { returns({ name: String, runner: String, cleanup: T::Boolean }) }
def to_h
{
name: name,
runner: runner,
cleanup: cleanup,
}
end
end