Brew formula, small deprecation
I was upgrading the go version of my personal project the other day.
I moved from go 1.16
to go 1.19
. I had to come out with a new version. I
upgraded my custom brew package as I always do; fix the url
and sha
fields
in the Formula, fix the basic test under test
area.
I pushed my changes and started to wait github actions’ checks. Checks are failed, due to brew’s formula style guide:
==> brew style vigo/statoo
==> FAILED
Full style vigo/statoo output
Formula/statoo.rb:18:5: C: Use generate_completions_from_executable DSL instead of (bash_completion/"statoo").write #{bin}/statoo bash-completion.
(bash_completion/"statoo").write `#{bin}/statoo bash-completion`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 files inspected, 1 offense detected
Error: Use `generate_completions_from_executable` DSL instead of `(bash_completion/"statoo").write `#{bin}/statoo bash-completion``.
In the install
part of the formula; bash completion related setup was
written as shown below:
def install
system "go", "build", *std_go_args
(bash_completion/"statoo").write `#{bin}/statoo bash-completion`
end
Checker was telling me that, I should use
generate_completions_from_executable
DSL instead of old one. Well, what was
that? when was changed? Let’s fix this :) First, let’s read the docs,
then change the code to:
def install
system "go", "build", *std_go_args
generate_completions_from_executable(bin/"statoo", "bash-completion", "completions", shells: [:bash])
end
Break down of args:
bin/"statoo"
is the executable pathbash-completion
is an arg forstatoo
executable, generates bash related completion code.completions
is thebase_name
- Completion code is compatible with
bash
only, therefor I set the shel:bash
only.
I spent an hour to fix and understand the problem and solution. I couldn’t find any examples or documentation about this new formula style change… This is why I’m writing this blog post so that will be useful to other brewers :)
Here is the function signature of generate_completions_from_executable
:
generate_completions_from_executable(
*commands,
base_name: name,
shells: [:bash, :zsh, :fish],
shell_parameter_format: nil
) ⇒ void
I hope this post will help, happy brew packaging! You can check project and custom brew package here:
- https://github.com/vigo/statoo (project)
- https://github.com/vigo/homebrew-statoo (brew package)