139 Commits

Author SHA1 Message Date
Michael Cho
5adc8f75a8
formula_cellar_checks: avoid changing name 2025-08-25 12:00:33 -04:00
Carlo Cabrera
4a681717ce
formula_cellar_checks: check unversioned name in universal_binary_allowlist
This will allow us to avoid having to list multiple formula versions in
the universal binary allowlist (e.g. for `llvm`).
2025-08-22 17:55:21 +08:00
Mike McQuaid
22fdb11e00
**/keg_relocate.rb: add set Sorbet typed: strict
Other files have been changed where required.
2025-08-18 15:02:15 +01:00
Eric Knibbe
626b6aca2d
RubyDoc output fixes 2025-08-05 17:13:42 -04:00
Douglas Eichelberger
c4b02465f5
Reduce shape variations in Homebrew::Service 2025-07-28 17:03:43 -07:00
Mike McQuaid
9ac306e464
Remove alias generic_* definitions in favour of using super
This is the pattern we've been adopting for a while and it's a bit
cleaner. Let's remove all of the existing usage of the existing pattern
to avoid confusion when adopting the new one.
2025-06-16 08:10:08 +00:00
Michael Cho
b5b049ab64
formula_cellar_checks: add no_cpuid_allowlist
Sometimes the CPUID instruction exists in a dependency, e.g.
`aws-checksums` performs CPU detection via `aws-c-common`.
2025-04-12 12:40:38 -04:00
Douglas Eichelberger
a81239ec2d
Enable strict typing in Formula 2025-02-24 10:23:42 -08:00
Issy Long
d1892d436a
Fix leftover errors for Dependencies vs. T::Array[Dependency] 2024-10-06 20:04:42 +01:00
Issy Long
28349370d3
Bump more files to Sorbet typed: strict 2024-10-06 20:04:42 +01:00
Bo Anderson
6db4ed2793
Replace some include Kernel usages with requires_ancestor 2024-08-20 19:10:14 +01:00
Issy Long
45978435e7
rubocop: Use Sorbet/StrictSigil as it's better than comments
- Previously I thought that comments were fine to discourage people from
  wasting their time trying to bump things that used `undef` that Sorbet
  didn't support. But RuboCop is better at this since it'll complain if
  the comments are unnecessary.

- Suggested in https://github.com/Homebrew/brew/pull/18018#issuecomment-2283369501.

- I've gone for a mixture of `rubocop:disable` for the files that can't
  be `typed: strict` (use of undef, required before everything else, etc)
  and `rubocop:todo` for everything else that should be tried to make
  strictly typed. There's no functional difference between the two as
  `rubocop:todo` is `rubocop:disable` with a different name.

- And I entirely disabled the cop for the docs/ directory since
  `typed: strict` isn't going to gain us anything for some Markdown
  linting config files.

- This means that now it's easier to track what needs to be done rather
  than relying on checklists of files in our big Sorbet issue:

```shell
$ git grep 'typed: true # rubocop:todo Sorbet/StrictSigil' | wc -l
    268
```

- And this is confirmed working for new files:

```shell
$ git status
On branch use-rubocop-for-sorbet-strict-sigils
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Library/Homebrew/bad.rb
        Library/Homebrew/good.rb

nothing added to commit but untracked files present (use "git add" to track)

$ brew style
Offenses:

bad.rb:1:1: C: Sorbet/StrictSigil: Sorbet sigil should be at least strict got true.
^^^^^^^^^^^^^

1340 files inspected, 1 offense detected
```
2024-08-12 15:24:27 +01:00
Mike McQuaid
222fe8ef0b
Homebrew 4.3.0 deprecation/disable/removals.
The usual pass of deprecating/disabling/removing code for the next
minor Homebrew release.
2024-05-07 12:18:04 +01:00
Markus Reiter
0f0055ede4
Make documentation @api private by default. 2024-04-26 19:04:20 +02:00
Michael Cho
e31a2b8ed7
formula_cellar_checks: add more types
Signed-off-by: Michael Cho <michael@michaelcho.dev>
2024-03-24 19:46:57 -04:00
Michael Cho
a5160e355f
formula_cellar_checks: more granular mismatched_binary_allowlist
Add support for providing more granular glob patterns via the
mismatched_binary_allowlist.json rather than an all-or-nothing option.
This allows catching any unwanted binaries in new releases.

The glob patterns are assumed to be relative to the formula's prefix.
Patterns are matched using fnmatch with flags for:
* `File::FNM_DOTMATCH` to allow matching all files with `**/*`
* `File::FNM_EXTGLOB` to behave like `Dir.glob` for `{a,b}`
* `File::FNM_PATHNAME` to allow restricting `*` across directories

The original file format of `["<formula>"]` should behave similar to
`{"<formula>": "**/*"}`.

Also some changes to add type signature.

Signed-off-by: Michael Cho <michael@michaelcho.dev>
2024-03-23 23:43:09 -04:00
Issy Long
f4218a6316
Fix RuboCop Performance/MapCompact offenses
- Rename an iterator variable since it would make the line too long.
2024-02-25 22:59:59 +00:00
Michka Popoff
3a8fd43df1
audit: cleanup easy-install check
- Python 2 is long gone
- Do not allow to use easy_install at all: it is now long deprecated
2024-02-18 15:53:21 +01:00
Douglas Eichelberger
5b5cfe89de Resolve violations from removing hidden.rbi 2024-02-11 20:27:38 -08:00
Michael Cho
53accccfb2
formula_cellar_checks: detect cpuid in static libs 2023-12-21 12:08:18 -05:00
Mike McQuaid
1d4a24d226
Make more warnings quiet with environment hints disabled.
Combined with https://github.com/Homebrew/homebrew-test-bot/pull/963
this should make `brew test-bot` output a bit quieter and less annoying.
2023-08-04 09:36:27 +01:00
apainintheneck
1111706378 service: add custom service name DSL
The main thing is that this DSL allows us to provide an
interface that can be serialized to the JSON API.

Changes:
- Homebrew::Service
  - Adds `#service_name` and `#plist_name` methods
    - Each is now included in the `#serialize` method as well
  - Eval block on instantiation
    - Before we lazy evaluated this but the cost is not significant
      and it complicated the code a bunch. This only gets called
      during install, when evaluating caveats and in the `brew service`
      command. It skips this evaluation if the service block isn't there.
  - Add `#command?` helper to avoid `#command.blank?` and `#command.present?`
- Formula
  - `#service` now returns a service whenever it's called. This call is
    hidden behind a call to `#service?` most of the time anyway so this
    should be fine.
  - `#plist_name` and `#service_name` now call the methods of the same name
    on the service class. This should have already been in the service object
    to begin with and keeping these methods here helps preserve backwards
    compatibility with people who were overwriting these methods before.
- Caveats
  - Prefer `service#command?`
  - Add helpers for checking on service commands
    - This duplicates some of the work in `brew services`. Maybe we should
      merge that repo in at some point.
  - Check for installed service at `#plist_name` or `#service_name`. I think
    this should be used instead of `Keg#plist_installed?` which checked for any plist file.
    We should think about deprecating `#plist_installed?` in the future.
  - Stop using `ps aux | grep #{formula.plist_name}` to check for service files
    because it was inaccurate (it always returns true on my machine) because the grep
    process is started before the ps process.
  - Note: The behavior is the same as it was before. This means that caveats
    only show up for custom service files on install or if they're already installed.
    Otherwise it won't show up in `brew info`. This is because it has to check
    first if the service file has been installed.
- Utils::Service
  - Add utils for evaluating if a service is installed and running. This duplicates
    some of the work already found in `brew services`. We should seriously consider
    merging `brew services` with the main brew repo in the future since it's already
    tightly coupled to the code in the main repo.
- Formulary.load_formula_from_api
  - Be more explicit about which types can be deserialized into run params since
    it is now possible for run params to be nil.
- Update and add tests
2023-05-13 14:53:01 -07:00
Douglas Eichelberger
08af78a2a5 brew style --fix 2023-04-25 09:26:24 -07:00
Douglas Eichelberger
24cf6076e8 brew style --fix 2023-04-24 20:42:39 -07:00
Douglas Eichelberger
7720485f40 Enable types in Formula files 2023-03-25 08:50:06 -07:00
Bo Anderson
5ecf76a611
Harden plist parsing 2023-02-22 22:52:06 +00:00
hyuraku
9241def1a2 reset formula_cellar_checks 2023-01-26 21:41:01 +09:00
hyuraku
f1eacb04f0 move check_binary_arches to extend/os 2023-01-25 22:26:49 +09:00
Dawid Dziurla
0d0c98de29
Allow defining service run command per platform 2023-01-19 11:36:37 +01:00
apainintheneck
c477b9aab3 Cleanup after adding os specific rubocop
- Change name of rubocop warning
- Disable linting on remaining offending lines
- Add todos to move lines with disabled linting
  checks to extend/os in the future
2022-11-29 23:13:50 -08:00
Mike McQuaid
36d14ae49c
Merge pull request #13366 from hyuraku/repair-check_cpuid_instruction
move check ENV.runtime_cpu_detection to `utils/ast`
2022-06-28 09:59:41 +01:00
Bo Anderson
02164a35db
Use ORIGINAL_PATHS over envs; reject nil PATH 2022-06-17 19:47:57 +01:00
hyuraku
7a95219d2b remove new method and reset without TODO 2022-06-14 21:33:17 +09:00
hyuraku
f2fe1b59a1 move check ENV.runtime_cpu_detection to utils/ast 2022-06-14 21:33:17 +09:00
EricFromCanada
774537d3c2
formula_installer: handle unexpected .brew presence/absence 2022-04-13 10:53:57 -04:00
Rylan Polster
c0e8569c93
Fix mismatch_binary_allowlist check 2021-10-21 21:22:18 -04:00
Rylan Polster
fa4bb7d74a
Refactor audit exception handling 2021-10-21 21:11:05 -04:00
Carlo Cabrera
72f7ab8bfc
formula_cellar_checks: fix alignment when listing files
The extra spacing came from before we used squiggly heredocs. Now that
we do, they're no longer necessary, and produce misaligned output.
2021-10-10 14:16:10 +08:00
Carlo Cabrera
1f3de1d5b2
Merge pull request #12092 from carlocab/binary-arch-edge-case
formula_cellar_checks: fix edge case handling in `check_binary_arches`
2021-09-21 16:43:57 +08:00
Rylan Polster
e8e1deeb32
Cleanup code and remove unneeded methods 2021-09-21 00:43:30 -04:00
Carlo Cabrera
c7badb1e54
formula_cellar_checks: fix edge case handling in check_binary_arches
Currently, if formula `foo` ships both universal and non-native
binaries and `foo` is on both allowlists, then `brew audit --strict`
errors out with an empty error message:

    ❯ brew audit --strict foo
    foo:
      *
    Error: 1 problem in 1 formula detected

Let's fix this (admittedly obscure) corner case by returning early when
a formula is present on both allowlists.
2021-09-21 01:02:29 +08:00
Rylan Polster
50fac1737a
install: fix HEAD installations with HOMEBREW_INSTALL_FROM_API 2021-09-17 23:46:28 -04:00
Akihiro Suda
f63c3b08fe
New allow list: mismatched_binary_allowlist
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2021-08-11 18:09:26 +09:00
Carlo Cabrera
8e6731b7c7
formula_cellar_checks: show mismatched arch in check_binary_arches
This will make the error more informative by showing the architecture a
binary was built for along with the error message.

Before:

    foo:
      * Binaries built for an incompatible architecture were installed into foo's prefix.
        The offending files are:
          /usr/local/Cellar/foo/1.0/lib/libbar.dylib
          /usr/local/Cellar/foo/1.0/lib/libfoo.dylib
          /usr/local/Cellar/foo/1.0/lib/libincompatible.dylib
        Unexpected universal binaries were found.
        The offending files are:
          /usr/local/Cellar/foo/1.0/lib/liball.dylib
          /usr/local/Cellar/foo/1.0/lib/libuniversal.dylib

After:

    foo:
      * Binaries built for a non-native architecture were installed into foo's prefix.
        The offending files are:
          /usr/local/Cellar/foo/1.0/lib/libbar.dylib        (i386)
          /usr/local/Cellar/foo/1.0/lib/libfoo.dylib        (arm64)
          /usr/local/Cellar/foo/1.0/lib/libincompatible.dylib       (universal)
        Unexpected universal binaries were found.
        The offending files are:
          /usr/local/Cellar/foo/1.0/lib/liball.dylib
          /usr/local/Cellar/foo/1.0/lib/libuniversal.dylib
2021-07-23 11:40:01 +08:00
Carlo Cabrera
a29098c813
Use #partition to simplify extracting compatible_universal_binaries 2021-07-21 12:05:54 +08:00
Carlo Cabrera
699051b3c3
Use #present? instead of #any? 2021-07-20 18:53:53 +08:00
Carlo Cabrera
663aee0a67
Fix style
The linter complained about useless assignment to
`universal_binaries_expected`. It wasn't useless, but ok.
2021-07-20 18:48:40 +08:00
Carlo Cabrera
239fd06728
Enforce universal binary check only for Homebrew/core
Also, prefer `if` to `unless`.
2021-07-20 18:40:19 +08:00
Carlo Cabrera
55cc1eb8b0
Check tap_audit_exception only if tap is present 2021-07-20 13:08:15 +08:00
Carlo Cabrera
1678a3785e
Fix logic in check_binary_arches 2021-07-20 12:35:09 +08:00