From a705926b6ad87ca2a76e1468b947833a0c32f230 Mon Sep 17 00:00:00 2001 From: "Erik A. Brandstadmoen" Date: Sun, 2 Aug 2026 21:36:03 +0200 Subject: [PATCH 1/5] Add Homebrew formula reference --- installers/homebrew/grate.rb | 63 ++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 installers/homebrew/grate.rb diff --git a/installers/homebrew/grate.rb b/installers/homebrew/grate.rb new file mode 100644 index 00000000..6a179f42 --- /dev/null +++ b/installers/homebrew/grate.rb @@ -0,0 +1,63 @@ +class Grate < Formula + desc "SQL migration tool using plain SQL scripts" + homepage "https://grate-devs.github.io/grate/" + url "https://github.com/grate-devs/grate/archive/refs/tags/2.1.6.tar.gz" + sha256 "456d83d3ce605720241fd32b386c2a2f9f1adefaa11af77bfcbcb0bd5e1090b5" + license "MIT" + + livecheck do + url :stable + regex(/^v?(\d+(?:\.\d+)+)$/i) + end + + depends_on "dotnet" => :build + + def install + ENV["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1" + ENV["DOTNET_NOLOGO"] = "1" + + # Use Homebrew's supported SDK rather than the feature band pinned upstream. + rm "global.json" + + dotnet = Formula["dotnet"] + framework = "net#{dotnet.version.major_minor}" + args = %W[ + --configuration Release + --framework #{framework} + --output #{libexec} + --self-contained + --use-current-runtime + -p:DebugType=None + -p:IncludeNativeLibrariesForSelfExtract=true + -p:PublishSingleFile=true + -p:TargetFrameworks=#{framework} + -p:Version=#{version} + ] + + system "dotnet", "publish", "src/grate/grate.csproj", *args + bin.install libexec/"grate" + end + + test do + scripts = testpath/"scripts"/"up" + scripts.mkpath + (scripts/"001_create_widgets.sql").write <<~SQL + CREATE TABLE widgets ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL + ); + SQL + + database = testpath/"grate-test.db" + system bin/"grate", + "--connectionstring", "Data Source=#{database}", + "--databasetype", "sqlite", + "--sqlfilesdirectory", testpath/"scripts", + "--output", testpath/"output", + "--version", version.to_s, + "--silent" + + assert_path_exists database + assert_predicate database, :size? + end +end From 7a0c76f3d650ab46998df9be5a8fcd29b04d28d0 Mon Sep 17 00:00:00 2001 From: "Erik A. Brandstadmoen" Date: Sun, 2 Aug 2026 21:43:21 +0200 Subject: [PATCH 2/5] Align Homebrew formula with core conventions --- installers/homebrew/grate.rb | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/installers/homebrew/grate.rb b/installers/homebrew/grate.rb index 6a179f42..ac338d81 100644 --- a/installers/homebrew/grate.rb +++ b/installers/homebrew/grate.rb @@ -4,11 +4,7 @@ class Grate < Formula url "https://github.com/grate-devs/grate/archive/refs/tags/2.1.6.tar.gz" sha256 "456d83d3ce605720241fd32b386c2a2f9f1adefaa11af77bfcbcb0bd5e1090b5" license "MIT" - - livecheck do - url :stable - regex(/^v?(\d+(?:\.\d+)+)$/i) - end + head "https://github.com/grate-devs/grate.git", branch: "main" depends_on "dotnet" => :build @@ -31,8 +27,8 @@ def install -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishSingleFile=true -p:TargetFrameworks=#{framework} - -p:Version=#{version} ] + args << "-p:Version=#{version}" if build.stable? system "dotnet", "publish", "src/grate/grate.csproj", *args bin.install libexec/"grate" From b6abb8eaf10f9f3a20afc90b7b5ed1868340fc28 Mon Sep 17 00:00:00 2001 From: "Erik A. Brandstadmoen" Date: Sun, 2 Aug 2026 22:22:24 +0200 Subject: [PATCH 3/5] Declare Homebrew Brotli dependency --- installers/homebrew/grate.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/installers/homebrew/grate.rb b/installers/homebrew/grate.rb index ac338d81..77d33e08 100644 --- a/installers/homebrew/grate.rb +++ b/installers/homebrew/grate.rb @@ -7,6 +7,7 @@ class Grate < Formula head "https://github.com/grate-devs/grate.git", branch: "main" depends_on "dotnet" => :build + depends_on "brotli" def install ENV["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1" From 506ccb2ff03b13c57e599f441e075a20fde1025d Mon Sep 17 00:00:00 2001 From: "Erik A. Brandstadmoen" Date: Sun, 2 Aug 2026 23:22:25 +0200 Subject: [PATCH 4/5] Declare Linux Homebrew dependencies --- installers/homebrew/grate.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/installers/homebrew/grate.rb b/installers/homebrew/grate.rb index 77d33e08..1fb5b734 100644 --- a/installers/homebrew/grate.rb +++ b/installers/homebrew/grate.rb @@ -9,6 +9,12 @@ class Grate < Formula depends_on "dotnet" => :build depends_on "brotli" + on_linux do + depends_on "icu4c@78" + depends_on "libunwind" + depends_on "zlib-ng-compat" + end + def install ENV["DOTNET_CLI_TELEMETRY_OPTOUT"] = "1" ENV["DOTNET_NOLOGO"] = "1" From a80ff90780e25d388f9d7177a1f37400f430d051 Mon Sep 17 00:00:00 2001 From: "Erik A. Brandstadmoen" Date: Sun, 2 Aug 2026 23:39:11 +0200 Subject: [PATCH 5/5] Document Homebrew installation --- docs/GettingGrate.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/GettingGrate.md b/docs/GettingGrate.md index 1f110c08..c6454102 100644 --- a/docs/GettingGrate.md +++ b/docs/GettingGrate.md @@ -64,7 +64,13 @@ grate is available on [winget](https://docs.microsoft.com/en-us/windows/package- ## Homebrew -grate is available as a Homebrew cask. Simply `brew install --cask erikbra/cask/grate` for awesomeness! +grate is available as a Homebrew formula: + +```sh +brew install grate +``` + +The formula installs a self-contained binary, so the .NET runtime is not required on the target computer. ## Notes