diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..d487a895 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,14 @@ +# Make sure RUBY_VERSION matches the Ruby version in .ruby-version +ARG RUBY_VERSION=3.2.2 +FROM ghcr.io/rails/devcontainer/images/ruby:$RUBY_VERSION + +# Install packages needed to build gems +RUN apt-get update -qq && \ + apt-get install --no-install-recommends -y \ + libpq-dev libvips \ + # For video thumbnails + ffmpeg \ + # For pdf thumbnails. If you want to use mupdf instead of poppler, + # you can install the following packages instead: + # mupdf mupdf-tools + poppler-utils diff --git a/.devcontainer/compose.yaml b/.devcontainer/compose.yaml new file mode 100644 index 00000000..fb3bcf38 --- /dev/null +++ b/.devcontainer/compose.yaml @@ -0,0 +1,50 @@ +services: + rails-app: + build: + context: .. + dockerfile: .devcontainer/Dockerfile + + volumes: + - ../..:/workspaces:cached + + # Overrides default command so things don't shut down after the process ends. + command: sleep infinity + + networks: + - default + + # Uncomment the next line to use a non-root user for all processes. + # user: vscode + + # Use "forwardPorts" in **devcontainer.json** to forward an app port locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + ports: + - 45678:45678 + depends_on: + - redis + - postgres + + + redis: + image: redis:7.2 + restart: unless-stopped + networks: + - default + volumes: + - redis-data:/data + + postgres: + image: postgres:16.1 + restart: unless-stopped + networks: + - default + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + + +volumes: + redis-data: + postgres-data: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..3e374a01 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/ruby +{ + "name": "ticket_booth", + "dockerComposeFile": "compose.yaml", + "service": "rails-app", + "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", + + // Features to add to the dev container. More info: https://containers.dev/features. + "features": { + "ghcr.io/devcontainers/features/github-cli:1": {} + }, + + "containerEnv": { + "REDIS_URL": "redis://redis:6379/1", + "DB_HOST": "postgres" + }, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root", + + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "bin/setup" +} diff --git a/.env b/.env deleted file mode 100644 index 6faa3628..00000000 --- a/.env +++ /dev/null @@ -1,10 +0,0 @@ -RUBY_VERSION=2.5.8 -PORT=5000 -POSTGRES_DB=cloudwatch_dev -POSTGRES_USER=postgres -POSTGRES_PASSWORD= -CLOUDFLARE_EMAIL= -POSTGRES_VERSION=12 -TERRAFORM_VERSION=1.1.8 -SENTRY_PLUGIN_VERSION=0.7.0 -ANSIBLE_VERSION="6.0.0a1" diff --git a/.envrc b/.envrc index 3306c889..a27a9bf6 100644 --- a/.envrc +++ b/.envrc @@ -1,5 +1,27 @@ # vim: ft=bash PATH_add bin +PATH_add /opt/homebrew/bin + +export VOLTA_HOME=${HOME}/.volta +PATH_add ${VOLTA_HOME}/bin + +export brew_prefix="$(brew --prefix)" + +pg_pkg="postgresql@$(cat .postgresql-version)" +pg_dir="$(brew --prefix "${pg_pkg}")/bin/" + +[[ -d ${pg_dir} ]] && PATH_add "${pg_dir}" + +export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES + +export V8HOME=$(brew --prefix v8@3.15) + +export CFLAGS="-Wno-error=implicit-function-declaration -Wno-error=no-compound-token-split-by-macro" +export CPPFLAGS="$CPPFLAGS -I ${brew_prefix}/include -I ${V8HOME}/include" +export LDFLAGS="$LDFLAGS -L ${brew_prefix}/lib -L ${V8HOME}/lib" + +export RUBY_CPPFLAGS="$CPPFLAGS" +export RUBY_CFLAGS="$CFLAGS" [[ -f .envrc.local ]] && source .envrc.local diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..8dc43234 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +# See https://git-scm.com/docs/gitattributes for more about git attribute files. + +# Mark the database schema as having been generated. +db/schema.rb linguist-generated + +# Mark any vendored files as having been vendored. +vendor/* linguist-vendored +config/credentials/*.yml.enc diff=rails_credentials +config/credentials.yml.enc diff=rails_credentials diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index 49f70f21..00000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,35 +0,0 @@ -# vim: set ft=codeowners -#============================================================================= -# NOTE: for VIM syntax, install https://github.com/rhysd/vim-syntax-codeowners -#============================================================================= -# -# FILE: .github/CODEOWNERS -# -# For information on how this file is structured, it's purpose -# and syntax, please read the following: https://bit.ly/github-codeowners -# -# REMEMBER: if you add a new team to this file, make sure that: -# -# 1. The team has this repo added to its Repo list -# 2. The team has write access to this repo -# 3. The settings for the team have "Code Review" tab -# and all checkboxes checked, except "Never assign...". -# -#============================================================================= - -# Code -* @fnf-org/fnf-engineeres - -# Build — keeping them separately for the time we have a dedicated security team -Dockerfile* @fnf-org/fnf-engineeres -docker-compose.yml @fnf-org/fnf-engineeres -/deploy @fnf-org/fnf-engineeres - -# Security -/Gemfile @fnf-org/fnf-engineeres -/Gemfile.lock @fnf-org/fnf-engineeres -/config @fnf-org/fnf-engineeres -/webpack.*.json @fnf-org/fnf-engineeres - -# Folks in this team should review all migrations. - diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..f0527e6b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: +- package-ecosystem: bundler + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 diff --git a/.github/workflows/bash.yml b/.github/workflows/bash.yml index 84f4a689..91a50304 100644 --- a/.github/workflows/bash.yml +++ b/.github/workflows/bash.yml @@ -10,11 +10,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Run ShellCheck - uses: ludeeus/action-shellcheck@master - with: - check_together: 'yes' - scandir: './bin' - ignore_names: init.sh + run: bin/shchk permissions: checks: read contents: read diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index 1f345d85..00000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,41 +0,0 @@ -name: Create and publish a Docker image - -on: - push: - branches: [ 'release', 'releases/**'] - -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - -jobs: - build-and-push-image: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - - - name: Log in to the Container registry - uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - - - name: Build and push Docker image - uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..1b6e5dc1 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,63 @@ +name: Create and publish a Docker image + +on: + push: + branches: [ 'release', 'releases/**'] + workflow_dispatch: + inputs: + branch: + description: 'Branch to build' + required: true + default: 'main' + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.branch || github.ref }} + + # login-action v3.1.0 + - name: Log in to the Container registry + uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + # metadata-action v5.5.1 + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + # In order to support deploying multiple versions that don't stomp on + # each other some new tagging rules are created. + # The tagging below follows: + # - When a properly formatted tag is created, as in a release, put the semver version x.y.z in the tag + # - If a build is triggered manually, then mark the branch and short sha in the tag + # - When the default branch is updated, create a release candiate tag + tags: | + type=semver,pattern={{version}} + type=sha,prefix={{branch || tag}}-{{sha}},event=workflow_dispatch + type=raw,value={{date 'YYYYMMDD-HHmm' tz='America/Los_Angeles'}}-rc,event=branch,branch={{is_default_branch}} + + # build-push-action v5.3.0 + - name: Build and push Docker image + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..3db492e2 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,69 @@ +--- +name: DeployToGKE +concurrency: production + +on: + release: + types: + - created + push: + branches: + - 'releases/*' + tags: + - '*-rc' + workflow_dispatch: + inputs: + containerTag: + required: true + description: 'The docker tag for a container already in GCP' + +env: + GCP_REGION: us-central1 + GKE_CLUSTER_NAME: fnf-apps + +jobs: + deploy: + name: TicketBoothDeploy + runs-on: ubuntu-latest + environment: ${{ vars.ENVIRONMENT }} + permissions: + contents: 'read' + id-token: 'write' + steps: + # This step is only required because the Helm chart is in this repo + - id: checkout + name: TicketBooth checkout + uses: actions/checkout@v4 + with: + ref: ${{ github.event_name == "workflow_dispatch" && 'main' || github.ref }} + fetch-depth: 1 + + - id: gcpAuth + uses: google-github-actions/auth@v2 + with: + workload_identity_provider: "projects/${{ vars.GCP_PROJECT_ID }}/locations/global/workloadIdentityPools" + service_account: ${{ vars.GCP_SERVICE_ACCOUNT_ID }} + + - id: gkeLogin + name: GKE Login + uses: google-github-actions/get-gke-credentials@v2 + with: + cluster_name: ${{ env.GKE_CLUSTER_NAME }} + location: ${{ env.GCP_REGION }} + + - id: runHelm + name: Helm Update + uses: deliverybot/helm@v1 + with: + release: ${{ vars.HELM_RELEASE }} + namespace: default + chart: deployment/chart + token: ${{ github.token }} + values: | + image.tag: ${{ github.event_name == "workflow_dispatch" && inputs.containerTag || github.ref_name }} + value-files: >- + [ + "deployment/env/base.yaml", + "deployment/${{ environment }}.yaml" + ] + atomic: ${{ github.event_name == "workflow_dispatch" && false || true }} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..2931244f --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,26 @@ +# .github/workflows/main.yaml +name: "TicketBooth CI: Lint" + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + main: + name: RuboCop + runs-on: ubuntu-latest + steps: + - run: sudo apt-get update -yqq + - run: sudo apt-get install -yqq netcat libpq-dev + + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2.3' + bundler-cache: true + + - name: RuboCop + run: bin/rubocop --parallel diff --git a/.github/workflows/rspec.yml b/.github/workflows/rspec.yml new file mode 100644 index 00000000..feab2fc9 --- /dev/null +++ b/.github/workflows/rspec.yml @@ -0,0 +1,77 @@ +# .github/workflows/main.yaml +name: "TicketBooth CI: RSpec" + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + main: + name: RSpec + runs-on: ubuntu-latest + + # If you need DB like MySQL then define service below. + # Example for PostgreSQL and Redis can be found here: + # https://github.com/actions/example-services/tree/master/.github/workflows + services: + postgresql: + image: postgres + env: + POSTGRES_USER: "postgres" + POSTGRES_PASSWORD: "" + POSTGRES_HOST_AUTH_METHOD: "trust" + ports: + - 5432:5432 + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + redis: + image: redis + ports: + - 6379:6379 + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + + - uses: niden/actions-memcached@v7 + + - run: sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' + - run: wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - + - run: sudo apt-get update -yqq + - run: sudo apt-get install -yqq netcat libpq-dev postgresql-client-16 + + - name: "Verify Memcached is running" + run: echo -e "stats\nquit" | nc localhost 11211 | grep -e "accepting_conns 1" -q + + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2.3' + bundler-cache: true + + - shell: bash + env: + RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} + run: echo -n "${RAILS_MASTER_KEY}" > config/master.key + + - name: "Check master key" + run: cat config/master.key | wc + + - name: "Create and migrate the DB" + run: | + bin/rails db:create + bin/rails db:migrate + bin/rails db:test:prepare + + - name: "Run Rspec" + run: bundle exec rspec diff --git a/.github/workflows/rubocop.yml b/.github/workflows/rubocop.yml deleted file mode 100644 index fdefa3c5..00000000 --- a/.github/workflows/rubocop.yml +++ /dev/null @@ -1,25 +0,0 @@ - -name: Rubocop - -on: - push: - branches: [ main ] - pull_request: - branches: [ main] - -jobs: - test: - runs-on: ubuntu-latest - env: - CODECOV_TOKEN: "" - steps: - - uses: actions/checkout@v2 - - uses: ruby/setup-ruby@v1 - with: - ruby-version: 2.5.8 # Not needed with a .ruby-version file - bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - - run: | - gem install bundler --version 1.17.3 -N - bundle _1.17.3_ install -j 12 - bundle exec rubocop --format progress -P diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml deleted file mode 100644 index feb3fdab..00000000 --- a/.github/workflows/ruby.yml +++ /dev/null @@ -1,44 +0,0 @@ - -name: RSpec -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - runs-on: ubuntu-latest - services: - postgres: - image: postgres:13 - ports: - - 5432:5432 - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 - redis: - image: redis - ports: - - 6379:6379 - options: --entrypoint redis-server - steps: - - uses: actions/checkout@v2 - - uses: ruby/setup-ruby@v1 - with: - ruby-version: 2.5.8 # Not needed with a .ruby-version file - bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - - run: | - gem update --system 3.2.3 || true - gem install bundler --version 1.17.3 -N - bundle _1.17.3_ install -j 12 - - - run: | - bundle exec rake db:create - bundle exec rake db:migrate - bundle exec rake db:test:prepare - - - run: | - bundle exec rspec diff --git a/.gitignore b/.gitignore index ae9e9c53..a84e78e7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,30 +1,46 @@ -# Ignore all logfiles and tempfiles +!/.env*.erb +!/app/assets/builds/.keep +!/log/.keep +!/storage/.keep +!/tmp/.keep +!/tmp/pids/ +!/tmp/pids/.keep +!/tmp/storage/ +!/tmp/storage/.keep **/.DS_Store +./idea +.dccache +.env.secrets +.envrc.local .idea +.make.env +.viminfo .vscode -/log -/tmp - -# Ignore file uploads in development -/public/uploads - -# Ignore secrets -/ansible/vault-password -.env.secrets - -# Ignore backups -/backups +/.bundle +/.env* +/.history /.yard /.yardoc +/.yarn/*.gz +/ansible/vault-password +/app/assets/builds/* +/backups +/config/master.key /coverage /doc -/.history -/.bundle +/log/* +/log/*.log +/node_modules /public/assets +/public/uploads +/storage/* +/tmp +/tmp/* +/tmp/pids/* +/tmp/storage/* /vendor/bundle -.envrc.local -.make.env Downloads -.dccache -.viminfo newrelic_agent.log + +/app/assets/builds/* +!/app/assets/builds/.keep diff --git a/.node-version b/.node-version new file mode 100644 index 00000000..bc78e9f2 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +20.12.1 diff --git a/.postgresql-version b/.postgresql-version new file mode 100644 index 00000000..b6a7d89c --- /dev/null +++ b/.postgresql-version @@ -0,0 +1 @@ +16 diff --git a/.rspec b/.rspec index 65e0669b..931d72a0 100644 --- a/.rspec +++ b/.rspec @@ -2,4 +2,4 @@ --color --order rand --profile 5 ---require spec_helper +--require rails_helper diff --git a/.rubocop.yml b/.rubocop.yml index 489bf554..1e3fffce 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,111 +2,15 @@ inherit_from: .rubocop_todo.yml AllCops: NewCops: enable -Gemspec/DateAssignment: # new in 1.10 - Enabled: true -Gemspec/RequireMFA: # new in 1.23 - Enabled: true -Layout/LineEndStringConcatenationIndentation: # new in 1.18 - Enabled: true -Layout/SpaceBeforeBrackets: # new in 1.7 - Enabled: true -Lint/AmbiguousAssignment: # new in 1.7 - Enabled: true -Lint/AmbiguousOperatorPrecedence: # new in 1.21 - Enabled: true -Lint/AmbiguousRange: # new in 1.19 - Enabled: true -Lint/DeprecatedConstants: # new in 1.8 - Enabled: true -Lint/DuplicateBranch: # new in 1.3 - Enabled: true -Lint/DuplicateRegexpCharacterClassElement: # new in 1.1 - Enabled: true -Lint/EmptyBlock: # new in 1.1 - Enabled: true -Lint/EmptyClass: # new in 1.3 - Enabled: true -Lint/EmptyInPattern: # new in 1.16 - Enabled: true -Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21 - Enabled: true -Lint/LambdaWithoutLiteralBlock: # new in 1.8 - Enabled: true -Lint/NoReturnInBeginEndBlocks: # new in 1.2 - Enabled: true -Lint/NumberedParameterAssignment: # new in 1.9 - Enabled: true -Lint/OrAssignmentToConstant: # new in 1.9 - Enabled: true -Lint/RedundantDirGlobSort: # new in 1.8 - Enabled: true -Lint/RefinementImportMethods: # new in 1.27 - Enabled: true -Lint/RequireRelativeSelfPath: # new in 1.22 - Enabled: true -Lint/SymbolConversion: # new in 1.9 - Enabled: true -Lint/ToEnumArguments: # new in 1.1 - Enabled: true -Lint/TripleQuotes: # new in 1.9 - Enabled: true -Lint/UnexpectedBlockArity: # new in 1.5 - Enabled: true -Lint/UnmodifiedReduceAccumulator: # new in 1.1 - Enabled: true -Lint/UselessRuby2Keywords: # new in 1.23 - Enabled: true -Naming/BlockForwarding: # new in 1.24 - Enabled: true -Security/IoMethods: # new in 1.22 - Enabled: true -Style/ArgumentsForwarding: # new in 1.1 - Enabled: true -Style/CollectionCompact: # new in 1.2 - Enabled: true -Style/DocumentDynamicEvalDefinition: # new in 1.1 - Enabled: true -Style/EndlessMethod: # new in 1.8 - Enabled: true -Style/FileRead: # new in 1.24 - Enabled: true -Style/FileWrite: # new in 1.24 - Enabled: true -Style/HashConversion: # new in 1.10 - Enabled: true -Style/HashExcept: # new in 1.7 - Enabled: true -Style/IfWithBooleanLiteralBranches: # new in 1.9 - Enabled: true -Style/InPatternThen: # new in 1.16 - Enabled: true -Style/MapToHash: # new in 1.24 - Enabled: true -Style/MultilineInPatternThen: # new in 1.16 - Enabled: true -Style/NegatedIfElseCondition: # new in 1.2 - Enabled: true -Style/NestedFileDirname: # new in 1.26 - Enabled: true -Style/NilLambda: # new in 1.3 - Enabled: true -Style/NumberedParameters: # new in 1.22 - Enabled: true -Style/NumberedParametersLimit: # new in 1.22 - Enabled: true -Style/OpenStructUse: # new in 1.23 - Enabled: true -Style/QuotedSymbols: # new in 1.16 - Enabled: true -Style/RedundantArgument: # new in 1.4 - Enabled: true -Style/RedundantInitialize: # new in 1.27 - Enabled: true -Style/RedundantSelfAssignmentBranch: # new in 1.19 - Enabled: true -Style/SelectByRegexp: # new in 1.22 - Enabled: true -Style/StringChars: # new in 1.12 - Enabled: true -Style/SwapValues: # new in 1.1 - Enabled: true +require: + - rubocop-factory_bot + - rubocop-rails + - rubocop-rake + - rubocop-rspec + - rubocop-rspec_rails + +Style/IfUnlessModifier: + Enabled: false + +RSpecRails/InferredSpecType: + Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index ceaf9ed4..36c90d96 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,17 +1,17 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2022-05-02 03:13:36 UTC using RuboCop version 1.27.0. +# on 2024-04-16 10:59:33 UTC using RuboCop version 1.63.1. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new # versions of RuboCop, may require this file to be generated again. -# Offense count: 2 +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: AllowSafeAssignment. Lint/AssignmentInCondition: Exclude: - 'app/controllers/passwords_controller.rb' - - 'app/controllers/ticket_requests_controller.rb' # Offense count: 1 Lint/ShadowingOuterLocalVariable: @@ -23,78 +23,226 @@ Lint/UnmodifiedReduceAccumulator: Exclude: - 'app/helpers/shifts_helper.rb' -# Offense count: 1 -Lint/UselessAssignment: - Exclude: - - 'config/unicorn.rb' - -# Offense count: 20 -# Configuration parameters: IgnoredMethods, CountRepeatedAttributes. +# Offense count: 27 +# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes. Metrics/AbcSize: - Max: 62 + Max: 75 -# Offense count: 21 -# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods. -# IgnoredMethods: refine +# Offense count: 6 +# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode. +# AllowedMethods: refine Metrics/BlockLength: - Max: 255 + Max: 47 # Offense count: 2 # Configuration parameters: CountComments, CountAsOne. Metrics/ClassLength: - Max: 157 + Max: 148 -# Offense count: 4 -# Configuration parameters: IgnoredMethods. +# Offense count: 10 +# Configuration parameters: AllowedMethods, AllowedPatterns. Metrics/CyclomaticComplexity: Max: 13 -# Offense count: 25 -# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods. +# Offense count: 36 +# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns. Metrics/MethodLength: - Max: 59 + Max: 58 # Offense count: 1 # Configuration parameters: CountComments, CountAsOne. Metrics/ModuleLength: Max: 114 -# Offense count: 3 -# Configuration parameters: IgnoredMethods. +# Offense count: 8 +# Configuration parameters: AllowedMethods, AllowedPatterns. Metrics/PerceivedComplexity: Max: 15 -# Offense count: 6 +# Offense count: 3 # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. -# AllowedNames: at, by, db, id, in, io, ip, of, on, os, pp, to +# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to Naming/MethodParameterName: Exclude: - - 'spec/support/factory_bot.rb' - 'spec/support/time_extensions.rb' -# Offense count: 74 +# Offense count: 19 +# Configuration parameters: Prefixes, AllowedPatterns. +# Prefixes: when, with, without +RSpec/ContextWording: + Exclude: + - 'spec/controllers/events_controller_spec.rb' + - 'spec/models/event_spec.rb' + - 'spec/models/ticket_request_spec.rb' + +# Offense count: 1 +# Configuration parameters: IgnoredMetadata. +RSpec/DescribeClass: + Exclude: + - 'spec/lib/fnf/music_submissions_spec.rb' + +# Offense count: 12 +# Configuration parameters: AllowSubject. +RSpec/MultipleMemoizedHelpers: + Max: 12 + +# Offense count: 2 +# Configuration parameters: EnforcedStyle, IgnoreSharedExamples. +# SupportedStyles: always, named_only +RSpec/NamedSubject: + Exclude: + - 'spec/lib/fnf/csv_reader_spec.rb' + - 'spec/models/ticket_request_spec.rb' + +# Offense count: 71 +# Configuration parameters: AllowedGroups. +RSpec/NestedGroups: + Max: 6 + +# Offense count: 14 +# Configuration parameters: AllowedPatterns. +# AllowedPatterns: ^expect_, ^assert_ +RSpec/NoExpectationExample: + Exclude: + - 'spec/controllers/events_controller_spec.rb' + - 'spec/models/ticket_request_spec.rb' + - 'spec/models/user_spec.rb' + +# Offense count: 2 +RSpec/RepeatedExampleGroupBody: + Exclude: + - 'spec/models/event_spec.rb' + +# Offense count: 9 +# Configuration parameters: Database, Include. +# SupportedDatabases: mysql, postgresql +# Include: db/**/*.rb +Rails/BulkChangeTable: + Exclude: + - 'db/migrate/20130226221916_add_user_to_ticket_request.rb' + - 'db/migrate/20130325024448_add_ticket_cost_info_to_event.rb' + - 'db/migrate/20130803212458_add_start_and_end_ticket_sale_times_to_events.rb' + - 'db/migrate/20140428045329_add_role_to_ticket_requests.rb' + - 'db/migrate/20140605045004_extract_address_into_multiple_fields.rb' + - 'db/migrate/20140616030905_change_camping_type_on_ticket_requests.rb' + - 'db/migrate/20160611234315_add_eald_columns.rb' + +# Offense count: 3 +# Configuration parameters: Include. +# Include: app/models/**/*.rb +Rails/HasManyOrHasOneDependent: + Exclude: + - 'app/models/event.rb' + - 'app/models/ticket_request.rb' + - 'app/models/user.rb' + +# Offense count: 3 +# Configuration parameters: Include. +# Include: app/helpers/**/*.rb +Rails/HelperInstanceVariable: + Exclude: + - 'app/helpers/shifts_helper.rb' + +# Offense count: 16 +Rails/I18nLocaleTexts: + Exclude: + - 'app/controllers/events_controller.rb' + - 'app/controllers/home_controller.rb' + - 'app/controllers/jobs_controller.rb' + - 'app/controllers/passwords_controller.rb' + - 'app/controllers/payments_controller.rb' + - 'app/controllers/shifts_controller.rb' + - 'app/controllers/ticket_requests_controller.rb' + - 'app/models/event_admin.rb' + - 'app/models/payment.rb' + - 'app/models/site_admin.rb' + - 'app/models/user.rb' + +# Offense count: 1 +# Configuration parameters: Database, Include. +# SupportedDatabases: mysql +# Include: db/**/*.rb +Rails/NotNullColumn: + Exclude: + - 'db/migrate/20130311213508_add_event_id_to_ticket_request.rb' + +# Offense count: 9 +# Configuration parameters: Include. +# Include: db/**/*.rb +Rails/ReversibleMigration: + Exclude: + - 'db/migrate/20130226221916_add_user_to_ticket_request.rb' + - 'db/migrate/20140515053804_remove_performer_from_ticket_requests.rb' + - 'db/migrate/20140605045004_extract_address_into_multiple_fields.rb' + - 'db/migrate/20140605052627_remove_volunteer_shifts_from_ticket_requests.rb' + - 'db/migrate/20140605053705_remove_ask_how_many_shifts_from_events.rb' + - 'db/migrate/20140605060026_add_camping_type_to_ticket_requests.rb' + - 'db/migrate/20140616030905_change_camping_type_on_ticket_requests.rb' + +# Offense count: 3 +# Configuration parameters: ForbiddenMethods, AllowedMethods. +# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all +Rails/SkipsModelValidations: + Exclude: + - 'app/controllers/application_controller.rb' + - 'app/controllers/ticket_requests_controller.rb' + - 'app/models/user.rb' + +# Offense count: 3 +# Configuration parameters: Include. +# Include: db/**/*.rb +Rails/ThreeStateBooleanColumn: + Exclude: + - 'db/migrate/20140515054433_add_vehicle_camping_requested_to_ticket_requests.rb' + - 'db/migrate/20140616030905_change_camping_type_on_ticket_requests.rb' + - 'db/migrate/20150609064608_add_agrees_terms_to_ticket_requests.rb' + +# Offense count: 1 +# Configuration parameters: TransactionMethods. +Rails/TransactionExitStatement: + Exclude: + - 'app/models/ticket_request.rb' + +# Offense count: 2 +# Configuration parameters: Include. +# Include: app/models/**/*.rb +Rails/UniqueValidationWithoutIndex: + Exclude: + - 'app/models/payment.rb' + - 'app/models/site_admin.rb' + +# Offense count: 2 +# This cop supports safe autocorrection (--autocorrect). +Rake/Desc: + Exclude: + - 'Rakefile' + +# Offense count: 81 # Configuration parameters: AllowedConstants. Style/Documentation: Enabled: false -# Offense count: 5 -# Configuration parameters: MinBodyLength. +# Offense count: 1 +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: EnforcedStyle. +# SupportedStyles: always, always_true, never +Style/FrozenStringLiteralComment: + Exclude: + - 'app/models/application_record.rb' + +# Offense count: 6 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals. Style/GuardClause: Exclude: - 'app/controllers/application_controller.rb' - - 'app/controllers/home_controller.rb' - 'app/controllers/payments_controller.rb' - 'app/controllers/ticket_requests_controller.rb' - 'app/models/event.rb' -# Offense count: 1 -Style/MissingRespondToMissing: - Exclude: - - 'spec/support/factory_bot.rb' - -# Offense count: 3 -# This cop supports safe auto-correction (--auto-correct). -# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns. +# Offense count: 9 +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns. # URISchemes: http, https Layout/LineLength: - Max: 174 + Max: 160 diff --git a/.ruby-version b/.ruby-version index 30f69e8c..b347b11e 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.5.9 +3.2.3 diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 00000000..3186f3f0 --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/Brewfile b/Brewfile new file mode 100644 index 00000000..b3ccf977 --- /dev/null +++ b/Brewfile @@ -0,0 +1,121 @@ +# frozen_string_literal: true + +# vim: ft=ruby + +tap 'homebrew/bundle' +tap 'homebrew/services' +tap 'heroku/brew' + +# heroku CLI +brew 'heroku' + +# Build Environment/C/C++ +brew 'autoconf' +brew 'automake' +brew 'bash-completion@2' +brew 'bat' +brew 'cmake' +brew 'coreutils' +brew 'direnv' +brew 'fzf' +brew 'gcc' +brew 'glances' +brew 'gnutls' +brew 'gnu-indent' +brew 'gnu-sed' +brew 'gnu-tar' +brew 'gnu-time' +brew 'gnu-which' +brew 'gpg2' +brew 'jemalloc' +brew 'jq' +brew 'libffi' +brew 'libmemcached' +brew 'libpq' +brew 'libtiff' +brew 'libtool' +brew 'libxml2' +brew 'libxslt' +brew 'libyaml' +brew 'libzip' +brew 'make' +brew 'memcached' +brew 'p7zip' +brew 'parallel' +brew 'pcre' +brew 'pcre' +brew 'pg_top' +brew 'pkg-config' +brew 'postgresql@16' +brew 'pstree' +brew 'pyenv' +brew 'rbenv' +brew 'readline' +brew 'redis' +brew 'ripgrep' +brew 'rsync' +brew 'ruby-build' +brew 'ruby-completion' +brew 'shellcheck' +brew 'stripe/stripe-mock/stripe-mock' +brew 'tree' +brew 'vim' +brew 'watch' +brew 'wget' +brew 'yamlfmt' +brew 'yamllint' +brew 'ydiff' +brew 'yq' +brew 'zlib' +brew 'volta' +brew 'v8' + +# k8s +brew 'minikube' +brew 'kubernetes-cli' + +cask 'chromedriver' +cask 'github' + +cask 'font-andale-mono' +cask 'font-anonymice-powerline' +cask 'font-arvo' +cask 'font-aurulent-sans-mono-nerd-font' +cask 'font-awesome-terminal-fonts' +cask 'font-bitstream-vera-sans-mono-nerd-font' +cask 'font-blex-mono-nerd-font' +cask 'font-cairo' +cask 'font-cascadia-mono' +cask 'font-consolas-for-powerline' +cask 'font-cousine' +cask 'font-cutive-mono' +cask 'font-d2coding' +cask 'font-dejavu-sans-mono-for-powerline' +cask 'font-everson-mono' +cask 'font-fantasque-sans-mono' +cask 'font-fontawesome' +cask 'font-ia-writer-mono' +cask 'font-inconsolata' +cask 'font-jetbrains-mono' +cask 'font-kawkab-mono' +cask 'font-lekton-nerd-font' +cask 'font-menlo-for-powerline' +cask 'font-meslo-for-powerline' +cask 'font-miriam-mono-clm' +cask 'font-monoid' +cask 'font-monoisome' +cask 'font-mononoki' +cask 'font-monoton' +cask 'font-noto-mono' +cask 'font-oswald' +cask 'font-oxygen' +cask 'font-oxygen-mono' +cask 'font-powerline-symbols' +cask 'font-pt-mono' +cask 'font-roboto' +cask 'font-roboto-mono-nerd-font' +cask 'font-share-tech-mono' +cask 'font-sometype-mono' +cask 'font-titillium' +cask 'font-ubuntu' +cask 'font-victor-mono' diff --git a/Brewfile.lock.json b/Brewfile.lock.json new file mode 100644 index 00000000..d78951c2 --- /dev/null +++ b/Brewfile.lock.json @@ -0,0 +1,3036 @@ +{ + "entries": { + "tap": { + "homebrew/bundle": { + "revision": "40ab9cfe3e5e59b0b690b5afd0dd59288d407551" + }, + "homebrew/services": { + "revision": "a6fcf4f1ce20c6e01a0ff051074e7e9d30a887e1" + }, + "heroku/brew": { + "revision": "379bc49cf928a18cb0e7dcad4946278ff831e420" + } + }, + "brew": { + "heroku": { + "version": "8.5.0", + "bottle": false + }, + "autoconf": { + "version": "2.72", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:bb39057e87dd9cb940bee15ff5b5172952a0350e59b14a6f55b8006a07813186", + "sha256": "bb39057e87dd9cb940bee15ff5b5172952a0350e59b14a6f55b8006a07813186" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:bb39057e87dd9cb940bee15ff5b5172952a0350e59b14a6f55b8006a07813186", + "sha256": "bb39057e87dd9cb940bee15ff5b5172952a0350e59b14a6f55b8006a07813186" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:bb39057e87dd9cb940bee15ff5b5172952a0350e59b14a6f55b8006a07813186", + "sha256": "bb39057e87dd9cb940bee15ff5b5172952a0350e59b14a6f55b8006a07813186" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:12368e33b89d221550ba9e261b0c6ece0b0e89250fb4c95169d09081e0ebb2dd", + "sha256": "12368e33b89d221550ba9e261b0c6ece0b0e89250fb4c95169d09081e0ebb2dd" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:12368e33b89d221550ba9e261b0c6ece0b0e89250fb4c95169d09081e0ebb2dd", + "sha256": "12368e33b89d221550ba9e261b0c6ece0b0e89250fb4c95169d09081e0ebb2dd" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:12368e33b89d221550ba9e261b0c6ece0b0e89250fb4c95169d09081e0ebb2dd", + "sha256": "12368e33b89d221550ba9e261b0c6ece0b0e89250fb4c95169d09081e0ebb2dd" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/autoconf/blobs/sha256:d760774b6bcad93822e666a8a2ee8557f674eba7f784b9ab9e397313378474b8", + "sha256": "d760774b6bcad93822e666a8a2ee8557f674eba7f784b9ab9e397313378474b8" + } + } + } + }, + "automake": { + "version": "1.16.5", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:7a116fd1052d95a13b40837b85a34cca35dbae9ed2864d1db92abfa960176b55", + "sha256": "7a116fd1052d95a13b40837b85a34cca35dbae9ed2864d1db92abfa960176b55" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:f68481d06be7fa3f0a0881edb825a336e7f6548191c762d68bd817183b238f5a", + "sha256": "f68481d06be7fa3f0a0881edb825a336e7f6548191c762d68bd817183b238f5a" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:f68481d06be7fa3f0a0881edb825a336e7f6548191c762d68bd817183b238f5a", + "sha256": "f68481d06be7fa3f0a0881edb825a336e7f6548191c762d68bd817183b238f5a" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:f68481d06be7fa3f0a0881edb825a336e7f6548191c762d68bd817183b238f5a", + "sha256": "f68481d06be7fa3f0a0881edb825a336e7f6548191c762d68bd817183b238f5a" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:4f3ecdf86b3a0302f64b848440b0595095face19a0b9778498e5e64d022c1a81", + "sha256": "4f3ecdf86b3a0302f64b848440b0595095face19a0b9778498e5e64d022c1a81" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d", + "sha256": "ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d", + "sha256": "ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d", + "sha256": "ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d", + "sha256": "ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d" + }, + "mojave": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d", + "sha256": "ae77a247a13ea860236a29b02769f5327395f712413f694d8a8d20cb6c21332d" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/automake/blobs/sha256:59808c20f7dc565f106b432941b43c52f3d7f46a8d562ab27a4aabd424783158", + "sha256": "59808c20f7dc565f106b432941b43c52f3d7f46a8d562ab27a4aabd424783158" + } + } + } + }, + "bash-completion@2": { + "version": "2.13.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:fb3f1f447d93f7f6b18e196cd735e94a2e8157f33de2e60f4d3d687de79a2e2c", + "sha256": "fb3f1f447d93f7f6b18e196cd735e94a2e8157f33de2e60f4d3d687de79a2e2c" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:fb3f1f447d93f7f6b18e196cd735e94a2e8157f33de2e60f4d3d687de79a2e2c", + "sha256": "fb3f1f447d93f7f6b18e196cd735e94a2e8157f33de2e60f4d3d687de79a2e2c" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:fb3f1f447d93f7f6b18e196cd735e94a2e8157f33de2e60f4d3d687de79a2e2c", + "sha256": "fb3f1f447d93f7f6b18e196cd735e94a2e8157f33de2e60f4d3d687de79a2e2c" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:5e29be6b53324aa6c5fa8d0e58a3f89c3e33577b0c387fe512c9417657619f0b", + "sha256": "5e29be6b53324aa6c5fa8d0e58a3f89c3e33577b0c387fe512c9417657619f0b" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:5e29be6b53324aa6c5fa8d0e58a3f89c3e33577b0c387fe512c9417657619f0b", + "sha256": "5e29be6b53324aa6c5fa8d0e58a3f89c3e33577b0c387fe512c9417657619f0b" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:5e29be6b53324aa6c5fa8d0e58a3f89c3e33577b0c387fe512c9417657619f0b", + "sha256": "5e29be6b53324aa6c5fa8d0e58a3f89c3e33577b0c387fe512c9417657619f0b" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bash-completion/2/blobs/sha256:f573a3d9d0870b241f9c6f80d7e608da947a2e06d0137c99ad90f6b48761181b", + "sha256": "f573a3d9d0870b241f9c6f80d7e608da947a2e06d0137c99ad90f6b48761181b" + } + } + } + }, + "bat": { + "version": "0.24.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:66f03028e55d7a9ce344c7910b8469e16c0acd812ebc2886cdff8c10f9cf34c4", + "sha256": "66f03028e55d7a9ce344c7910b8469e16c0acd812ebc2886cdff8c10f9cf34c4" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:b36dd52fda8441a5b9c83f0914b4f362c8caa9c6a1143b1ee2c7f54941b8ed6b", + "sha256": "b36dd52fda8441a5b9c83f0914b4f362c8caa9c6a1143b1ee2c7f54941b8ed6b" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:0a7454b37d7b095de1006996ceb43a585ca05339c2f540dde1703202b139695d", + "sha256": "0a7454b37d7b095de1006996ceb43a585ca05339c2f540dde1703202b139695d" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:58769b8c6b1380e9d066586bf8f678993457ef9ea449c3d4d7955461018d3b49", + "sha256": "58769b8c6b1380e9d066586bf8f678993457ef9ea449c3d4d7955461018d3b49" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:d6e91c86547c67292cb6abf92fac7f9c6272bf6bca5483466e3e9adc744ce1c0", + "sha256": "d6e91c86547c67292cb6abf92fac7f9c6272bf6bca5483466e3e9adc744ce1c0" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:eb2c932132331cb87e5cace268b034e32c3a4741fccd42813cf853269e3a9c21", + "sha256": "eb2c932132331cb87e5cace268b034e32c3a4741fccd42813cf853269e3a9c21" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/bat/blobs/sha256:0ae5db045ded8528d1588d703d62d6be481ebe006888c7e29f7e178b07e0e926", + "sha256": "0ae5db045ded8528d1588d703d62d6be481ebe006888c7e29f7e178b07e0e926" + } + } + } + }, + "cmake": { + "version": "3.29.1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:8d9b7d484d371d2bb66452ebadd31034708c553ddcadab8097ed9911e2bbae31", + "sha256": "8d9b7d484d371d2bb66452ebadd31034708c553ddcadab8097ed9911e2bbae31" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:3cd076060f01246d42bbc507192d466d05b6cc430a0680eb6308b1c4c4cfb88e", + "sha256": "3cd076060f01246d42bbc507192d466d05b6cc430a0680eb6308b1c4c4cfb88e" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:262ae87f45fbf8f007e6220f64969dbab76f982a484c9d412ddcf3bc0917ffa4", + "sha256": "262ae87f45fbf8f007e6220f64969dbab76f982a484c9d412ddcf3bc0917ffa4" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:04631ef4e4292c1315e12ad2dfb1ebb022e3677b908778278480e56a8e0140ac", + "sha256": "04631ef4e4292c1315e12ad2dfb1ebb022e3677b908778278480e56a8e0140ac" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:ba061351890b139f712d48e916515b4a1baf16b1efb2feb8e5a63b63e22f6d47", + "sha256": "ba061351890b139f712d48e916515b4a1baf16b1efb2feb8e5a63b63e22f6d47" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:042ac0a646359b5c6cafdacd066fa59cc5b99cac3130586836a44063450a857d", + "sha256": "042ac0a646359b5c6cafdacd066fa59cc5b99cac3130586836a44063450a857d" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/cmake/blobs/sha256:3f253af3f526668a48602648b8461613e07c8388f1366211186c036602ca60df", + "sha256": "3f253af3f526668a48602648b8461613e07c8388f1366211186c036602ca60df" + } + } + } + }, + "coreutils": { + "version": "9.5", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:b2c643420d7d9de89385d86e0c3f5e9f9ae2404ce378db574dabbfce3ca37a91", + "sha256": "b2c643420d7d9de89385d86e0c3f5e9f9ae2404ce378db574dabbfce3ca37a91" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:0f889fb75ebc8e96aa1f38aff6ed1bc7e87c45b70f7644c7e1492f1f9480f352", + "sha256": "0f889fb75ebc8e96aa1f38aff6ed1bc7e87c45b70f7644c7e1492f1f9480f352" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:43bb62929309c51bb600e0d156b107ef147094445b29ada1387c222d9a2465c4", + "sha256": "43bb62929309c51bb600e0d156b107ef147094445b29ada1387c222d9a2465c4" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:19eccdcccfcacd67000acf89e3261174dfe30b0a764d10ccc39be82a4b37c0a5", + "sha256": "19eccdcccfcacd67000acf89e3261174dfe30b0a764d10ccc39be82a4b37c0a5" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:7c8c3c6eab6032c379bb7266bf78e25b3b3d38d167c4eee92a7c023b131b86e0", + "sha256": "7c8c3c6eab6032c379bb7266bf78e25b3b3d38d167c4eee92a7c023b131b86e0" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:44ce33f1d4d73b54bf312f48c9d93bd7a186f4ce1adc004c9f3168da004eee6c", + "sha256": "44ce33f1d4d73b54bf312f48c9d93bd7a186f4ce1adc004c9f3168da004eee6c" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/coreutils/blobs/sha256:e48884f502b3236e747b1280d5373d058b4bb47f872c99533d90ba2e730f3266", + "sha256": "e48884f502b3236e747b1280d5373d058b4bb47f872c99533d90ba2e730f3266" + } + } + } + }, + "direnv": { + "version": "2.34.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:fd210e16bd6764b33cd2e556a7f07ed579453ba19d518ec11de33edcf3c5c2c7", + "sha256": "fd210e16bd6764b33cd2e556a7f07ed579453ba19d518ec11de33edcf3c5c2c7" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:59af7e0d05a50eda59d60a8c2c67eb0a3491c0650a334568ae13988da3b32951", + "sha256": "59af7e0d05a50eda59d60a8c2c67eb0a3491c0650a334568ae13988da3b32951" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:2577f8c5e2c3c7d1ee2f6966e3c92a16853edb9302d78089ddfc4f8ef9efda24", + "sha256": "2577f8c5e2c3c7d1ee2f6966e3c92a16853edb9302d78089ddfc4f8ef9efda24" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:4148bce1352772af61eb44303877e57e54a8531240cb551ec2c879660ac90c54", + "sha256": "4148bce1352772af61eb44303877e57e54a8531240cb551ec2c879660ac90c54" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:b4eefec1b63c6c32713290af5f5e1f2c318d3c64ba052aab786aab0b87c1b437", + "sha256": "b4eefec1b63c6c32713290af5f5e1f2c318d3c64ba052aab786aab0b87c1b437" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:41cadfe20ab1913f07376ac5206ee49c3322ac8689ecd9a5dc85c5146850dff2", + "sha256": "41cadfe20ab1913f07376ac5206ee49c3322ac8689ecd9a5dc85c5146850dff2" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/direnv/blobs/sha256:be4b933f8f607bf1a705c13abe75d04a99856f1698c3ebcb71e07e469850e964", + "sha256": "be4b933f8f607bf1a705c13abe75d04a99856f1698c3ebcb71e07e469850e964" + } + } + } + }, + "fzf": { + "version": "0.49.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:aa0ffe3f66ba44c9abe384f30a6a1fd1945a02fbf3ebdd28de772da69b182678", + "sha256": "aa0ffe3f66ba44c9abe384f30a6a1fd1945a02fbf3ebdd28de772da69b182678" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:00d9f8ce734a571b6e738311c31f2a4ebc8e6f9d766392246741e577a74e63b1", + "sha256": "00d9f8ce734a571b6e738311c31f2a4ebc8e6f9d766392246741e577a74e63b1" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:601b706d130821ad7cc41c914336da06a2e4d7295a9b8347d535b150600210ad", + "sha256": "601b706d130821ad7cc41c914336da06a2e4d7295a9b8347d535b150600210ad" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:319d7e7c9d886e9f5f8f59169e1cc51674a1c2b53f33cf38cc42c2127acba2e5", + "sha256": "319d7e7c9d886e9f5f8f59169e1cc51674a1c2b53f33cf38cc42c2127acba2e5" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:b388f737963853aa89d7cf5c88bdb95cd316a13d5f4d9216e891ebd845e7fcf2", + "sha256": "b388f737963853aa89d7cf5c88bdb95cd316a13d5f4d9216e891ebd845e7fcf2" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:c28898f6057b4ba0b99d3bb18c667fa5276cf6168802bb7fe2d87980effaed22", + "sha256": "c28898f6057b4ba0b99d3bb18c667fa5276cf6168802bb7fe2d87980effaed22" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/fzf/blobs/sha256:e95cd810ccec9cdd85942514cacdeacaf38015c3af55d48a9c215abc4f876f6e", + "sha256": "e95cd810ccec9cdd85942514cacdeacaf38015c3af55d48a9c215abc4f876f6e" + } + } + } + }, + "gcc": { + "version": "13.2.0", + "bottle": { + "rebuild": 2, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:85037a5e7d463f55d9a0ff3963b24008c8a10937d137909bd6e91cf64ddfe8b6", + "sha256": "85037a5e7d463f55d9a0ff3963b24008c8a10937d137909bd6e91cf64ddfe8b6" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:38c7d0503b0a99dddaefe5a1512e927cb3976927c2b1882e5519501bdf1e9015", + "sha256": "38c7d0503b0a99dddaefe5a1512e927cb3976927c2b1882e5519501bdf1e9015" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:026a25661c70e7c0ca6a33afeb406c9b76fd87b93396a1bc2e94aa10ba0801e3", + "sha256": "026a25661c70e7c0ca6a33afeb406c9b76fd87b93396a1bc2e94aa10ba0801e3" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:e93cce391ed5d2898d3186403e7256d997d03855a72e9cb0c85067fd7825cf13", + "sha256": "e93cce391ed5d2898d3186403e7256d997d03855a72e9cb0c85067fd7825cf13" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:29f3443225b387ae5542aeee0a941fa9af1c91da44f27101735f510bdfc3a11b", + "sha256": "29f3443225b387ae5542aeee0a941fa9af1c91da44f27101735f510bdfc3a11b" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:52f6401306f6facb4b2005ca6d1c8e02592ef50e26922d9f5cc2a75b00703a0f", + "sha256": "52f6401306f6facb4b2005ca6d1c8e02592ef50e26922d9f5cc2a75b00703a0f" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gcc/blobs/sha256:28257893721f3b163e4364b0ae437dcfdf5e3fd22b8d6d703fa8e02821d0dcd2", + "sha256": "28257893721f3b163e4364b0ae437dcfdf5e3fd22b8d6d703fa8e02821d0dcd2" + } + } + } + }, + "glances": { + "version": "3.4.0.5", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:cb0171b9330e64101f124a84c6f9ae6ba2673ebc8b4b4d7ec593d5ee67aeebfd", + "sha256": "cb0171b9330e64101f124a84c6f9ae6ba2673ebc8b4b4d7ec593d5ee67aeebfd" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:d311a5456063ca3321978458d4e1dee26c48b227594bc0efec0bdf32cf43d45c", + "sha256": "d311a5456063ca3321978458d4e1dee26c48b227594bc0efec0bdf32cf43d45c" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:a1526d01c2cd68a41efb1f9638727f62921baeb8db02cd2f6267ba3879e56c98", + "sha256": "a1526d01c2cd68a41efb1f9638727f62921baeb8db02cd2f6267ba3879e56c98" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:2aad74ca872e153376265e88605bdcc46c0d6107ef03269c6dc8cf36618e208c", + "sha256": "2aad74ca872e153376265e88605bdcc46c0d6107ef03269c6dc8cf36618e208c" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:44f9428eb2ff986ef51c52664503b50ac70b72869e24947ef1c36cf12c25b485", + "sha256": "44f9428eb2ff986ef51c52664503b50ac70b72869e24947ef1c36cf12c25b485" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:e653240ae3b6e1111760da11b1954af2a3ee227e87393175890c31537385f6bc", + "sha256": "e653240ae3b6e1111760da11b1954af2a3ee227e87393175890c31537385f6bc" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/glances/blobs/sha256:592fd120e04f6830f4ee0792d563c4163413770e5f84601e21885333866eb7e0", + "sha256": "592fd120e04f6830f4ee0792d563c4163413770e5f84601e21885333866eb7e0" + } + } + } + }, + "gnutls": { + "version": "3.8.4", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:46373a7206cc70289bfef2081508c62cc74a2589060b21ce26c44c4c86fbda41", + "sha256": "46373a7206cc70289bfef2081508c62cc74a2589060b21ce26c44c4c86fbda41" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:7b18d9403f8cc6a5e2e3fd427a07e32ccb1d7969715fbf5b72cfb4b5a01d8a3c", + "sha256": "7b18d9403f8cc6a5e2e3fd427a07e32ccb1d7969715fbf5b72cfb4b5a01d8a3c" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:2a6bb19c341be5dcc2e351e68380b05f246407bd57b2dc7e94743d14e473cde8", + "sha256": "2a6bb19c341be5dcc2e351e68380b05f246407bd57b2dc7e94743d14e473cde8" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:7136ceb68e1bf94ad28db2990cc10da909b742390be65963b78e8b115f97b51d", + "sha256": "7136ceb68e1bf94ad28db2990cc10da909b742390be65963b78e8b115f97b51d" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:08b8fc7ded2a17510ab505965c754bccf3cf21ae690d76af744f96d800223de2", + "sha256": "08b8fc7ded2a17510ab505965c754bccf3cf21ae690d76af744f96d800223de2" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:80f7875ba4d2409f85851a3c61bf8c178415e863528357bc587578e8d0536c10", + "sha256": "80f7875ba4d2409f85851a3c61bf8c178415e863528357bc587578e8d0536c10" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnutls/blobs/sha256:9bedb5b302e02e32c64bf75c488216dd644bc205d9e99d2b26edfdf7f3d81b93", + "sha256": "9bedb5b302e02e32c64bf75c488216dd644bc205d9e99d2b26edfdf7f3d81b93" + } + } + } + }, + "gnu-indent": { + "version": "2.2.13", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:90269c7d0cb032e8defb0ed1a46222decdf12856f47206d7290aa42f41f64dc5", + "sha256": "90269c7d0cb032e8defb0ed1a46222decdf12856f47206d7290aa42f41f64dc5" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:ed32867a9b921557dcbd8eab24d0bd8045f6525d9000d0034fa9ed2a14e23a54", + "sha256": "ed32867a9b921557dcbd8eab24d0bd8045f6525d9000d0034fa9ed2a14e23a54" + }, + "arm64_big_sur": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:e60464107020d08df53cf12dd388825cbeefd0d1ecf986f00cdf890d7cc58413", + "sha256": "e60464107020d08df53cf12dd388825cbeefd0d1ecf986f00cdf890d7cc58413" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:97399d01070ba20f588dde6cddf6a20353a1e2def99bd99d9f11d0d3c8f12748", + "sha256": "97399d01070ba20f588dde6cddf6a20353a1e2def99bd99d9f11d0d3c8f12748" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:ece97222820cb413acad02586561c87d8cda14370e6b4d0e2e5d47f5e7774402", + "sha256": "ece97222820cb413acad02586561c87d8cda14370e6b4d0e2e5d47f5e7774402" + }, + "big_sur": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:cf85276b497f4cf5e909ee415393207ad67c94bb9aa130e564f92f7b435d09a6", + "sha256": "cf85276b497f4cf5e909ee415393207ad67c94bb9aa130e564f92f7b435d09a6" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-indent/blobs/sha256:0e3f4a54c4abad7a07b57331772f24737237413f9ad4bd67ed8827909b515ced", + "sha256": "0e3f4a54c4abad7a07b57331772f24737237413f9ad4bd67ed8827909b515ced" + } + } + } + }, + "gnu-sed": { + "version": "4.9", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:1c4c92a7683dcbd3d251bf2e541ed46151401423cc9cbf30db9ce7185dc218a3", + "sha256": "1c4c92a7683dcbd3d251bf2e541ed46151401423cc9cbf30db9ce7185dc218a3" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:5abaf39c16d02125db97d14cd36a96cf1a20a87821199cb38a55134fd4e0aaef", + "sha256": "5abaf39c16d02125db97d14cd36a96cf1a20a87821199cb38a55134fd4e0aaef" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:20ae3f853a32e7f7f0f340e8c751ab7350888a655bfe7c5c20e5746c61a24fd7", + "sha256": "20ae3f853a32e7f7f0f340e8c751ab7350888a655bfe7c5c20e5746c61a24fd7" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:d7c89842a90d03dbb497bc1ded17b7d732fe20eaf69613fd4abb48820ab80895", + "sha256": "d7c89842a90d03dbb497bc1ded17b7d732fe20eaf69613fd4abb48820ab80895" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:6ab6bc1628639ff2789fe20e4dd690e4bfe047d3a772bbb7b5d57efe88787951", + "sha256": "6ab6bc1628639ff2789fe20e4dd690e4bfe047d3a772bbb7b5d57efe88787951" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:a1ac59a9a6fa20c6c904e047df3ee4d0b4e57c0a5df3821b17b8cd82bcc67b5a", + "sha256": "a1ac59a9a6fa20c6c904e047df3ee4d0b4e57c0a5df3821b17b8cd82bcc67b5a" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:f5e2460ad86516b2517f1e77d672a4fd6ad30b158c470cccbb3b6464f228674d", + "sha256": "f5e2460ad86516b2517f1e77d672a4fd6ad30b158c470cccbb3b6464f228674d" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:c1c63d995d132a82fadc80b470eecfe816cb86c8cd716f01de5f003bc1199fcc", + "sha256": "c1c63d995d132a82fadc80b470eecfe816cb86c8cd716f01de5f003bc1199fcc" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:fb5ee7317d987d9ac7f2ee357736a9bc594c88b5fbbca4f6a65046f1c2898c44", + "sha256": "fb5ee7317d987d9ac7f2ee357736a9bc594c88b5fbbca4f6a65046f1c2898c44" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-sed/blobs/sha256:8abd5b48de6b706c1ce7c2f7b8775420f63078ba294bd5ad801e458776228bbc", + "sha256": "8abd5b48de6b706c1ce7c2f7b8775420f63078ba294bd5ad801e458776228bbc" + } + } + } + }, + "gnu-tar": { + "version": "1.35", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:15a0dbc1fe67cae4498891493686afca6d745b001a2913760ce79cd52c918079", + "sha256": "15a0dbc1fe67cae4498891493686afca6d745b001a2913760ce79cd52c918079" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:0b5debb34f53626f09c119c96ab75e46dfcc9c816ca5ccbf4ce1b051251c3752", + "sha256": "0b5debb34f53626f09c119c96ab75e46dfcc9c816ca5ccbf4ce1b051251c3752" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:78bbae315786562366b35a1c1d25c391824281aab63421e4243ec927dbe647b1", + "sha256": "78bbae315786562366b35a1c1d25c391824281aab63421e4243ec927dbe647b1" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:98ce20547135be57ef9ee9b6e85df5081ba8b907f113c6d19b3e4a296b3930fc", + "sha256": "98ce20547135be57ef9ee9b6e85df5081ba8b907f113c6d19b3e4a296b3930fc" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:da82f5abafab8ba2bfc25a33e500a546985e0b2789ea915d7ad05292b41a373b", + "sha256": "da82f5abafab8ba2bfc25a33e500a546985e0b2789ea915d7ad05292b41a373b" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:5078709c3c1643d2ac42da4fc354baee127d06e4a4f8b04c9770867ec5166188", + "sha256": "5078709c3c1643d2ac42da4fc354baee127d06e4a4f8b04c9770867ec5166188" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:b083b4ca16eea4b23615ce1b90b7e1a3ee52dd90cd5a4275567cb0ea55339ee4", + "sha256": "b083b4ca16eea4b23615ce1b90b7e1a3ee52dd90cd5a4275567cb0ea55339ee4" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:d7947a84f5bd5458a1faf9854a90d788c7661a6aba37b7ff7f8fba1e9d04ac24", + "sha256": "d7947a84f5bd5458a1faf9854a90d788c7661a6aba37b7ff7f8fba1e9d04ac24" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnu-tar/blobs/sha256:5209eb2c2693093b26bc232c09df1caf0b5254f9a2003aa88b81a7c7f9f2391a", + "sha256": "5209eb2c2693093b26bc232c09df1caf0b5254f9a2003aa88b81a7c7f9f2391a" + } + } + } + }, + "gnu-time": { + "version": "1.9", + "bottle": { + "rebuild": 2, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:77a541727f4a75443a930e18391ed483b0a3fc797876376a0f7b34260db9a88d", + "sha256": "77a541727f4a75443a930e18391ed483b0a3fc797876376a0f7b34260db9a88d" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:f5015e7e94a474156cdc47fb188143388231916979598f5398b72e79393a2000", + "sha256": "f5015e7e94a474156cdc47fb188143388231916979598f5398b72e79393a2000" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:ff4691a2d76432eb0222284ccbeda79b3375cefdb1c606ba74ea3e8e06ac25f5", + "sha256": "ff4691a2d76432eb0222284ccbeda79b3375cefdb1c606ba74ea3e8e06ac25f5" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:3930463651363f08ca7a90ec25deafd85c57f7a71be8ee236f7e15f20de7ff22", + "sha256": "3930463651363f08ca7a90ec25deafd85c57f7a71be8ee236f7e15f20de7ff22" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:99cb9faea67317bef1bd531f810c91b4f77817d127942ba3902dcc8b6605c437", + "sha256": "99cb9faea67317bef1bd531f810c91b4f77817d127942ba3902dcc8b6605c437" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:950250410ffda2307e42e465b0a563b0d4175f83017467df59c580cba41d8c85", + "sha256": "950250410ffda2307e42e465b0a563b0d4175f83017467df59c580cba41d8c85" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:e7b649410f591aa0d0068ae267e7357db99c86c73fd5e992db0f5512614a07a6", + "sha256": "e7b649410f591aa0d0068ae267e7357db99c86c73fd5e992db0f5512614a07a6" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:f4fc9d2c49b65130d04a476d4cd887b1e1033a7870df9805be28aba09be901f0", + "sha256": "f4fc9d2c49b65130d04a476d4cd887b1e1033a7870df9805be28aba09be901f0" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:9a1d1160f85f46b3022dc4d978dfafe6b3a02fc97446bc51f8b1ae4580b7c69a", + "sha256": "9a1d1160f85f46b3022dc4d978dfafe6b3a02fc97446bc51f8b1ae4580b7c69a" + }, + "mojave": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:dc007b95e2f9fb0df3380da55d3c9337529b1a4a3cd762972eb88512f567ea1c", + "sha256": "dc007b95e2f9fb0df3380da55d3c9337529b1a4a3cd762972eb88512f567ea1c" + }, + "high_sierra": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:ad5d776c38e43f16fad8976770eeaa18e40562c166fa65fdaa12af61981c7b90", + "sha256": "ad5d776c38e43f16fad8976770eeaa18e40562c166fa65fdaa12af61981c7b90" + }, + "sierra": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:d51ef948a5a87281175fef771cb28469cbdb3085e3c51ad325d780ff921cc013", + "sha256": "d51ef948a5a87281175fef771cb28469cbdb3085e3c51ad325d780ff921cc013" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-time/blobs/sha256:c9c5ae5e7ac2f00cf8655ce4b6095e4706bcc36300d36a1c7121ab03d010ea5f", + "sha256": "c9c5ae5e7ac2f00cf8655ce4b6095e4706bcc36300d36a1c7121ab03d010ea5f" + } + } + } + }, + "gnu-which": { + "version": "2.21", + "bottle": { + "rebuild": 3, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:97c6d0e56281d2adc27fd8c38b267edc4ff12dff39a5dfa4adb7db45fd0cb042", + "sha256": "97c6d0e56281d2adc27fd8c38b267edc4ff12dff39a5dfa4adb7db45fd0cb042" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:0778972c32eb2eb9cbde5026fe69c0a5c4bdfbc1e16f18c327e0c6f92a32385e", + "sha256": "0778972c32eb2eb9cbde5026fe69c0a5c4bdfbc1e16f18c327e0c6f92a32385e" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:8343d2e916151642b540143f2b3f8a79af4a6e22df55e01b846bad2d0e509074", + "sha256": "8343d2e916151642b540143f2b3f8a79af4a6e22df55e01b846bad2d0e509074" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:873e8ac50fdc7b40699f7ebcf29c73c768d2db8d958f1fdb2d4be13c0b670c3a", + "sha256": "873e8ac50fdc7b40699f7ebcf29c73c768d2db8d958f1fdb2d4be13c0b670c3a" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:5524dce5bf9b05388b10687ba53cb3d2cb2a12f589ebd67625688aec5f3598de", + "sha256": "5524dce5bf9b05388b10687ba53cb3d2cb2a12f589ebd67625688aec5f3598de" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:ff5af1e6019d670be02d24175b1be0cc0973e303f4788d1e5b8ef4c167f0d36f", + "sha256": "ff5af1e6019d670be02d24175b1be0cc0973e303f4788d1e5b8ef4c167f0d36f" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:21e5e71e2a9aadc88636bdb7e76dc5aef17e5ca31b99e02553bc61263e2c36e8", + "sha256": "21e5e71e2a9aadc88636bdb7e76dc5aef17e5ca31b99e02553bc61263e2c36e8" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:eeb493d3cc6252da45b29cf1d2a1d6daca630a6cd467ae690c3979673ea9a589", + "sha256": "eeb493d3cc6252da45b29cf1d2a1d6daca630a6cd467ae690c3979673ea9a589" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:f9e6512591096a9f53067ea4a0b5b9f8516515b49fd5bdabfc6e31c1c0c876f2", + "sha256": "f9e6512591096a9f53067ea4a0b5b9f8516515b49fd5bdabfc6e31c1c0c876f2" + }, + "mojave": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:170008e80a4cc5f1e45b3445f9fb6f099d7700aa6dd825602f6d32316c27735b", + "sha256": "170008e80a4cc5f1e45b3445f9fb6f099d7700aa6dd825602f6d32316c27735b" + }, + "high_sierra": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:66446416b0dc367076ab38cfc9775d8c201fc571b1a2cd2fc0197daa6b83882a", + "sha256": "66446416b0dc367076ab38cfc9775d8c201fc571b1a2cd2fc0197daa6b83882a" + }, + "sierra": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:68ea3522ec318c9b25d711ce4405b4cd6a41edca20b7df008adc499ab794c4fa", + "sha256": "68ea3522ec318c9b25d711ce4405b4cd6a41edca20b7df008adc499ab794c4fa" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/gnu-which/blobs/sha256:cf191a85d1f5684e84909ccf5d5df3ec3b9ffd7facc629bc2664f99078bf414e", + "sha256": "cf191a85d1f5684e84909ccf5d5df3ec3b9ffd7facc629bc2664f99078bf414e" + } + } + } + }, + "jemalloc": { + "version": "5.3.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:f70f02aa2f1b858ed5e5cef84a271efeaaa27e79f266844997aab95daa66a7fa", + "sha256": "f70f02aa2f1b858ed5e5cef84a271efeaaa27e79f266844997aab95daa66a7fa" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:33e0c3fbe56642e081018a9674df734d34afdc35af7d03f5dd2b484a804555e3", + "sha256": "33e0c3fbe56642e081018a9674df734d34afdc35af7d03f5dd2b484a804555e3" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:b7ef9abad498e6eb53fb476fde4396fc9ab99a23092ea14bcf576548e198f9bd", + "sha256": "b7ef9abad498e6eb53fb476fde4396fc9ab99a23092ea14bcf576548e198f9bd" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:b24e4a9413b347397a10ebc9a7a2d309d88c0f9479c1cdebe6c302acba9a43a9", + "sha256": "b24e4a9413b347397a10ebc9a7a2d309d88c0f9479c1cdebe6c302acba9a43a9" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:cb1d95640b85ec863d457722af363119b9a16274ce6f9e968f939fcf85bdd350", + "sha256": "cb1d95640b85ec863d457722af363119b9a16274ce6f9e968f939fcf85bdd350" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:66b5f3a4c4ad9f7801e6ad2e76d1586e7b57e2cc64b24c2684dd1c2af8bc82f3", + "sha256": "66b5f3a4c4ad9f7801e6ad2e76d1586e7b57e2cc64b24c2684dd1c2af8bc82f3" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:27ae29c02d718c38ee5f623c3ef08ad3530a6fd3595d16d2ddadd6552bf32c12", + "sha256": "27ae29c02d718c38ee5f623c3ef08ad3530a6fd3595d16d2ddadd6552bf32c12" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:72aef17aa140b457400c4f2b74d0473bf1160616c3df7cb8604ac2bf734afea5", + "sha256": "72aef17aa140b457400c4f2b74d0473bf1160616c3df7cb8604ac2bf734afea5" + }, + "catalina": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:3f5cf334d16ab432bf210c7e171510d0edcd834f939b57bddfd428af5ed248ae", + "sha256": "3f5cf334d16ab432bf210c7e171510d0edcd834f939b57bddfd428af5ed248ae" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/jemalloc/blobs/sha256:240b20cc078b21d90c32bd34447952b9b464958b1858ae109f168558993f9278", + "sha256": "240b20cc078b21d90c32bd34447952b9b464958b1858ae109f168558993f9278" + } + } + } + }, + "jq": { + "version": "1.7.1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:07bc9081c0fdb43aca089e5839f6a270fc45ca9aa7d7633e16fac0fdfe4c4ad8", + "sha256": "07bc9081c0fdb43aca089e5839f6a270fc45ca9aa7d7633e16fac0fdfe4c4ad8" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:1b27f5277eb2cdfac9f3970ee9adadddc5e04e45469de05a663bc16e793b4eea", + "sha256": "1b27f5277eb2cdfac9f3970ee9adadddc5e04e45469de05a663bc16e793b4eea" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:41911a73dc6a44c9788c198abc18307213d070d7ca6375e8dd6994335aaee136", + "sha256": "41911a73dc6a44c9788c198abc18307213d070d7ca6375e8dd6994335aaee136" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:b68d33a5e3c79a0f457d96de1ad1f200c05314f5fea9244d712847c92032b5f7", + "sha256": "b68d33a5e3c79a0f457d96de1ad1f200c05314f5fea9244d712847c92032b5f7" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:10b845b1505892ff585b49e89fe3b09761d148b2c14ca6f5a1aa58002452f8f0", + "sha256": "10b845b1505892ff585b49e89fe3b09761d148b2c14ca6f5a1aa58002452f8f0" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:449c76665ac72b34daeb1a09dd19217e3be1e723c63ec3ac88e02b8c9a750f34", + "sha256": "449c76665ac72b34daeb1a09dd19217e3be1e723c63ec3ac88e02b8c9a750f34" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/jq/blobs/sha256:ed490b627b327b3458a70a78c546be07d57bfc6958921f875b76e85f6be51f47", + "sha256": "ed490b627b327b3458a70a78c546be07d57bfc6958921f875b76e85f6be51f47" + } + } + } + }, + "libffi": { + "version": "3.4.6", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:e81237234a3e21d5222c1c8baf4017bc2f2ad7e444fbf58ad6b635fc0ace5078", + "sha256": "e81237234a3e21d5222c1c8baf4017bc2f2ad7e444fbf58ad6b635fc0ace5078" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:7a6a1d1dffe41d4e9bf117440190be51c432a2a192945ed8e2e10c4bb1f95ad0", + "sha256": "7a6a1d1dffe41d4e9bf117440190be51c432a2a192945ed8e2e10c4bb1f95ad0" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:eacdfea3b29d48dc8c3fb7578a9a59dbeb9048eca6493b8cd95605c86652e6de", + "sha256": "eacdfea3b29d48dc8c3fb7578a9a59dbeb9048eca6493b8cd95605c86652e6de" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:d783974753df1f7347d8cef16403e157f0625302848e8267626064c4f79a97d8", + "sha256": "d783974753df1f7347d8cef16403e157f0625302848e8267626064c4f79a97d8" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:e5adecfb6ddd1a18ccb492c051adfd693eb091c4b24a58ad7b1cecb6afb0a575", + "sha256": "e5adecfb6ddd1a18ccb492c051adfd693eb091c4b24a58ad7b1cecb6afb0a575" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:8b3cb29277a584f1684661823c8232659b04234873430164bc80ba484c8aa8da", + "sha256": "8b3cb29277a584f1684661823c8232659b04234873430164bc80ba484c8aa8da" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libffi/blobs/sha256:798c3983a917698d5dd0c60063e7b8c1e5b4fc377d9e11d7cba010725eca1bfb", + "sha256": "798c3983a917698d5dd0c60063e7b8c1e5b4fc377d9e11d7cba010725eca1bfb" + } + } + } + }, + "libmemcached": { + "version": "1.0.18_2", + "bottle": { + "rebuild": 2, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:652c9f9862e367e62acc5d2b1ddc20d798e6f15c51bccbc69e642acd4df1be0a", + "sha256": "652c9f9862e367e62acc5d2b1ddc20d798e6f15c51bccbc69e642acd4df1be0a" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:0511d48bcc88a6860030c5c6bec5d36818068b43f11d67561f1519ce0dbf6b73", + "sha256": "0511d48bcc88a6860030c5c6bec5d36818068b43f11d67561f1519ce0dbf6b73" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:37977639be769bfd5ef97d38f408f57cf84f3607ce881c4d6f2c2d7c70a9b2a4", + "sha256": "37977639be769bfd5ef97d38f408f57cf84f3607ce881c4d6f2c2d7c70a9b2a4" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:2ec7b12e9181c83bbbd45b62ba2a1a0e2958fe2caaa0d94be1da2319831de3be", + "sha256": "2ec7b12e9181c83bbbd45b62ba2a1a0e2958fe2caaa0d94be1da2319831de3be" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:feedeadf282983ee5a86dff88537f2ba2f470d53d664efbc6a9c6bd393177037", + "sha256": "feedeadf282983ee5a86dff88537f2ba2f470d53d664efbc6a9c6bd393177037" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:2807a08a7c29739bd49450c44ec6f926e7c626b3b2104b1ed160226820a5465b", + "sha256": "2807a08a7c29739bd49450c44ec6f926e7c626b3b2104b1ed160226820a5465b" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:902c0e16ba5ec76696c3f45888ef0c61b840a10b344149242bec812a7c99ee0d", + "sha256": "902c0e16ba5ec76696c3f45888ef0c61b840a10b344149242bec812a7c99ee0d" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:c41f0bfdc440d240f8d0653dcc87270bd315571eab6979ff94d3271f863cb0e7", + "sha256": "c41f0bfdc440d240f8d0653dcc87270bd315571eab6979ff94d3271f863cb0e7" + }, + "catalina": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:70c6e1e3dd76241e343a4a3b38a62fae5bea6d2e2405739b11473d084f4409a9", + "sha256": "70c6e1e3dd76241e343a4a3b38a62fae5bea6d2e2405739b11473d084f4409a9" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libmemcached/blobs/sha256:b551d4cc72d953e3018369057901f77a88b1b633661f5acfedcf6bba37385a8b", + "sha256": "b551d4cc72d953e3018369057901f77a88b1b633661f5acfedcf6bba37385a8b" + } + } + } + }, + "libpq": { + "version": "16.2_1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:34ec05de1540053d140f435b9927edf7e4a4e84ed25253085e55a817b451c0cb", + "sha256": "34ec05de1540053d140f435b9927edf7e4a4e84ed25253085e55a817b451c0cb" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:81980d2cc07094693afdec5016eb3acf298bfc3c2e19b5e4aa035b5d815a8a86", + "sha256": "81980d2cc07094693afdec5016eb3acf298bfc3c2e19b5e4aa035b5d815a8a86" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:5b18a17730c5f0707c2e837acb86927e092e3ea997cf8354e5fdcf1de5ab1ac9", + "sha256": "5b18a17730c5f0707c2e837acb86927e092e3ea997cf8354e5fdcf1de5ab1ac9" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:b25bcb80440de0301426ec4e9159a49dd5f690aec12e3c0fee4897b8a2a909e7", + "sha256": "b25bcb80440de0301426ec4e9159a49dd5f690aec12e3c0fee4897b8a2a909e7" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:02fde1ff8fb54fe5c2e518d48447707ee2ee5bc90935a7782b877dff58e03b70", + "sha256": "02fde1ff8fb54fe5c2e518d48447707ee2ee5bc90935a7782b877dff58e03b70" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:2c38685f2e169b2f3cee5c77128ae77a15144d45ea2b836bd41ebe2c95292eb3", + "sha256": "2c38685f2e169b2f3cee5c77128ae77a15144d45ea2b836bd41ebe2c95292eb3" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/libpq/blobs/sha256:ec1122e7f681a2788b16d614169aadb0ed9b7056af79b8fd380fea4e31e3c6ae", + "sha256": "ec1122e7f681a2788b16d614169aadb0ed9b7056af79b8fd380fea4e31e3c6ae" + } + } + } + }, + "libtiff": { + "version": "4.6.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:a9cafbce08b697fb25e326ea1dd3a0e01c3acc3f8f616e844940e49b33386ab3", + "sha256": "a9cafbce08b697fb25e326ea1dd3a0e01c3acc3f8f616e844940e49b33386ab3" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:12f3e1b0e5cd225a05d914692cf6de0f86f29ba1f51b806723237da2f85a7b13", + "sha256": "12f3e1b0e5cd225a05d914692cf6de0f86f29ba1f51b806723237da2f85a7b13" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:8a7ed5ea7efe9534f15bca3ae2134d9f35bd08372da5949c33d025f80ae1d47e", + "sha256": "8a7ed5ea7efe9534f15bca3ae2134d9f35bd08372da5949c33d025f80ae1d47e" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:53b3bed3893804a56efa2ef20af3c2087298ba313b44e4cc6531d0bcfc54aaa9", + "sha256": "53b3bed3893804a56efa2ef20af3c2087298ba313b44e4cc6531d0bcfc54aaa9" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:a89a2671064dbf7af6b84a9f2d20546b3dff82ed4b6f95c17bdfe48ce6c615fc", + "sha256": "a89a2671064dbf7af6b84a9f2d20546b3dff82ed4b6f95c17bdfe48ce6c615fc" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:7347c37cf98bec3f956296caee0ecee54e7bfcc7b32d6e2e02b9ae04c80e3ca6", + "sha256": "7347c37cf98bec3f956296caee0ecee54e7bfcc7b32d6e2e02b9ae04c80e3ca6" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:8e3e1d5d4da3485867a6e0e2b35cf79e37f1b00e3e5399cf9b36996b1cbbff0c", + "sha256": "8e3e1d5d4da3485867a6e0e2b35cf79e37f1b00e3e5399cf9b36996b1cbbff0c" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:e0e6f2c0bc25665bfffb66505ebc9fc410aeeed3435edf770e9ecee88c7bc0e1", + "sha256": "e0e6f2c0bc25665bfffb66505ebc9fc410aeeed3435edf770e9ecee88c7bc0e1" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libtiff/blobs/sha256:9a6e0bb56c39b72a33b0a5629dc3fd49e4f1391513bcf7d04a764523cc0321c8", + "sha256": "9a6e0bb56c39b72a33b0a5629dc3fd49e4f1391513bcf7d04a764523cc0321c8" + } + } + } + }, + "libtool": { + "version": "2.4.7", + "bottle": { + "rebuild": 1, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:211b174c29c24b3bdd42c44a12262ba479c4707b19bd2abd41f41a67f1b45cf5", + "sha256": "211b174c29c24b3bdd42c44a12262ba479c4707b19bd2abd41f41a67f1b45cf5" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:a7196b340a6b2ee833b9451409a2e83b08ba192bebe4fd019c6e658789c76298", + "sha256": "a7196b340a6b2ee833b9451409a2e83b08ba192bebe4fd019c6e658789c76298" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:359d2a8f85d03f310263b91c665bf591703e8a7a6e79396bc2fc64df75e0655a", + "sha256": "359d2a8f85d03f310263b91c665bf591703e8a7a6e79396bc2fc64df75e0655a" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:faa1bb0c78ff5881efcaf476ccfc6ec400e56a4583fcc850d265b70f37fd577e", + "sha256": "faa1bb0c78ff5881efcaf476ccfc6ec400e56a4583fcc850d265b70f37fd577e" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:47676ae503261483d5f1f35caa074efc416527bc471e25b0dc5c19bf588ed39f", + "sha256": "47676ae503261483d5f1f35caa074efc416527bc471e25b0dc5c19bf588ed39f" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:d20beb0eb96c3ab67be5987393c64a575781c5d7abe6fb20efd2ae343a0680c7", + "sha256": "d20beb0eb96c3ab67be5987393c64a575781c5d7abe6fb20efd2ae343a0680c7" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:4b248059b3fed99774183f17e335eca05edb25698dabcecbe916f4ec63a48cc6", + "sha256": "4b248059b3fed99774183f17e335eca05edb25698dabcecbe916f4ec63a48cc6" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:deffadfecec61da06dde9edf5eae19381f80f99ae78e57607732fd54be366b8a", + "sha256": "deffadfecec61da06dde9edf5eae19381f80f99ae78e57607732fd54be366b8a" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libtool/blobs/sha256:f55d5bcc07a45f599800b2c9fb5818c13be90803355e169cdb0e1ddc621bee5e", + "sha256": "f55d5bcc07a45f599800b2c9fb5818c13be90803355e169cdb0e1ddc621bee5e" + } + } + } + }, + "libxml2": { + "version": "2.12.6", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:9c37ec3428a8874a2c06cb6b7c06e6fa245f6c901d11e98cd1fb1a026c19b107", + "sha256": "9c37ec3428a8874a2c06cb6b7c06e6fa245f6c901d11e98cd1fb1a026c19b107" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:42f2f051d27bffbc179a9ffd4a3004c7422c776233267b1b471e10c1e413744d", + "sha256": "42f2f051d27bffbc179a9ffd4a3004c7422c776233267b1b471e10c1e413744d" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:2891384cf532ff7e81ed87248ba71c50039dbb21b03890ade4ba4e03f30af9de", + "sha256": "2891384cf532ff7e81ed87248ba71c50039dbb21b03890ade4ba4e03f30af9de" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:67634d87d45a885b274d3282e36d795251d4db9f00996b0e7d815f0e5c6c8a22", + "sha256": "67634d87d45a885b274d3282e36d795251d4db9f00996b0e7d815f0e5c6c8a22" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:7ade43ba71ec4b40b8d287063d86b671644b18760eba47a04de37ac4a76efad8", + "sha256": "7ade43ba71ec4b40b8d287063d86b671644b18760eba47a04de37ac4a76efad8" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:a6d3512246ccd15f742332c17fa77c635c194b917da0c5ff0ed2a580dfcb5271", + "sha256": "a6d3512246ccd15f742332c17fa77c635c194b917da0c5ff0ed2a580dfcb5271" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libxml2/blobs/sha256:e71c388c95d8b83c907784a9fcc57bf2462e33ee97ea4406d214e177e67c095d", + "sha256": "e71c388c95d8b83c907784a9fcc57bf2462e33ee97ea4406d214e177e67c095d" + } + } + } + }, + "libxslt": { + "version": "1.1.39", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:28019195eef786264be3a0e67f814753a9108653c5f9e07964b89502c66b06e9", + "sha256": "28019195eef786264be3a0e67f814753a9108653c5f9e07964b89502c66b06e9" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:9921d7bd84d8fc6914244d5142fb60741eabc71a9a3af87b3c04967f9d334aba", + "sha256": "9921d7bd84d8fc6914244d5142fb60741eabc71a9a3af87b3c04967f9d334aba" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:c48449d1ad89ada8cf9133ea7ea88b247730144ea874dff9608eae0a7b89b882", + "sha256": "c48449d1ad89ada8cf9133ea7ea88b247730144ea874dff9608eae0a7b89b882" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:9a4458989d734defc29a7c042b1144a0a66c3768530fb0e07fe52ea78828e606", + "sha256": "9a4458989d734defc29a7c042b1144a0a66c3768530fb0e07fe52ea78828e606" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:695cb26667ee927b4f20fae395b48b8af4bf666f3dc9625bef2e3823aa2e65d8", + "sha256": "695cb26667ee927b4f20fae395b48b8af4bf666f3dc9625bef2e3823aa2e65d8" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:ed196bcf4372dacf751a8ba6d45feac8aa6220a877828785651c4694e6209f5b", + "sha256": "ed196bcf4372dacf751a8ba6d45feac8aa6220a877828785651c4694e6209f5b" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libxslt/blobs/sha256:81e671ea1b060a25b0db9ab3486ae21b1da5982b6e4a35593a411e9c6d103544", + "sha256": "81e671ea1b060a25b0db9ab3486ae21b1da5982b6e4a35593a411e9c6d103544" + } + } + } + }, + "libyaml": { + "version": "0.2.5", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:98c0cf81bcdf7577d5fdc8cc18732970b9ae7e0e7423a733f88f0f566ba483ad", + "sha256": "98c0cf81bcdf7577d5fdc8cc18732970b9ae7e0e7423a733f88f0f566ba483ad" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:11239e8f5066c6d0d0718208d4eab518da00c7289f33c9c76c0a09ba5c0417c9", + "sha256": "11239e8f5066c6d0d0718208d4eab518da00c7289f33c9c76c0a09ba5c0417c9" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:a436da33a05f805258c5951a365dec4e8d70a908dbe5dacdeb6b2ecd0efd5024", + "sha256": "a436da33a05f805258c5951a365dec4e8d70a908dbe5dacdeb6b2ecd0efd5024" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:fe1082f3475a144261b41e2c3e0728b9331911b1cbfadfbc1f3d70d454709154", + "sha256": "fe1082f3475a144261b41e2c3e0728b9331911b1cbfadfbc1f3d70d454709154" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:4d6e02ce3a82b60033bc7e55bef841dcfef0c05c051176d96accb50744136c6d", + "sha256": "4d6e02ce3a82b60033bc7e55bef841dcfef0c05c051176d96accb50744136c6d" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:b49e62f014b3e7d85a169b422b7521356700c7caaaea9f4901086cafe692a86e", + "sha256": "b49e62f014b3e7d85a169b422b7521356700c7caaaea9f4901086cafe692a86e" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:dbd54ce703c6d8eb77e708f75b4730ad2653d28f6291c4a26dc22158beb3f210", + "sha256": "dbd54ce703c6d8eb77e708f75b4730ad2653d28f6291c4a26dc22158beb3f210" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:83547fba540a38c30705a59a2e746952c68857212e823c6ee97c186e088f75cd", + "sha256": "83547fba540a38c30705a59a2e746952c68857212e823c6ee97c186e088f75cd" + }, + "catalina": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:56d3549b342cffb181e3eb05356697bbb362b9733c73e0eeff9b637ecf92cd23", + "sha256": "56d3549b342cffb181e3eb05356697bbb362b9733c73e0eeff9b637ecf92cd23" + }, + "mojave": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:a04988b3868cfadf7bcaff6b753b59388cbea70b38f2fa41a25229150d073696", + "sha256": "a04988b3868cfadf7bcaff6b753b59388cbea70b38f2fa41a25229150d073696" + }, + "high_sierra": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:d3e22ad09c3d6872c5f7ee7c7f1146c9f14c178ff4c3a3488a20bf584bc854d5", + "sha256": "d3e22ad09c3d6872c5f7ee7c7f1146c9f14c178ff4c3a3488a20bf584bc854d5" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libyaml/blobs/sha256:354677a745b6c62109e792ddbd0cbdaf9e6a471d84fdbde3a7d9bae36d832da8", + "sha256": "354677a745b6c62109e792ddbd0cbdaf9e6a471d84fdbde3a7d9bae36d832da8" + } + } + } + }, + "libzip": { + "version": "1.10.1", + "bottle": { + "rebuild": 1, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:8ecf154f8c0bab71c0008c6f73eb8cd2df78cfa424d8bdcffc66dc95b3bf7c14", + "sha256": "8ecf154f8c0bab71c0008c6f73eb8cd2df78cfa424d8bdcffc66dc95b3bf7c14" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:cd7bda731a8b2e5d1a3cdf5be6b515718c56d55d16a5b45faa1a91daf9c0ca2b", + "sha256": "cd7bda731a8b2e5d1a3cdf5be6b515718c56d55d16a5b45faa1a91daf9c0ca2b" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:a0d8bae54df1068c92ad894eddca0cd7465ecbaa3ef875c07c46bcea764bac71", + "sha256": "a0d8bae54df1068c92ad894eddca0cd7465ecbaa3ef875c07c46bcea764bac71" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:6549fda9b8f6ac3904b55bc0b8c601ecf15773eb4c97c40091148559d69bfec1", + "sha256": "6549fda9b8f6ac3904b55bc0b8c601ecf15773eb4c97c40091148559d69bfec1" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:f782643b254f58ddf3830272c0221f5d35db84ebd4f3d4ef19894ca0c91648ad", + "sha256": "f782643b254f58ddf3830272c0221f5d35db84ebd4f3d4ef19894ca0c91648ad" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:4fca00c15a69f25064b40b12e37a6f552edd632f77e2947e076745b55aaeffd3", + "sha256": "4fca00c15a69f25064b40b12e37a6f552edd632f77e2947e076745b55aaeffd3" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:5fbb0e2a2cd9b17a416d518d324d9eb3eac88626851bad41d9fb144ccebd8757", + "sha256": "5fbb0e2a2cd9b17a416d518d324d9eb3eac88626851bad41d9fb144ccebd8757" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:db6453b117d39f0fe310f30e0d92124c453dd1568edd5800fd886bdb2b35e9df", + "sha256": "db6453b117d39f0fe310f30e0d92124c453dd1568edd5800fd886bdb2b35e9df" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/libzip/blobs/sha256:a5c180236137518d040277c1310e4b7c34337a0d396053e9a2534861453f70bc", + "sha256": "a5c180236137518d040277c1310e4b7c34337a0d396053e9a2534861453f70bc" + } + } + } + }, + "make": { + "version": "4.4.1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:2cf9b5846e07363681d41819a13d2d9a993a69dd5090bbfae3da182915e777b9", + "sha256": "2cf9b5846e07363681d41819a13d2d9a993a69dd5090bbfae3da182915e777b9" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:23e26446ffdefd2b7fe44c559e11ab6bc127abd32233847f4e73bb3de87d98c6", + "sha256": "23e26446ffdefd2b7fe44c559e11ab6bc127abd32233847f4e73bb3de87d98c6" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:f3c69489afdb2ad686c7674d85deac4fcfdb3f891664c08c5d255af20a6eddcb", + "sha256": "f3c69489afdb2ad686c7674d85deac4fcfdb3f891664c08c5d255af20a6eddcb" + }, + "arm64_big_sur": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:cdb852c53ed94d31d5f4988338336b004f21857d1ecaa8e84b1c155bf92e0c47", + "sha256": "cdb852c53ed94d31d5f4988338336b004f21857d1ecaa8e84b1c155bf92e0c47" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:8c51e1eebb1cb1ae3acc4c52d041b141dd7d1ca005ba0081fd7c47162d4a50db", + "sha256": "8c51e1eebb1cb1ae3acc4c52d041b141dd7d1ca005ba0081fd7c47162d4a50db" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:206c13dc47f17131b1337ed24677b69288c2f03f780d09d1c3e5fd11a41d6ad9", + "sha256": "206c13dc47f17131b1337ed24677b69288c2f03f780d09d1c3e5fd11a41d6ad9" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:75651f4a57f1a712dfed7ed926de8b4c7f6c728544627ea059304f28455c4bab", + "sha256": "75651f4a57f1a712dfed7ed926de8b4c7f6c728544627ea059304f28455c4bab" + }, + "big_sur": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:2571cf69a3d123408660797685af0040097b1c273b13dfd0e3653ca1150830e2", + "sha256": "2571cf69a3d123408660797685af0040097b1c273b13dfd0e3653ca1150830e2" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/make/blobs/sha256:bded8e436d51f10ee36207ec69a0a318fb8583f83a5863f45bb203d3ae055170", + "sha256": "bded8e436d51f10ee36207ec69a0a318fb8583f83a5863f45bb203d3ae055170" + } + } + } + }, + "p7zip": { + "version": "17.05", + "bottle": { + "rebuild": 1, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:19bf0feb4e993c7cfad0d42bf8b9820ba67a9ebbd7ad4efd312a4a7953704a1a", + "sha256": "19bf0feb4e993c7cfad0d42bf8b9820ba67a9ebbd7ad4efd312a4a7953704a1a" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:ba7f3e60841e85ab16ae76e7f0be634e15ea1b0c4a3a631cbe57447cbc9d77b6", + "sha256": "ba7f3e60841e85ab16ae76e7f0be634e15ea1b0c4a3a631cbe57447cbc9d77b6" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:ed5af58015207456c265187cd73b53a80db239a9029bed1579065faa2391fec1", + "sha256": "ed5af58015207456c265187cd73b53a80db239a9029bed1579065faa2391fec1" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:145a4d0ecb748931931030b2e8844d5e007cba92cfed3b4ae07b4f15bc461e22", + "sha256": "145a4d0ecb748931931030b2e8844d5e007cba92cfed3b4ae07b4f15bc461e22" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:2827eb7db9135c059d4498667e08ac37e4e020d39df6df0cebb1080d09cea9c5", + "sha256": "2827eb7db9135c059d4498667e08ac37e4e020d39df6df0cebb1080d09cea9c5" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:6b4bac2c955ef9902583dafa2f9bf6e0e3f5d503c81e51c1ed1ddde01b2ae4df", + "sha256": "6b4bac2c955ef9902583dafa2f9bf6e0e3f5d503c81e51c1ed1ddde01b2ae4df" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:91623462e2bdad09edfa899267359fcfd03ab34d8b70176462b1364e6f23f91c", + "sha256": "91623462e2bdad09edfa899267359fcfd03ab34d8b70176462b1364e6f23f91c" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:663d0ac5174855af24bf4dd7b729ef5693b7a421327379ba2d210b370f12aef0", + "sha256": "663d0ac5174855af24bf4dd7b729ef5693b7a421327379ba2d210b370f12aef0" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/p7zip/blobs/sha256:a421f6e2445fa536da9ab14e83060f3a2949cbdf1e5ac38484339e7b6b22fa04", + "sha256": "a421f6e2445fa536da9ab14e83060f3a2949cbdf1e5ac38484339e7b6b22fa04" + } + } + } + }, + "parallel": { + "version": "20240322", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "all": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/parallel/blobs/sha256:edb8aaa82c0eb53277f2399a2e9e56ec5633c4879f4827f84977cbd2cc2aa641", + "sha256": "edb8aaa82c0eb53277f2399a2e9e56ec5633c4879f4827f84977cbd2cc2aa641" + } + } + } + }, + "pcre": { + "version": "8.45", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:fbc1ec29701c2c3f0eb750a0aecf03b90acb6d47f1bbf1dc07eb8a7c9340650e", + "sha256": "fbc1ec29701c2c3f0eb750a0aecf03b90acb6d47f1bbf1dc07eb8a7c9340650e" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:542a6e5dcf5f1ac6592992f949687a56515d154abf1bfdd71327edcfb5183fb6", + "sha256": "542a6e5dcf5f1ac6592992f949687a56515d154abf1bfdd71327edcfb5183fb6" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:11193fd0a113c0bb330b1c2c21ab6f40d225c1893a451bba85e8a1562b914a1c", + "sha256": "11193fd0a113c0bb330b1c2c21ab6f40d225c1893a451bba85e8a1562b914a1c" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:2d6bfcafce9da9739e32ee433087e69a78cda3f18291350953e6ad260fefc50b", + "sha256": "2d6bfcafce9da9739e32ee433087e69a78cda3f18291350953e6ad260fefc50b" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:636ad19cc22f9c7608d5be592f8404c67458723d9629dbae026a93b8a3810e39", + "sha256": "636ad19cc22f9c7608d5be592f8404c67458723d9629dbae026a93b8a3810e39" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:df481fdd99c1dff924ea2d679623512d6c0c275e3b7c223e753ec654994ac6e5", + "sha256": "df481fdd99c1dff924ea2d679623512d6c0c275e3b7c223e753ec654994ac6e5" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:5e5cc7a5bf8bb6488ec57d4263bf6b0bc89e93252a0a2460f846de29373162d8", + "sha256": "5e5cc7a5bf8bb6488ec57d4263bf6b0bc89e93252a0a2460f846de29373162d8" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:fb2fefbe1232706a603a6b385fc37253e5aafaf3536cb68b828ad1940b95e601", + "sha256": "fb2fefbe1232706a603a6b385fc37253e5aafaf3536cb68b828ad1940b95e601" + }, + "catalina": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:180d88dc2230e98162685b86d00436903db4349aac701f9769997d61adb78418", + "sha256": "180d88dc2230e98162685b86d00436903db4349aac701f9769997d61adb78418" + }, + "mojave": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:a42b79956773d18c4ac337868cfc15fadadf5e779d65c12ffd6f8fd379b5514c", + "sha256": "a42b79956773d18c4ac337868cfc15fadadf5e779d65c12ffd6f8fd379b5514c" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pcre/blobs/sha256:296026b6d5430399e40fb4f8074045a9a27d5374d83f2f6d4659c2647959f36d", + "sha256": "296026b6d5430399e40fb4f8074045a9a27d5374d83f2f6d4659c2647959f36d" + } + } + } + }, + "pg_top": { + "version": "3.7.0_4", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:852a0e040171868c8c6c677306c82c81ed1fc52e7cb47413c1ddcb48cf5bb987", + "sha256": "852a0e040171868c8c6c677306c82c81ed1fc52e7cb47413c1ddcb48cf5bb987" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:c7d46c3124f4336b96d82dac38fdaf58ecb871587f7e1f1bc52368ab3ba29e78", + "sha256": "c7d46c3124f4336b96d82dac38fdaf58ecb871587f7e1f1bc52368ab3ba29e78" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:a157f605a85907c0d04410199dfcc4d7de515844f0ad41bcbcde1b8b771431c8", + "sha256": "a157f605a85907c0d04410199dfcc4d7de515844f0ad41bcbcde1b8b771431c8" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:506d2459e302e37bac0f38f99cd2cc2d3c3f5fd39631ee540a6f54d59af07f4a", + "sha256": "506d2459e302e37bac0f38f99cd2cc2d3c3f5fd39631ee540a6f54d59af07f4a" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:59ad81e7e985e9b841a4667a901e94cadac8923be21654c5918326a230424910", + "sha256": "59ad81e7e985e9b841a4667a901e94cadac8923be21654c5918326a230424910" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:825e51d876eb38a90e72413f751b88c291b1da0956c8f07b494da5d51f10ca95", + "sha256": "825e51d876eb38a90e72413f751b88c291b1da0956c8f07b494da5d51f10ca95" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:6252dc42f3d6e6570b0371f2f10cd146a06bd52b492636bbb35f62ff07239b7a", + "sha256": "6252dc42f3d6e6570b0371f2f10cd146a06bd52b492636bbb35f62ff07239b7a" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:7980c5af9dec1de3a76a74fbd4b359ec1a90bdd7223fa7ffc8f4294642042fc8", + "sha256": "7980c5af9dec1de3a76a74fbd4b359ec1a90bdd7223fa7ffc8f4294642042fc8" + }, + "catalina": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:edf54d452403cf5be9b63a0a744560a00bb9e83ace3885ae33d36d96b0a8c2a4", + "sha256": "edf54d452403cf5be9b63a0a744560a00bb9e83ace3885ae33d36d96b0a8c2a4" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pg_top/blobs/sha256:65fe3861c5e90a4c9403f4b551892cd8ac85fbbea1cc23f551ee0eda3c9de01d", + "sha256": "65fe3861c5e90a4c9403f4b551892cd8ac85fbbea1cc23f551ee0eda3c9de01d" + } + } + } + }, + "pkg-config": { + "version": "0.29.2_3", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:7b59abc0b5381065b1eab174217307af9324e0d02edf903171b29250ae58aeaf", + "sha256": "7b59abc0b5381065b1eab174217307af9324e0d02edf903171b29250ae58aeaf" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:3ff612c5e44b945c8c0cc6df7d3edb407ca67cddad9c89f9ab99ced494b7a8c2", + "sha256": "3ff612c5e44b945c8c0cc6df7d3edb407ca67cddad9c89f9ab99ced494b7a8c2" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:2af9bceb60b70a259f236f1d46d2bb24c4d0a4af8cd63d974dde4d76313711e0", + "sha256": "2af9bceb60b70a259f236f1d46d2bb24c4d0a4af8cd63d974dde4d76313711e0" + }, + "arm64_big_sur": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:ffd4491f62201d14b7eca6beff954a2ab265351589cd5b3b79b8bbb414485574", + "sha256": "ffd4491f62201d14b7eca6beff954a2ab265351589cd5b3b79b8bbb414485574" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:421571f340277c62c5cc6fd68737bd7c4e085de113452ea49b33bcd46509bb12", + "sha256": "421571f340277c62c5cc6fd68737bd7c4e085de113452ea49b33bcd46509bb12" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:c44b1544815518726d280d92d6f6df09bd45e41ad20fd43424725c1c20760be8", + "sha256": "c44b1544815518726d280d92d6f6df09bd45e41ad20fd43424725c1c20760be8" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:a6ba80711f98b65d8a2bf2c9278540860415e9b5e545da338a4d94f39d119285", + "sha256": "a6ba80711f98b65d8a2bf2c9278540860415e9b5e545da338a4d94f39d119285" + }, + "big_sur": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:0040b6ebe07f60549800b211343fd5fb3cf83c866d9f62e40f5fb2f38b71e161", + "sha256": "0040b6ebe07f60549800b211343fd5fb3cf83c866d9f62e40f5fb2f38b71e161" + }, + "catalina": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:80f141e695f73bd058fd82e9f539dc67471666ff6800c5e280b5af7d3050f435", + "sha256": "80f141e695f73bd058fd82e9f539dc67471666ff6800c5e280b5af7d3050f435" + }, + "mojave": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:0d14b797dba0e0ab595c9afba8ab7ef9c901b60b4f806b36580ef95ebb370232", + "sha256": "0d14b797dba0e0ab595c9afba8ab7ef9c901b60b4f806b36580ef95ebb370232" + }, + "high_sierra": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:8c6160305abd948b8cf3e0d5c6bb0df192fa765bbb9535dda0b573cb60abbe52", + "sha256": "8c6160305abd948b8cf3e0d5c6bb0df192fa765bbb9535dda0b573cb60abbe52" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pkg-config/blobs/sha256:3d9b8bf9b7b4bd08086be1104e3e18afb1c437dfaca03e6e7df8f2710b9c1c1a", + "sha256": "3d9b8bf9b7b4bd08086be1104e3e18afb1c437dfaca03e6e7df8f2710b9c1c1a" + } + } + } + }, + "postgresql@15": { + "version": "15.6_1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:a85110c06097d4cfbc11e0397caf48060d12eac7852556c7eeb99a24885c3fa8", + "sha256": "a85110c06097d4cfbc11e0397caf48060d12eac7852556c7eeb99a24885c3fa8" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:328bcd13c829c6fe759a038e7dfb17c7af75fd242452a09cb77915a78fa233a4", + "sha256": "328bcd13c829c6fe759a038e7dfb17c7af75fd242452a09cb77915a78fa233a4" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:5c5e76210be1a35306ace4e75cc0683991fb91b3343223a8f774a71309711ac7", + "sha256": "5c5e76210be1a35306ace4e75cc0683991fb91b3343223a8f774a71309711ac7" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:0e2af74b4a53cd4f9411c9b18d75041a7954352aa4ff1efe072233ac6771fe0e", + "sha256": "0e2af74b4a53cd4f9411c9b18d75041a7954352aa4ff1efe072233ac6771fe0e" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:627c40901853c1f97ca21293fcadaaa138cbe2d4b390e0d7fa15d8c335ff1cf9", + "sha256": "627c40901853c1f97ca21293fcadaaa138cbe2d4b390e0d7fa15d8c335ff1cf9" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:5a9687c58bae0fc14730eeb7a8d693c9841a9d58066ae8c90cdbeea510de0a51", + "sha256": "5a9687c58bae0fc14730eeb7a8d693c9841a9d58066ae8c90cdbeea510de0a51" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/postgresql/15/blobs/sha256:27403cb27e7201906e1debca1eb01a731637a47eebd3aa56d9bc4dcc4702766f", + "sha256": "27403cb27e7201906e1debca1eb01a731637a47eebd3aa56d9bc4dcc4702766f" + } + } + } + }, + "pstree": { + "version": "2.40", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:05dcf81f64516f4b96ccb2a82fe610e65d2733d0cfb6dbff41b54fcd9f45f111", + "sha256": "05dcf81f64516f4b96ccb2a82fe610e65d2733d0cfb6dbff41b54fcd9f45f111" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:ca06848c6042d6f8c7ee44477aae9d5e1ed8f73be77dc99d9ec126460bc1f9f8", + "sha256": "ca06848c6042d6f8c7ee44477aae9d5e1ed8f73be77dc99d9ec126460bc1f9f8" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:e43ea23b1cc41dbd5717b22c8de73faae3fa58e88a9f18845533e7f4acc24eeb", + "sha256": "e43ea23b1cc41dbd5717b22c8de73faae3fa58e88a9f18845533e7f4acc24eeb" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:bc1765755ab89e61a17983692eb4ceb6c659f2f90b1f26bfea0ed1a908a7dc07", + "sha256": "bc1765755ab89e61a17983692eb4ceb6c659f2f90b1f26bfea0ed1a908a7dc07" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:ceea272a5221af7418627c38fb6c310e65bdd316ca201d06861e1ddb5314e570", + "sha256": "ceea272a5221af7418627c38fb6c310e65bdd316ca201d06861e1ddb5314e570" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:b95d35e5b4f3bb8953ccec2ee1e3f25fdd14ed942606de9f4abcd9b2dfa31a5b", + "sha256": "b95d35e5b4f3bb8953ccec2ee1e3f25fdd14ed942606de9f4abcd9b2dfa31a5b" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:fc23e46dee144842b941ad5b6527018154d38b67827e4f019bf9efab24a15365", + "sha256": "fc23e46dee144842b941ad5b6527018154d38b67827e4f019bf9efab24a15365" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:bf6f7f6e9a1ec7b0e5454e15973ee091a143eb887c67d81b07f262c447c685b7", + "sha256": "bf6f7f6e9a1ec7b0e5454e15973ee091a143eb887c67d81b07f262c447c685b7" + }, + "catalina": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:820b3dd1b26142457348dfc27c29ad8f1b6d86367995d8895ff41d8c74f91c8a", + "sha256": "820b3dd1b26142457348dfc27c29ad8f1b6d86367995d8895ff41d8c74f91c8a" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pstree/blobs/sha256:d65aff524b410c2ea45556fad2e5b07b9052896c07ee386fc6213208fdc7bc43", + "sha256": "d65aff524b410c2ea45556fad2e5b07b9052896c07ee386fc6213208fdc7bc43" + } + } + } + }, + "pyenv": { + "version": "2.4.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:423e0c467f4c0e07f093132d036790679752c6ec3e150966f448284e8666870d", + "sha256": "423e0c467f4c0e07f093132d036790679752c6ec3e150966f448284e8666870d" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:d36e0a02a291c69a97adefac255bb3ac051d4db2330991567e0f642335bd312f", + "sha256": "d36e0a02a291c69a97adefac255bb3ac051d4db2330991567e0f642335bd312f" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:c864a789872d8febd82456fbe97ee9f61f3f99b0d8624f46a418502fc8970526", + "sha256": "c864a789872d8febd82456fbe97ee9f61f3f99b0d8624f46a418502fc8970526" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:717187999c534627f41052dcfa3d740bcc8cc0e3b10242ee8755d00e8b70d683", + "sha256": "717187999c534627f41052dcfa3d740bcc8cc0e3b10242ee8755d00e8b70d683" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:3833eb68cf61a81be46cf8fdfb1f919817c6d433455f3feb0dd199470ad758b3", + "sha256": "3833eb68cf61a81be46cf8fdfb1f919817c6d433455f3feb0dd199470ad758b3" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:825f2204bb2e642d6fc883db15ec0ef5873ceff81c6c37d3f8a89f00791d3c94", + "sha256": "825f2204bb2e642d6fc883db15ec0ef5873ceff81c6c37d3f8a89f00791d3c94" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/pyenv/blobs/sha256:7c2dc4ac138eb5d65d88ac65b84d0b572e66b2439e0ca4d16a8db943e418386a", + "sha256": "7c2dc4ac138eb5d65d88ac65b84d0b572e66b2439e0ca4d16a8db943e418386a" + } + } + } + }, + "rbenv": { + "version": "1.2.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:8b4c091ff01a423d4c091cfde63243341517694014430d248c2b9fa6efeda8a7", + "sha256": "8b4c091ff01a423d4c091cfde63243341517694014430d248c2b9fa6efeda8a7" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:09bccc5974bd7b23f60a42c94bf7bc7d0e605cf4ef1f4068f63a1fe905bc5c74", + "sha256": "09bccc5974bd7b23f60a42c94bf7bc7d0e605cf4ef1f4068f63a1fe905bc5c74" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:dede9454bc8a665ac2b1858a0522fb77d95deebb5db7437918cfb056ff119b16", + "sha256": "dede9454bc8a665ac2b1858a0522fb77d95deebb5db7437918cfb056ff119b16" + }, + "arm64_big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:d5e6168ad6ab8843946273319fc6949b322c80f2d666a6bdda62466e256e6746", + "sha256": "d5e6168ad6ab8843946273319fc6949b322c80f2d666a6bdda62466e256e6746" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:59a2e9120361bc20b5c3fe8122438e5e43ee00e475ea6730fe507fda2de6d7ab", + "sha256": "59a2e9120361bc20b5c3fe8122438e5e43ee00e475ea6730fe507fda2de6d7ab" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:e654c2cf9b9966093b2d045cb9b12dbd32a7cd8926194838e13ee7d17184b1f5", + "sha256": "e654c2cf9b9966093b2d045cb9b12dbd32a7cd8926194838e13ee7d17184b1f5" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:42657e04e2d1e8bf9abb9c5f0ba50e567df95f93a2a212491f005e4bd0ad9cee", + "sha256": "42657e04e2d1e8bf9abb9c5f0ba50e567df95f93a2a212491f005e4bd0ad9cee" + }, + "big_sur": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:8a1b159909d472cc461d0a9b85a192a31ab58860e34f022fcbb33175732d24aa", + "sha256": "8a1b159909d472cc461d0a9b85a192a31ab58860e34f022fcbb33175732d24aa" + }, + "catalina": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:a2ca52c4fe3b7000d9f84f81836ddcb9b3aea9c20ee092dd71c1e10cf3a6a19a", + "sha256": "a2ca52c4fe3b7000d9f84f81836ddcb9b3aea9c20ee092dd71c1e10cf3a6a19a" + }, + "mojave": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:87ca53a9f4f84aff56ccbf2f823f903d20bc6669dde548018892857cc8871936", + "sha256": "87ca53a9f4f84aff56ccbf2f823f903d20bc6669dde548018892857cc8871936" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/rbenv/blobs/sha256:f4be8e4efef32c1fcdaa585312b3262d33b3306d9d7d9c75abd1230227b10bb7", + "sha256": "f4be8e4efef32c1fcdaa585312b3262d33b3306d9d7d9c75abd1230227b10bb7" + } + } + } + }, + "readline": { + "version": "8.2.10", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:713fd1fa8544426b7e97eb21d13153195fea4c407db8a174bd183777b81c9192", + "sha256": "713fd1fa8544426b7e97eb21d13153195fea4c407db8a174bd183777b81c9192" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:90351660d5ceca72a4c0a287555f2045db95f78aa5f65011b94213429f729cde", + "sha256": "90351660d5ceca72a4c0a287555f2045db95f78aa5f65011b94213429f729cde" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:e58bc8376c36602c3cedf94075bb1097b04b77438c5a946fdbd37bf0eb6579c2", + "sha256": "e58bc8376c36602c3cedf94075bb1097b04b77438c5a946fdbd37bf0eb6579c2" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:9796e0ff1cc29ae7e75d8fc1a3e2c5e8ae2aeade8d9d59a16363306bf6c5b8f4", + "sha256": "9796e0ff1cc29ae7e75d8fc1a3e2c5e8ae2aeade8d9d59a16363306bf6c5b8f4" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:952e2975dffc98bd35673c86474dbb91fadc8d993c0720e4f085597f7a484af9", + "sha256": "952e2975dffc98bd35673c86474dbb91fadc8d993c0720e4f085597f7a484af9" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:3633320dce51662036ea90acfc9adf5bb5e6f1dca7dbdb539839736129c474b0", + "sha256": "3633320dce51662036ea90acfc9adf5bb5e6f1dca7dbdb539839736129c474b0" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/readline/blobs/sha256:65181d2c0a9bd1d91ded6f7ec4a69b1110f65e875b332947e86a30aed7eab20f", + "sha256": "65181d2c0a9bd1d91ded6f7ec4a69b1110f65e875b332947e86a30aed7eab20f" + } + } + } + }, + "redis": { + "version": "7.2.4", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:7840031cf7bb94c62d6e42b6e730e8447c31ae37e3564a43a772fb8e6e0e51cf", + "sha256": "7840031cf7bb94c62d6e42b6e730e8447c31ae37e3564a43a772fb8e6e0e51cf" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:975f8c13a24d1b0f4a8e0f3c9ea2338d209ec9bcfcebd3130d0a72c3e4809c58", + "sha256": "975f8c13a24d1b0f4a8e0f3c9ea2338d209ec9bcfcebd3130d0a72c3e4809c58" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:ac32435ac27d8a061ee32ba88cf842ee3dff64a85803aa4d6a65d841e32ccbbd", + "sha256": "ac32435ac27d8a061ee32ba88cf842ee3dff64a85803aa4d6a65d841e32ccbbd" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:09767dffd13dd62aed6bb904f35946c3b9dae2db58cc884dc179d6e12b573673", + "sha256": "09767dffd13dd62aed6bb904f35946c3b9dae2db58cc884dc179d6e12b573673" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:3ce1ca917e08acf3cad5023e0d7184505be327f797f18eb692711325d8c540c9", + "sha256": "3ce1ca917e08acf3cad5023e0d7184505be327f797f18eb692711325d8c540c9" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:357f32b7bbe42ae1323d693bebd756f1589ae38a03e25f1a217fdd870b301797", + "sha256": "357f32b7bbe42ae1323d693bebd756f1589ae38a03e25f1a217fdd870b301797" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/redis/blobs/sha256:92d2c8978df576d27b03b8f806136eaa920329c0fec4f4606f1a07abaad6c353", + "sha256": "92d2c8978df576d27b03b8f806136eaa920329c0fec4f4606f1a07abaad6c353" + } + } + } + }, + "ripgrep": { + "version": "14.1.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:22cc1f3423a7fddb550fb94bd2715ce5455076d17f2c88ef0c157749ea4b87d6", + "sha256": "22cc1f3423a7fddb550fb94bd2715ce5455076d17f2c88ef0c157749ea4b87d6" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:837aaf1b32879f1177f9599e67d73a7f474d25ad5d3ba053216b05cbf8539b2a", + "sha256": "837aaf1b32879f1177f9599e67d73a7f474d25ad5d3ba053216b05cbf8539b2a" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:9a6e788f0a35d38ed325c7880e772775fe04c61e27c3506785ce10f6095ec891", + "sha256": "9a6e788f0a35d38ed325c7880e772775fe04c61e27c3506785ce10f6095ec891" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:35ee71e72b612f0cc7748ff0e58b4cdfeec0693c83df6f553d9be1160cc7ba74", + "sha256": "35ee71e72b612f0cc7748ff0e58b4cdfeec0693c83df6f553d9be1160cc7ba74" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:42eaa5b6b69a460c31c859c44b263d651e649d6eae4478651b09e155a14faf64", + "sha256": "42eaa5b6b69a460c31c859c44b263d651e649d6eae4478651b09e155a14faf64" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:69c2e49f5d8054e1d2efb6e77aa8f83183b6bcfd6470354da30a2bfb251edd00", + "sha256": "69c2e49f5d8054e1d2efb6e77aa8f83183b6bcfd6470354da30a2bfb251edd00" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ripgrep/blobs/sha256:bf2810ab20dc5006c02d9ced344bb47f1c2e5770ae051c35f81faaa34fe48d9d", + "sha256": "bf2810ab20dc5006c02d9ced344bb47f1c2e5770ae051c35f81faaa34fe48d9d" + } + } + } + }, + "rsync": { + "version": "3.3.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:aedcc676dfc2ba721d7e780a852525c3a96ab045ff5225b72ca31b0248aa5abc", + "sha256": "aedcc676dfc2ba721d7e780a852525c3a96ab045ff5225b72ca31b0248aa5abc" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:800017d5ed8d03f6c0ff9e45830b09d5fd709ad1cf565b056782a65aef061769", + "sha256": "800017d5ed8d03f6c0ff9e45830b09d5fd709ad1cf565b056782a65aef061769" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:87da2d08d06cc90b4087e8ef50418a9ec3a0ceecb23e1ec75ffad2b411c5400a", + "sha256": "87da2d08d06cc90b4087e8ef50418a9ec3a0ceecb23e1ec75ffad2b411c5400a" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:5ef1e7552fe1fe4fcbf336c83313033a544768d4f8e7cc166ea4f91c2867c35b", + "sha256": "5ef1e7552fe1fe4fcbf336c83313033a544768d4f8e7cc166ea4f91c2867c35b" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:c0d2c0d516ca8ed44cdd846a9066b5b9748ce56dc26fc0be07f057f15e730460", + "sha256": "c0d2c0d516ca8ed44cdd846a9066b5b9748ce56dc26fc0be07f057f15e730460" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:502081be38ed754a5fce7c4a38bfb2aaad99923ffa27a9fe4b13e3e0df7635c5", + "sha256": "502081be38ed754a5fce7c4a38bfb2aaad99923ffa27a9fe4b13e3e0df7635c5" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/rsync/blobs/sha256:db52f38e89890b3c5b50931db4d3910984dbc8180466c250495f3e7b579a7366", + "sha256": "db52f38e89890b3c5b50931db4d3910984dbc8180466c250495f3e7b579a7366" + } + } + } + }, + "ruby-build": { + "version": "20240319", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "all": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ruby-build/blobs/sha256:48a2fa2d1e3a6356ed64cdc420251ce5f6e0ee33a02b9f133603f30ca6ddb952", + "sha256": "48a2fa2d1e3a6356ed64cdc420251ce5f6e0ee33a02b9f133603f30ca6ddb952" + } + } + } + }, + "ruby-completion": { + "version": "1.0.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "all": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ruby-completion/blobs/sha256:ddef10f9066b45d6d50d2795bfc16b7fbc528145db20e6a7c7714e2a26e3ac83", + "sha256": "ddef10f9066b45d6d50d2795bfc16b7fbc528145db20e6a7c7714e2a26e3ac83" + } + } + } + }, + "shellcheck": { + "version": "0.10.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:ef742b6992cfcdcd7289718ac64b27174e421d29ce3ad9b81e1856349059b117", + "sha256": "ef742b6992cfcdcd7289718ac64b27174e421d29ce3ad9b81e1856349059b117" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:6e60ee03edb09ac5bc852b8eb813849fa654400e21ffb4c746989678172f5a26", + "sha256": "6e60ee03edb09ac5bc852b8eb813849fa654400e21ffb4c746989678172f5a26" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:d5e8407806dbf757e71930ce2cb9b0d23bae286f0c058d9ff246d851dd7aa871", + "sha256": "d5e8407806dbf757e71930ce2cb9b0d23bae286f0c058d9ff246d851dd7aa871" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:b53cf1e5464406ee49743fc2db84850b6d34d3a2098cf729e629b23f9d6dd6e0", + "sha256": "b53cf1e5464406ee49743fc2db84850b6d34d3a2098cf729e629b23f9d6dd6e0" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:15ba88c48a5ae3b08e085791e3c5e514d9d78ce88414c96bd21ed33f29fb4aca", + "sha256": "15ba88c48a5ae3b08e085791e3c5e514d9d78ce88414c96bd21ed33f29fb4aca" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:b3d14cb62e325d0f7221cd24a7fb4533936feae4ed4dce00e8983ec6e55123f8", + "sha256": "b3d14cb62e325d0f7221cd24a7fb4533936feae4ed4dce00e8983ec6e55123f8" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/shellcheck/blobs/sha256:6d0867f144686a5caa025cb15ecac49286654b78e7b89979a54eedc9a0cc9b6b", + "sha256": "6d0867f144686a5caa025cb15ecac49286654b78e7b89979a54eedc9a0cc9b6b" + } + } + } + }, + "tree": { + "version": "2.1.1_1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:2d1c490c83719c983ec360085e9d0049418ff424259bc00122869f8acf68ed63", + "sha256": "2d1c490c83719c983ec360085e9d0049418ff424259bc00122869f8acf68ed63" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:13b597dcee0eec0e8d3a7f864dfb5713d812605092bf1e417c765e788d0c0d31", + "sha256": "13b597dcee0eec0e8d3a7f864dfb5713d812605092bf1e417c765e788d0c0d31" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:0bd195b460f491c6e71b0277efb3c4cdbab8b6d814072519ade39e5ca257b048", + "sha256": "0bd195b460f491c6e71b0277efb3c4cdbab8b6d814072519ade39e5ca257b048" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:af3d14eb91e4bf756bb5ef5f6a489aeb33e6cf5fc4f72c99d70352bec364e282", + "sha256": "af3d14eb91e4bf756bb5ef5f6a489aeb33e6cf5fc4f72c99d70352bec364e282" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:da304661d82c58ee3d4a14f80479d15d3405ca4c1be78b6085f7c62e67f79412", + "sha256": "da304661d82c58ee3d4a14f80479d15d3405ca4c1be78b6085f7c62e67f79412" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:13a0875d7da74de5ccfd1c6d3bd6167d2c4c0d7d4d747cc3ebb377fad60df365", + "sha256": "13a0875d7da74de5ccfd1c6d3bd6167d2c4c0d7d4d747cc3ebb377fad60df365" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/tree/blobs/sha256:48bf95e7ef6c5f14db8a551b3ba22db93613f39ad04985f2edd3d34754daf89e", + "sha256": "48bf95e7ef6c5f14db8a551b3ba22db93613f39ad04985f2edd3d34754daf89e" + } + } + } + }, + "vim": { + "version": "9.1.0250", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:4dcdf1844e915117b11941a6664b0c2a673c7ee1924423b9fc6c110b326e4a7c", + "sha256": "4dcdf1844e915117b11941a6664b0c2a673c7ee1924423b9fc6c110b326e4a7c" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:0ba2022b0a6a275cad59401ad92275c2070e22f9cb9cba2dbf721be7d2f0d28e", + "sha256": "0ba2022b0a6a275cad59401ad92275c2070e22f9cb9cba2dbf721be7d2f0d28e" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:4f6ce058ad9c008aaf759a3de3ad6e33c0e6d251c52eec74956d878349542cde", + "sha256": "4f6ce058ad9c008aaf759a3de3ad6e33c0e6d251c52eec74956d878349542cde" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:6e926b97cceeaf7e51228bd810fa88b27ee988f431f3eaef84deca76d738621f", + "sha256": "6e926b97cceeaf7e51228bd810fa88b27ee988f431f3eaef84deca76d738621f" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:1cacd2cf1a9aa26e699c04868b8df35c4f94830a3a61432194c01aba4b6253a0", + "sha256": "1cacd2cf1a9aa26e699c04868b8df35c4f94830a3a61432194c01aba4b6253a0" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:368b2b82898d57691174ce46d530aaaf85f08d3c16605e47a5589d9261ea0425", + "sha256": "368b2b82898d57691174ce46d530aaaf85f08d3c16605e47a5589d9261ea0425" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/vim/blobs/sha256:96554443b485ade05f6177178219702d04b319f59be8ae487b3b30bcba5bb7ea", + "sha256": "96554443b485ade05f6177178219702d04b319f59be8ae487b3b30bcba5bb7ea" + } + } + } + }, + "watch": { + "version": "4.0.4", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:9d8b55c73a9b913186f6ef8dc7642e8a718b5edea93fc3301fff5f44ad42fe90", + "sha256": "9d8b55c73a9b913186f6ef8dc7642e8a718b5edea93fc3301fff5f44ad42fe90" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:f2e3977aacd949425257bb08b9ed66125e4cdff76a6e5b2464718139bc966d8c", + "sha256": "f2e3977aacd949425257bb08b9ed66125e4cdff76a6e5b2464718139bc966d8c" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:5f7ea5b77d12731688f4e2e72e8190f70c62763d4bdb94e8c30ea1c0625db9d6", + "sha256": "5f7ea5b77d12731688f4e2e72e8190f70c62763d4bdb94e8c30ea1c0625db9d6" + }, + "arm64_big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:3aac6404005a0953a1126687829863e19fa4d0f02acc4e58d8d099615bd9d014", + "sha256": "3aac6404005a0953a1126687829863e19fa4d0f02acc4e58d8d099615bd9d014" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:58baecc442fe806ece26dcd2c055532f226b8a06a732d32392c0858c56a6ac67", + "sha256": "58baecc442fe806ece26dcd2c055532f226b8a06a732d32392c0858c56a6ac67" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:80193cc3557144f620767de324af7f45bd0717496b81d8d09f811cf0e9e7397c", + "sha256": "80193cc3557144f620767de324af7f45bd0717496b81d8d09f811cf0e9e7397c" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:f52987abe01c3e3a09c5608d02fd8a4714632f4256ae58c79d4a32f41e42669b", + "sha256": "f52987abe01c3e3a09c5608d02fd8a4714632f4256ae58c79d4a32f41e42669b" + }, + "big_sur": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:d61077f4bffe12e0132a86c138630d2c422932272a61959ab1a01e8b7c244edb", + "sha256": "d61077f4bffe12e0132a86c138630d2c422932272a61959ab1a01e8b7c244edb" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/watch/blobs/sha256:03aa0061c8707c4d31402f1697429c7619e08e29221de08eed00ec9a26d3bc1e", + "sha256": "03aa0061c8707c4d31402f1697429c7619e08e29221de08eed00ec9a26d3bc1e" + } + } + } + }, + "wget": { + "version": "1.24.5", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:9befdad158e59763fb0622083974a6252878019702d8c961e1bec3a5f5305339", + "sha256": "9befdad158e59763fb0622083974a6252878019702d8c961e1bec3a5f5305339" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:ac4c0330b70dae06eaa8065bfbea78dda277699d1ae8002478017a1bd9cf1908", + "sha256": "ac4c0330b70dae06eaa8065bfbea78dda277699d1ae8002478017a1bd9cf1908" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:02313702fc03880f221d60ce4d0b652c8b44fe68c15609329d757d031bce6bc4", + "sha256": "02313702fc03880f221d60ce4d0b652c8b44fe68c15609329d757d031bce6bc4" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:034528edb247df85f90997aca6a51ddb988a880af6bb571b8473de1702a887af", + "sha256": "034528edb247df85f90997aca6a51ddb988a880af6bb571b8473de1702a887af" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:1b7e2f76c90553543a5e25dadf031c6fcfe280f52bf27d89e04006f9d33fd20b", + "sha256": "1b7e2f76c90553543a5e25dadf031c6fcfe280f52bf27d89e04006f9d33fd20b" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:ffc49a5064a003006e69f51434ac5f7ec4f4019c161ad32fab22c32697db61cd", + "sha256": "ffc49a5064a003006e69f51434ac5f7ec4f4019c161ad32fab22c32697db61cd" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/wget/blobs/sha256:6a4642964fe5c4d1cc8cd3507541736d5b984e34a303a814ef550d4f2f8242f9", + "sha256": "6a4642964fe5c4d1cc8cd3507541736d5b984e34a303a814ef550d4f2f8242f9" + } + } + } + }, + "yamlfmt": { + "version": "0.11.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:e0b8c469f4ea5763210196cac0559cf4af4dc55be045fd64d601163a40b4bd7a", + "sha256": "e0b8c469f4ea5763210196cac0559cf4af4dc55be045fd64d601163a40b4bd7a" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:47b6975bcb89b9036bd675036b5b336b60a3f87a7bf4e7c8d2bf06ca85b3d0ba", + "sha256": "47b6975bcb89b9036bd675036b5b336b60a3f87a7bf4e7c8d2bf06ca85b3d0ba" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:b7c5e22e842081e375399c15e8e7ccf037561e2bac51b2bb259d4c9c7212165f", + "sha256": "b7c5e22e842081e375399c15e8e7ccf037561e2bac51b2bb259d4c9c7212165f" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:e10c21d430b641d39c0798f2c890f7628b44d42ab4f99229fed936b2b38c9a9c", + "sha256": "e10c21d430b641d39c0798f2c890f7628b44d42ab4f99229fed936b2b38c9a9c" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:30eee693734fc1f71bf2c67b1bc7e4dfaccdf64e8b1ad2997719000961fdbaea", + "sha256": "30eee693734fc1f71bf2c67b1bc7e4dfaccdf64e8b1ad2997719000961fdbaea" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:d68f766149e173cc19dd3275c19e931d09add173f9c6e6b4c66b0679e41c77dd", + "sha256": "d68f766149e173cc19dd3275c19e931d09add173f9c6e6b4c66b0679e41c77dd" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamlfmt/blobs/sha256:7d1bfa0101976985cb399566af4e0f1b0921b484618d04dd32372d0ff308c34d", + "sha256": "7d1bfa0101976985cb399566af4e0f1b0921b484618d04dd32372d0ff308c34d" + } + } + } + }, + "yamllint": { + "version": "1.35.1", + "bottle": { + "rebuild": 1, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:f4c04876473720910f72e135311c05d3fefe3208bba7d90e7904cbbc2f154051", + "sha256": "f4c04876473720910f72e135311c05d3fefe3208bba7d90e7904cbbc2f154051" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:55c913a5745760a8c12f537a3c67fa1e97dd8dbc8e8ceb4ef7bc87d27b116279", + "sha256": "55c913a5745760a8c12f537a3c67fa1e97dd8dbc8e8ceb4ef7bc87d27b116279" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:2698561d2192e10a5566a2168f6ec3ded2bc5416970967b3667408d144b6e497", + "sha256": "2698561d2192e10a5566a2168f6ec3ded2bc5416970967b3667408d144b6e497" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:b7b45b6cef591f8f02529e510315543830b33e4de4827fbffb1deed4c8e1c30c", + "sha256": "b7b45b6cef591f8f02529e510315543830b33e4de4827fbffb1deed4c8e1c30c" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:9b3b376d46761939812fb46be383f62dda5370417a6968bef9043ea701dd8be9", + "sha256": "9b3b376d46761939812fb46be383f62dda5370417a6968bef9043ea701dd8be9" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:abfd6d24311132e574b45598a59b44f07d48dc35f5e383eaad45f793fd49fc04", + "sha256": "abfd6d24311132e574b45598a59b44f07d48dc35f5e383eaad45f793fd49fc04" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yamllint/blobs/sha256:07a1c2f2e7b0f719576acf927daf06638605e873bc72ccc862ca3e0bf28faf64", + "sha256": "07a1c2f2e7b0f719576acf927daf06638605e873bc72ccc862ca3e0bf28faf64" + } + } + } + }, + "ydiff": { + "version": "1.3", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8", + "sha256": "71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8", + "sha256": "71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8", + "sha256": "71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8", + "sha256": "71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8", + "sha256": "71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8", + "sha256": "71785c20c88c11d4ad640dc8b166f23daa74a95d95c274ab5c0028a0f42499a8" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/ydiff/blobs/sha256:e7d5d05030eb906207ab27c47e708de68ee5b5a037e86b7f7300cafc46a69071", + "sha256": "e7d5d05030eb906207ab27c47e708de68ee5b5a037e86b7f7300cafc46a69071" + } + } + } + }, + "yq": { + "version": "4.43.1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:bc36b4b41929e9e689befbecb557dbf7acf6c743ca17809f65a109ef23833c0b", + "sha256": "bc36b4b41929e9e689befbecb557dbf7acf6c743ca17809f65a109ef23833c0b" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:ee8073f931c90c1caacc020a6b05cf7bee819ea7135890b7626601ad1787b4bb", + "sha256": "ee8073f931c90c1caacc020a6b05cf7bee819ea7135890b7626601ad1787b4bb" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:1d652cf11ad65dac1d8c772168f62ca6e672ee61f69f9c47b5a46819089f1cfe", + "sha256": "1d652cf11ad65dac1d8c772168f62ca6e672ee61f69f9c47b5a46819089f1cfe" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:3f23e27ff4f8ea8a39b07ae5b7d808d5a5cbc548124b56154c0b08585737eb23", + "sha256": "3f23e27ff4f8ea8a39b07ae5b7d808d5a5cbc548124b56154c0b08585737eb23" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:ccbd38a9b07256344d78bd127fb66f4d2b0f4831385d7458f5e36bed8f796548", + "sha256": "ccbd38a9b07256344d78bd127fb66f4d2b0f4831385d7458f5e36bed8f796548" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:85a5394913a5734cef1fc388eee37e4dfb21c69e4414c8c658b8e04cb9963262", + "sha256": "85a5394913a5734cef1fc388eee37e4dfb21c69e4414c8c658b8e04cb9963262" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/yq/blobs/sha256:8642969ca0738f0a4e632ee2877edf601e2747220460b29e8ab3368ff3e80a0e", + "sha256": "8642969ca0738f0a4e632ee2877edf601e2747220460b29e8ab3368ff3e80a0e" + } + } + } + }, + "zlib": { + "version": "1.3.1", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:f867540472a59ab3fb1201625df546593e5fae2e98948c4c16c6154b0468b682", + "sha256": "f867540472a59ab3fb1201625df546593e5fae2e98948c4c16c6154b0468b682" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:9033eedbd240076116fea9fa181882e75edee7fe0c5d2e3850258a185c52792f", + "sha256": "9033eedbd240076116fea9fa181882e75edee7fe0c5d2e3850258a185c52792f" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:ebf10e203575beb64d6a8637ec2dc31774fa3141cfccab8ae7039f88b9efa7f6", + "sha256": "ebf10e203575beb64d6a8637ec2dc31774fa3141cfccab8ae7039f88b9efa7f6" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:217f4245cd1da65a3388f512530089f526cd63a38d49ee5f29a90576dfeb3bb7", + "sha256": "217f4245cd1da65a3388f512530089f526cd63a38d49ee5f29a90576dfeb3bb7" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:6012d7831245716d8507da3d1eb14ad274f8aa0b71b59275fe6bbbd6cebd787f", + "sha256": "6012d7831245716d8507da3d1eb14ad274f8aa0b71b59275fe6bbbd6cebd787f" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:56bbfa3d7bd6a5ccf17ffa53ab926e67f24e74bd64b4740b56fd96c312e37c44", + "sha256": "56bbfa3d7bd6a5ccf17ffa53ab926e67f24e74bd64b4740b56fd96c312e37c44" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/zlib/blobs/sha256:38f2469db2ce63b70855a98e5ee27b5b5a92874e52542cbdc0b230bba1e7195f", + "sha256": "38f2469db2ce63b70855a98e5ee27b5b5a92874e52542cbdc0b230bba1e7195f" + } + } + } + }, + "v8": { + "version": "12.1.285.24", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:f32a5a022378b428cea1b649a34fd55d8c7edc443e1526a701314a993eca4f08", + "sha256": "f32a5a022378b428cea1b649a34fd55d8c7edc443e1526a701314a993eca4f08" + }, + "arm64_ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:fc52a73f061198c928bc31a5561ad8460e948a8ea20ae45218e4f360d3c52fa0", + "sha256": "fc52a73f061198c928bc31a5561ad8460e948a8ea20ae45218e4f360d3c52fa0" + }, + "arm64_monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:4cd19a160f5ad942a30968f582ffaeb9485aad034e122c14910a4101e68aac35", + "sha256": "4cd19a160f5ad942a30968f582ffaeb9485aad034e122c14910a4101e68aac35" + }, + "sonoma": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:ca514e9dd9466c58c3fd466a11796655d8131985602b44d0c7a02d3788fb3841", + "sha256": "ca514e9dd9466c58c3fd466a11796655d8131985602b44d0c7a02d3788fb3841" + }, + "ventura": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:2de6daceddeae9d5c08d0842bdf08b9eb78a85bc3a869eae6629e4a5b883bcae", + "sha256": "2de6daceddeae9d5c08d0842bdf08b9eb78a85bc3a869eae6629e4a5b883bcae" + }, + "monterey": { + "cellar": ":any", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:9596dd1d33272babe4959de7869f569a00de8e62a8df7711e60b172a6a3f0c43", + "sha256": "9596dd1d33272babe4959de7869f569a00de8e62a8df7711e60b172a6a3f0c43" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/v8/blobs/sha256:c109bd1d47b502257784e1e28acbfdf68292f2f839feaab396d7fe71cc5a063e", + "sha256": "c109bd1d47b502257784e1e28acbfdf68292f2f839feaab396d7fe71cc5a063e" + } + } + } + }, + "gpg2": { + "version": "2.4.5", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:06ef66459900967866adbca613753707c6836c7b32b1c1f9d7a647771db88e2a", + "sha256": "06ef66459900967866adbca613753707c6836c7b32b1c1f9d7a647771db88e2a" + }, + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:5640c700c6d704a612f849d00dfd00b1361cfb7664ce1e4be14b981044917aef", + "sha256": "5640c700c6d704a612f849d00dfd00b1361cfb7664ce1e4be14b981044917aef" + }, + "arm64_monterey": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:74cdf0e0430980129545583496f6a2d908b9f8a8b0e69a4e8484f3aee4e7647d", + "sha256": "74cdf0e0430980129545583496f6a2d908b9f8a8b0e69a4e8484f3aee4e7647d" + }, + "sonoma": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:bd0eaa9e5cb762f3426380799089831c34fd27dc608cc3bd15a86b0b43df8ce2", + "sha256": "bd0eaa9e5cb762f3426380799089831c34fd27dc608cc3bd15a86b0b43df8ce2" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:3e1ab240be58c5267dbd3bc9cd82a19b09b96507169188a20adf710886733bd3", + "sha256": "3e1ab240be58c5267dbd3bc9cd82a19b09b96507169188a20adf710886733bd3" + }, + "monterey": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:9ea477a517f2de40c9bf7a8a335f6f2d7c1c234a31f47596f016305d175de908", + "sha256": "9ea477a517f2de40c9bf7a8a335f6f2d7c1c234a31f47596f016305d175de908" + }, + "x86_64_linux": { + "cellar": "/home/linuxbrew/.linuxbrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/gnupg/blobs/sha256:3d0b4817c65315ef6457feb0e6e26672fc0a91475e64499304ebf5fc5faeb39d", + "sha256": "3d0b4817c65315ef6457feb0e6e26672fc0a91475e64499304ebf5fc5faeb39d" + } + } + } + }, + "stripe/stripe-mock/stripe-mock": { + "version": "0.183.0", + "bottle": false + }, + "minikube": { + "version": "1.32.0", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:2fa25ebc8759ff50e97f915601eeceb9f02dca260b51f9e858bdb1347b656861", + "sha256": "2fa25ebc8759ff50e97f915601eeceb9f02dca260b51f9e858bdb1347b656861" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:a068a5f5bd364df8e8c0b7084332800943084802c57c72560ae1d7499b8838b7", + "sha256": "a068a5f5bd364df8e8c0b7084332800943084802c57c72560ae1d7499b8838b7" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:e2ad2baca95b4267bc3eec3555dd3228337ce37f892adaba37df845a8ccc6499", + "sha256": "e2ad2baca95b4267bc3eec3555dd3228337ce37f892adaba37df845a8ccc6499" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:4a391ddf8cbc68f14cc70441db46ed7a94412475ffdf16c6a72cea353681ed80", + "sha256": "4a391ddf8cbc68f14cc70441db46ed7a94412475ffdf16c6a72cea353681ed80" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:8dd2f235c3886a9a3714436202fdb1638ed32b108bb7ca095357d22f5d298dbf", + "sha256": "8dd2f235c3886a9a3714436202fdb1638ed32b108bb7ca095357d22f5d298dbf" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:6e79f66ab867efbd36a805d92198e1f0843f3be147b94bbc0146d235753c601b", + "sha256": "6e79f66ab867efbd36a805d92198e1f0843f3be147b94bbc0146d235753c601b" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/minikube/blobs/sha256:dc42a6ecd1d3129b76afe2959d5a126eb4aafa34a34815483e85eb001adc1894", + "sha256": "dc42a6ecd1d3129b76afe2959d5a126eb4aafa34a34815483e85eb001adc1894" + } + } + } + }, + "kubernetes-cli": { + "version": "1.29.3", + "bottle": { + "rebuild": 0, + "root_url": "https://ghcr.io/v2/homebrew/core", + "files": { + "arm64_sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:bec474887cbeb601422ba44ecdc63dbce2e1ace2b21019ac2d544cc7c7ffd912", + "sha256": "bec474887cbeb601422ba44ecdc63dbce2e1ace2b21019ac2d544cc7c7ffd912" + }, + "arm64_ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:91db803f66bea30247ef4ca13862df4624ee71e1f1a85af547999969655889c8", + "sha256": "91db803f66bea30247ef4ca13862df4624ee71e1f1a85af547999969655889c8" + }, + "arm64_monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:2fbdb8e41e96e637808c1005a20f21c4dca563ee4cd8c41d90b0b0e78dad59a8", + "sha256": "2fbdb8e41e96e637808c1005a20f21c4dca563ee4cd8c41d90b0b0e78dad59a8" + }, + "sonoma": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:f8cba521a8140262d304d5f83350651ba8ca24ab51fd8f02052cb42dd44740a4", + "sha256": "f8cba521a8140262d304d5f83350651ba8ca24ab51fd8f02052cb42dd44740a4" + }, + "ventura": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:fa258cb1fe860b0182d97619c9c16b2185267e1f46c1181a18022d3a79dd337c", + "sha256": "fa258cb1fe860b0182d97619c9c16b2185267e1f46c1181a18022d3a79dd337c" + }, + "monterey": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:b904d59bed196ce4debf9a23de3f20c30f5fe0ccbd4a6572a9e9cce153ff7cf0", + "sha256": "b904d59bed196ce4debf9a23de3f20c30f5fe0ccbd4a6572a9e9cce153ff7cf0" + }, + "x86_64_linux": { + "cellar": ":any_skip_relocation", + "url": "https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:761d8a1590bcdd59958e134cd4d2abb5b9a9521fd9596e16223f524180a78d2c", + "sha256": "761d8a1590bcdd59958e134cd4d2abb5b9a9521fd9596e16223f524180a78d2c" + } + } + } + } + }, + "cask": { + "chromedriver": { + "version": "123.0.6312.105", + "options": { + "full_name": "chromedriver" + } + }, + "github": { + "version": "3.3.13-1b0804db", + "options": { + "full_name": "github" + } + }, + "font-andale-mono": { + "version": "latest", + "options": { + "full_name": "font-andale-mono" + } + }, + "font-anonymice-powerline": { + "version": "latest", + "options": { + "full_name": "font-anonymice-powerline" + } + }, + "font-arvo": { + "version": "latest", + "options": { + "full_name": "font-arvo" + } + }, + "font-aurulent-sans-mono-nerd-font": { + "version": "3.2.0", + "options": { + "full_name": "font-aurulent-sans-mono-nerd-font" + } + }, + "font-awesome-terminal-fonts": { + "version": "latest", + "options": { + "full_name": "font-awesome-terminal-fonts" + } + }, + "font-bitstream-vera-sans-mono-nerd-font": { + "version": "3.2.0", + "options": { + "full_name": "font-bitstream-vera-sans-mono-nerd-font" + } + }, + "font-blex-mono-nerd-font": { + "version": "3.2.0", + "options": { + "full_name": "font-blex-mono-nerd-font" + } + }, + "font-cairo": { + "version": "latest", + "options": { + "full_name": "font-cairo" + } + }, + "font-cascadia-mono": { + "version": "2111.01", + "options": { + "full_name": "font-cascadia-mono" + } + }, + "font-consolas-for-powerline": { + "version": "latest", + "options": { + "full_name": "font-consolas-for-powerline" + } + }, + "font-cousine": { + "version": "latest", + "options": { + "full_name": "font-cousine" + } + }, + "font-cutive-mono": { + "version": "latest", + "options": { + "full_name": "font-cutive-mono" + } + }, + "font-d2coding": { + "version": "1.3.2,20180524", + "options": { + "full_name": "font-d2coding" + } + }, + "font-dejavu-sans-mono-for-powerline": { + "version": "latest", + "options": { + "full_name": "font-dejavu-sans-mono-for-powerline" + } + }, + "font-everson-mono": { + "version": "7.0.0", + "options": { + "full_name": "font-everson-mono" + } + }, + "font-fantasque-sans-mono": { + "version": "1.8.0", + "options": { + "full_name": "font-fantasque-sans-mono" + } + }, + "font-fontawesome": { + "version": "6.5.2", + "options": { + "full_name": "font-fontawesome" + } + }, + "font-ia-writer-mono": { + "version": "latest", + "options": { + "full_name": "font-ia-writer-mono" + } + }, + "font-inconsolata": { + "version": "latest", + "options": { + "full_name": "font-inconsolata" + } + }, + "font-jetbrains-mono": { + "version": "2.304", + "options": { + "full_name": "font-jetbrains-mono" + } + }, + "font-kawkab-mono": { + "version": "0.501", + "options": { + "full_name": "font-kawkab-mono" + } + }, + "font-lekton-nerd-font": { + "version": "3.2.0", + "options": { + "full_name": "font-lekton-nerd-font" + } + }, + "font-menlo-for-powerline": { + "version": "latest", + "options": { + "full_name": "font-menlo-for-powerline" + } + }, + "font-meslo-for-powerline": { + "version": "2015-12-04", + "options": { + "full_name": "font-meslo-for-powerline" + } + }, + "font-miriam-mono-clm": { + "version": "latest", + "options": { + "full_name": "font-miriam-mono-clm" + } + }, + "font-monoid": { + "version": "0.61", + "options": { + "full_name": "font-monoid" + } + }, + "font-monoisome": { + "version": "0.61", + "options": { + "full_name": "font-monoisome" + } + }, + "font-mononoki": { + "version": "1.6", + "options": { + "full_name": "font-mononoki" + } + }, + "font-monoton": { + "version": "latest", + "options": { + "full_name": "font-monoton" + } + }, + "font-noto-mono": { + "version": "latest", + "options": { + "full_name": "font-noto-mono" + } + }, + "font-oswald": { + "version": "latest", + "options": { + "full_name": "font-oswald" + } + }, + "font-oxygen": { + "version": "latest", + "options": { + "full_name": "font-oxygen" + } + }, + "font-oxygen-mono": { + "version": "latest", + "options": { + "full_name": "font-oxygen-mono" + } + }, + "font-powerline-symbols": { + "version": "latest", + "options": { + "full_name": "font-powerline-symbols" + } + }, + "font-pt-mono": { + "version": "latest", + "options": { + "full_name": "font-pt-mono" + } + }, + "font-roboto": { + "version": "latest", + "options": { + "full_name": "font-roboto" + } + }, + "font-roboto-mono-nerd-font": { + "version": "3.2.0", + "options": { + "full_name": "font-roboto-mono-nerd-font" + } + }, + "font-share-tech-mono": { + "version": "latest", + "options": { + "full_name": "font-share-tech-mono" + } + }, + "font-sometype-mono": { + "version": "latest", + "options": { + "full_name": "font-sometype-mono" + } + }, + "font-titillium": { + "version": "2.0,258e06fe34c35320321f0458e6625bba", + "options": { + "full_name": "font-titillium" + } + }, + "font-ubuntu": { + "version": "latest", + "options": { + "full_name": "font-ubuntu" + } + }, + "font-victor-mono": { + "version": "1.5.6", + "options": { + "full_name": "font-victor-mono" + } + } + } + }, + "system": { + "macos": { + "sonoma": { + "HOMEBREW_VERSION": "4.2.17", + "HOMEBREW_PREFIX": "/opt/homebrew", + "Homebrew/homebrew-core": "api", + "CLT": "15.3.0.0.1.1708646388", + "Xcode": "15.3", + "macOS": "14.3.1" + } + } + } +} diff --git a/Dockerfile b/Dockerfile index 2d04767c..6e5fa353 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,43 +1,94 @@ -FROM docker.io/ruby:2.6-bullseye +# Make sure RUBY_VERSION matches the Ruby version in .ruby-version +ARG RUBY_VERSION=3.2.3 + +FROM docker.io/ruby:${RUBY_VERSION}-bookworm -# Needed by Ruby to process UTF8-encoded files ENV LANG C.UTF-8 RUN set -eus; \ apt-get update -qq; \ apt-get install -y --no-install-recommends \ - git-all \ - nodejs \ - shared-mime-info \ build-essential \ + git-all \ + htop \ + iputils-ping \ + libjemalloc2 \ libpq-dev \ + libvips \ libxml2-dev \ libxslt1-dev \ - libjemalloc2 \ - postgresql-client \ - iputils-ping \ net-tools \ - netcat \ - htop \ - strace \ + node-gyp \ + nodejs \ pg-activity \ + pkg-config \ + postgresql-client \ + python-is-python3 \ + shared-mime-info \ + strace \ ; \ apt-get clean; \ rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*; +WORKDIR /rails + # @see https://engineering.binti.com/jemalloc-with-ruby-and-docker/ -ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 -WORKDIR /app -COPY Gemfile Gemfile.lock ./ -ENV RAILS_ENV="${RAIL_ENV:-"production"}" +# ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 \ +ENV NODE_VERSION=20.12.1 \ + YARN_VERSION=latest \ + PATH=/usr/local/node/bin:$PATH + RUN gem update --system -N -RUN gem install bundler -N --version 1.17.3 -RUN bundle install -j 12 --deployment --without "test development" -COPY . /app +RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \ + /tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node + +RUN npm install -g npm@10.5.2 && \ + npm install -g yarn@$YARN_VERSION && \ + rm -rf /tmp/node-build-master + +# Install application gems +COPY Gemfile Gemfile.lock ./ +RUN bundle install && \ + rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \ + bundle exec bootsnap precompile --gemfile + +# Install node modules +COPY package.json yarn.lock ./ +RUN yarn install + +# Create storage dir +RUN mkdir storage + +# Copy application code +COPY . . + +# Precompile bootsnap code for faster boot times +RUN bundle exec bootsnap precompile app/ lib/ -RUN SECRET_KEY_BASE=1 bundle exec rake assets:precompile +# Precompiling assets for production without requiring secret RAILS_MASTER_KEY +RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile + +# Clean up installation packages to reduce image size +RUN rm -rf /var/lib/apt/lists /var/cache/apt/archives + +# Copy built artifacts: gems, application +COPY "${BUNDLE_PATH}" "${BUNDLE_PATH}" + +# Run and own only the runtime files as a non-root user for security +RUN groupadd --system --gid 1000 rails && \ + useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash + +RUN chown -R rails:rails db log storage tmp /rails + +USER 1000:1000 EXPOSE 3000 -CMD "./entrypoint.sh" + +RUN chmod 755 /rails/bin/docker-entrypoint + +ENV RAILS_ENV=production + +# Entrypoint prepares the database. +ENTRYPOINT ["/rails/bin/docker-entrypoint"] diff --git a/Dockerfile.main b/Dockerfile.main new file mode 100644 index 00000000..36eebb39 --- /dev/null +++ b/Dockerfile.main @@ -0,0 +1,46 @@ +FROM docker.io/ruby:3.2 + +# Needed by Ruby to process UTF8-encoded files +ENV LANG C.UTF-8 + +RUN sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' +RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - + +RUN set -eus; \ + apt-get update -qq; \ + apt-get install -y --no-install-recommends \ + netcat \ + libpq-dev \ + postgresql-client-16 \ + git-all \ + nodejs \ + shared-mime-info \ + build-essential \ + libxml2-dev \ + libxslt1-dev \ + libjemalloc2 \ + iputils-ping \ + net-tools \ + htop \ + strace \ + pg-activity ; \ + apt-get clean; \ + rm -rf /var/cache/apt/archives/* /var/lib/apt/lists/*; + +# @see https://engineering.binti.com/jemalloc-with-ruby-and-docker/ +ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 + +WORKDIR /app +COPY Gemfile Gemfile.lock ./ +ENV RAILS_ENV="${RAIL_ENV:-"production"}" +RUN gem update --system -N +RUN gem install bundler -N --version 1.17.3 +RUN bundle install -j 12 --deployment --without "test development" + +COPY . /app + +RUN SECRET_KEY_BASE=1 bundle exec rake assets:precompile + +EXPOSE 3000 +CMD "./entrypoint.sh" + diff --git a/Gemfile b/Gemfile index 681f3b55..4b42a719 100644 --- a/Gemfile +++ b/Gemfile @@ -2,53 +2,103 @@ source 'https://rubygems.org' -gem 'rails', '~> 4.2' +ruby File.read('.ruby-version') -gem 'attribute_normalizer' -gem 'awesome_print' -gem 'carrierwave' -gem 'coffee-rails' -gem 'colored2' -gem 'commonjs' +# Use main development branch of Rails +gem 'rails', '=7.1.3.2' + +# Unclear if we need to require it explicitly +# gem 'activesupport', '=7.1.3.2' + +# Use postgresql as the database for Active Record +gem 'pg' +# Use the Puma web server [https://github.com/puma/puma] +gem 'puma', '>= 6' +gem 'puma-status' + +# replace sprockets with propshaft +gem 'propshaft' + +# Bundle and transpile JavaScript [https://github.com/rails/jsbundling-rails] +gem 'jsbundling-rails' +# Hotwire"s SPA-like page accelerator [https://turbo.hotwired.dev] +gem 'turbo-rails' +# Hotwire"s modest JavaScript framework [https://stimulus.hotwired.dev] +gem 'stimulus-rails' +# Bundle and process CSS [https://github.com/rails/cssbundling-rails] +gem 'cssbundling-rails' +# Build JSON APIs with ease [https://github.com/rails/jbuilder] +gem 'jbuilder' + +# Redis +gem 'redis', '>= 4.0.1' + +# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword] +gem 'bcrypt', '~> 3.1.7' + +# Report APM info to NewRelic +gem 'newrelic_rpm' + +# Windows does not include zoneinfo files, so bundle the tzinfo-data gem +gem 'tzinfo-data', platforms: %i[windows jruby] + +# Reduces oot times through caching; required in config/boot.rb +gem 'bootsnap', require: false + +# Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis] +# gem "kredis" + +# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images] +# gem "image_processing", "~> 1.2" +# gem 'twitter-bootstrap-rails' +# gem 'bootstrap', '~> 5.1' +# gem 'jquery-rails', '~> 4.4' +# gem 'commonjs' + +# Modern Date Picker gem 'country_select' -gem 'devise' +gem 'flatpickr' + +gem 'colorize' + gem 'haml' -gem 'jquery-rails' -gem 'less' -gem 'less-rails' -gem 'libv8' +gem 'haml-rails' + +gem 'annotate' +gem 'attribute_normalizer' +gem 'carrierwave' +gem 'dalli' +gem 'devise', git: 'https://github.com/heartcombo/devise.git' gem 'mini_magick' -gem 'newrelic_rpm' -gem 'pg', '~> 0.20' -gem 'protected_attributes' -gem 'psych', '< 4' -gem 'puma' -gem 'puma-status' +gem 'mini_racer' +gem 'protected_attributes_continued' +gem 'psych' gem 'rake' -gem 'rollbar' -gem 'sass-rails' -gem 'sentry-raven' gem 'stripe' -gem 'therubyracer', platforms: :ruby -gem 'twitter-bootstrap-rails' -gem 'uglifier' -gem 'ventable' -gem 'yard' +gem 'ventable', '>= 1.3' group :development, :test do + gem 'awesome_print' + gem 'brakeman', require: false gem 'codecov' + gem 'debug', platforms: %i[mri windows] + gem 'faker' + gem 'foreman' gem 'relaxed-rubocop' gem 'rubocop' gem 'rubocop-rails' + gem 'rubocop-rails-omakase', require: false gem 'rubocop-rake' gem 'rubocop-rspec' gem 'stripe-ruby-mock', '~> 2.5.0', require: 'stripe_mock' + gem 'yard' end group :development do - gem 'annotate' gem 'asciidoctor' - gem 'capistrano', '< 3' + gem 'capistrano' + # gem 'rack-mini-profiler' + gem 'web-console' end group :test do @@ -57,5 +107,6 @@ group :test do gem 'rspec-its' gem 'rspec-rails' gem 'simplecov' + gem 'timecop' gem 'timeout' end diff --git a/Gemfile.lock b/Gemfile.lock index 10d0bdc7..720fd524 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,318 +1,443 @@ +GIT + remote: https://github.com/heartcombo/devise.git + revision: a259ff3c28912a27329727f4a3c2623d3f5cb6f2 + specs: + devise (5.0.0.beta) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 6.0.0) + responders + warden (~> 1.2.3) + GEM remote: https://rubygems.org/ specs: - accept_values_for (0.7.5) - activemodel (>= 4.2, < 6.0) - rspec (>= 2.0, < 4.0) - actionmailer (4.2.11.1) - actionpack (= 4.2.11.1) - actionview (= 4.2.11.1) - activejob (= 4.2.11.1) + accept_values_for (0.9.3) + activemodel (>= 6.1, < 8.0) + rspec (>= 3.10, < 4.0) + actioncable (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + zeitwerk (~> 2.6) + actionmailbox (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) + mail (>= 2.7.1) + net-imap + net-pop + net-smtp + actionmailer (7.1.3.2) + actionpack (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activesupport (= 7.1.3.2) mail (~> 2.5, >= 2.5.4) - rails-dom-testing (~> 1.0, >= 1.0.5) - actionpack (4.2.11.1) - actionview (= 4.2.11.1) - activesupport (= 4.2.11.1) - rack (~> 1.6) - rack-test (~> 0.6.2) - rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (4.2.11.1) - activesupport (= 4.2.11.1) + net-imap + net-pop + net-smtp + rails-dom-testing (~> 2.2) + actionpack (7.1.3.2) + actionview (= 7.1.3.2) + activesupport (= 7.1.3.2) + nokogiri (>= 1.8.5) + racc + rack (>= 2.2.4) + rack-session (>= 1.0.1) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + actiontext (7.1.3.2) + actionpack (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) + globalid (>= 0.6.0) + nokogiri (>= 1.8.5) + actionview (7.1.3.2) + activesupport (= 7.1.3.2) builder (~> 3.1) - erubis (~> 2.7.0) - rails-dom-testing (~> 1.0, >= 1.0.5) - rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (4.2.11.1) - activesupport (= 4.2.11.1) - globalid (>= 0.3.0) - activemodel (4.2.11.1) - activesupport (= 4.2.11.1) - builder (~> 3.1) - activerecord (4.2.11.1) - activemodel (= 4.2.11.1) - activesupport (= 4.2.11.1) - arel (~> 6.0) - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - annotate (3.1.1) - activerecord (>= 3.2, < 7.0) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (7.1.3.2) + activesupport (= 7.1.3.2) + globalid (>= 0.3.6) + activemodel (7.1.3.2) + activesupport (= 7.1.3.2) + activerecord (7.1.3.2) + activemodel (= 7.1.3.2) + activesupport (= 7.1.3.2) + timeout (>= 0.4.0) + activestorage (7.1.3.2) + actionpack (= 7.1.3.2) + activejob (= 7.1.3.2) + activerecord (= 7.1.3.2) + activesupport (= 7.1.3.2) + marcel (~> 1.0) + activesupport (7.1.3.2) + base64 + bigdecimal + concurrent-ruby (~> 1.0, >= 1.0.2) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + minitest (>= 5.1) + mutex_m + tzinfo (~> 2.0) + addressable (2.8.6) + public_suffix (>= 2.0.2, < 6.0) + airbrussh (1.5.2) + sshkit (>= 1.6.1, != 1.7.0) + annotate (3.2.0) + activerecord (>= 3.2, < 8.0) rake (>= 10.4, < 14.0) - arel (6.0.4) - asciidoctor (2.0.17) + asciidoctor (2.0.22) ast (2.4.2) attribute_normalizer (1.2.0) awesome_print (1.9.2) - bcrypt (3.1.13) + base64 (0.2.0) + bcrypt (3.1.20) + bigdecimal (3.1.7) + bindex (0.8.1) + bootsnap (1.18.3) + msgpack (~> 1.2) + brakeman (6.1.2) + racc builder (3.2.4) - capistrano (2.15.9) - highline - net-scp (>= 1.0.0) - net-sftp (>= 2.0.0) - net-ssh (>= 2.0.14) - net-ssh-gateway (>= 1.1.0) - carrierwave (1.3.2) - activemodel (>= 4.0.0) - activesupport (>= 4.0.0) - mime-types (>= 1.16) + capistrano (3.18.1) + airbrussh (>= 1.0.0) + i18n + rake (>= 10.0.0) + sshkit (>= 1.9.0) + carrierwave (3.0.7) + activemodel (>= 6.0.0) + activesupport (>= 6.0.0) + addressable (~> 2.6) + image_processing (~> 1.1) + marcel (~> 1.0.0) ssrf_filter (~> 1.0) - codecov (0.6.0) - simplecov (>= 0.15, < 0.22) - coffee-rails (4.2.2) - coffee-script (>= 2.2.0) - railties (>= 4.0.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.12.2) - colored2 (3.1.2) + codecov (0.2.12) + json + simplecov colorize (0.8.1) - commonjs (0.2.7) - concurrent-ruby (1.1.10) - countries (2.1.4) - i18n_data (~> 0.8.0) - money (~> 6.9) - sixarm_ruby_unaccent (~> 1.1) - unicode_utils (~> 1.4) - country_select (3.1.1) - countries (~> 2.0) - sort_alphabetical (~> 1.0) - crass (1.0.5) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) + countries (6.0.0) + unaccent (~> 0.3) + country_select (9.0.0) + countries (> 5.0, < 7.0) + crass (1.0.6) + cssbundling-rails (1.4.0) + railties (>= 6.0.0) + dalli (3.2.8) dante (0.2.0) - devise (4.7.1) - bcrypt (~> 3.0) - orm_adapter (~> 0.1) - railties (>= 4.1.0) - responders - warden (~> 1.2.3) - diff-lcs (1.3) - docile (1.3.2) - erubis (2.7.0) - execjs (2.7.0) - factory_bot (4.8.2) - activesupport (>= 3.0.0) - factory_bot_rails (4.8.2) - factory_bot (~> 4.8.2) - railties (>= 3.0.0) - faraday (0.15.1) - multipart-post (>= 1.2, < 3) - ffi (1.10.0) - globalid (0.4.2) - activesupport (>= 4.2.0) - grease (0.3.1) - haml (5.0.4) - temple (>= 0.8.0) + date (3.3.4) + debug (1.9.2) + irb (~> 1.10) + reline (>= 0.3.8) + diff-lcs (1.5.1) + docile (1.4.0) + drb (2.2.1) + erubi (1.12.0) + factory_bot (6.4.6) + activesupport (>= 5.0.0) + factory_bot_rails (6.4.3) + factory_bot (~> 6.4) + railties (>= 5.0.0) + faker (3.3.1) + i18n (>= 1.8.11, < 2) + ffi (1.16.3) + flatpickr (4.6.13.1) + foreman (0.88.1) + globalid (1.2.1) + activesupport (>= 6.1) + haml (6.3.0) + temple (>= 0.8.2) + thor tilt - highline (1.7.10) - i18n (0.9.5) + haml-rails (2.1.0) + actionpack (>= 5.1) + activesupport (>= 5.1) + haml (>= 4.0.6) + railties (>= 5.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) - i18n_data (0.8.0) - jquery-rails (4.3.3) - rails-dom-testing (>= 1, < 3) - railties (>= 4.2.0) - thor (>= 0.14, < 2.0) - json (2.6.1) - less (2.6.0) - commonjs (~> 0.2.7) - less-rails (3.0.0) - actionpack (>= 4.0) - grease - less (~> 2.6.0) - sprockets (> 2, < 4) - tilt - libv8 (3.16.14.19) - loofah (2.3.1) + image_processing (1.12.2) + mini_magick (>= 4.9.5, < 5) + ruby-vips (>= 2.0.17, < 3) + io-console (0.7.2) + irb (1.12.0) + rdoc + reline (>= 0.4.2) + jbuilder (2.11.5) + actionview (>= 5.0.0) + activesupport (>= 5.0.0) + jsbundling-rails (1.3.0) + railties (>= 6.0.0) + json (2.7.2) + language_server-protocol (3.17.0.3) + libv8-node (18.19.0.0) + libv8-node (18.19.0.0-aarch64-linux) + libv8-node (18.19.0.0-aarch64-linux-musl) + libv8-node (18.19.0.0-arm64-darwin) + libv8-node (18.19.0.0-x86_64-darwin) + libv8-node (18.19.0.0-x86_64-linux) + libv8-node (18.19.0.0-x86_64-linux-musl) + loofah (2.22.0) crass (~> 1.0.2) - nokogiri (>= 1.5.9) - mail (2.7.1) + nokogiri (>= 1.12.0) + mail (2.8.1) mini_mime (>= 0.1.1) - mime-types (3.4.1) - mime-types-data (~> 3.2015) - mime-types-data (3.2022.0105) - mini_magick (4.9.5) - mini_mime (1.0.1) - mini_portile2 (2.4.0) - minitest (5.15.0) - money (6.11.3) - i18n (>= 0.6.4, < 1.1) + net-imap + net-pop + net-smtp + marcel (1.0.4) + mini_magick (4.12.0) + mini_mime (1.1.5) + mini_racer (0.9.0) + libv8-node (~> 18.19.0.0) + minitest (5.22.3) + msgpack (1.7.2) multi_json (1.15.0) - multipart-post (2.0.0) - net-scp (1.2.1) - net-ssh (>= 2.6.5) - net-sftp (2.1.2) - net-ssh (>= 2.6.5) - net-ssh (4.2.0) - net-ssh-gateway (2.0.0) - net-ssh (>= 4.0.0) + mutex_m (0.2.0) + net-imap (0.4.10) + date + net-protocol + net-pop (0.1.2) + net-protocol + net-protocol (0.2.2) + timeout + net-scp (4.0.0) + net-ssh (>= 2.6.5, < 8.0.0) + net-sftp (4.0.0) + net-ssh (>= 5.0.0, < 8.0.0) + net-smtp (0.5.0) + net-protocol + net-ssh (7.2.3) net_http_unix (0.2.2) - newrelic_rpm (8.6.0) - nio4r (2.5.9) - nokogiri (1.10.8) - mini_portile2 (~> 2.4.0) + newrelic_rpm (9.9.0) + nio4r (2.7.1) + nokogiri (1.16.4-aarch64-linux) + racc (~> 1.4) + nokogiri (1.16.4-arm-linux) + racc (~> 1.4) + nokogiri (1.16.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.16.4-x86-linux) + racc (~> 1.4) + nokogiri (1.16.4-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.16.4-x86_64-linux) + racc (~> 1.4) orm_adapter (0.5.0) - parallel (1.22.1) - parser (3.1.2.0) + parallel (1.24.0) + parser (3.3.0.5) ast (~> 2.4.1) - pg (0.21.0) - protected_attributes (1.1.4) - activemodel (>= 4.0.1, < 5.0) - psych (3.3.2) - puma (5.6.7) + racc + pg (1.5.6) + propshaft (0.8.0) + actionpack (>= 7.0.0) + activesupport (>= 7.0.0) + rack + railties (>= 7.0.0) + protected_attributes_continued (1.9.0) + activemodel (>= 5.0) + psych (5.1.2) + stringio + public_suffix (5.0.5) + puma (6.4.2) nio4r (~> 2.0) - puma-status (1.4) + puma-status (1.6) colorize (~> 0.8) net_http_unix (~> 0.2) parallel (~> 1) - rack (1.6.12) - rack-test (0.6.3) - rack (>= 1.0) - rails (4.2.11.1) - actionmailer (= 4.2.11.1) - actionpack (= 4.2.11.1) - actionview (= 4.2.11.1) - activejob (= 4.2.11.1) - activemodel (= 4.2.11.1) - activerecord (= 4.2.11.1) - activesupport (= 4.2.11.1) - bundler (>= 1.3.0, < 2.0) - railties (= 4.2.11.1) - sprockets-rails - rails-deprecated_sanitizer (1.0.3) - activesupport (>= 4.2.0.alpha) - rails-dom-testing (1.0.9) - activesupport (>= 4.2.0, < 5.0) - nokogiri (~> 1.6) - rails-deprecated_sanitizer (>= 1.0.1) - rails-html-sanitizer (1.0.4) - loofah (~> 2.2, >= 2.2.2) - railties (4.2.11.1) - actionpack (= 4.2.11.1) - activesupport (= 4.2.11.1) - rake (>= 0.8.7) - thor (>= 0.18.1, < 2.0) + racc (1.7.3) + rack (3.0.10) + rack-session (2.0.0) + rack (>= 3.0.0) + rack-test (2.1.0) + rack (>= 1.3) + rackup (2.1.0) + rack (>= 3) + webrick (~> 1.8) + rails (7.1.3.2) + actioncable (= 7.1.3.2) + actionmailbox (= 7.1.3.2) + actionmailer (= 7.1.3.2) + actionpack (= 7.1.3.2) + actiontext (= 7.1.3.2) + actionview (= 7.1.3.2) + activejob (= 7.1.3.2) + activemodel (= 7.1.3.2) + activerecord (= 7.1.3.2) + activestorage (= 7.1.3.2) + activesupport (= 7.1.3.2) + bundler (>= 1.15.0) + railties (= 7.1.3.2) + rails-dom-testing (2.2.0) + activesupport (>= 5.0.0) + minitest + nokogiri (>= 1.6) + rails-html-sanitizer (1.6.0) + loofah (~> 2.21) + nokogiri (~> 1.14) + railties (7.1.3.2) + actionpack (= 7.1.3.2) + activesupport (= 7.1.3.2) + irb + rackup (>= 1.0.0) + rake (>= 12.2) + thor (~> 1.0, >= 1.2.2) + zeitwerk (~> 2.6) rainbow (3.1.1) - rake (13.0.1) - rb-fsevent (0.10.3) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - ref (2.0.0) - regexp_parser (2.3.0) + rake (13.2.1) + rdoc (6.6.3.1) + psych (>= 4.0.0) + redis (5.2.0) + redis-client (>= 0.22.0) + redis-client (0.22.1) + connection_pool + regexp_parser (2.9.0) relaxed-rubocop (2.5) - responders (2.4.1) - actionpack (>= 4.2.0, < 6.0) - railties (>= 4.2.0, < 6.0) - rexml (3.2.5) - rollbar (3.3.0) - rspec (3.7.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-core (3.7.1) - rspec-support (~> 3.7.0) - rspec-expectations (3.7.0) + reline (0.5.2) + io-console (~> 0.5) + responders (3.1.1) + actionpack (>= 5.2) + railties (>= 5.2) + rexml (3.2.6) + rspec (3.13.0) + rspec-core (~> 3.13.0) + rspec-expectations (~> 3.13.0) + rspec-mocks (~> 3.13.0) + rspec-core (3.13.0) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) + rspec-support (~> 3.13.0) rspec-its (1.3.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.7.0) + rspec-mocks (3.13.0) diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-rails (3.7.2) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-support (~> 3.7.0) - rspec-support (3.7.1) - rubocop (1.27.0) + rspec-support (~> 3.13.0) + rspec-rails (6.1.2) + actionpack (>= 6.1) + activesupport (>= 6.1) + railties (>= 6.1) + rspec-core (~> 3.13) + rspec-expectations (~> 3.13) + rspec-mocks (~> 3.13) + rspec-support (~> 3.13) + rspec-support (3.13.1) + rubocop (1.63.2) + json (~> 2.3) + language_server-protocol (>= 3.17.0) parallel (~> 1.10) - parser (>= 3.1.0.0) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.16.0, < 2.0) + rexml (>= 3.2.5, < 4.0) + rubocop-ast (>= 1.31.1, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.17.0) - parser (>= 3.1.1.0) - rubocop-rails (2.14.2) + unicode-display_width (>= 2.4.0, < 3.0) + rubocop-ast (1.31.2) + parser (>= 3.3.0.4) + rubocop-capybara (2.20.0) + rubocop (~> 1.41) + rubocop-factory_bot (2.25.1) + rubocop (~> 1.41) + rubocop-minitest (0.35.0) + rubocop (>= 1.61, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-performance (1.21.0) + rubocop (>= 1.48.1, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rails (2.24.1) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 1.7.0, < 2.0) + rubocop (>= 1.33.0, < 2.0) + rubocop-ast (>= 1.31.1, < 2.0) + rubocop-rails-omakase (1.0.0) + rubocop + rubocop-minitest + rubocop-performance + rubocop-rails rubocop-rake (0.6.0) rubocop (~> 1.0) - rubocop-rspec (2.10.0) - rubocop (~> 1.19) - ruby-progressbar (1.11.0) - sass (3.5.6) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sass-rails (5.0.7) - railties (>= 4.0.0, < 6) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) - sentry-raven (2.7.3) - faraday (>= 0.7.6, < 1.0) - simplecov (0.17.1) + rubocop-rspec (2.29.1) + rubocop (~> 1.40) + rubocop-capybara (~> 2.17) + rubocop-factory_bot (~> 2.22) + rubocop-rspec_rails (~> 2.28) + rubocop-rspec_rails (2.28.3) + rubocop (~> 1.40) + ruby-progressbar (1.13.0) + ruby-vips (2.2.1) + ffi (~> 1.12) + simplecov (0.22.0) docile (~> 1.1) - json (>= 1.8, < 3) - simplecov-html (~> 0.10.0) - simplecov-html (0.10.2) - sixarm_ruby_unaccent (1.2.0) - sort_alphabetical (1.1.0) - unicode_utils (>= 1.2.2) - sprockets (3.7.2) - concurrent-ruby (~> 1.0) - rack (> 1, < 3) - sprockets-rails (3.2.1) - actionpack (>= 4.0) - activesupport (>= 4.0) - sprockets (>= 3.0.0) - ssrf_filter (1.0.7) - stripe (3.15.0) - faraday (~> 0.10) + simplecov-html (~> 0.11) + simplecov_json_formatter (~> 0.1) + simplecov-html (0.12.3) + simplecov_json_formatter (0.1.4) + sshkit (1.22.1) + base64 + mutex_m + net-scp (>= 1.1.2) + net-sftp (>= 2.1.2) + net-ssh (>= 2.8.0) + ssrf_filter (1.1.2) + stimulus-rails (1.3.3) + railties (>= 6.0.0) + stringio (3.1.0) + stripe (11.1.0) stripe-ruby-mock (2.5.8) dante (>= 0.2.0) multi_json (~> 1.0) stripe (>= 2.0.3) - temple (0.8.0) - therubyracer (0.12.3) - libv8 (~> 3.16.14.15) - ref - thor (0.20.3) - thread_safe (0.3.6) - tilt (2.0.8) - timeout (0.3.0) - twitter-bootstrap-rails (2.2.8) - actionpack (>= 3.1) - execjs - rails (>= 3.1) - railties (>= 3.1) - tzinfo (1.2.10) - thread_safe (~> 0.1) - uglifier (4.1.10) - execjs (>= 0.3.0, < 3) - unicode-display_width (2.1.0) - unicode_utils (1.4.0) - ventable (1.2.0) - warden (1.2.7) - rack (>= 1.0) - webrick (1.7.0) - yard (0.9.27) - webrick (~> 1.7.0) + temple (0.10.3) + thor (1.3.1) + tilt (2.3.0) + timecop (0.9.8) + timeout (0.4.1) + turbo-rails (2.0.5) + actionpack (>= 6.0.0) + activejob (>= 6.0.0) + railties (>= 6.0.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unaccent (0.4.0) + unicode-display_width (2.5.0) + ventable (1.3.1) + activesupport (>= 5) + warden (1.2.9) + rack (>= 2.0.9) + web-console (4.2.1) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) + bindex (>= 0.4.0) + railties (>= 6.0.0) + webrick (1.8.1) + websocket-driver (0.7.6) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + yard (0.9.36) + zeitwerk (2.6.13) PLATFORMS - ruby + aarch64-linux + aarch64-linux-musl + arm-linux + arm64-darwin + x86-linux + x86_64-darwin + x86_64-linux + x86_64-linux-musl DEPENDENCIES accept_values_for @@ -320,48 +445,60 @@ DEPENDENCIES asciidoctor attribute_normalizer awesome_print - capistrano (< 3) + bcrypt (~> 3.1.7) + bootsnap + brakeman + capistrano carrierwave codecov - coffee-rails - colored2 - commonjs + colorize country_select - devise + cssbundling-rails + dalli + debug + devise! factory_bot_rails + faker + flatpickr + foreman haml - jquery-rails - less - less-rails - libv8 + haml-rails + jbuilder + jsbundling-rails mini_magick + mini_racer newrelic_rpm - pg (~> 0.20) - protected_attributes - psych (< 4) - puma + pg + propshaft + protected_attributes_continued + psych + puma (>= 6) puma-status - rails (~> 4.2) + rails (= 7.1.3.2) rake + redis (>= 4.0.1) relaxed-rubocop - rollbar rspec-its rspec-rails rubocop rubocop-rails + rubocop-rails-omakase rubocop-rake rubocop-rspec - sass-rails - sentry-raven simplecov + stimulus-rails stripe stripe-ruby-mock (~> 2.5.0) - therubyracer + timecop timeout - twitter-bootstrap-rails - uglifier - ventable + turbo-rails + tzinfo-data + ventable (>= 1.3) + web-console yard +RUBY VERSION + ruby 3.2.3p157 + BUNDLED WITH - 1.17.3 + 2.5.6 diff --git a/LICENSE b/LICENSE deleted file mode 100644 index e7ea3bf9..00000000 --- a/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright © 2016-2022 Konstantin Gredeskoul, Shane de Silva, FnF Engineers, All Rights Reserved. - -Distributed under MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Makefile b/Makefile index 6571fcb9..eda0f287 100755 --- a/Makefile +++ b/Makefile @@ -28,6 +28,7 @@ MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) CURRENT_DIR := $(shell ( cd .; pwd -P ) ) BASHMATIC_HOME := $(shell echo $(CURRENT_DIR)/dev/bashmatic) MAKE_ENV := .make.env +DEV_DB := $(shell grep database config/database.yml | grep development | awk '{print $$2}' | sed 's/^$$/ticketing_app_development/g') help: ## Prints help message auto-generated from the comments. @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' | sort @@ -65,4 +66,33 @@ docker-image: ## Builds a docker image named 'tickets' docker build -t tickets . shellcheck: ## Run shellcheck on the shell files - $(CURRENT_DIR)/bin/shchk + $(CURRENT_DIR)/bin/shchk + +dev-install: ## Optional install of VIM configuration and other dev tools + $(CURRENT_DIR)/development/dev-install + +rebuild-dev-db: development ## Rebuild and re-seed the dev database + @printf "\n$(bg_purple) 👉 $(purple)$(clear) $(yellow)Dropping dev database $(DEV_DB)...$(clear)\n" + @dropdb $(DEV_DB) || true + @printf "\n$(bg_purple) 👉 $(purple)$(clear) $(yellow)Creating dev database...$(clear)\n" + @rails db:create + @printf "\n$(bg_purple) 👉 $(purple)$(clear) $(yellow)Migrating dev database...$(clear)\n" + @rails db:migrate + @printf "\n$(bg_purple) 👉 $(purple)$(clear) $(yellow)Seeding dev database...$(clear)\n" + rails db:seed + +assets: ## Build JS & CSS assets + @yarn install + @yarn run build + @yarn run build:css + +dev: development assets ## Start the development environment + @bash -c "source $(MAKE_ENV); bundle exec foreman start -f Procfile.dev" + + +ci: ## Run all tests and linters as if on CI + bin/rails db:migrate + bin/rails db:test:prepare + bundle exec rspec + bundle exec rubocop + bin/shchk diff --git a/Procfile.dev b/Procfile.dev new file mode 100644 index 00000000..12e6ec56 --- /dev/null +++ b/Procfile.dev @@ -0,0 +1,5 @@ +web: env RUBY_DEBUG_OPEN=true bin/rails server +js: yarn build --watch +css: yarn watch:css +browser: sleep 10 && open http://localhost:5000/ && while true; do sleep 100; echo .; done +css: yarn watch:css diff --git a/README.adoc b/README.adoc index dfd3c279..70e91a67 100644 --- a/README.adoc +++ b/README.adoc @@ -6,46 +6,140 @@ :icons: font :license: MIT -image:https://github.com/fnf-org/ticket-booth/actions/workflows/ruby.yml/badge.svg[RSpec, link=https://github.com/fnf-org/ticket-booth/actions/workflows/ruby.yml] image:https://github.com/fnf-org/ticket-booth/actions/workflows/rubocop.yml/badge.svg[Rubocop, link=https://github.com/fnf-org/ticket-booth/actions/workflows/rubocop.yml] image:https://github.com/fnf-org/TicketBooth/actions/workflows/build.yaml/badge.svg[Docker Image Build,link="https://github.com/fnf-org/TicketBooth/actions/workflows/build.yaml"] +==== +image::https://github.com/fnf-org/TicketBooth/actions/workflows/rspec.yml/badge.svg[TicketBooth CI: RSpec,link=https://github.com/fnf-org/TicketBooth/actions/workflows/rspec.yml] ---- +image::https://github.com/fnf-org/TicketBooth/actions/workflows/lint.yml/badge.svg[TicketBooth CI: RuboCop,link=https://github.com/fnf-org/TicketBooth/actions/workflows/lint.yml] + +image:https://github.com/fnf-org/TicketBooth/actions/workflows/build.yaml/badge.svg[Docker Image Build,link="https://github.com/fnf-org/TicketBooth/actions/workflows/build.yaml"] +==== NOTE: This app is formerly known as **Helping Culture**, which in turn was originally conceived and inspired by Tracy Page. This project was originally written by https://github.com/sds[Shane de Silva]. It is currently maintained by the https://github.com/fnf-org[FnF] org, and within it specifically https://github.com/kigster[Konstantin Gredeskoul] for any application issues, and https://github.com/mike-matera[Mike Matera] for any issues related to deployment to the Google Public Cloud. Please use labels to tag any reported issues. +NOTE: Please see the xref:README.pdf[following link] for a PDF version of this README. == Welcome to the *Ticket Booth*! -=== Ticket Booth is an open source Rails App meant to be self-hosted - The goal of the app is to make ticket and volunteer management for community events easier and automated. -=== Initialization +== Development Environment Setup + +The following walks through a local setup on OS-X M1. + +=== Streamlined Setup -Please make sure you have PostgreSQL running locally, or install it via Homebrew: +If you installed https://brew.sh[Homebrew] on your laptop, you should be able to boot the app. + +You can run the following setup script to attempt a complete set up of the development environment, as well as the installation of the Rubies, Gems and Database: [source,bash] ---- bin/boot-up ---- -After that: +This should automatically open the browser at the `http://localhost:3000` URL, if all the steps succeed. + +The `bin/boot-up` script will start the Rails server, or show an error that needs to be fixed. + +After you stop it with `Ctrl-C`, you can restart the server using the following shortcut: + +[source,bash] +make dev + +This actually starts Foreman via `bundle exec foreman -f Procfile.dev` — this is required to start CSS and JS just-in-time compilcation in addition to the Rails server. + +CAUTION: Running `rails s` is no longer sufficient to start the application. + +==== Running Tests and Linters + +To verify that your local environment is working, run the following: [source,bash] ---- -brew install rbenv ruby-build +make ci +---- + +This will run DB Migrations, followed by RSpec, Rubocop, and ShellCheck. + +==== Additional Information + +We dedicated a separate document to the xref:DEVELOPERS.pdf[developer setup], which helps you get the application running locally. + +Alternatively, keep reading for step-by-step manual instructions. + + +=== Optional Manual Setup + +If you prefer to run all the steps manually, then follow the guide below. + +==== Manual 1: Services + +Please make sure you have PostgreSQL and running locally, or install it via Homebrew: + +[source,bash] +---- +brew install direnv + +brew install postgresql@16 +brew services postgresql@16 start + +brew install memcached +brew services memcached start +---- + +==== Manual 2: Direnv Setup + +Before you can start the Ruby Server, you need to configure `direnv` so that the environment in the file `.envrc` is loaded on OS-X. + +To do that follow the instructions for setting direnv on https://direnv.net/docs/hook.html#bash[bash] or https://direnv.net/docs/hook.html#zsh[zsh] depending on what you are running. To find out, run `echo $SHELL`. + +After you setup the shell initialization file, restart your terminal or reload the shell configuration. + +Once you are back in the project's folder, run: + +[source,bash] +direnv allow . + +This will load the environment variables from the `.envrc` file. + +==== Manual 3: Ruby Setup + +[source,bash] +---- +# install brew from https://brew.sh +brew bundle 2>/dev/null + +# ensure the following packages exist +brew install rbenv ruby-build direnv volta + eval "$(rbenv init -)" +eval "$(direnv hook ${SHELL/*\/})" + rbenv install -s $(cat .ruby-version) rbenv local $(cat .ruby-version) -bundle install -bundle exec rake db:create -bundle exec rake db:migrate db:seed -bundle exec rake db:test:prepare +volta install node@lts + +bundle install -j 12 +rails db:create +rails db:migrate db:seed +rails db:test:prepare + +# Run Specs at the end: bundle exec rspec ---- -=== Starting the Server +==== Manual 4: Starting the Server + +To start the server post-setup, run: + +[source,bash] +---- +bin/rails s +# or just +rails s +---- -We recommend that you use the `Makefile`: +You can also use the `Makefile`: [source,bash] ---- @@ -87,22 +181,41 @@ To generate the HTML (we'll use the CSV file checked into the fixtures): [source,bash] ---- -bin/music-submission-links spec/fixtures/chill_sets.csv | pbcopy +# eg, using the fixture file: +$ bin/music-submission-links spec/fixtures/chill_sets.csv > chill_set.html + +# or, to include the simple CSS into the header: +$ bin/music-submission-links spec/fixtures/chill_sets.csv --simple-css > chill_set.html +open chill_set.html ---- -Now you can open WordPress, create a two-column layout and paste the contents into one of the two columns. +==== +WARNING: If you add `--simple-css` to the arguments, the generated HTML will include `` element with the https://simplecss.org/[Simple CSS Stylesheet]. Do not use this flag if you plan to paste the output into the WordPress text box. Use this flag if you simply want to verify the resulting HTML in a browser by running `open chill_set.html`. +==== -To verify that the script is working, install a handy tool called `highlight`: +To verify that the script is working and generating correct HTML, you might want to install a handy tool called `bat`, eg using Homebrew on Mac OS-X: [source,bash] ---- -npm i -g highlight -bin/music-submission-links spec/fixtures/chill_sets.csv | highlight -l html +$ brew install bat +$ bin/music-submission-links spec/fixtures/chill_sets.csv | bat ---- -=== Developer Setup +===== Adding Submissions to WordPress -We dedicated a separate document to the xref:DEVELOPERS.pdf[developer setup], which helps you get the application running locally. +Now you can open WordPress, create a two-column layout on the submissions page and paste the contents into one of the two columns, typically: + + 1. Night time / Peak Hour + 2. Chill / Daytime + +First, let's copy the resulting HTML into clipboard: + +[source,bash] +---- +$ bin/music-submission-links chill_sets.csv | pbcopy +---- + +Now we can paste it into WordPress directly. == API Documentation @@ -110,10 +223,9 @@ Yard-generated documentation is available via running: [source,bash] ---- -bundle exec rake doc +$ bundle exec rake doc # this will automatically open the index.html ---- -b diff --git a/README.pdf b/README.pdf index d0d96e6f..9b645a18 100644 Binary files a/README.pdf and b/README.pdf differ diff --git a/Rakefile b/Rakefile old mode 100755 new mode 100644 index cbca03e4..d4b5e256 --- a/Rakefile +++ b/Rakefile @@ -1,12 +1,13 @@ -#!/usr/bin/env rake # frozen_string_literal: true # Add your own tasks in files placed in lib/tasks ending in .rake, # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. -require File.expand_path('config/application', __dir__) +require_relative 'config/application' require 'timeout' +Rails.application.load_tasks + is_dev_test = %w[development test].include?(ENV.fetch('RAILS_ENV', 'development')) if is_dev_test @@ -15,11 +16,11 @@ if is_dev_test require 'yard' namespace :todolist do - task :statsetup do + task statsetup: :environment do require 'rails/code_statistics' - ::STATS_DIRECTORIES << %w[Uploaders app/uploaders] + STATS_DIRECTORIES << %w[Classes app/classes] # For test folders not defined in CodeStatistics::TEST_TYPES (ie: spec/) - ::STATS_DIRECTORIES << %w[Specs spec] + STATS_DIRECTORIES << %w[Specs spec] CodeStatistics::TEST_TYPES << 'Specs' end end @@ -30,5 +31,3 @@ if is_dev_test RuboCop::RakeTask.new task default: %i[spec rubocop] end - -TicketBooth::Application.load_tasks diff --git a/app/mailers/.gitkeep b/app/assets/builds/.keep similarity index 100% rename from app/mailers/.gitkeep rename to app/assets/builds/.keep diff --git a/app/models/.gitkeep b/app/assets/images/.keep similarity index 100% rename from app/models/.gitkeep rename to app/assets/images/.keep diff --git a/app/assets/images/fnf-bw.png b/app/assets/images/logos/fnf-bw.png similarity index 100% rename from app/assets/images/fnf-bw.png rename to app/assets/images/logos/fnf-bw.png diff --git a/app/assets/images/logos/fnf-large.png b/app/assets/images/logos/fnf-large.png new file mode 100644 index 00000000..514794f0 Binary files /dev/null and b/app/assets/images/logos/fnf-large.png differ diff --git a/app/assets/images/logos/fnf-transparent.png b/app/assets/images/logos/fnf-transparent.png new file mode 100644 index 00000000..04681108 Binary files /dev/null and b/app/assets/images/logos/fnf-transparent.png differ diff --git a/app/assets/images/fnf.png b/app/assets/images/logos/fnf.png similarity index 100% rename from app/assets/images/fnf.png rename to app/assets/images/logos/fnf.png diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js deleted file mode 100644 index e876480f..00000000 --- a/app/assets/javascripts/application.js +++ /dev/null @@ -1,17 +0,0 @@ -// This is a manifest file that'll be compiled into application.js, which will include all the files -// listed below. -// -// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, -// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. -// -// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -// the compiled file. -// -// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD -// GO AFTER THE REQUIRES BELOW. -// -//= require jquery -//= require jquery_ujs -//= require twitter/bootstrap -//= require bootstrap-datetimepicker.min -//= require_tree . diff --git a/app/assets/javascripts/bootstrap.js.coffee b/app/assets/javascripts/bootstrap.js.coffee deleted file mode 100644 index c9404a8e..00000000 --- a/app/assets/javascripts/bootstrap.js.coffee +++ /dev/null @@ -1,4 +0,0 @@ -jQuery -> - $("a[rel=popover]").popover() - $(".tooltip").tooltip() - $("a[rel=tooltip]").tooltip() \ No newline at end of file diff --git a/app/assets/javascripts/datetimepicker.js b/app/assets/javascripts/datetimepicker.js deleted file mode 100644 index c6a980c2..00000000 --- a/app/assets/javascripts/datetimepicker.js +++ /dev/null @@ -1,17 +0,0 @@ -// Initial all datetimepickers on the page, if there are any -$('.input-datetimepicker').each(function(index, el) { - var $el = $(el), - date = $el.data('date'); - - $el.datetimepicker({ - format: 'dd/MM/yyyy hh:mm:ss', - pick12HourFormat: true, - pickSeconds: false, - format: 'yyyy/MM/dd hh:mm:ss' - }); - - // Rails returns a UTC date, so need to convert it to local time - if (date) { - $el.data('datetimepicker').setLocalDate(new Date(date)); - } -}); diff --git a/app/assets/javascripts/payments.js.coffee b/app/assets/javascripts/payments.js.coffee deleted file mode 100644 index 973bead2..00000000 --- a/app/assets/javascripts/payments.js.coffee +++ /dev/null @@ -1,74 +0,0 @@ -jQuery -> - if Stripe? # Load if we're on a page that requires Stripe - Stripe.setPublishableKey($('meta[name="stripe-key"]').attr('content')) - payment.setupForm() - -payment = - setupForm: -> - $('#new_payment').submit -> - $('input[type=submit]').attr('disabled', true) - if $('#card_number').length - payment.processCard() - false - else - true - - $('.donation-option input[type=radio]').on('change', ( -> - $totalPrice = $('#total_price') - $totalFee = $('#total_fee') - amount = parseFloat($(this).val(), 10) + - parseFloat($totalPrice.data('price'), 10) - $totalPrice.text('$' + amount.toFixed(2)) - $totalFee.text('$' + payment.extraFee(amount).toFixed(2)) - )) - - # EALD Form is separate - $('#new_eald_payment').submit -> - console.log('Submitting...') - $('input[type=submit]').attr('disabled', true) - console.log('What') - console.log($('#card_number').length) - if $('#card_number').length - payment.processCard() - false - else - true - - $('#eald_payment_early_arrival_passes, #eald_payment_late_departure_passes').on('change mouseup', ( -> - $ealdPrice= $('#eald_total_price') - $ealdFee = $('#eald_fee') - $earlyPasses = $('#eald_payment_early_arrival_passes') - $latePasses = $('#eald_payment_late_departure_passes') - - price = parseFloat($earlyPasses.val(), 10) * parseFloat($earlyPasses.data('default-price')) + - parseFloat($latePasses.val(), 10) * parseFloat($latePasses.data('default-price')) - - $ealdPrice.text('$' + price.toFixed(2)) - $ealdFee.text('$' + payment.extraFee(price).toFixed(2)) - )) - - extraFee: (amount) -> - stripeRate = 0.029 # 2.9% per transaction - stripeFee = 0.30 # +30 cents per transaction - - if amount == 0 - 0 - else - fee = (amount * stripeRate + stripeFee) / (1 - stripeRate) - Math.ceil(fee * 100) / 100 # Round up to the nearest cent - - processCard: -> - card = - number: $('#card_number').val() - cvc: $('#card_code').val() - expMonth: $('#card_month').val() - expYear: $('#card_year').val() - Stripe.createToken(card, payment.handleStripeResponse) - - handleStripeResponse: (status, response) -> - if status == 200 - $('#stripe_card_token').val(response.id) - $('form')[0].submit() - else - $('#stripe-error').text(response.error.message) - $('input[type=submit]').attr('disabled', false) diff --git a/app/assets/javascripts/popovers.js b/app/assets/javascripts/popovers.js deleted file mode 100644 index 0210527f..00000000 --- a/app/assets/javascripts/popovers.js +++ /dev/null @@ -1,11 +0,0 @@ -(function($) { - var $popupMarkers = $('.help-popover'); - - $popupMarkers.popover({ - trigger: 'manual' - }).on('click', function(e) { - var $popover = $(this); - $popover.popover('toggle'); - e.preventDefault(); - }); -})(jQuery); diff --git a/app/assets/javascripts/ticket_requests.js b/app/assets/javascripts/ticket_requests.js deleted file mode 100644 index b4e3f2c0..00000000 --- a/app/assets/javascripts/ticket_requests.js +++ /dev/null @@ -1,100 +0,0 @@ -$('#ticket_request_user_attributes_email') - .on('change', function(evt) { - var $emailField = $(this), - email = $emailField.val(), - lookupPath = $emailField.data('lookup-url'); - - $.get(lookupPath + '?email=' + email) - .success(function() { - $('#email-warning').removeClass('hidden'); - }) - .fail(function() { - $('#email-warning').addClass('hidden'); - }). - always(function() { - $('#email-reset-sent').addClass('hidden'); - }); - }); - -$('#password-reset-link') - .on('click', function(evt) { - var resetUrl = $(this).data('reset-url'), - $emailField = $('#ticket_request_user_attributes_email'), - email = $emailField.val(); - $.get(resetUrl + '?email=' + email) - .success(function() { - $('#email-warning').addClass('hidden'); - $('#email-reset-sent').removeClass('hidden'); - }); - evt.preventDefault(); - }); - -$('#ticket_request_adults, #ticket_request_kids, #ticket_request_cabins, #ticket_request_early_arrival_passes, #ticket_request_late_departure_passes') - .on('change keyup mouseup', function(evt) { - var $numberField = $(this), - $priceDisplay = $numberField.find('+ .inline-price'), - quantity = $numberField.val() || 0, - prices = $numberField.data('custom-prices') || {}, - price = prices[quantity] || $numberField.data('default-price') * quantity, - text_price = price ? '$' + price : ''; - - $priceDisplay.text(text_price); - }) - .each(function(idx, el) { - var $el = $(el); - // Force update so prices reflect default values - // (don't update disabled elements as they already have text) - if (!$el.is(':disabled')) { - $el.change(); - } - }); - -$('input[name="ticket_request[role]"]') - .on('change', function(evt) { - var $radioBtn = $(this), - role = $radioBtn.val(), - $roleRadioBtn = $('#ticket_request_role_' + role), - maxTickets = $roleRadioBtn.data('max-tickets'), - $roleExplanationField = $('textarea[name="ticket_request[role_explanation]"]'), - $roleExplanations = $('.role-explanation'), - $selectedRoleExplanation = $('.role-explanation.' + role), - $ticketsField = $('input[name="ticket_request[adults]"]'); - - // Set max # of tickets to limit imposed by role - $ticketsField.attr('max', maxTickets); - - // Reduce tickets if changing role causes maximum to be exceeded - if ($ticketsField.val() > maxTickets) { - $ticketsField.val(maxTickets); - $ticketsField.change(); - } - - // Show the explanation matching the selected role - $roleExplanations.addClass('hidden'); - $selectedRoleExplanation.removeClass('hidden'); - - $roleExplanationField.toggleClass('hidden', role == 'volunteer'); - - // Don't require explanation if role is "Volunteer" - $roleExplanationField.attr('required', role != 'volunteer'); - }); - -$('input[name="ticket_request[car_camping]"]') - .on('change', function(evt) { - var $carCampingChkbx = $(this), - carCamping = $carCampingChkbx.is(':checked'), - $carCampingExplanationField = $('textarea[name="ticket_request[car_camping_explanation]"]'); - - $carCampingExplanationField.toggleClass('hidden', !carCamping); - - // Don't require explanation if not requesting anything - $carCampingExplanationField.attr('required', carCamping); - }); - -$('input[name="ticket_request[agrees_to_terms]"]') - .on('change', function(evt) { - var $agreesChkbx = $(this), - agrees = $agreesChkbx.is(':checked'); - - $('#submit-request').attr('disabled', !agrees); - }); diff --git a/app/assets/javascripts/tooltips.js b/app/assets/javascripts/tooltips.js deleted file mode 100644 index 936fdcdc..00000000 --- a/app/assets/javascripts/tooltips.js +++ /dev/null @@ -1 +0,0 @@ -$('.hover-tooltip').tooltip(); diff --git a/app/assets/stylesheets/application.css b/app/assets/stylesheets/application.css deleted file mode 100644 index 08be496a..00000000 --- a/app/assets/stylesheets/application.css +++ /dev/null @@ -1,16 +0,0 @@ -/* - * This is a manifest file that'll be compiled into application.css, which will include all the files - * listed below. - * - * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, - * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. - * - * You're free to add application-wide styles to this file and they'll appear at the top of the - * compiled file, but it's generally better to create a new file per style scope. - * - *= require_self - *= require_tree . - * - *= require bootstrap_and_overrides - *= require bootstrap-datetimepicker.min - */ diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss new file mode 100644 index 00000000..1d28a571 --- /dev/null +++ b/app/assets/stylesheets/application.scss @@ -0,0 +1,31 @@ +/* +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the top of the + * compiled file, but it's generally better to create a new file per style scope. + * + *= require_self + */ + +@import 'bootstrap/scss/bootstrap'; +@import 'bootstrap-icons/font/bootstrap-icons'; + +@import 'flatpickr/dist/flatpickr'; +@import 'flatpickr/dist/themes/material_orange'; + +//@import '../../../node_modules/flatpickr/dist/flatpickr.min'; +//@import '../../../node_modules/flatpickr/dist/themes/material_orange'; + +@import './events.css.scss'; +@import './home.css.scss'; +@import './jobs.css.scss'; +@import './payments.css.scss'; +@import './shifts.css.scss'; +@import './time_slots.css.scss'; +@import './links.css.scss'; +@import './global.css.scss'; diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/assets/stylesheets/bootstrap_and_overrides.css.less deleted file mode 100644 index 0729ddbf..00000000 --- a/app/assets/stylesheets/bootstrap_and_overrides.css.less +++ /dev/null @@ -1,30 +0,0 @@ -@import "twitter/bootstrap/bootstrap"; -@import "twitter/bootstrap/responsive"; - -// Set the correct sprite paths -@iconSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings"); -@iconWhiteSpritePath: asset-path("twitter/bootstrap/glyphicons-halflings-white"); - -// Set the Font Awesome (Font Awesome is default. You can disable by commenting below lines) -@fontAwesomeEotPath: asset-url("fontawesome-webfont.eot"); -@fontAwesomeEotPath_iefix: asset-url("fontawesome-webfont.eot#iefix"); -@fontAwesomeWoffPath: asset-url("fontawesome-webfont.woff"); -@fontAwesomeTtfPath: asset-url("fontawesome-webfont.ttf"); -@fontAwesomeSvgPath: asset-url("fontawesome-webfont.svg#fontawesomeregular"); - -// Font Awesome -@import "fontawesome/font-awesome"; - -// Glyphicons -//@import "twitter/bootstrap/sprites.less"; - -// Your custom LESS stylesheets goes here -// -// Since bootstrap was imported above you have access to its mixins which -// you may use and inherit here -// -// If you'd like to override bootstrap's own variables, you can do so here as well -// See http://twitter.github.com/bootstrap/customize.html#variables for their names and documentation -// -// Example: -// @linkColor: #ff0000; diff --git a/app/assets/stylesheets/events.css.scss b/app/assets/stylesheets/events.css.scss index 43423e73..6dce2fc2 100644 --- a/app/assets/stylesheets/events.css.scss +++ b/app/assets/stylesheets/events.css.scss @@ -17,6 +17,9 @@ float: right; } -.event-preview { - float: right; +img.event-preview { + max-width: 200px; + max-height: 200px; + margin: 0 30px; + float: right !important; } diff --git a/app/assets/stylesheets/global.css.scss b/app/assets/stylesheets/global.css.scss index 10db7433..3c94c60f 100644 --- a/app/assets/stylesheets/global.css.scss +++ b/app/assets/stylesheets/global.css.scss @@ -1,8 +1,83 @@ -a { +.container { + padding-top: 20px; +} + +.clear-right { + clear: right; +} + +.container-fluid, .container { + a { + color: #ff7800 !important; + text-decoration: none !important; + padding: 6px 15px !important; + margin-left: -15px; + + &:focus, + &:hover { + color: #000 !important; + background-color: #ff7800 !important; + } + } +} + +.muted { + font-size: 10pt; + color: #888; + margin-left: 22px; +} + +a.btn { + color: #ff7800 !important; + text-decoration: none !important; + padding: 6px 15px !important; + margin-right: 10px; + margin-left: 0; + border: 1px solid #8f4603; + border-radius: 10px !important; + background-color: #462301; + &:focus, &:hover { - color: #ffbd24; - text-decoration: none; + color: #000 !important; + background-color: #ff7800 !important; + } +} + + +nav.navbar { + width: 100%; + padding-left: 20px; + + a.nav-brand { + display: inline-block; + border-width: 0 !important; + padding: 0 !important; + background-color: transparent !important; + border-radius: 0; + margin-left: 30px; + } + + a.nav-brand img { + display: inline-block; + position: relative; + margin-left: 50px !important; + margin-right: 30px !important; + padding: 20px !important; + } + + a.nav-link { + color: #ff7800 !important; + text-decoration: none !important; + padding: 6px 15px !important; + margin: 0 10px; + background-color: #462301; + + &:focus, + &:hover { + color: #000 !important; + background-color: #ff7800 !important; + } } } @@ -15,6 +90,92 @@ a { } } +h1, h2, h3, h4, h5, legend { + margin-top: 20px; +} + +.alert { + h3 { + margin: 0; + text-align: center; + } +} + +.field-group { + position: relative; + width: 100%; + display: block; + border: 1px solid red; +} + +.vertical-20 { + display: block; + width: 100%; + height: 20px; +} + +.nowrap { + white-space: nowrap; +} + +dl.dl-horizontal { + margin-top: 20px; + + dt { + color: #fa2; + font-weight: 900; + } +} + +form { + label { + margin-top: 25px; + margin-bottom: 2px; + display: block; + min-width: auto; + font-size: 12pt; + vertical-align: top; + + } + + input { + background-color: #efe; + color: #000; + border: 0.5px solid #777; + border-radius: 5px; + padding: 5px 0; + margin-top: 0; + margin-right: 5px; + margin-bottom: 0; + display: inline-block !important; + max-width: 80%; + } + + input[type=text] { + min-width: 100px; + text-align: left; + padding-left: 10px; + width: 300px; + } + + input[type=submit] { + margin-top: 20px; + margin-bottom: 20px; + } + + input[type=number] { + text-align: right; + width: 80px; + min-width: 30px; + } + + input[type=email], input[type=password] { + padding: 9px !important; + width: 300px; + min-width: 100px; + } +} + .help-inline { line-height: 30px; vertical-align: top; @@ -50,11 +211,9 @@ body { } // Hide navbar text for small screens -@media (max-width: 410px) { - .user-name, - .sign-in-text, - .sign-out-text { - display: none; +@media (max-width: 600px) { + small.nowrap { + white-space: normal; } } diff --git a/app/assets/stylesheets/home.css.scss b/app/assets/stylesheets/home.css.scss index 1be075fa..6b09c6f0 100644 --- a/app/assets/stylesheets/home.css.scss +++ b/app/assets/stylesheets/home.css.scss @@ -1,5 +1,4 @@ .hero-unit { - background-color: #fff; text-align: center; } diff --git a/app/assets/stylesheets/links.css.scss b/app/assets/stylesheets/links.css.scss new file mode 100644 index 00000000..6fb1d7a6 --- /dev/null +++ b/app/assets/stylesheets/links.css.scss @@ -0,0 +1,11 @@ +ul.shared-user-links { + list-style-type: none; + margin-top: 40px !important; + padding-left: 0 !important; + p { + margin-left: 0; + a { + margin-left: 0; + } + } +} diff --git a/app/assets/stylesheets/users/shared/links.css.scss b/app/assets/stylesheets/users/shared/links.css.scss deleted file mode 100644 index 3ce933d7..00000000 --- a/app/assets/stylesheets/users/shared/links.css.scss +++ /dev/null @@ -1,4 +0,0 @@ -.shared-user-links { - list-style-type: none; - margin-left: 0; -} diff --git a/app/channels/application_cable/channel.rb b/app/channels/application_cable/channel.rb new file mode 100644 index 00000000..9aec2305 --- /dev/null +++ b/app/channels/application_cable/channel.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/app/channels/application_cable/connection.rb b/app/channels/application_cable/connection.rb new file mode 100644 index 00000000..8d6c2a1b --- /dev/null +++ b/app/channels/application_cable/connection.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/lib/fnf/event_reporter.rb b/app/classes/fnf/event_reporter.rb similarity index 93% rename from lib/fnf/event_reporter.rb rename to app/classes/fnf/event_reporter.rb index 036e9c91..13115ee8 100644 --- a/lib/fnf/event_reporter.rb +++ b/app/classes/fnf/event_reporter.rb @@ -2,6 +2,7 @@ require 'newrelic_rpm' require 'singleton' + module FnF class EventReporter class << self @@ -15,6 +16,10 @@ def metric(event, value) ::NewRelic::Agent.record_metric(event_name(event), value) end + def handle_event(event) + metric(event, 1) + end + protected def event_name(event) diff --git a/app/classes/fnf/events.rb b/app/classes/fnf/events.rb new file mode 100644 index 00000000..995d5aa2 --- /dev/null +++ b/app/classes/fnf/events.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +require 'ventable' + +require_relative 'events/abstract_event' +require_relative 'events/ticket_request_event' +require_relative 'events/ticket_request_approved_event' +require_relative 'events/ticket_request_declined_event' + +require_relative '../../mailers/ticket_request_mailer' + +module FnF + module Events + class << self + attr_accessor :initialized + + def initialize_events! + return if initialized == true + + TicketRequestEvent.configure { notifies ::TicketRequestMailer } + + TicketRequestDeclinedEvent.configure { notifies ::TicketRequestMailer } + + TicketRequestApprovedEvent.configure { notifies ::TicketRequestMailer } + + self.initialized = true + end + end + end +end diff --git a/app/classes/fnf/events/abstract_event.rb b/app/classes/fnf/events/abstract_event.rb new file mode 100644 index 00000000..f03a4e88 --- /dev/null +++ b/app/classes/fnf/events/abstract_event.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'ventable' +require_relative '../event_reporter' + +module FnF + module Events + class AbstractEvent + attr_accessor :target, :user + + def initialize(user: nil, target: nil) + self.target = target + self.user = user + end + + class << self + # @param [Object] subclass + def inherited(subclass) + # noinspection RubyMismatchedArgumentType + super(subclass) + + subclass.include Ventable::Event + + subclass.notifies(EventReporter) + + subclass.instance_eval do + # For eg FnF::Events::TicketRequestEvent this should return :ticket_request + # For eg FnF::Events::TicketRequestDeclinedEvent this should return :ticket_request_declined + # For eg FnF::Events::TicketRequestApprovedEvent this should return :ticket_request_approved + def ventable_callback_method_name + ActiveSupport::Inflector.underscore(name) + .gsub(%r{^fnf/events/}, '') + .gsub(/_event$/, '') + .to_sym + end + end + end + end + end + end +end diff --git a/lib/fnf/events/ticket_request_approved_event.rb b/app/classes/fnf/events/ticket_request_approved_event.rb similarity index 99% rename from lib/fnf/events/ticket_request_approved_event.rb rename to app/classes/fnf/events/ticket_request_approved_event.rb index 3b91cdab..f1ffa9bd 100644 --- a/lib/fnf/events/ticket_request_approved_event.rb +++ b/app/classes/fnf/events/ticket_request_approved_event.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true require_relative 'abstract_event' - module FnF module Events # This event fires whenever the ticket request is approved diff --git a/lib/fnf/events/ticket_request_declined_event.rb b/app/classes/fnf/events/ticket_request_declined_event.rb similarity index 83% rename from lib/fnf/events/ticket_request_declined_event.rb rename to app/classes/fnf/events/ticket_request_declined_event.rb index da8ec109..815a67cf 100644 --- a/lib/fnf/events/ticket_request_declined_event.rb +++ b/app/classes/fnf/events/ticket_request_declined_event.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true -require_relative 'abstract_event' - +require_relative 'ticket_request_event' module FnF module Events # This event fires whenever the ticket request is declined diff --git a/lib/fnf/events/ticket_request_event.rb b/app/classes/fnf/events/ticket_request_event.rb similarity index 100% rename from lib/fnf/events/ticket_request_event.rb rename to app/classes/fnf/events/ticket_request_event.rb diff --git a/app/concerns/routing.rb b/app/concerns/routing.rb new file mode 100644 index 00000000..fcac8a59 --- /dev/null +++ b/app/concerns/routing.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Routing + extend ActiveSupport::Concern + + included do + include Rails.application.routes.url_helpers + end + + def default_url_options + Rails.application.config.action_mailer.default_url_options + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a92c4994..c64a53ae 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -10,6 +10,8 @@ class ApplicationController < ActionController::Base # Allow additional parameters to be passed to Devise-managed controllers before_action :configure_permitted_parameters, if: :devise_controller? + add_flash_types :info, :error, :warning + protected def require_site_admin @@ -20,17 +22,29 @@ def require_event_admin redirect_to new_event_ticket_request_path(@event) unless @event.admin?(current_user) end + def require_logged_in_user + unless current_user&.id + redirect_to new_user_session_path + end + end + def configure_permitted_parameters - devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) + attributes = %i[name first last email avatar] + devise_parameter_sanitizer.permit(:sign_up, keys: attributes) + devise_parameter_sanitizer.permit(:account_update, keys: attributes) end def authenticate_user_from_token! user_id = params[:user_id].presence - user = User.find_by_id(user_id) + user = user_id ? User.find_by(id: user_id) : nil if user && Devise.secure_compare(user.authentication_token, params[:user_token]) user.update_attribute(:authentication_token, nil) # One-time use sign_in user end end + + def render_flash + render turbo_stream: turbo_stream.update('flash', partial: 'shared/flash') + end end diff --git a/app/controllers/concerns/.keep b/app/controllers/concerns/.keep new file mode 100644 index 00000000..e69de29b diff --git a/app/controllers/eald_payments_controller.rb b/app/controllers/eald_payments_controller.rb index 39304e3b..f0227edb 100644 --- a/app/controllers/eald_payments_controller.rb +++ b/app/controllers/eald_payments_controller.rb @@ -22,10 +22,10 @@ def new early_arrival_passes = params.fetch(:early_arrival_passes, 1) late_departure_passes = params.fetch(:late_departure_passes, 1) @eald_payment = EaldPayment.new(event_id: @event.id, - email: email, + email:, name: full_name, - early_arrival_passes: early_arrival_passes, - late_departure_passes: late_departure_passes) + early_arrival_passes:, + late_departure_passes:) end def create diff --git a/app/controllers/emails_controller.rb b/app/controllers/emails_controller.rb index c2462738..ab078b62 100644 --- a/app/controllers/emails_controller.rb +++ b/app/controllers/emails_controller.rb @@ -4,7 +4,7 @@ class EmailsController < ApplicationController def index respond_to do |format| format.any do - if User.where(email: params[:email]).first + if User.where(email: email_params[:email]).first head :ok else head :not_found @@ -12,4 +12,10 @@ def index end end end + + private + + def email_params + params.permit(:email) + end end diff --git a/app/controllers/events_controller.rb b/app/controllers/events_controller.rb index 3a8b50b3..58c5b740 100644 --- a/app/controllers/events_controller.rb +++ b/app/controllers/events_controller.rb @@ -27,28 +27,37 @@ def new end def edit + params_symbolized_hash[:event]&.each_pair do |key, value| + @event.send("#{key}=", value) if @event.respond_to?("#{key}=") + end render end def create - populate_params_event(params) + create_params = params_symbolized_hash[:event].dup + convert_event_times_for_db(create_params) - @event = Event.new(params[:event]) + @event = Event.new(create_params) if @event.save redirect_to @event else - render action: 'new' + Rails.logger.error("Can't create event: #{@event.errors.full_messages}") + flash.now[:error] = "There was a problem creating the event: #{@event.errors.full_messages.join('. ')}" + render_flash end end def update - populate_params_event(params) + update_params = params_symbolized_hash[:event].dup + convert_event_times_for_db(update_params) - if @event.update_attributes(params[:event]) - redirect_to @event + if @event.update(update_params) + redirect_to @event, notice: 'The event has been updated.' else - render action: 'edit' + Rails.logger.error "UPDATE ERROR: There was a problem updating the event: #{@event.errors.full_messages}" + flash.now[:error] = "There was a problem updating the event: #{@event.errors.full_messages}" + render_flash end end @@ -61,8 +70,8 @@ def destroy def add_admin return redirect_to :back unless @event.admin?(current_user) - email = params[:user_email] - user = User.find_by_email(email) + email = permitted_params[:user_email] + user = User.find_by(email:) return redirect_to :back, notice: "No user with email '#{email}' exists" unless user @event.admins << user @@ -78,8 +87,8 @@ def add_admin def remove_admin return redirect_to :back unless @event.admin?(current_user) - user_id = params[:user_id] - event_admin = EventAdmin.where(event_id: @event, user_id: user_id).first + user_id = permitted_params[:user_id] + event_admin = EventAdmin.where(event_id: @event, user_id:).first return redirect_to :back, notice: "No user with id #{user_id} exists" unless event_admin event_admin.destroy @@ -111,12 +120,16 @@ def download_guest_list private - def populate_params_event(params) - params[:event][:start_time] = Time.from_picker(params.delete(:start_time)) - params[:event][:end_time] = Time.from_picker(params.delete(:end_time)) - params[:event][:ticket_sales_start_time] = Time.from_picker(params.delete(:ticket_sales_start_time)) - params[:event][:ticket_sales_end_time] = Time.from_picker(params.delete(:ticket_sales_end_time)) - params[:event][:ticket_requests_end_time] = Time.from_picker(params.delete(:ticket_requests_end_time)) + def params_symbolized_hash + @params_symbolized_hash ||= permitted_params.to_h.tap(&:symbolize_keys!) + end + + def convert_event_times_for_db(event_hash) + converted_times = {} + event_hash.keys.grep(/_time$/).each do |key| + converted_times[key] = TimeHelper.to_datetime_from_picker(event_hash[key]) + end + event_hash.merge!(converted_times) end def completed_ticket_requests @@ -129,6 +142,42 @@ def completed_ticket_requests end def set_event - @event = Event.find(params[:id]) + @event = Event.find(permitted_params[:id]) + end + + def permitted_params + params.permit( + :id, + :user_email, + :user_id, + :_method, + :authenticity_token, + :commit, + event: %i[ + start_time + end_time + ticket_sales_start_time + ticket_sales_end_time + ticket_requests_end_time + adult_ticket_price + allow_donations + allow_financial_assistance + cabin_price + early_arrival_price + end_time + kid_ticket_price + late_departure_price + max_adult_tickets_per_request + max_cabin_requests + max_cabins_per_request + max_kid_tickets_per_request + name + require_mailing_address + start_time + tickets_require_approval + ] + ) + .to_hash + .with_indifferent_access end end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb index 69be221b..aefae36e 100644 --- a/app/controllers/home_controller.rb +++ b/app/controllers/home_controller.rb @@ -19,11 +19,13 @@ def index most_recent_event = Event.order(id: :desc).first redirect_to new_event_ticket_request_path(event_id: most_recent_event.id) end + else + render end end def oops - flash[:error] = 'No events exist at the moment, please have your Site Administrator create a public event first.' + flash.now[:error] = 'No events exist at the moment, please have your Site Administrator create a public event first.' render end end diff --git a/app/controllers/jobs_controller.rb b/app/controllers/jobs_controller.rb index 779b8e51..08f37ca7 100644 --- a/app/controllers/jobs_controller.rb +++ b/app/controllers/jobs_controller.rb @@ -37,7 +37,7 @@ def create def update @job = Job.find(params[:id]) - if @job.update_attributes(params[:job]) + if @job.update(params[:job]) redirect_to event_job_path(@event, @job), notice: 'Job was successfully updated.' else @@ -65,8 +65,8 @@ def set_event def create_time_slots return unless params[:start_time] - start_time = Time.from_picker(params.delete(:start_time)) - end_time = Time.from_picker(params.delete(:end_time)) + start_time = TimeHelper.to_datetime_from_picker(params.delete(:start_time)) + end_time = TimeHelper.to_datetime_from_picker(params.delete(:end_time)) return if end_time < start_time # Prevent infinite loop diff --git a/app/controllers/passwords_controller.rb b/app/controllers/passwords_controller.rb index d2cf95be..77899352 100644 --- a/app/controllers/passwords_controller.rb +++ b/app/controllers/passwords_controller.rb @@ -4,10 +4,10 @@ class PasswordsController < ApplicationController def reset email = params[:email].presence - if email && user = User.where(email: email).first + if email && user = User.where(email:).first user.send_reset_password_instructions end - redirect_to request.referrer, alert: 'A password reset link has been sent to your email!' + redirect_to request.referer, alert: 'A password reset link has been sent to your email!' end end diff --git a/app/controllers/payments_controller.rb b/app/controllers/payments_controller.rb index 751e8b2a..91487aac 100644 --- a/app/controllers/payments_controller.rb +++ b/app/controllers/payments_controller.rb @@ -8,7 +8,7 @@ def show @charge = Stripe::Charge.retrieve(@payment.stripe_charge_id) if @payment.stripe_charge_id @ticket_request = @payment.ticket_request @event = @ticket_request.event - return redirect_to root_path unless @payment.can_view?(current_user) + redirect_to root_path unless @payment.can_view?(current_user) end def new @@ -37,7 +37,7 @@ def create return redirect_to root_path unless @payment.can_view?(current_user) if @payment.save_and_charge! - PaymentMailer.payment_received(@payment).deliver_now + PaymentReceivedMailer.payment_received(@payment).deliver_now @payment.ticket_request.mark_complete redirect_to @payment, notice: 'Payment was successfully received.' else diff --git a/app/controllers/shifts_controller.rb b/app/controllers/shifts_controller.rb index 600ba25d..1e1a47df 100644 --- a/app/controllers/shifts_controller.rb +++ b/app/controllers/shifts_controller.rb @@ -6,7 +6,7 @@ class ShiftsController < ApplicationController def index @ticket_request = @event.ticket_requests.where(user_id: current_user).first - if !@ticket_request.present? && !current_user.site_admin? + if @ticket_request.blank? && !current_user.site_admin? flash[:error] = 'The user you are logged in with has not requested a ticket for this event' return redirect_to :root end @@ -22,8 +22,8 @@ def create if @shift.save redirect_to event_shifts_path(@event), - notice: "Successfully volunteered for #{@shift.time_slot.job.name}" \ - " for #{@shift.time_slot.start_time.localtime.to_s(:dhmm)}" + notice: "Successfully volunteered for #{@shift.time_slot.job.name} " \ + "for #{@shift.time_slot.start_time.localtime.to_fs(:dhmm)}" else render action: 'index' end @@ -34,8 +34,8 @@ def destroy @shift.destroy redirect_to event_shifts_url(@event), - notice: "Unvolunteered from #{@shift.time_slot.job.name}" \ - " for #{@shift.time_slot.start_time.localtime.to_s(:dhmm)}" + notice: "Unvolunteered from #{@shift.time_slot.job.name} " \ + "for #{@shift.time_slot.start_time.localtime.to_fs(:dhmm)}" end private diff --git a/app/controllers/ticket_requests_controller.rb b/app/controllers/ticket_requests_controller.rb index 609a72e1..fe1f6036 100644 --- a/app/controllers/ticket_requests_controller.rb +++ b/app/controllers/ticket_requests_controller.rb @@ -4,16 +4,14 @@ require 'csv' # Manage all pages related to ticket requests. +# rubocop: disable Metrics/ClassLength class TicketRequestsController < ApplicationController before_action :authenticate_user!, except: %i[new create] + before_action :set_event - before_action :require_event_admin, except: %i[new create show edit update] - before_action :set_ticket_request, except: %i[index new create download] - # Uncomment this if we start getting too many requests - # http_basic_authenticate_with name: Rails.application.secrets.ticket_request_username, - # password: Rails.application.secrets.ticket_request_password, - # only: :new + before_action :require_event_admin, except: %i[new create show edit update] + before_action :set_ticket_request, except: %i[new create index download] def index @ticket_requests = TicketRequest @@ -45,7 +43,7 @@ def index def download temp_csv = Tempfile.new('csv') - raise(ArgumentError, 'Blank temp_csv') unless temp_csv && temp_csv&.path + raise ArgumentError('Tempfile is nil') if temp_csv.nil? || temp_csv.path.nil? CSV.open(temp_csv.path, 'wb') do |csv| csv << (%w[name email] + TicketRequest.columns.map(&:name)) @@ -69,18 +67,20 @@ def show def new if signed_in? - existing_request = TicketRequest.where(user_id: current_user, event_id: @event).first + existing_request = TicketRequest.where(user_id: current_user, event_id: @event).order(:created_at).first return redirect_to event_ticket_request_path(@event, existing_request) if existing_request end - @user = current_user if signed_in? + @user = current_user if signed_in? @ticket_request = TicketRequest.new - last_ticket_request = TicketRequest.where(user_id: @user).order(:created_at).last - if last_ticket_request - %w[address_line1 address_line2 city state zip_code country_code].each do |field| - @ticket_request.send(:"#{field}=", last_ticket_request.send(field)) + if @user + last_ticket_request = TicketRequest.where(user_id: @user&.id).order(:created_at).last + if last_ticket_request + %w[address_line1 address_line2 city state zip_code country_code].each do |field| + @ticket_request.send(:"#{field}=", last_ticket_request.send(field)) + end end end end @@ -96,36 +96,66 @@ def edit def create unless @event.ticket_sales_open? - flash[:error] = 'Sorry, but ticket sales have closed' + flash.now[:error] = 'Sorry, but ticket sales have closed' return render action: 'new' end - params[:ticket_request][:user] = current_user if signed_in? - @ticket_request = TicketRequest.new(params[:ticket_request]) + tr_params = permitted_params[:ticket_request].to_h || {} + + ticket_request_user = if signed_in? && current_user.present? + current_user + else + User.build(email: permitted_params[:email], + name: permitted_params[:name], + password: permitted_params[:password], + password_confirmation: permitted_params[:password]).tap do |user| + if user.valid? + user.save! && sign_in(user) + else + flash.now[:error] = user.errors.full_messages.join('. ') + @ticket_request = TicketRequest.new(tr_params, user:, event: @event) + return render action: 'new' + end + end + end + + if tr_params.empty? + flash.now[:error] = 'Please fill out the form below to request tickets.' + redirect_to new_event_ticket_request_path(@event) + end + + tr_params[:user_id] = ticket_request_user.id + + @ticket_request = TicketRequest.new(tr_params, user_id: ticket_request_user.id, event_id: @event.id) + + Rails.logger.info("Newly created request: #{@ticket_request.inspect}") + + begin + @ticket_request.save! + Rails.logger.info("Saved Ticket Request, ID = #{@ticket_request.id}") - if @ticket_request.save FnF::Events::TicketRequestEvent.new( - user: current_user, + user: ticket_request_user, target: @ticket_request ).fire! - sign_in(@ticket_request.user) unless signed_in? - if @event.tickets_require_approval || @ticket_request.free? redirect_to event_ticket_request_path(@event, @ticket_request) else redirect_to new_payment_url(ticket_request_id: @ticket_request) end - else - render action: 'new' + rescue StandardError => e + Rails.logger.error("Error saving request: #{e.message}\n\n#{@ticket_request.errors.full_messages.join(', ')}") + flash.now[:error] = "Error saving request: #{e.message}