Sha256: 3541d0fd0bae994eb1457bd7c2adc6782a3976f829be4add39f08e49712cd19f

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

module Danger
  # Plugin to make sure View file changes in a Pull Request will have accompanying screenshots in the PR description.
  #
  # @example Check if a PR changing views needs to have screenshots
  #
  #          # If a PR has view changes, report a warning if there are no screenshots attached
  #          view_changes_checker.check
  #
  # @see Automattic/dangermattic
  # @tags ios, android, swift, java, kotlin, screenshots
  #
  class ViewChangesChecker < Plugin
    VIEW_EXTENSIONS_IOS = /(View|Button)\.(swift|m)$|\.xib$|\.storyboard$/
    VIEW_EXTENSIONS_ANDROID = /(?i)(View|Button)\.(java|kt|xml)$/

    MEDIA_IN_PR_BODY_PATTERNS = [
      %r{https?://\S*\.(gif|jpg|jpeg|png|svg)},
      %r{https?://\S*\.(mp4|avi|mov|mkv)},
      %r{https?://\S*github\S+/\S+/assets/},
      %r{https?://\S*github\S+/storage/user/},
      /!\[(.*?)\]\((.*?)\)/,
      /<img\s+[^>]*src\s*=\s*[^>]*>/,
      /<video\s+[^>]*src\s*=\s*[^>]*>/
    ].freeze

    MESSAGE = 'View files have been modified, but no screenshot or video is included in the pull request. ' \
              'Consider adding some for clarity.'

    # Checks if view files have been modified and if a screenshot or video is included in the pull request body,
    # displaying a warning if view files have been modified but no screenshot or video is included.
    #
    # @return [void]
    def check(report_type: :warning)
      view_files_modified = git.modified_files.any? do |file|
        VIEW_EXTENSIONS_IOS =~ file || VIEW_EXTENSIONS_ANDROID =~ file
      end

      pr_has_media = MEDIA_IN_PR_BODY_PATTERNS.any? do |pattern|
        github.pr_body =~ pattern
      end

      reporter.report(message: MESSAGE, type: report_type) if view_files_modified && !pr_has_media
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
danger-dangermattic-1.2.2 lib/dangermattic/plugins/view_changes_checker.rb
danger-dangermattic-1.2.1 lib/dangermattic/plugins/view_changes_checker.rb