diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 895eb07..d343da9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,4 +4,16 @@ updates: directory: "/" schedule: interval: monthly - open-pull-requests-limit: 10 \ No newline at end of file + open-pull-requests-limit: 10 + ignore: + - dependency-name: pry + versions: + - ">= 0.13.a" + - "< 0.14" + groups: + rubocop-dependencies: + patterns: + - "rubocop*" + pronto-dependencies: + patterns: + - "pronto*" \ No newline at end of file diff --git a/.github/workflows/build-and-publish-docker-image.yaml b/.github/workflows/build-and-publish-docker-image.yaml new file mode 100644 index 0000000..99e02d4 --- /dev/null +++ b/.github/workflows/build-and-publish-docker-image.yaml @@ -0,0 +1,60 @@ +name: Build and publish docker image +on: + workflow_dispatch: + push: + branches: + - main + - use_head_commit + tags: + # any tag names starting with 'v' + - 'v*' +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + # Gives the action the ability to mint the OIDC token necessary to request a Sigstore signing certificate + id-token: write + # Permission necessary to persist the attestation + attestations: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Set-up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + platforms: linux/amd64 + - name: Log in to the Github Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + - name: Build and push Docker image + id: push + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v2 + with: + subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}} + subject-digest: ${{ steps.push.outputs.digest }} + push-to-registry: true \ No newline at end of file diff --git a/.github/workflows/hadolint.yml b/.github/workflows/hadolint.yml new file mode 100644 index 0000000..c0a577a --- /dev/null +++ b/.github/workflows/hadolint.yml @@ -0,0 +1,15 @@ +name: Hadolint - Dockerfile linting +on: + workflow_dispatch: + pull_request: + types: [opened, synchronize] + paths: + - "Dockerfile" +jobs: + hadolint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: hadolint/hadolint-action@v3.1.0 + with: + verbose: true diff --git a/.github/workflows/run-specs.yml b/.github/workflows/run-specs.yml new file mode 100644 index 0000000..452e4e3 --- /dev/null +++ b/.github/workflows/run-specs.yml @@ -0,0 +1,23 @@ +name: Specs + +on: + push: + +jobs: + spec: + + runs-on: ubuntu-latest + steps: + - name: Install packages + run: sudo apt-get update && sudo apt-get install --no-install-recommends -y libjemalloc2 + - uses: actions/checkout@v6 + - name: Set up Ruby + # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby, + # change this to (see https://github.com/ruby/setup-ruby#versioning): + uses: ruby/setup-ruby@v1 + with: + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + - name: Unpack test repo + run: cd spec/fixtures && tar -zxf test.git.tar.gz + - name: Run tests + run: bundle exec rspec diff --git a/.github/workflows/self.yml b/.github/workflows/self.yml index aabfb09..ad23b4a 100644 --- a/.github/workflows/self.yml +++ b/.github/workflows/self.yml @@ -5,14 +5,18 @@ on: jobs: run: + permissions: + checks: write + contents: read runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4 + - run: git fetch origin main - name: Pronto Run uses: ./ with: target: origin/main runners: >- - rubocop bundler_audit brakeman yamllint + rubocop brakeman env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index ba65472..e9cdacf 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,9 @@ build-iPhoneSimulator/ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: .rvmrc + +## Specific to RubyMine +.idea + +## Specific to asdf +.tool-versions diff --git a/.hadolint.yaml b/.hadolint.yaml new file mode 100644 index 0000000..77a9be4 --- /dev/null +++ b/.hadolint.yaml @@ -0,0 +1,14 @@ + # list of rules: https://github.com/hadolint/hadolint/wiki +ignored: + - DL3008 # Pin versions in apt-get install - https://github.com/hadolint/hadolint/wiki/DL3008 + # - DL3018 # Pin versions in apk add - https://github.com/hadolint/hadolint/wiki/DL3018 + # - DL3028 # Pin version in gem install - https://github.com/hadolint/hadolint/wiki/DL3028 + +trustedRegistries: + - docker.io + - "*.gcr.io" + - "*.ecr.eu-west-1.amazonaws.com" + +override: + warning: + - DL3028 # Pin version in gem install - https://github.com/hadolint/hadolint/wiki/DL3028 \ No newline at end of file diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..1964b58 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,61 @@ +plugins: + - rubocop-capybara + - rubocop-factory_bot + - rubocop-minitest + - rubocop-performance + - rubocop-rake + - rubocop-sequel + - rubocop-yard + +AllCops: + NewCops: enable + DisplayStyleGuide: true + +Metrics: + Enabled: false + +Layout/LineLength: + Enabled: false + +# Align `end` with the matching keyword or starting expression except for +# assignments, where it should be aligned with the LHS. +Layout/EndAlignment: + EnforcedStyleAlignWith: variable + +# Method definitions after `private` or `protected` isolated calls need one +# extra level of indentation. +Layout/IndentationConsistency: + EnforcedStyle: indented_internal_methods + +Style/FrozenStringLiteralComment: + EnforcedStyle: always + +# Use `foo { bar }` not `foo {bar}`. +Layout/SpaceInsideBlockBraces: + EnforcedStyleForEmptyBraces: space + +# Check quotes usage according to lint rule below. +Style/StringLiterals: + EnforcedStyle: double_quotes + +Style/RedundantReturn: + AllowMultipleReturnValues: true + +Style/Semicolon: + AllowAsExpressionSeparator: true + +Style/StringLiteralsInInterpolation: + EnforcedStyle: double_quotes + +Style/RescueStandardError: + EnforcedStyle: implicit + +Style/SymbolArray: + MinSize: 1 + +Style/DocumentationMethod: + Enabled: true + RequireForNonPublicMethods: true + +YARD/MismatchName: + EnforcedStylePrototypeName: before diff --git a/.ruby-version b/.ruby-version index 010d183..7921bd0 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.3.7 \ No newline at end of file +3.4.8 diff --git a/CHANGELOG.md b/CHANGELOG.md index 40dc6e1..2c54044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,83 @@ +4.6-r | 2025-11-28 +--- +Changes +* Upgrade ruby to 3.3.x by @renatolond in https://github.com/renatolond/pronto-ruby/pull/70 +* Upgrade ruby to 3.4.7 by @renatolond in https://github.com/renatolond/pronto-ruby/pull/71 + +4.5-r | 2025-11-28 +--- +Changes +* Bump rubocop-rails from 2.32.0 to 2.33.0 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/57 +* Bump rubocop-rails from 2.33.0 to 2.33.3 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/58 +* Bump the rubocop-dependencies group with 2 updates by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/59 +* Bump rubocop-performance from 1.25.0 to 1.26.0 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/60 +* Bump rubocop-rails from 2.33.3 to 2.33.4 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/61 +* Bump rubocop-performance from 1.26.0 to 1.26.1 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/62 +* Bump rspec from 3.13.1 to 3.13.2 by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/63 +* Bump webmock from 3.25.1 to 3.26.0 by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/64 +* Bump webmock from 3.26.0 to 3.26.1 by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/65 +* Bump the rubocop-dependencies group with 2 updates by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/66 +* Bump rubocop-rails from 2.33.4 to 2.34.0 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/67 +* Bump rubocop-rails from 2.34.0 to 2.34.1 in the rubocop-dependencies group by @dependabot[bot] in https://github.com/renatolond/pronto-ruby/pull/68 + +4.4-r | 2025-06-30 +--- +Changes +* Bump rubocop-rspec from 3.5.0 to 3.6.0 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/49 +* Bump the pronto-dependencies group across 1 directory with 2 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/51 +* Bump rubocop-rails from 2.31.0 to 2.32.0 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/52 +* Bump rspec from 3.13.0 to 3.13.1 by @dependabot in https://github.com/renatolond/pronto-ruby/pull/53 +* Bump rubocop-minitest from 0.38.0 to 0.38.1 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/54 +* Bump rubocop-thread_safety from 0.7.2 to 0.7.3 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/55 +* Bump rubocop-yard from 0.10.0 to 1.0.0 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/56 + +4.3-r | 2025-04-01 +--- +Changes +* Bump rubocop-rails from 2.28.0 to 2.29.0 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/33 +* Bump pronto-stylelint from 0.10.3 to 0.11.0 in the pronto-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/34 +* Bump the rubocop-dependencies group with 2 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/35 +* Update checkout version in workflow by @renatolond in https://github.com/renatolond/pronto-ruby/pull/36 +* Bump rubocop-rails from 2.29.0 to 2.29.1 in the rubocop-dependencies group by @dependabot in https://github.com/renatolond/pronto-ruby/pull/37 +* Bump webmock from 3.24.0 to 3.25.0 by @dependabot in https://github.com/renatolond/pronto-ruby/pull/38 +* Bump the rubocop-dependencies group with 5 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/39 +* Bump the rubocop-dependencies group across 1 directory with 6 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/45 +* Bump webmock from 3.25.0 to 3.25.1 by @dependabot in https://github.com/renatolond/pronto-ruby/pull/44 +* Bump the rubocop-dependencies group with 7 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/46 +* Bump ruby to 3.2.8 by @renatolond in https://github.com/renatolond/pronto-ruby/pull/48 + +4.2-r | 2025-01-13 +--- +Changes: +* Bump the pronto-dependencies group with 4 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/30 +* Bump the rubocop-dependencies group across 1 directory with 5 updates by @dependabot in https://github.com/renatolond/pronto-ruby/pull/29 +* Add rubocop-capybara gem by @renatolond in https://github.com/renatolond/pronto-ruby/pull/31 +* Bump ruby to 3.2.6 by @renatolond in https://github.com/renatolond/pronto-ruby/pull/32 + +4.1-r | 2024-11-13 +--- +Changes: +* Bump the rubocop-dependencies group with 2 updates by @dependabot in #16 +* Bump rspec from 3.11.0 to 3.13.0 by @dependabot in #13 +* Bump webmock from 3.23.1 to 3.24.0 by @dependabot in #18 +* Bump the rubocop-dependencies group across 1 directory with 4 updates by @dependabot in #23 + +4.0-r | 2024-09-18 +--- +**BREAKING CHANGES:** + + * Unlike the original action, this fork is focused on Ruby-only. This means any node-related runners are removed. + + * Pronto is upgraded, the following runners are not yet compatible and therefore removed: + - pronto-bundler_audit + - pronto-yamllint + +Changes: + * Upgrades ruby to 3.2.2 + * Upgrades Bundler to 2.4.3 + * Bump rubocop to 1.66.1 + * Upgrades all runners and dependencies + 4.0 | 2022-03-17 --- diff --git a/Dockerfile b/Dockerfile index b914405..de06768 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,47 @@ -FROM ruby:3.3 +ARG RUBY_VERSION=3.4 +FROM ruby:${RUBY_VERSION} -LABEL maintainer="QAWAII " -LABEL org.opencontainers.image.source https://github.com/apptweak/pronto-ruby - -ARG BUNDLER_VERSION="2.6.3" +ARG BUNDLER_VERSION="2.6.7" ARG NODE_VERSION=14 +ARG BUILD_DATE= +ARG CVS_REF= + +LABEL maintainer="DevEx Team " +LABEL org.opencontainers.image.source https://github.com/apptweak/pronto-ruby +LABEL org.opencontainers.image.title="AppTweak Pronto Ruby Runner" +LABEL org.opencontainers.image.description="GitHub Action for running Pronto code review automation for Ruby projects" +LABEL org.opencontainers.image.source="https://github.com/apptweak/pronto-ruby" +LABEL org.opencontainers.image.url="https://github.com/apptweak/pronto-ruby" +LABEL org.opencontainers.image.vendor="AppTweak" +LABEL org.opencontainers.image.version=${CVS_REF} +LABEL org.opencontainers.image.created=${BUILD_DATE} RUN apt-get update && \ - apt-get install -y --no-install-recommends \ + apt-get install --no-install-recommends -y \ build-essential \ - cmake \ curl \ + cmake \ git \ pkg-config \ openssl \ + libssl-dev \ + libzstd-dev \ + libz-dev \ && rm -rf /var/lib/apt/lists/* +# Make sure to use bash with pipefail in case something +# fails while being piped to another command in the docker-build +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + RUN gem install bundler --version "${BUNDLER_VERSION}" WORKDIR /runner -COPY Gemfile* ./ +COPY Gemfile* .bundle ./ -RUN bundle --retry 4 +RUN bundle install --retry 4 -ENV BUNDLE_GEMFILE /runner/Gemfile +ENV BUNDLE_GEMFILE=/runner/Gemfile COPY . ./ diff --git a/Gemfile b/Gemfile index e75b604..1699066 100644 --- a/Gemfile +++ b/Gemfile @@ -1,41 +1,41 @@ # frozen_string_literal: true -# -*- mode: ruby -*- -# Run: bundle install +source "https://rubygems.org" -source 'https://rubygems.org' - -gem 'pronto' -# Source repo has been archived: https://github.com/prontolabs/pronto-brakeman -gem 'pronto-brakeman', github: "storypark/pronto-brakeman", require: false -gem 'pronto-bundler_audit', require: false -gem 'pronto-eslint_npm', require: false -gem 'pronto-rails_best_practices', require: false -gem 'pronto-rails_schema', require: false -gem 'pronto-rubocop', require: false +gem "pronto" +gem "pronto-brakeman", require: false +gem "pronto-rubocop", require: false +# gem 'pronto-bundler_audit', require: false # Temporarily disabled, incompatible with current pronto +gem "pronto-eslint_npm", require: false +gem "pronto-rails_best_practices", require: false +gem "pronto-rails_schema", require: false # gem 'pronto-poper', require: false -gem 'pronto-erb_lint', require: false -gem 'pronto-fasterer', require: false -gem 'pronto-flay', require: false -gem 'pronto-reek', require: false -gem 'pronto-scss', require: false -gem 'pronto-stylelint', require: false -gem 'pronto-yamllint', require: false +# gem 'pronto-yamllint', require: false # Temporarily disabled, seems to throw an error +gem "pronto-erb_lint", require: false +gem "pronto-fasterer", require: false +gem "pronto-flay", require: false +gem "pronto-reek", require: false +gem "pronto-scss", require: false +gem "pronto-stylelint", require: false + +gem "rubocop-capybara", require: false +gem "rubocop-factory_bot", require: false +gem "rubocop-i18n", require: false +gem "rubocop-minitest", require: false +gem "rubocop-performance", require: false +gem "rubocop-rails", require: false +gem "rubocop-rake", require: false +gem "rubocop-rspec", require: false +gem "rubocop-sequel", require: false +gem "rubocop-thread_safety", require: false +gem "rubocop-yard", require: false -gem 'rubocop-i18n', require: false -gem 'rubocop-minitest', require: false -gem 'rubocop-performance', require: false -gem 'rubocop-rails', require: false -gem 'rubocop-rake', require: false -gem 'rubocop-rspec', require: false -gem 'rubocop-sequel', require: false -gem 'rubocop-thread_safety', require: false -gem 'rubocop-yard', require: false +gem "rugged", "<= 1.9.0" # Rugged v1.7.1 introduces an issue with pronto, see https://github.com/prontolabs/pronto/issues/447 for updates group :test do - gem 'climate_control' - gem 'debug' - gem 'rb-readline' - gem 'rspec' - gem 'webmock' + gem "climate_control" + gem "pry" + gem "rb-readline" + gem "rspec" + gem "webmock" end diff --git a/Gemfile.lock b/Gemfile.lock index 93d89b2..1b3a9cd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,91 +1,77 @@ -GIT - remote: https://github.com/storypark/pronto-brakeman.git - revision: dff26bfe31930f987a5ee72e99d18a6cdc91d40c - specs: - pronto-brakeman (0.11.2.pre.1) - brakeman (>= 3.2.0) - pronto (~> 0.11.0) - GEM remote: https://rubygems.org/ specs: - actionview (7.2.2) - activesupport (= 7.2.2) + actionview (8.1.2) + activesupport (= 8.1.2) builder (~> 3.1) erubi (~> 1.11) rails-dom-testing (~> 2.2) rails-html-sanitizer (~> 1.6) - activesupport (7.2.2) + activesupport (8.1.2) base64 - benchmark (>= 0.3) bigdecimal concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + json logger (>= 1.4.2) minitest (>= 5.1) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) - ast (2.4.2) - base64 (0.2.0) - benchmark (0.4.0) - better_html (2.1.1) - actionview (>= 6.0) - activesupport (>= 6.0) + uri (>= 0.13.1) + addressable (2.8.8) + public_suffix (>= 2.0.2, < 8.0) + ast (2.4.3) + base64 (0.3.0) + better_html (2.2.0) + actionview (>= 7.0) + activesupport (>= 7.0) ast (~> 2.0) erubi (~> 1.4) parser (>= 2.4) smart_properties - bigdecimal (3.1.9) - brakeman (7.0.0) + bigdecimal (4.0.1) + brakeman (8.0.1) racc builder (3.3.0) - bundler-audit (0.9.2) - bundler (>= 1.2.0, < 3) - thor (~> 1.0) climate_control (1.2.0) code_analyzer (0.5.5) sexp_processor - concurrent-ruby (1.3.5) - connection_pool (2.5.0) - crack (1.0.0) + coderay (1.1.3) + concurrent-ruby (1.3.6) + connection_pool (3.0.2) + crack (1.0.1) bigdecimal rexml crass (1.0.6) - csv (3.3.2) - date (3.4.1) - debug (1.10.0) - irb (~> 1.10) - reline (>= 0.3.8) - diff-lcs (1.5.1) - drb (2.2.1) + csv (3.3.5) + diff-lcs (1.6.2) + drb (2.2.3) dry-configurable (1.3.0) dry-core (~> 1.1) zeitwerk (~> 2.6) - dry-core (1.1.0) + dry-core (1.2.0) concurrent-ruby (~> 1.0) logger zeitwerk (~> 2.6) - dry-inflector (1.2.0) + dry-inflector (1.3.1) dry-initializer (3.2.0) dry-logic (1.6.0) bigdecimal concurrent-ruby (~> 1.0) dry-core (~> 1.1) zeitwerk (~> 2.6) - dry-schema (1.13.4) + dry-schema (1.15.0) concurrent-ruby (~> 1.0) dry-configurable (~> 1.0, >= 1.0.1) - dry-core (~> 1.0, < 2) - dry-initializer (~> 3.0) - dry-logic (>= 1.4, < 2) - dry-types (>= 1.7, < 2) + dry-core (~> 1.1) + dry-initializer (~> 3.2) + dry-logic (~> 1.6) + dry-types (~> 1.8) zeitwerk (~> 2.6) - dry-types (1.8.2) - bigdecimal (~> 3.0) + dry-types (1.9.0) + bigdecimal (>= 3.0) concurrent-ruby (~> 1.0) dry-core (~> 1.0) dry-inflector (~> 1.0) @@ -100,73 +86,71 @@ GEM smart_properties erubi (1.13.1) erubis (2.7.0) - faraday (2.12.2) + faraday (2.14.0) faraday-net_http (>= 2.0, < 3.5) json logger - faraday-net_http (3.4.0) - net-http (>= 0.5.0) + faraday-net_http (3.4.2) + net-http (~> 0.5) fasterer (0.11.0) ruby_parser (>= 3.19.1) - ffi (1.17.1) - flay (2.13.3) + ffi (1.17.3) + flay (2.14.2) erubi (~> 1.10) - path_expander (~> 1.0) - ruby_parser (~> 3.0) + path_expander (~> 2.0) + prism (~> 1.7) sexp_processor (~> 4.0) gitlab (4.20.1) httparty (~> 0.20) terminal-table (>= 1.5.1) - hashdiff (1.1.2) - httparty (0.22.0) + hashdiff (1.2.1) + httparty (0.24.2) csv mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) - i18n (1.14.7) + i18n (1.14.8) concurrent-ruby (~> 1.0) - io-console (0.8.0) - irb (1.15.1) - pp (>= 0.6.0) - rdoc (>= 4.0.0) - reline (>= 0.4.2) - json (2.9.1) - language_server-protocol (3.17.0.4) - logger (1.6.5) - loofah (2.24.0) + io-console (0.8.2) + json (2.18.0) + language_server-protocol (3.17.0.5) + lint_roller (1.1.0) + logger (1.7.0) + loofah (2.25.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) + method_source (1.1.0) mini_mime (1.1.5) - mini_portile2 (2.8.8) - minitest (5.25.4) - multi_xml (0.7.1) - bigdecimal (~> 3.1) - net-http (0.6.0) - uri - nokogiri (1.18.2) + mini_portile2 (2.8.9) + minitest (5.26.2) + multi_xml (0.8.1) + bigdecimal (>= 3.1, < 5) + net-http (0.9.1) + uri (>= 0.11.1) + nokogiri (1.19.0) mini_portile2 (~> 2.8.2) racc (~> 1.4) - octokit (9.2.0) + octokit (10.0.0) faraday (>= 1, < 3) sawyer (~> 0.9) - parallel (1.26.3) - parser (3.3.7.1) + ostruct (0.6.3) + parallel (1.27.0) + parser (3.3.10.1) ast (~> 2.4.1) racc - path_expander (1.1.3) - pp (0.6.2) - prettyprint - prettyprint (0.2.0) - pronto (0.11.3) + path_expander (2.0.1) + prism (1.9.0) + pronto (0.11.5) gitlab (>= 4.4.0, < 5.0) httparty (>= 0.13.7, < 1.0) - octokit (>= 4.7.0, < 10.0) + octokit (>= 4.7.0, < 11.0) + ostruct rainbow (>= 2.2, < 4.0) rexml (>= 3.2.5, < 4.0) rugged (>= 0.23.0, < 2.0) thor (>= 0.20.3, < 2.0) - pronto-bundler_audit (0.7.0) - bundler-audit (~> 0.8) - pronto (~> 0.11) + pronto-brakeman (0.11.2) + brakeman (>= 3.2.0) + pronto (~> 0.11.0) pronto-erb_lint (0.1.6) erb_lint (~> 0.1, >= 0.1.1) pronto (~> 0.9, > 0.9.0) @@ -192,25 +176,24 @@ GEM pronto-scss (0.11.0) pronto (~> 0.11.0) scss_lint (~> 0.43, >= 0.43.0) - pronto-stylelint (0.11.0) + pronto-stylelint (0.11.1) pronto (>= 0.10, < 0.12) rugged (>= 0.24, < 2.0) - pronto-yamllint (0.2.0) - pronto (~> 0.11.0) - psych (5.2.3) - date - stringio - public_suffix (6.0.1) + pry (0.16.0) + coderay (~> 1.1) + method_source (~> 1.0) + reline (>= 0.6.0) + public_suffix (7.0.2) racc (1.8.1) - rack (3.1.9) - rails-dom-testing (2.2.0) + rack (3.2.4) + rails-dom-testing (2.3.0) activesupport (>= 5.0.0) minitest nokogiri (>= 1.6) rails-html-sanitizer (1.6.2) loofah (~> 2.21) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) - rails_best_practices (1.23.2) + rails_best_practices (1.23.3) activesupport code_analyzer (~> 0.5.5) erubis @@ -223,70 +206,86 @@ GEM rb-inotify (0.11.1) ffi (~> 1.0) rb-readline (0.5.5) - rdoc (6.12.0) - psych (>= 4.0.0) - reek (6.4.0) - dry-schema (~> 1.13.0) + reek (6.5.0) + dry-schema (~> 1.13) logger (~> 1.6) parser (~> 3.3.0) rainbow (>= 2.0, < 4.0) rexml (~> 3.1) - regexp_parser (2.10.0) - reline (0.6.0) + regexp_parser (2.11.3) + reline (0.6.3) io-console (~> 0.5) require_all (3.0.0) - rexml (3.4.0) - rspec (3.13.0) + rexml (3.4.4) + rspec (3.13.2) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.3) + rspec-core (3.13.6) rspec-support (~> 3.13.0) - rspec-expectations (3.13.3) + rspec-expectations (3.13.5) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-mocks (3.13.2) + rspec-mocks (3.13.7) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) - rspec-support (3.13.2) - rubocop (1.71.2) + rspec-support (3.13.7) + rubocop (1.84.0) json (~> 2.3) - language_server-protocol (>= 3.17.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.38.0, < 2.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.38.0) - parser (>= 3.3.1.0) - rubocop-i18n (3.1.0) - rubocop (~> 1.0) - rubocop-minitest (0.36.0) - rubocop (>= 1.61, < 2.0) - rubocop-ast (>= 1.31.1, < 2.0) - rubocop-performance (1.23.1) - rubocop (>= 1.48.1, < 2.0) - rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rails (2.29.1) + rubocop-ast (1.49.0) + parser (>= 3.3.7.2) + prism (~> 1.7) + rubocop-capybara (2.22.1) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-factory_bot (2.28.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-i18n (3.2.3) + lint_roller (~> 1.1) + rubocop (>= 1.72.1) + rubocop-minitest (0.38.2) + lint_roller (~> 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) + rubocop-performance (1.26.1) + lint_roller (~> 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.47.1, < 2.0) + rubocop-rails (2.34.3) activesupport (>= 4.2.0) + lint_roller (~> 1.1) rack (>= 1.1) - rubocop (>= 1.52.0, < 2.0) - rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rake (0.6.0) - rubocop (~> 1.0) - rubocop-rspec (3.4.0) - rubocop (~> 1.61) - rubocop-sequel (0.3.8) - rubocop (~> 1.0) - rubocop-thread_safety (0.6.0) - rubocop (>= 1.48.1) - rubocop-yard (0.10.0) - rubocop (~> 1.21) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.44.0, < 2.0) + rubocop-rake (0.7.1) + lint_roller (~> 1.1) + rubocop (>= 1.72.1) + rubocop-rspec (3.9.0) + lint_roller (~> 1.1) + rubocop (~> 1.81) + rubocop-sequel (0.4.1) + lint_roller (~> 1.1) + rubocop (>= 1.72.1, < 2) + rubocop-thread_safety (0.7.3) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-ast (>= 1.44.0, < 2.0) + rubocop-yard (1.1.0) + lint_roller + rubocop (~> 1.72) yard ruby-progressbar (1.13.0) - ruby_parser (3.21.1) + ruby_parser (3.22.0) racc (~> 1.5) sexp_processor (~> 4.16) rugged (1.9.0) @@ -295,40 +294,37 @@ GEM sass-listen (4.0.0) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.9.2) + sawyer (0.9.3) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) scss_lint (0.60.0) sass (~> 3.5, >= 3.5.5) securerandom (0.4.1) - sexp_processor (4.17.3) + sexp_processor (4.17.5) smart_properties (1.17.0) - stringio (3.1.2) terminal-table (4.0.0) unicode-display_width (>= 1.1.1, < 4) - thor (1.3.2) + thor (1.5.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - unicode-display_width (3.1.4) - unicode-emoji (~> 4.0, >= 4.0.4) - unicode-emoji (4.0.4) - uri (1.0.2) - webmock (3.25.0) + unicode-display_width (3.2.0) + unicode-emoji (~> 4.1) + unicode-emoji (4.2.0) + uri (1.1.1) + webmock (3.26.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) - yard (0.9.37) - zeitwerk (2.7.1) + yard (0.9.38) + zeitwerk (2.7.4) PLATFORMS ruby DEPENDENCIES climate_control - debug pronto - pronto-brakeman! - pronto-bundler_audit + pronto-brakeman pronto-erb_lint pronto-eslint_npm pronto-fasterer @@ -339,9 +335,11 @@ DEPENDENCIES pronto-rubocop pronto-scss pronto-stylelint - pronto-yamllint + pry rb-readline rspec + rubocop-capybara + rubocop-factory_bot rubocop-i18n rubocop-minitest rubocop-performance @@ -351,7 +349,132 @@ DEPENDENCIES rubocop-sequel rubocop-thread_safety rubocop-yard + rugged (<= 1.9.0) webmock +CHECKSUMS + actionview (8.1.2) sha256=80455b2588911c9b72cec22d240edacb7c150e800ef2234821269b2b2c3e2e5b + activesupport (8.1.2) sha256=88842578ccd0d40f658289b0e8c842acfe9af751afee2e0744a7873f50b6fdae + addressable (2.8.8) sha256=7c13b8f9536cf6364c03b9d417c19986019e28f7c00ac8132da4eb0fe393b057 + ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383 + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + better_html (2.2.0) sha256=e68ab66ab09696b708333bbf35e8aa3c107500ba7892f528e2111624bdd8cf76 + bigdecimal (4.0.1) sha256=8b07d3d065a9f921c80ceaea7c9d4ae596697295b584c296fe599dd0ad01c4a7 + brakeman (8.0.1) sha256=c68ce0ac35a6295027c4eab8b4ac597d2a0bfc82f0d62dcd334bbf944d352f70 + builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f + climate_control (1.2.0) sha256=36b21896193fa8c8536fa1cd843a07cf8ddbd03aaba43665e26c53ec1bd70aa5 + code_analyzer (0.5.5) sha256=c81533e9986259657acb9b3321d831efb1720ef59eed37e7e5dec56ac368e03e + coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b + concurrent-ruby (1.3.6) sha256=6b56837e1e7e5292f9864f34b69c5a2cbc75c0cf5338f1ce9903d10fa762d5ab + connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a + crack (1.0.1) sha256=ff4a10390cd31d66440b7524eb1841874db86201d5b70032028553130b6d4c7e + crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d + csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f + diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962 + drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373 + dry-configurable (1.3.0) sha256=882d862858567fc1210d2549d4c090f34370fc1bb7c5c1933de3fe792e18afa8 + dry-core (1.2.0) sha256=0cc5a7da88df397f153947eeeae42e876e999c1e30900f3c536fb173854e96a1 + dry-inflector (1.3.1) sha256=7fb0c2bb04f67638f25c52e7ba39ab435d922a3a5c3cd196120f63accb682dcc + dry-initializer (3.2.0) sha256=37d59798f912dc0a1efe14a4db4a9306989007b302dcd5f25d0a2a20c166c4e3 + dry-logic (1.6.0) sha256=da6fedbc0f90fc41f9b0cc7e6f05f5d529d1efaef6c8dcc8e0733f685745cea2 + dry-schema (1.15.0) sha256=0f2a34adba4206bd6d46ec1b6b7691b402e198eecaff1d8349a7d48a77d82cd2 + dry-types (1.9.0) sha256=7b656fe0a78d2432500ae1f29fefd6762f5a032ca7000e4f36bc111453d45d4d + erb_lint (0.9.0) sha256=dfb5e40ad839e8d1f0d56ca85ec9a7ac4c9cd966ec281138282f35b323ca7c31 + erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9 + erubis (2.7.0) sha256=63653f5174a7997f6f1d6f465fbe1494dcc4bdab1fb8e635f6216989fb1148ba + faraday (2.14.0) sha256=8699cfe5d97e55268f2596f9a9d5a43736808a943714e3d9a53e6110593941cd + faraday-net_http (3.4.2) sha256=f147758260d3526939bf57ecf911682f94926a3666502e24c69992765875906c + fasterer (0.11.0) sha256=9c38b77583584f3339a729eb077fd8f2856a317abe747528f6563d7c23e9dda8 + ffi (1.17.3) sha256=0e9f39f7bb3934f77ad6feab49662be77e87eedcdeb2a3f5c0234c2938563d4c + flay (2.14.2) sha256=d153a8928a0b6f74d4aab7a97577b12440d02df928ffbafb6ebe4bb6730a53f8 + gitlab (4.20.1) sha256=08bb40fcbcb54817bb1a5067308afe2445a4919c86212fc072d24d1e4784145c + hashdiff (1.2.1) sha256=9c079dbc513dfc8833ab59c0c2d8f230fa28499cc5efb4b8dd276cf931457cd1 + httparty (0.24.2) sha256=8fca6a54aa0c4aa4303a0fd33e5e2156175d6a5334f714263b458abd7fda9c38 + i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 + io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc + json (2.18.0) sha256=b10506aee4183f5cf49e0efc48073d7b75843ce3782c68dbeb763351c08fd505 + language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc + lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6 + method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 + mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef + mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289 + minitest (5.26.2) sha256=f021118a6185b9ba9f5af71f2ba103ad770c75afde9f2ab8da512677c550cde3 + multi_xml (0.8.1) sha256=addba0290bac34e9088bfe73dc4878530297a82a7bbd66cb44dcd0a4b86edf5a + net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996 + nokogiri (1.19.0) sha256=e304d21865f62518e04f2bf59f93bd3a97ca7b07e7f03952946d8e1c05f45695 + octokit (10.0.0) sha256=82e99a539b7637b7e905e6d277bb0c1a4bed56735935cc33db6da7eae49a24e8 + ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 + parallel (1.27.0) sha256=4ac151e1806b755fb4e2dc2332cbf0e54f2e24ba821ff2d3dcf86bf6dc4ae130 + parser (3.3.10.1) sha256=06f6a725d2cd91e5e7f2b7c32ba143631e1f7c8ae2fb918fc4cebec187e6a688 + path_expander (2.0.1) sha256=2de201164bff4719cc4d0b3767286e9977cc832a59c4d70abab571ec86cb41e4 + prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 + pronto (0.11.5) sha256=3b3f6dcb05a9c923460a2c1f86dc233d0747b37df50b6897164970f76c847f66 + pronto-brakeman (0.11.2) sha256=92133440a5484b3d0c27c2a325ffb703d66c17d1489ce66ea4a9e54c89d62a30 + pronto-erb_lint (0.1.6) sha256=4d95d71551c7ac49ae001c5265d456e8ae0dd0288a688350addc5fde3856ecff + pronto-eslint_npm (0.11.0) sha256=f397ad909a0da93e8b649bcd32e5002d1b3424a042c44ef1e2a3572acee59909 + pronto-fasterer (0.11.3) sha256=7c0feab7e129bb4bb2b294a1ad0a52cb9d287dfdea69653f0909d1a71d689b5c + pronto-flay (0.11.2) sha256=c75a1217104697aff55fcc19c5de5010e2d9c2a74e70f6c7d5f4194aae54a92a + pronto-rails_best_practices (0.11.0) sha256=2974d040b1e7862ddfa14aedd08821b76b306bf64e14fe1e6314d8981dab6e38 + pronto-rails_schema (0.11.0) sha256=f3b45d9e52581f379ad39a22d5408cf3019fe0486c891243dcfe83789a5a4bee + pronto-reek (0.11.1) sha256=9b37882e9a429b6774365b6b38d27d6b5de96990b25e6261efd7d93262959170 + pronto-rubocop (0.11.6) sha256=291ce2038525a6938816d9d82c55090d15c3ec369c1866f795cf02beb9d77b8d + pronto-scss (0.11.0) sha256=ff1fc527b8aba9d73947bb46683cd975de216f223e502943c677a22c62766226 + pronto-stylelint (0.11.1) sha256=8df2e5b9ac94e6d208234ce11d9af9961459e613337c3587c76a630f6565e192 + pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e + public_suffix (7.0.2) sha256=9114090c8e4e7135c1fd0e7acfea33afaab38101884320c65aaa0ffb8e26a857 + racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f + rack (3.2.4) sha256=5d74b6f75082a643f43c1e76b419c40f0e5527fcfee1e669ac1e6b73c0ccb6f6 + rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d + rails-html-sanitizer (1.6.2) sha256=35fce2ca8242da8775c83b6ba9c1bcaad6751d9eb73c1abaa8403475ab89a560 + rails_best_practices (1.23.3) sha256=543ea7d7a26fdb91fb0c54496defaf1b266e3e89ac9e05a879fcd8c4f8b03b0c + rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a + rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe + rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e + rb-readline (0.5.5) sha256=9e9bd7e198bdef0822c46902f6c592b882c1f9777894a4c3dcf5b320824a8793 + reek (6.5.0) sha256=d26d3a492773b2bbc228888067a21afe33ac07954a17dbd64cdeae42c4c69be1 + regexp_parser (2.11.3) sha256=ca13f381a173b7a93450e53459075c9b76a10433caadcb2f1180f2c741fc55a4 + reline (0.6.3) sha256=1198b04973565b36ec0f11542ab3f5cfeeec34823f4e54cebde90968092b1835 + require_all (3.0.0) sha256=937853faa2833388eab551107bf7bf87c6bba6b4800bac5ce469eda7b6a9fed0 + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rspec (3.13.2) sha256=206284a08ad798e61f86d7ca3e376718d52c0bc944626b2349266f239f820587 + rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d + rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 + rspec-mocks (3.13.7) sha256=0979034e64b1d7a838aaaddf12bf065ea4dc40ef3d4c39f01f93ae2c66c62b1c + rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c + rubocop (1.84.0) sha256=88dec310153bb685a879f5a7cdb601f6287b8f0ee675d9dc63a17c7204c4190a + rubocop-ast (1.49.0) sha256=49c3676d3123a0923d333e20c6c2dbaaae2d2287b475273fddee0c61da9f71fd + rubocop-capybara (2.22.1) sha256=ced88caef23efea53f46e098ff352f8fc1068c649606ca75cb74650970f51c0c + rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb + rubocop-i18n (3.2.3) sha256=9620228f372892c0e6c0a3a73d7caed964a932404bee567e5ff4b8292e2a2bda + rubocop-minitest (0.38.2) sha256=5a9dfb5a538973d0601aa51e59637d3998bb8df81233edf1ff421504c6280068 + rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834 + rubocop-rails (2.34.3) sha256=10d37989024865ecda8199f311f3faca990143fbac967de943f88aca11eb9ad2 + rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d + rubocop-rspec (3.9.0) sha256=8fa70a3619408237d789aeecfb9beef40576acc855173e60939d63332fdb55e2 + rubocop-sequel (0.4.1) sha256=f325dc470c1e3191a616b41a4bf8cfbb2c3c2f4fbc2eee6286de019ca1f7c113 + rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431 + rubocop-yard (1.1.0) sha256=a9a4051c852e58a1b967e41abb85c94698f482782e6261f747a9acae79fe6f73 + ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 + ruby_parser (3.22.0) sha256=1eb4937cd9eb220aa2d194e352a24dba90aef00751e24c8dfffdb14000f15d23 + rugged (1.9.0) sha256=7faaa912c5888d6e348d20fa31209b6409f1574346b1b80e309dbc7e8d63efac + sass (3.7.4) sha256=808b0d39053aa69068df939e24671fe84fd5a9d3314486e1a1457d0934a4255d + sass-listen (4.0.0) sha256=ae9dcb76dd3e234329e5ba6e213f48e532c5a3e7b0b4d8a87f13aaca0cc18377 + sawyer (0.9.3) sha256=0d0f19298408047037638639fe62f4794483fb04320269169bd41af2bdcf5e41 + scss_lint (0.60.0) sha256=aad2d0e1cdddcd81b81583b5c90a0ae562071b6913a0c200a7bffb7a377f375b + securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 + sexp_processor (4.17.5) sha256=ae2b48ba98353d5d465ce8759836b7a05f2e12c5879fcd14d7815b026de32f0e + smart_properties (1.17.0) sha256=f9323f8122e932341756ddec8e0ac9ec6e238408a7661508be99439ca6d6384b + terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2 + thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 + tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b + unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42 + unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f + uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6 + webmock (3.26.1) sha256=4f696fb57c90a827c20aadb2d4f9058bbff10f7f043bd0d4c3f58791143b1cd7 + yard (0.9.38) sha256=721fb82afb10532aa49860655f6cc2eaa7130889df291b052e1e6b268283010f + zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b + BUNDLED WITH - 2.6.3 + 2.7.2 diff --git a/README.md b/README.md index 632c9de..ac90814 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ Your all-in-one ruby Pronto runner. +This is a reduced-scope fork of (AdWerx/pronto-ruby)[https://github.com/AdWerx/pronto-ruby], it only focus on Ruby, removing all of npm-related lints. + This [GitHub Action](https://github.com/features/actions) runs [Pronto](https://github.com/prontolabs/pronto) [runners](https://github.com/prontolabs/pronto#runners) on your Ruby project diffs and reports back with a [GitHub Check Run](https://developer.github.com/apps/quickstart-guides/creating-ci-tests-with-the-checks-api/). ![check runs](static/checkrun.png) @@ -18,8 +20,6 @@ The docker image of this Action includes the following [Pronto Runners](https:// - rails_schema - reek - rubocop -- scss -- yamllint - stylelint # Inputs @@ -60,13 +60,21 @@ on: jobs: run: + permissions: + checks: write + contents: read runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - run: git fetch origin main --depth=1 + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} # checkout HEAD commit instead of merge commit + fetch-depth: 50 # If your repository has long-living PRs, this might need to be higher + - run: git fetch origin main - uses: apptweak/pronto-ruby@use_head_commit env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + target: origin/main ``` With specific runners: @@ -79,25 +87,6 @@ name: Pronto rubocop rails_schema yamllint ``` -With `eslint_npm` runner using locally installed eslint: - -```yaml -name: Pronto -# ... - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - run: git fetch origin master --depth=1 - - uses: actions/setup-node@v1 - - run: yarn install --ignore-optional --ignore-scripts --frozen-lockfile --non-interactive - - uses: apptweak/pronto-ruby@use_head_commit - with: - runners: eslint_npm # ... - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -``` - ### Development / Contributions See [CONTRIBUTING.md](./CONTRIBUTING.md) diff --git a/pronto b/pronto index 8151076..cd9bb2b 100755 --- a/pronto +++ b/pronto @@ -1,12 +1,13 @@ #!/usr/bin/env ruby +# frozen_string_literal: true -system("git config --global --add safe.directory #{ENV["GITHUB_WORKSPACE"]}") +system("git config --global --add safe.directory #{ENV.fetch("GITHUB_WORKSPACE", nil)}") -require 'rubygems' -require 'bundler/setup' +require "rubygems" +require "bundler/setup" Bundler.require(:default) -require_relative './src/github_action_check_run_formatter' -require 'pronto/cli' +require_relative "src/github_action_check_run_formatter" +require "pronto/cli" # github action inputs can only be strings, so when we passes the runners # list to this container, github passes container command args quoted like this: @@ -30,16 +31,16 @@ require 'pronto/cli' # ``` # # which works correctly -if ARGV.include?('-r') - runners_index = ARGV.index('-r') + 1 +if ARGV.include?("-r") + runners_index = ARGV.index("-r") + 1 runners = ARGV.at(runners_index) - if runners.include?(' ') + if runners.include?(" ") ARGV.delete_at(runners_index) - ARGV.insert(runners_index, runners.split(' ')) + ARGV.insert(runners_index, runners.split) end end -pronto_target_path = ENV.fetch('PRONTO_TARGET_PATH', nil) -pronto_target_path = ENV.fetch('GITHUB_WORKSPACE', '/data') if pronto_target_path.nil? +pronto_target_path = ENV.fetch("PRONTO_TARGET_PATH", nil) +pronto_target_path = ENV.fetch("GITHUB_WORKSPACE", "/data") if pronto_target_path.nil? Dir.chdir(pronto_target_path) do Pronto::CLI.start diff --git a/spec/all_spec.rb b/spec/all_spec.rb index 386026d..507d0ef 100644 --- a/spec/all_spec.rb +++ b/spec/all_spec.rb @@ -1,7 +1,9 @@ +# frozen_string_literal: true + RSpec.describe 'all pronto runners' do it 'run without error' do Dir.chdir('spec/fixtures/test.git') do - Pronto::CLI.start(%w(run)) + Pronto::CLI.start(%w[run]) end end end diff --git a/spec/github_action_check_run_formatter_spec.rb b/spec/github_action_check_run_formatter_spec.rb index 0439814..ad3c308 100644 --- a/spec/github_action_check_run_formatter_spec.rb +++ b/spec/github_action_check_run_formatter_spec.rb @@ -1,8 +1,9 @@ -RSpec.describe Pronto::Formatter::GithubActionCheckRunFormatter do +# frozen_string_literal: true +RSpec.describe Pronto::Formatter::GithubActionCheckRunFormatter do STUBBED_ENV = { - GITHUB_SHA: 'abcd12', - GITHUB_EVENT_PATH: File.expand_path('fixtures/event.json', __dir__), + GITHUB_SHA: "abcd12", + GITHUB_EVENT_PATH: File.expand_path("fixtures/event.json", __dir__) }.freeze around do |example| @@ -11,179 +12,201 @@ end end - context 'when the runner is rubocop' do - it 'posts a check run with annotations' do + context "when the runner is rubocop" do + it "posts a check run with annotations" do check_runs_url = "https://api.github.com/repos/Codertocat/Hello-World/check-runs" - post_stub = stub_request(:post, check_runs_url).to_return( - {status: 201, body: '{"id": 1}'}, - {status: 201, body: '{"id": 2}'}, + stub_request(:post, check_runs_url).to_return( + { status: 201, body: '{"id": 1}' }, + { status: 201, body: '{"id": 2}' } ) allow(Pronto::Runner).to receive(:repository).and_return([Pronto::Rubocop]) - Dir.chdir('spec/fixtures/test.git') do - Pronto::CLI.start(%w(run -f github_action_check_run)) + Dir.chdir("spec/fixtures/test.git") do + Pronto::CLI.start(%w[run -f github_action_check_run]) end expect( a_request(:post, "https://api.github.com/repos/Codertocat/Hello-World/check-runs").with do |request| data = JSON.parse(request.body) - expect(data.dig('name')).to eq 'rubocop' - expect(data.dig('output', 'summary')).to match(/There are 10 issues/) - expect(data.dig('output', 'annotations').size).to eq 10 - expect(data.dig('status')).to eq 'completed' - expect(data.dig('conclusion')).to eq 'failure' - expect(data.dig('output', 'annotations')).to eq([ - {"annotation_level"=>"warning", - "end_line"=>1, - "message"=>"Style/FrozenStringLiteralComment: Missing frozen string literal comment.", - "path"=>"main.rb", - "start_line"=>1, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>1, - "message"=>"Layout/ExtraSpacing: Unnecessary spacing detected.", - "path"=>"main.rb", - "start_line"=>1, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>1, - "message"=>"Layout/SpaceBeforeFirstArg: Put one space between the method name and the first argument.", - "path"=>"main.rb", - "start_line"=>1, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>3, - "message"=>"Style/Documentation: Missing top-level documentation comment for `class My_Class`.", - "path"=>"main.rb", - "start_line"=>3, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>3, - "message"=>"Naming/ClassAndModuleCamelCase: Use CamelCase for classes and modules.", - "path"=>"main.rb", - "start_line"=>3, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>4, - "message"=>"Layout/IndentationWidth: Use 2 (not 4) spaces for indentation.", - "path"=>"main.rb", - "start_line"=>4, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>4, - "message"=>"Naming/MethodName: Use snake_case for method names.", - "path"=>"main.rb", - "start_line"=>4, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>4, - "message"=>"Style/DefWithParentheses: Omit the parentheses in defs when the method doesn't accept any arguments.", - "path"=>"main.rb", - "start_line"=>4, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>5, - "message"=>"Layout/IndentationWidth: Use 2 (not 4) spaces for indentation.", - "path"=>"main.rb", - "start_line"=>5, - "title"=>"rubocop"}, - {"annotation_level"=>"warning", - "end_line"=>6, - "message"=>"Layout/DefEndAlignment: `end` at 6, 8 is not aligned with `def` at 4, 4.", - "path"=>"main.rb", - "start_line"=>6, - "title"=>"rubocop"} - ]) + expect(data["name"]).to eq "rubocop" + expect(data.dig("output", "summary")).to match(/There are 13 issues/) + expect(data.dig("output", "annotations").size).to eq 13 + expect(data["status"]).to eq "completed" + expect(data["conclusion"]).to eq "failure" + expect(data.dig("output", "annotations")).to eq([ + { "annotation_level" => "warning", + "end_line" => 1, + "message" => "Style/FrozenStringLiteralComment: Missing frozen string literal comment.", + "path" => "main.rb", + "start_line" => 1, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 1, + "message" => "Layout/ExtraSpacing: Unnecessary spacing detected.", + "path" => "main.rb", + "start_line" => 1, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 1, + "message" => "Layout/SpaceBeforeFirstArg: Put one space between the method name and the first argument.", + "path" => "main.rb", + "start_line" => 1, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 1, + "message" => + "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping. (https://rubystyle.guide#consistent-string-literals)", + "path" => "main.rb", + "start_line" => 1, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 3, + "message" => "Style/Documentation: Missing top-level documentation comment for `class My_Class`.", + "path" => "main.rb", + "start_line" => 3, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 3, + "message" => "Naming/ClassAndModuleCamelCase: Use CamelCase for classes and modules. (https://rubystyle.guide#camelcase-classes)", + "path" => "main.rb", + "start_line" => 3, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 4, + "message" => "Layout/IndentationWidth: Use 2 (not 4) spaces for indentation. (https://rubystyle.guide#spaces-indentation)", + "path" => "main.rb", + "start_line" => 4, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 4, + "message" => "Style/DocumentationMethod: Missing method documentation comment.", + "path" => "main.rb", + "start_line" => 4, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 4, + + "message" => "Naming/MethodName: Use snake_case for method names. (https://rubystyle.guide#snake-case-symbols-methods-vars)", + "path" => "main.rb", + "start_line" => 4, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 4, + "message" => "Style/DefWithParentheses: Omit the parentheses in defs when the method doesn't accept any arguments. (https://rubystyle.guide#method-parens)", + "path" => "main.rb", + "start_line" => 4, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 5, + "message" => "Layout/IndentationWidth: Use 2 (not 4) spaces for indentation. (https://rubystyle.guide#spaces-indentation)", + "path" => "main.rb", + "start_line" => 5, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 5, + "message" => + "Style/StringLiterals: Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping. (https://rubystyle.guide#consistent-string-literals)", + "path" => "main.rb", + "start_line" => 5, + "title" => "rubocop" }, + { "annotation_level" => "warning", + "end_line" => 6, + "message" => "Layout/DefEndAlignment: `end` at 6, 8 is not aligned with `def` at 4, 4.", + "path" => "main.rb", + "start_line" => 6, + "title" => "rubocop" } + ]) end ).to have_been_made end end - context 'when the runner is yamllint' do - it 'posts a check run with annotations' do - check_runs_url = "https://api.github.com/repos/Codertocat/Hello-World/check-runs" - post_stub = stub_request(:post, check_runs_url).to_return( - {status: 201, body: '{"id": 1}'}, - {status: 201, body: '{"id": 2}'}, - ) - allow(Pronto::Runner).to receive(:repository).and_return([Pronto::YAMLLint]) + # yamllint is disabled because it does not work with current pronto versions + # context 'when the runner is yamllint' do + # it 'posts a check run with annotations' do + # check_runs_url = "https://api.github.com/repos/Codertocat/Hello-World/check-runs" + # post_stub = stub_request(:post, check_runs_url).to_return( + # {status: 201, body: '{"id": 1}'}, + # {status: 201, body: '{"id": 2}'}, + # ) + # allow(Pronto::Runner).to receive(:repository).and_return([Pronto::YAMLLint]) - Dir.chdir('spec/fixtures/test.git') do - Pronto::CLI.start(%w(run -f github_action_check_run)) - end + # Dir.chdir('spec/fixtures/test.git') do + # Pronto::CLI.start(%w(run -f github_action_check_run)) + # end - expect( - a_request(:post, "https://api.github.com/repos/Codertocat/Hello-World/check-runs").with do |request| - data = JSON.parse(request.body) - expect(data.dig('name')).to eq 'yamllint_runner' - expect(data.dig('output', 'summary')).to match(/There are 3 issues/) - expect(data.dig('output', 'annotations').size).to eq 3 - expect(data.dig('status')).to eq 'completed' - expect(data.dig('conclusion')).to eq 'failure' - expect(data.dig('output', 'annotations')).to eq([ - { - "annotation_level"=>"warning", - "end_line"=>1, - "message"=>"1:1: [warning] missing document start \"---\" (document-start)", - "path"=>"main.yaml", - "start_line"=>1, - "title"=>"yamllint_runner" - }, - { - "annotation_level"=>"failure", - "end_line"=>3, - "message"=>"3:2: [error] wrong indentation: expected 2 but found 1 (indentation)", - "path"=>"main.yaml", - "start_line"=>3, - "title"=>"yamllint_runner" - }, - { - "annotation_level"=>"failure", - "end_line"=>4, - "message"=>"4:3: [error] syntax error: expected , but found '' (syntax)", - "path"=>"main.yaml", - "start_line"=>4, - "title"=>"yamllint_runner" - } - ]) - end - ).to have_been_made - end - end + # expect( + # a_request(:post, "https://api.github.com/repos/Codertocat/Hello-World/check-runs").with do |request| + # data = JSON.parse(request.body) + # expect(data.dig('name')).to eq 'yamllint_runner' + # expect(data.dig('output', 'summary')).to match(/There are 3 issues/) + # expect(data.dig('output', 'annotations').size).to eq 3 + # expect(data.dig('status')).to eq 'completed' + # expect(data.dig('conclusion')).to eq 'failure' + # expect(data.dig('output', 'annotations')).to eq([ + # { + # "annotation_level"=>"warning", + # "end_line"=>1, + # "message"=>"1:1: [warning] missing document start \"---\" (document-start)", + # "path"=>"main.yaml", + # "start_line"=>1, + # "title"=>"yamllint_runner" + # }, + # { + # "annotation_level"=>"failure", + # "end_line"=>3, + # "message"=>"3:2: [error] wrong indentation: expected 2 but found 1 (indentation)", + # "path"=>"main.yaml", + # "start_line"=>3, + # "title"=>"yamllint_runner" + # }, + # { + # "annotation_level"=>"failure", + # "end_line"=>4, + # "message"=>"4:3: [error] syntax error: expected , but found '' (syntax)", + # "path"=>"main.yaml", + # "start_line"=>4, + # "title"=>"yamllint_runner" + # } + # ]) + # end + # ).to have_been_made + # end + # end - it 'posts a check run with text summary' do - pending "when pronto-poper supports pronto ~> 0.11" - check_runs_url = "https://api.github.com/repos/Codertocat/Hello-World/check-runs" - post_stub = stub_request(:post, check_runs_url).to_return( - {status: 201, body: '{"id": 1}'}, - {status: 201, body: '{"id": 2}'}, - ) - allow(Pronto::Runner).to receive(:repository).and_return([Pronto::Poper]) + # pronto-poper is disabled because it doesn't seem to work anymore with pronto + # it 'posts a check run with text summary' do + # pending "when pronto-poper supports pronto ~> 0.11" + # check_runs_url = "https://api.github.com/repos/Codertocat/Hello-World/check-runs" + # post_stub = stub_request(:post, check_runs_url).to_return( + # {status: 201, body: '{"id": 1}'}, + # {status: 201, body: '{"id": 2}'}, + # ) + # allow(Pronto::Runner).to receive(:repository).and_return([Pronto::Poper]) - Dir.chdir('spec/fixtures/test.git') do - Pronto::CLI.start(%w(run -f github_action_check_run)) - end + # Dir.chdir('spec/fixtures/test.git') do + # Pronto::CLI.start(%w(run -f github_action_check_run)) + # end - expect( - a_request(:post, "https://api.github.com/repos/Codertocat/Hello-World/check-runs").with do |request| - data = JSON.parse(request.body) - expect(data.dig('name')).to eq 'poper' - expect(data.dig('output', 'summary')).to match(/There are 2 issues/) - # these messages aren't attributed to a line, so we put them in the Details section - expect(data.dig('output', 'annotations').size).to eq 0 - expect(data.dig('status')).to eq 'completed' - expect(data.dig('conclusion')).to eq 'failure' - expect(data.dig('output', 'text')).to eq(<<~TXT) - | sha | level | message | - | --- | --- | --- | - | `b00b0a8` | `warning` | Git commit message should start with a capital letter | - | `7cb7f40` | `warning` | Git commit message should start with a capital letter | - TXT - end - ).to have_been_made - end + # expect( + # a_request(:post, "https://api.github.com/repos/Codertocat/Hello-World/check-runs").with do |request| + # data = JSON.parse(request.body) + # expect(data.dig('name')).to eq 'poper' + # expect(data.dig('output', 'summary')).to match(/There are 2 issues/) + # # these messages aren't attributed to a line, so we put them in the Details section + # expect(data.dig('output', 'annotations').size).to eq 0 + # expect(data.dig('status')).to eq 'completed' + # expect(data.dig('conclusion')).to eq 'failure' + # expect(data.dig('output', 'text')).to eq(<<~TXT) + # | sha | level | message | + # | --- | --- | --- | + # | `b00b0a8` | `warning` | Git commit message should start with a capital letter | + # | `7cb7f40` | `warning` | Git commit message should start with a capital letter | + # TXT + # end + # ).to have_been_made + # end def with_env(options, &block) ClimateControl.modify(options, &block) end - end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2ef4b47..7e160bb 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,7 +1,9 @@ -require 'webmock/rspec' -require 'rubygems' -require 'bundler/setup' +# frozen_string_literal: true + +require "webmock/rspec" +require "rubygems" +require "bundler/setup" Bundler.require(:default, :test) -require 'pronto/cli' +require "pronto/cli" $LOAD_PATH.push(File.dirname(__dir__)) -require 'src/github_action_check_run_formatter' +require "src/github_action_check_run_formatter" diff --git a/src/annotation.rb b/src/annotation.rb index a8693fe..a330d6d 100644 --- a/src/annotation.rb +++ b/src/annotation.rb @@ -1,5 +1,6 @@ -class Annotation +# frozen_string_literal: true +class Annotation attr_reader :message def initialize(message) @@ -18,12 +19,12 @@ def to_h end_line: lineno, annotation_level: level_for(message.level), message: message.msg, - title: message.runner.title, + title: message.runner.title } end def to_markdown_s - "| `#{message.commit_sha[0,7]}` | `#{message.level}` | #{message.msg} |" + "| `#{message.commit_sha[0, 7]}` | `#{message.level}` | #{message.msg} |" end def level_for(pronto_level) @@ -31,8 +32,7 @@ def level_for(pronto_level) info: :notice, warning: :warning, error: :failure, - fatal: :failure, + fatal: :failure }.fetch(pronto_level, :warning) end - end diff --git a/src/github_action_check_run_formatter.rb b/src/github_action_check_run_formatter.rb index 0090756..17a1fb0 100644 --- a/src/github_action_check_run_formatter.rb +++ b/src/github_action_check_run_formatter.rb @@ -1,6 +1,9 @@ -require 'ostruct' -require 'pronto' -require_relative './annotation' +# frozen_string_literal: true + +require "pronto" +require_relative "annotation" + +require "ostruct" module Pronto module Formatter @@ -30,7 +33,7 @@ class GithubActionCheckRunFormatter < Base # @return [String] The name of the formatter. def self.name - 'github_action_check_run' + "github_action_check_run" end # Formats the messages into GitHub Action Check Runs. @@ -55,7 +58,7 @@ def client @client ||= Octokit::Client.new( api_endpoint: config.github_api_endpoint, web_endpoint: config.github_web_endpoint, - access_token: ENV.fetch('GITHUB_TOKEN') { config.github_access_token } + access_token: ENV.fetch("GITHUB_TOKEN") { config.github_access_token } ) end @@ -75,9 +78,9 @@ def create_check_run(runner, runner_messages) ) if no_line_annotations.any? output.text = <<~TXT -| sha | level | message | -| --- | --- | --- | -#{no_line_annotations.map(&:to_markdown_s).join("\n")} + | sha | level | message | + | --- | --- | --- | + #{no_line_annotations.map(&:to_markdown_s).join("\n")} TXT end client.create_check_run( @@ -89,7 +92,7 @@ def create_check_run(runner, runner_messages) started_at: Time.now.iso8601, status: :completed, completed_at: Time.now.iso8601, - accept: 'application/vnd.github.antiope-preview+json' + accept: "application/vnd.github.antiope-preview+json" ) end @@ -114,12 +117,12 @@ def check_run_summary(runner, runner_messages) # @return [String] The full name of the repository in the format "owner/repo". # @raise [RuntimeError] If the GitHub event path is not set and the slug is not found in the config. def repo_slug - @repo_slug ||= if ENV.key?('GITHUB_EVENT_PATH') - event = JSON.parse(File.read(ENV.fetch('GITHUB_EVENT_PATH'))) - event.fetch('repository').fetch('full_name') - else - config.github_slug || raise('no github.slug in pronto config') - end + @repo_slug ||= if ENV.key?("GITHUB_EVENT_PATH") + event = JSON.parse(File.read(ENV.fetch("GITHUB_EVENT_PATH"))) + event.fetch("repository").fetch("full_name") + else + config.github_slug || raise("no github.slug in pronto config") + end end def messages_by_runner