gitlab_quality-test_tooling 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/gitlab_quality/test_tooling/gitlab_client/issues_client.rb +15 -0
- data/lib/gitlab_quality/test_tooling/report/concerns/issue_reports.rb +2 -2
- data/lib/gitlab_quality/test_tooling/report/relate_failure_issue.rb +30 -3
- data/lib/gitlab_quality/test_tooling/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 279a7eab459c664263a3506753c09d78111784af48af599cab26ed8928f54e2a
         | 
| 4 | 
            +
              data.tar.gz: '06388341bfbb2c868ae25569af2597666f64cdb7e980465078a78778081ca107'
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: cd37eca775b6899df0e476d11499ee491a8ea4278d88bf8f9584feb3cb8d1245da3319aa534ed4743c06ca1bd7da7a4eefcf619aa26688eb895bf3168d58eb9d
         | 
| 7 | 
            +
              data.tar.gz: 58f7c549202b39a20d6d5b5fc117e9017a044ee2e6bff63f07b82dda9650ed819f43407f20a5363d638b986fb8860d69c2452ea68bdf7fe5b7e33e70abb281b4
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
| @@ -122,6 +122,21 @@ module GitlabQuality | |
| 122 122 | 
             
                      end
         | 
| 123 123 | 
             
                    end
         | 
| 124 124 |  | 
| 125 | 
            +
                    def find_pipeline(project, pipeline_id)
         | 
| 126 | 
            +
                      handle_gitlab_client_exceptions do
         | 
| 127 | 
            +
                        client.pipeline(project, pipeline_id)
         | 
| 128 | 
            +
                      end
         | 
| 129 | 
            +
                    end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                    def find_commit_parent(project, sha)
         | 
| 132 | 
            +
                      handle_gitlab_client_exceptions do
         | 
| 133 | 
            +
                        # In a merged results commit, the first parent is the one from
         | 
| 134 | 
            +
                        # the main branch, and the second parent is from the branch
         | 
| 135 | 
            +
                        # itself (more likely to have caused the issue)
         | 
| 136 | 
            +
                        client.commit(project, sha).parent_ids.last
         | 
| 137 | 
            +
                      end
         | 
| 138 | 
            +
                    end
         | 
| 139 | 
            +
             | 
| 125 140 | 
             
                    private
         | 
| 126 141 |  | 
| 127 142 | 
             
                    attr_reader :token, :project
         | 
| @@ -113,11 +113,11 @@ module GitlabQuality | |
| 113 113 | 
             
                        end
         | 
| 114 114 | 
             
                      end
         | 
| 115 115 |  | 
| 116 | 
            -
                      def initial_reports_section(test)
         | 
| 116 | 
            +
                      def initial_reports_section(test, item_extra_content: nil)
         | 
| 117 117 | 
             
                        <<~REPORTS
         | 
| 118 118 | 
             
                        ### Reports (1)
         | 
| 119 119 |  | 
| 120 | 
            -
                        #{ReportsList.report_list_item(test)}
         | 
| 120 | 
            +
                        #{ReportsList.report_list_item(test, item_extra_content: item_extra_content)}
         | 
| 121 121 | 
             
                        REPORTS
         | 
| 122 122 | 
             
                      end
         | 
| 123 123 |  | 
| @@ -26,6 +26,13 @@ module GitlabQuality | |
| 26 26 | 
             
                    NEW_ISSUE_LABELS = Set.new(%w[test failure::new priority::2 automation:bot-authored]).freeze
         | 
| 27 27 | 
             
                    SCREENSHOT_IGNORED_ERRORS = ['500 Internal Server Error', 'fabricate_via_api!', 'Error Code 500'].freeze
         | 
| 28 28 |  | 
| 29 | 
            +
                    # Map commits to security fork (gitlab-org/security/gitlab) for gitlab-org/gitlab since security patches exist
         | 
| 30 | 
            +
                    # there before being released to the public repository
         | 
| 31 | 
            +
                    DIFF_PROJECT_MAPPINGS = {
         | 
| 32 | 
            +
                      'gitlab-org/gitlab' => 'gitlab-org/security/gitlab',
         | 
| 33 | 
            +
                      'gitlab-org/customers-gitlab-com' => 'gitlab-org/customers-gitlab-com'
         | 
| 34 | 
            +
                    }.freeze
         | 
| 35 | 
            +
             | 
| 29 36 | 
             
                    MultipleIssuesFound = Class.new(StandardError)
         | 
| 30 37 |  | 
| 31 38 | 
             
                    def initialize(
         | 
| @@ -271,14 +278,27 @@ module GitlabQuality | |
| 271 278 |  | 
| 272 279 | 
             
                    def new_issue_description(test)
         | 
| 273 280 | 
             
                      super + [
         | 
| 274 | 
            -
                        "\n | 
| 281 | 
            +
                        "\n#{compare_against_previous_commit}",
         | 
| 282 | 
            +
                        "### Stack trace",
         | 
| 275 283 | 
             
                        "```\n#{test.full_stacktrace}\n```",
         | 
| 276 284 | 
             
                        screenshot_section(test),
         | 
| 277 285 | 
             
                        system_log_errors_section(test),
         | 
| 278 | 
            -
                        initial_reports_section(test)
         | 
| 286 | 
            +
                        initial_reports_section(test, item_extra_content: screenshot_artifact_url(test))
         | 
| 279 287 | 
             
                      ].compact.join("\n\n")
         | 
| 280 288 | 
             
                    end
         | 
| 281 289 |  | 
| 290 | 
            +
                    def compare_against_previous_commit
         | 
| 291 | 
            +
                      pipeline_sha = gitlab.find_pipeline(project, Runtime::Env.ci_pipeline_id.to_i).sha
         | 
| 292 | 
            +
                      parent_sha = gitlab.find_commit_parent(project, pipeline_sha)
         | 
| 293 | 
            +
                      diff_project = if DIFF_PROJECT_MAPPINGS.key?(project)
         | 
| 294 | 
            +
                                       DIFF_PROJECT_MAPPINGS[project]
         | 
| 295 | 
            +
                                     else
         | 
| 296 | 
            +
                                       raise "Project #{project} is not supported for commit diff links"
         | 
| 297 | 
            +
                                     end
         | 
| 298 | 
            +
             | 
| 299 | 
            +
                      "### Commit diff\nhttps://gitlab.com/#{diff_project}/-/compare/#{parent_sha}...#{pipeline_sha}"
         | 
| 300 | 
            +
                    end
         | 
| 301 | 
            +
             | 
| 282 302 | 
             
                    def system_log_errors_section(test)
         | 
| 283 303 | 
             
                      correlation_id = test.failures.first['correlation_id']
         | 
| 284 304 | 
             
                      section = ''
         | 
| @@ -322,7 +342,7 @@ module GitlabQuality | |
| 322 342 | 
             
                      state_event = issue.state == 'closed' ? 'reopen' : nil
         | 
| 323 343 |  | 
| 324 344 | 
             
                      issue_attrs = {
         | 
| 325 | 
            -
                        description: increment_reports(current_reports_content: issue.description, test: test).to_s,
         | 
| 345 | 
            +
                        description: increment_reports(current_reports_content: issue.description, test: test, item_extra_content: screenshot_artifact_url(test)).to_s,
         | 
| 326 346 | 
             
                        labels: up_to_date_labels(test: test, issue: issue)
         | 
| 327 347 | 
             
                      }
         | 
| 328 348 | 
             
                      issue_attrs[:state_event] = state_event if state_event
         | 
| @@ -386,6 +406,13 @@ module GitlabQuality | |
| 386 406 | 
             
                        .filter_map { |e| failure_to_ignore.find { |m| e['message'].include?(m) } }
         | 
| 387 407 | 
             
                        .compact
         | 
| 388 408 | 
             
                    end
         | 
| 409 | 
            +
             | 
| 410 | 
            +
                    def screenshot_artifact_url(test)
         | 
| 411 | 
            +
                      ci_job_url = test.ci_job_url
         | 
| 412 | 
            +
                      screenshot_path = test.screenshot_image[%r{qa/.*$}]
         | 
| 413 | 
            +
             | 
| 414 | 
            +
                      "|| [Screenshot](#{ci_job_url}/artifacts/file/#{screenshot_path})"
         | 
| 415 | 
            +
                    end
         | 
| 389 416 | 
             
                  end
         | 
| 390 417 | 
             
                end
         | 
| 391 418 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: gitlab_quality-test_tooling
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - GitLab Quality
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2025-01- | 
| 11 | 
            +
            date: 2025-01-24 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: climate_control
         |