├── .ruby-version ├── .github ├── dependabot.yml └── workflows │ ├── release.yml │ ├── build.yml │ ├── actionlint.yml │ └── stale-issues.yml ├── utils.sh ├── Dockerfile.x86_64 ├── Dockerfile.arm64 ├── LICENSE.txt ├── README.md └── .rubocop.yml /.ruby-version: -------------------------------------------------------------------------------- 1 | 3.3.7 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # This file is synced from the `.github` repository, do not modify it directly. 2 | --- 3 | version: 2 4 | updates: 5 | - package-ecosystem: github-actions 6 | directory: "/" 7 | schedule: 8 | interval: weekly 9 | allow: 10 | - dependency-type: all 11 | ignore: 12 | - dependency-name: actions/stale 13 | groups: 14 | artifacts: 15 | patterns: 16 | - actions/*-artifact 17 | 18 | -------------------------------------------------------------------------------- /utils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | verify_checksum() { 6 | FILE="$1" 7 | EXPECTED_CHECKSUM="$2" 8 | FILE_CHECKSUM="$(sha256sum "${FILE}" | cut -d ' ' -f 1)" 9 | 10 | if [[ "$FILE_CHECKSUM" != "$EXPECTED_CHECKSUM" ]]; then 11 | echo "Checksum mismatch!" 12 | return 1 13 | fi 14 | } 15 | 16 | package() { 17 | PKGNAME="$1" 18 | VERSION="$2" 19 | ARCH="$(uname -m)" 20 | 21 | tar --directory "$PREFIX" \ 22 | --create --gzip --verbose \ 23 | --file "$PKGDIR/bootstrap-$ARCH-$PKGNAME-$VERSION.tar.gz" . 24 | find "$PREFIX" -mindepth 1 -delete 25 | } 26 | -------------------------------------------------------------------------------- /Dockerfile.x86_64: -------------------------------------------------------------------------------- 1 | FROM debian/eol:wheezy 2 | ARG DEBIAN_FRONTEND=noninteractive 3 | 4 | RUN apt-get update \ 5 | && apt-get install -y build-essential bzip2 ca-certificates libz-dev texinfo wget \ 6 | && rm -rf /var/lib/apt/lists/* 7 | 8 | RUN useradd --create-home --shell /bin/bash linuxbrew 9 | 10 | ENV CFLAGS="-march=core2 -O2" 11 | ENV CXXFLAGS="-march=core2 -O2" 12 | ENV PREFIX=/tmp/homebrew 13 | RUN su - linuxbrew --command 'mkdir --parents /tmp/homebrew' 14 | ENV PKGDIR=/home/linuxbrew/bootstrap-binaries 15 | RUN su - linuxbrew --command 'mkdir --parents /home/linuxbrew/bootstrap-binaries' 16 | -------------------------------------------------------------------------------- /Dockerfile.arm64: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | RUN sed -e 's/mirror\.centos\.org/vault\.centos\.org/g' \ 4 | -e 's/^mirrorlist=/#mirrorlist=/g' \ 5 | -e 's/^#\s*baseurl=/baseurl=/g' \ 6 | -i /etc/yum.repos.d/CentOS-*.repo \ 7 | && yum install -y @development bzip2 ca-certificates texinfo wget zlib-devel \ 8 | && yum clean all 9 | 10 | RUN useradd --create-home --shell /bin/bash linuxbrew 11 | 12 | ENV CFLAGS="-march=armv8-a -O2" 13 | ENV CXXFLAGS="-march=armv8-a -O2" 14 | ENV PREFIX=/tmp/homebrew 15 | RUN su - linuxbrew --command 'mkdir --parents /tmp/homebrew' 16 | ENV PKGDIR=/home/linuxbrew/bootstrap-binaries 17 | RUN su - linuxbrew --command 'mkdir --parents /home/linuxbrew/bootstrap-binaries' 18 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Upload new release 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | tag: 7 | description: Version to use for release tag 8 | required: true 9 | 10 | jobs: 11 | build: 12 | uses: ./.github/workflows/build.yml 13 | 14 | release: 15 | needs: build 16 | runs-on: ubuntu-latest 17 | permissions: 18 | contents: write 19 | env: 20 | GH_TOKEN: ${{github.token}} 21 | TAG: ${{github.event.inputs.tag}} 22 | steps: 23 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 24 | with: 25 | persist-credentials: false 26 | 27 | - name: Download binaries from GitHub Actions 28 | uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 29 | with: 30 | pattern: bootstrap-* 31 | path: bootstrap-binaries 32 | merge-multiple: true 33 | 34 | - name: Push tag 35 | run: gh release create "$TAG" --generate-notes 36 | 37 | - name: Upload to GitHub Releases 38 | run: gh release upload "$TAG" bootstrap-binaries/*.tar.gz 39 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2009-present, Homebrew contributors 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | * Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | * Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build bootstrap binaries for glibc on Linux 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - .github/workflows/build.yml 7 | - "build-*.sh" 8 | - Dockerfile* 9 | workflow_call: 10 | 11 | jobs: 12 | build: 13 | strategy: 14 | fail-fast: false 15 | matrix: 16 | binary: 17 | - binutils 18 | - bison 19 | - gawk 20 | - gcc 21 | - make 22 | - python3 23 | - sed 24 | arch: 25 | - x86_64 26 | - arm64 27 | include: 28 | - arch: x86_64 29 | runs-on: ubuntu-latest 30 | - arch: arm64 31 | runs-on: ubuntu-24.04-arm 32 | runs-on: ${{matrix.runs-on}} 33 | name: ${{matrix.binary}} (${{matrix.arch}}) 34 | env: 35 | ARCH: ${{matrix.arch}} 36 | BINARY: ${{matrix.binary}} 37 | steps: 38 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 39 | with: 40 | persist-credentials: false 41 | 42 | - name: Build Docker image 43 | run: docker build --tag glibc-bootstrap --file "Dockerfile.$ARCH" . 44 | 45 | - name: Run Docker container 46 | run: docker run --rm --detach --user linuxbrew --name "$GITHUB_SHA" --workdir /home/linuxbrew --volume "$(pwd):/home/linuxbrew/glibc-bootstrap" glibc-bootstrap sleep inf 47 | 48 | - name: Build ${{matrix.binary}} 49 | run: docker exec "$GITHUB_SHA" /bin/bash -c "/home/linuxbrew/glibc-bootstrap/build-$BINARY.sh" 50 | 51 | - name: Copy binaries from container 52 | run: docker cp "$GITHUB_SHA":/home/linuxbrew/bootstrap-binaries . 53 | 54 | - name: Upload binaries to GitHub Actions 55 | uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 56 | with: 57 | name: bootstrap-${{matrix.arch}}-${{matrix.binary}} 58 | path: bootstrap-binaries 59 | -------------------------------------------------------------------------------- /.github/workflows/actionlint.yml: -------------------------------------------------------------------------------- 1 | # This file is synced from the `.github` repository, do not modify it directly. 2 | name: Actionlint 3 | 4 | on: 5 | push: 6 | branches: 7 | - main 8 | - master 9 | pull_request: 10 | merge_group: 11 | 12 | defaults: 13 | run: 14 | shell: bash -xeuo pipefail {0} 15 | 16 | concurrency: 17 | group: "actionlint-${{ github.ref }}" 18 | cancel-in-progress: ${{ github.event_name == 'pull_request' }} 19 | 20 | env: 21 | HOMEBREW_DEVELOPER: 1 22 | HOMEBREW_NO_AUTO_UPDATE: 1 23 | HOMEBREW_NO_ENV_HINTS: 1 24 | 25 | permissions: {} 26 | 27 | jobs: 28 | workflow_syntax: 29 | if: github.repository_owner == 'Homebrew' 30 | runs-on: ubuntu-latest 31 | permissions: 32 | contents: read 33 | steps: 34 | - name: Set up Homebrew 35 | id: setup-homebrew 36 | uses: Homebrew/actions/setup-homebrew@master 37 | with: 38 | core: false 39 | cask: false 40 | test-bot: false 41 | 42 | - name: Install tools 43 | run: brew install actionlint shellcheck zizmor 44 | 45 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 46 | with: 47 | persist-credentials: false 48 | 49 | - run: zizmor --format sarif . > results.sarif 50 | 51 | - name: Upload SARIF file 52 | uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 53 | with: 54 | name: results.sarif 55 | path: results.sarif 56 | 57 | - name: Set up actionlint 58 | run: echo "::add-matcher::$(brew --repository)/.github/actionlint-matcher.json" 59 | 60 | - run: actionlint 61 | 62 | upload_sarif: 63 | needs: workflow_syntax 64 | # We want to always upload this even if `actionlint` failed. 65 | # This is only available on public repositories. 66 | if: > 67 | always() && 68 | !contains(fromJSON('["cancelled", "skipped"]'), needs.workflow_syntax.result) && 69 | !github.event.repository.private 70 | runs-on: ubuntu-latest 71 | permissions: 72 | contents: read 73 | security-events: write 74 | steps: 75 | - name: Download SARIF file 76 | uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 77 | with: 78 | name: results.sarif 79 | path: results.sarif 80 | 81 | - name: Upload SARIF file 82 | uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 83 | with: 84 | sarif_file: results.sarif 85 | category: zizmor 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # glibc-bootstrap 2 | 3 | Bootstrap binaries for compiling `glibc` from source. 4 | 5 | ## Requirements 6 | 7 | To run the binaries built by this workflow: 8 | 9 | For x86-64 Linux: `glibc` 2.13 or newer, and x86-64 CPU architecture with support for `-march=core2` (defined [here](https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html)). 10 | 11 | For ARM64 (AArch64) Linux: `glibc` 2.17 or newer. 12 | 13 | To build the binaries: 14 | 15 | A host machine capable of building and running Linux x86-64 or ARM64 Docker images. 16 | 17 | ## Installation 18 | 19 | The bootstrap binaries are downloaded automatically when building the `glibc` formula from source. This will happen if the user is in a non-default prefix and has a host `glibc` that is older than the one in our CI image we use to build bottles on Linux. 20 | 21 | ## Building binaries outside of GitHub Actions 22 | 23 | GitHub Actions is used to build the binaries in CI. To build them locally: 24 | ``` 25 | # Clone the repository 26 | git clone https://github.com/Homebrew/glibc-bootstrap 27 | cd glibc-bootstrap 28 | 29 | # Build the Docker image. 30 | # For ARM64, use Dockerfile.arm64 instead. 31 | docker build --tag glibc-bootstrap --file Dockerfile.x86_64 . 32 | 33 | # Start the Docker image and leave it running the background so the binaries 34 | # can easily be copied out after they are built. 35 | docker run --rm --detach --user linuxbrew --name glibc-bootstrap \ 36 | --workdir /home/linuxbrew --volume $(pwd):/home/linuxbrew/glibc-bootstrap glibc-bootstrap sleep inf 37 | 38 | # Call a build-*.sh script to build a specific binary. We use build-make.sh as an example. 39 | docker exec glibc-bootstrap /bin/bash -c "/home/linuxbrew/glibc-bootstrap/build-make.sh" 40 | 41 | # Copy the binaries out of the container after they have been compiled. 42 | docker cp glibc-bootstrap:/home/linuxbrew/bootstrap-binaries . 43 | ``` 44 | 45 | ## Motivation 46 | 47 | The `glibc` bottle is not relocatable and must be built from source if the user is in a non-default prefix. While `glibc` has no runtime dependencies, it does have build dependencies which may be too new or unavailable to users without root access. Rather than requiring the user to build these dependencies from source, we build them with GitHub Actions in this repository using a Linux image with an older version of `glibc` and a prefix of `/tmp/homebrew`. Assuming the user has write access to `/tmp`, this approach guarantees that all users on actively maintained versions of `glibc` can install and run these binaries. The build dependency binaries are installed as resources to `/tmp/homebrew` and used to build `glibc` instead of the host toolchain. 48 | 49 | ## Copyright 50 | Copyright (c) Homebrew maintainers. See LICENSE.txt for details. 51 | -------------------------------------------------------------------------------- /.github/workflows/stale-issues.yml: -------------------------------------------------------------------------------- 1 | # This file is synced from the `.github` repository, do not modify it directly. 2 | name: Manage stale issues 3 | 4 | on: 5 | push: 6 | paths: 7 | - .github/workflows/stale-issues.yml 8 | branches-ignore: 9 | - dependabot/** 10 | schedule: 11 | # Once every day at midnight UTC 12 | - cron: "0 0 * * *" 13 | issue_comment: 14 | 15 | permissions: {} 16 | 17 | defaults: 18 | run: 19 | shell: bash -xeuo pipefail {0} 20 | 21 | concurrency: 22 | group: stale-issues 23 | cancel-in-progress: ${{ github.event_name != 'issue_comment' }} 24 | 25 | jobs: 26 | stale: 27 | if: > 28 | github.repository_owner == 'Homebrew' && ( 29 | github.event_name != 'issue_comment' || ( 30 | contains(github.event.issue.labels.*.name, 'stale') || 31 | contains(github.event.pull_request.labels.*.name, 'stale') 32 | ) 33 | ) 34 | runs-on: ubuntu-latest 35 | permissions: 36 | contents: write 37 | issues: write 38 | pull-requests: write 39 | steps: 40 | - name: Mark/Close Stale Issues and Pull Requests 41 | uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 42 | with: 43 | repo-token: ${{ secrets.GITHUB_TOKEN }} 44 | days-before-stale: 21 45 | days-before-close: 7 46 | stale-issue-message: > 47 | This issue has been automatically marked as stale because it has not had 48 | recent activity. It will be closed if no further activity occurs. 49 | stale-pr-message: > 50 | This pull request has been automatically marked as stale because it has not had 51 | recent activity. It will be closed if no further activity occurs. 52 | exempt-issue-labels: "gsoc-outreachy,help wanted,in progress" 53 | exempt-pr-labels: "gsoc-outreachy,help wanted,in progress" 54 | delete-branch: true 55 | 56 | bump-pr-stale: 57 | if: > 58 | github.repository_owner == 'Homebrew' && ( 59 | github.event_name != 'issue_comment' || ( 60 | contains(github.event.issue.labels.*.name, 'stale') || 61 | contains(github.event.pull_request.labels.*.name, 'stale') 62 | ) 63 | ) 64 | runs-on: ubuntu-latest 65 | permissions: 66 | contents: write 67 | issues: write 68 | pull-requests: write 69 | steps: 70 | - name: Mark/Close Stale `bump-formula-pr` and `bump-cask-pr` Pull Requests 71 | uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0 72 | with: 73 | repo-token: ${{ secrets.GITHUB_TOKEN }} 74 | days-before-stale: 2 75 | days-before-close: 1 76 | stale-pr-message: > 77 | This pull request has been automatically marked as stale because it has not had 78 | recent activity. It will be closed if no further activity occurs. To keep this 79 | pull request open, add a `help wanted` or `in progress` label. 80 | exempt-pr-labels: "help wanted,in progress" 81 | any-of-labels: "bump-formula-pr,bump-cask-pr" 82 | delete-branch: true 83 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | # This file is synced from `Homebrew/brew` by the `.github` repository, do not modify it directly. 2 | --- 3 | AllCops: 4 | TargetRubyVersion: 3.3 5 | NewCops: enable 6 | Include: 7 | - "**/*.rbi" 8 | Exclude: 9 | - Homebrew/sorbet/rbi/{dsl,gems}/**/*.rbi 10 | - Homebrew/bin/* 11 | - Homebrew/vendor/**/* 12 | - Taps/*/*/vendor/**/* 13 | - "**/vendor/**/*" 14 | SuggestExtensions: 15 | rubocop-minitest: false 16 | Layout/ArgumentAlignment: 17 | Exclude: 18 | - Taps/*/*/*.rb 19 | - "/**/Formula/**/*.rb" 20 | - "**/Formula/**/*.rb" 21 | Layout/CaseIndentation: 22 | EnforcedStyle: end 23 | Layout/FirstArrayElementIndentation: 24 | EnforcedStyle: consistent 25 | Layout/FirstHashElementIndentation: 26 | EnforcedStyle: consistent 27 | Layout/EndAlignment: 28 | EnforcedStyleAlignWith: start_of_line 29 | Layout/HashAlignment: 30 | EnforcedHashRocketStyle: table 31 | EnforcedColonStyle: table 32 | Layout/LeadingCommentSpace: 33 | Exclude: 34 | - Taps/*/*/cmd/*.rb 35 | Layout/LineLength: 36 | Max: 118 37 | AllowedPatterns: 38 | - "#: " 39 | - ' url "' 40 | - ' mirror "' 41 | - " plist_options " 42 | - ' executable: "' 43 | - ' font "' 44 | - ' homepage "' 45 | - ' name "' 46 | - ' pkg "' 47 | - ' pkgutil: "' 48 | - " sha256 cellar: " 49 | - " sha256 " 50 | - "#{language}" 51 | - "#{version." 52 | - ' "/Library/Application Support/' 53 | - "\"/Library/Caches/" 54 | - "\"/Library/PreferencePanes/" 55 | - ' "~/Library/Application Support/' 56 | - "\"~/Library/Caches/" 57 | - "\"~/Library/Containers" 58 | - "\"~/Application Support" 59 | - " was verified as official when first introduced to the cask" 60 | Layout/SpaceAroundOperators: 61 | Enabled: false 62 | Layout/SpaceBeforeBrackets: 63 | Exclude: 64 | - "**/*_spec.rb" 65 | - Taps/*/*/*.rb 66 | - "/**/{Formula,Casks}/**/*.rb" 67 | - "**/{Formula,Casks}/**/*.rb" 68 | Lint/AmbiguousBlockAssociation: 69 | Enabled: false 70 | Lint/DuplicateBranch: 71 | Exclude: 72 | - Taps/*/*/*.rb 73 | - "/**/{Formula,Casks}/**/*.rb" 74 | - "**/{Formula,Casks}/**/*.rb" 75 | Lint/ParenthesesAsGroupedExpression: 76 | Exclude: 77 | - Taps/*/*/*.rb 78 | - "/**/Formula/**/*.rb" 79 | - "**/Formula/**/*.rb" 80 | Lint/UnusedMethodArgument: 81 | AllowUnusedKeywordArguments: true 82 | Metrics: 83 | Enabled: false 84 | Naming/BlockForwarding: 85 | Enabled: false 86 | Naming/FileName: 87 | Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/ 88 | Naming/HeredocDelimiterNaming: 89 | ForbiddenDelimiters: 90 | - END, EOD, EOF 91 | Naming/InclusiveLanguage: 92 | CheckStrings: true 93 | FlaggedTerms: 94 | slave: 95 | AllowedRegex: 96 | - gitslave 97 | - log_slave 98 | - ssdb_slave 99 | - var_slave 100 | - patches/13_fix_scope_for_show_slave_status_data.patch 101 | Naming/MethodName: 102 | AllowedPatterns: 103 | - "\\A(fetch_)?HEAD\\?\\Z" 104 | Naming/MethodParameterName: 105 | inherit_mode: 106 | merge: 107 | - AllowedNames 108 | Naming/VariableNumber: 109 | Enabled: false 110 | Style/AndOr: 111 | EnforcedStyle: always 112 | Style/ArgumentsForwarding: 113 | Enabled: false 114 | Style/AutoResourceCleanup: 115 | Enabled: true 116 | Style/BarePercentLiterals: 117 | EnforcedStyle: percent_q 118 | Style/BlockDelimiters: 119 | BracesRequiredMethods: 120 | - sig 121 | Style/ClassAndModuleChildren: 122 | Exclude: 123 | - "**/*.rbi" 124 | Style/CollectionMethods: 125 | Enabled: true 126 | Style/DisableCopsWithinSourceCodeDirective: 127 | Enabled: true 128 | Include: 129 | - Taps/*/*/*.rb 130 | - "/**/{Formula,Casks}/**/*.rb" 131 | - "**/{Formula,Casks}/**/*.rb" 132 | Style/Documentation: 133 | Exclude: 134 | - Taps/**/* 135 | - "/**/{Formula,Casks}/**/*.rb" 136 | - "**/{Formula,Casks}/**/*.rb" 137 | - "**/*.rbi" 138 | Style/EmptyMethod: 139 | Exclude: 140 | - "**/*.rbi" 141 | Style/FetchEnvVar: 142 | Exclude: 143 | - Taps/*/*/*.rb 144 | - "/**/Formula/**/*.rb" 145 | - "**/Formula/**/*.rb" 146 | Style/FrozenStringLiteralComment: 147 | EnforcedStyle: always 148 | Exclude: 149 | - Taps/*/*/*.rb 150 | - "/**/{Formula,Casks}/**/*.rb" 151 | - "**/{Formula,Casks}/**/*.rb" 152 | - Homebrew/test/**/Casks/**/*.rb 153 | - "**/*.rbi" 154 | - "**/Brewfile" 155 | Style/GuardClause: 156 | Exclude: 157 | - Taps/*/*/*.rb 158 | - "/**/{Formula,Casks}/**/*.rb" 159 | - "**/{Formula,Casks}/**/*.rb" 160 | Style/HashAsLastArrayItem: 161 | Exclude: 162 | - Taps/*/*/*.rb 163 | - "/**/Formula/**/*.rb" 164 | - "**/Formula/**/*.rb" 165 | Style/InverseMethods: 166 | InverseMethods: 167 | :blank?: :present? 168 | Style/InvertibleUnlessCondition: 169 | Enabled: true 170 | InverseMethods: 171 | :==: :!= 172 | :zero?: 173 | :blank?: :present? 174 | Style/MutableConstant: 175 | EnforcedStyle: strict 176 | Style/NumericLiteralPrefix: 177 | EnforcedOctalStyle: zero_only 178 | Style/NumericLiterals: 179 | MinDigits: 7 180 | Strict: true 181 | Exclude: 182 | - "**/Brewfile" 183 | Style/OpenStructUse: 184 | Exclude: 185 | - Taps/**/* 186 | Style/OptionalBooleanParameter: 187 | AllowedMethods: 188 | - respond_to? 189 | - respond_to_missing? 190 | Style/RedundantLineContinuation: 191 | Enabled: false 192 | Style/RescueStandardError: 193 | EnforcedStyle: implicit 194 | Style/ReturnNil: 195 | Enabled: true 196 | Style/StderrPuts: 197 | Enabled: false 198 | Style/StringConcatenation: 199 | Exclude: 200 | - Taps/*/*/*.rb 201 | - "/**/{Formula,Casks}/**/*.rb" 202 | - "**/{Formula,Casks}/**/*.rb" 203 | Style/StringLiterals: 204 | EnforcedStyle: double_quotes 205 | Style/StringLiteralsInInterpolation: 206 | EnforcedStyle: double_quotes 207 | Style/StringMethods: 208 | Enabled: true 209 | Style/SuperWithArgsParentheses: 210 | Enabled: false 211 | Style/SymbolArray: 212 | EnforcedStyle: brackets 213 | Style/TernaryParentheses: 214 | EnforcedStyle: require_parentheses_when_complex 215 | Style/TopLevelMethodDefinition: 216 | Enabled: true 217 | Exclude: 218 | - Taps/**/* 219 | Style/TrailingCommaInArguments: 220 | EnforcedStyleForMultiline: comma 221 | Style/TrailingCommaInArrayLiteral: 222 | EnforcedStyleForMultiline: comma 223 | Style/TrailingCommaInHashLiteral: 224 | EnforcedStyleForMultiline: comma 225 | Style/UnlessLogicalOperators: 226 | Enabled: true 227 | EnforcedStyle: forbid_logical_operators 228 | Style/WordArray: 229 | MinSize: 4 230 | 231 | --------------------------------------------------------------------------------