generateConfigurableHomebrewFormula function
String
generateConfigurableHomebrewFormula({
- required HomebrewFormulaConfig config,
- required List<
HomebrewArtifact> artifacts,
Renders a product-neutral Formula for macOS and Linux artifacts.
Implementation
String generateConfigurableHomebrewFormula({
required HomebrewFormulaConfig config,
required List<HomebrewArtifact> artifacts,
}) {
String artifact(String platform, String architecture) {
return artifacts
.singleWhere(
(item) =>
item.platform == platform && item.architecture == architecture,
)
.fileName;
}
HomebrewArtifact details(String platform, String architecture) {
return artifacts.singleWhere(
(item) => item.platform == platform && item.architecture == architecture,
);
}
final macArm = details('macos', 'arm64');
final macX64 = details('macos', 'x64');
final linuxArm = details('linux', 'arm64');
final linuxX64 = details('linux', 'x64');
final kegOnly = config.versioned ? '\n keg_only :versioned_formula\n' : '';
return '''
class ${config.className} < Formula
desc "${config.description}"
homepage "${config.homepage}"
version "${config.version}"$kegOnly
on_macos do
on_arm do
url "${macArm.url}"
sha256 "${macArm.sha256}"
end
on_intel do
url "${macX64.url}"
sha256 "${macX64.sha256}"
end
end
on_linux do
on_intel do
url "${linuxX64.url}"
sha256 "${linuxX64.sha256}"
end
on_arm do
url "${linuxArm.url}"
sha256 "${linuxArm.sha256}"
end
end
def install
if OS.mac? && Hardware::CPU.arm?
bin.install "${artifact('macos', 'arm64')}" => "${config.executableName}"
elsif OS.mac? && Hardware::CPU.intel?
bin.install "${artifact('macos', 'x64')}" => "${config.executableName}"
elsif OS.linux? && Hardware::CPU.intel?
bin.install "${artifact('linux', 'x64')}" => "${config.executableName}"
elsif OS.linux? && Hardware::CPU.arm?
bin.install "${artifact('linux', 'arm64')}" => "${config.executableName}"
end
end
test do
system "#{bin}/${config.executableName}", "--version"
end
end
''';
}