Skip to content

Create the classes for PackageCheck module

What does this MR do and why?

Describe in detail what your merge request does and why.

This merge request adds the classes needed for the feature that allows teams to check whether specific merge requests have been included in a specific auto-deploy package version. This is part 2 of the implementations needed for gitlab-com/gl-infra/delivery#21583.

The change works by taking a normalized package version (ex: 18.5.202510150007) and a list of merge request URLs, then automatically verifying if those changes made it into that specific package. It can detect changes that were included directly or through cherry-picking.

When the check completes, it sends a Slack notification with a summary showing which merge requests were successfully included and which ones weren't, along with any errors encountered during the process. This helps teams quickly verify that important fixes or features are present in a release without manually searching through code history.

The feature is accessible through chatops and includes comprehensive error handling to deal with cases like unmerged requests, unknown projects, or API failures.

Note: These changes were initially part of this MR !4531 (closed) but I decided to divide it into 3 smaller MRs for the ease of review and validation

Related issue: gitlab-com/gl-infra/delivery#21583

Testing

  1. When the MRs provided are included in the given package version

    • Output
    mr_urls=[
    [2] pry(main)>   "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579",
    [2] pry(main)>   "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208864"
    [2] pry(main)> ]
    => ["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579", "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208864"]
    [3] pry(main)> package_version="18.5.202510150007"
    => "18.5.202510150007"
    [4] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:37:34.739074 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510150007", mr_count: 2}
    2025-10-27 13:37:34.739202 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579"}
    2025-10-27 13:37:36.136045 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/208579" - 
    2025-10-27 13:37:36.137835 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510150007"}
    2025-10-27 13:37:36.765048 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510150007.json" - 
    2025-10-27 13:37:37.261491 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:37:37.261621 I ReleaseTools::Services::PackageCheck::MrValidator -- Direct MR inclusion found -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579", merge_commit: "11e9ada76b242a9a50fb0e55d40a1377c83bb145"}
    2025-10-27 13:37:37.261631 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208864"}
    2025-10-27 13:37:38.013042 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/208864" - 
    2025-10-27 13:37:38.014199 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510150007"}
    2025-10-27 13:37:38.464661 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510150007.json" - 
    => nil
    2025-10-27 13:37:39.001093 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:37:39.001253 I ReleaseTools::Services::PackageCheck::MrValidator -- Direct MR inclusion found -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208864", merge_commit: "ea218bd8dc029a3e9333b9a3d938bba2db781d0d"}
    2025-10-27 13:37:39.001284 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:37:39.001288 I ReleaseTools::Services::PackageCheck::Base -- Results: 2 included, 0 errors
    2025-10-27 13:37:39.001296 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579: ✅ Included (direct)
    2025-10-27 13:37:39.001298 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208864: ✅ Included (direct)
    2025-10-27 13:37:39.001369 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510150007`\nResults: 2/2 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579|!208579>: ✅ Included (direct)\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208864|!208864>: ✅ Included (direct)"}}]}
  2. When the MR provided is not included in the given package version

    • Output
    mr_urls=["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827"]
    => ["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827"]
    [6] pry(main)> package_version="18.5.202510150007"
    => "18.5.202510150007"
    [7] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:39:34.969835 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510150007", mr_count: 1}
    2025-10-27 13:39:34.969879 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827"}
    2025-10-27 13:39:36.046736 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/208827" - 
    2025-10-27 13:39:36.047840 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510150007"}
    2025-10-27 13:39:36.678816 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510150007.json" - 
    2025-10-27 13:39:37.666909 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:39:38.196919 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/commits/a32f8acc94b6b3a4742174fe87cde51da8dc0cf1/refs" - 
    2025-10-27 13:39:38.197602 I ReleaseTools::Services::PackageCheck::MrValidator -- Searching for cherry-picks -- {branch: "18-6-auto-deploy-2025102000"}
    => nil
    2025-10-27 13:39:43.593288 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/search" 2 
    2025-10-27 13:39:43.593436 I ReleaseTools::Services::PackageCheck::MrValidator -- MR not found in package -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827", merge_commit: "a7bc1fecec6dd9a54ff4df485e456d9df48c1d8a"}
    2025-10-27 13:39:43.593459 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:39:43.593464 I ReleaseTools::Services::PackageCheck::Base -- Results: 0 included, 0 errors
    2025-10-27 13:39:43.593469 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827: ❌ Not included
    2025-10-27 13:39:43.593504 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510150007`\nResults: 0/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827|!208827>: ❌ Not included"}}]}
  3. MR is cherry-picked to the given package version

    • Output
    package_version="18.6.202510221307"
    => "18.6.202510221307"
    [9] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774"]
    => ["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774"]
    [10] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:42:08.055717 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.6.202510221307", mr_count: 1}
    2025-10-27 13:42:08.055793 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774"}
    2025-10-27 13:42:08.797165 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/209774" - 
    2025-10-27 13:42:08.797622 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.6.202510221307"}
    2025-10-27 13:42:09.358908 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.6.202510221307.json" - 
    2025-10-27 13:42:10.016848 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:42:10.658919 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/commits/fbeb8ff52c5a49ecb6a0a09929301f205d744748/refs" - 
    2025-10-27 13:42:10.659231 I ReleaseTools::Services::PackageCheck::MrValidator -- Searching for cherry-picks -- {branch: "18-6-auto-deploy-2025102213"}
    2025-10-27 13:42:15.655193 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/search" - 
    => nil
    2025-10-27 13:42:16.205969 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:42:16.206284 I ReleaseTools::Services::PackageCheck::MrValidator -- Cherry-picked inclusion found -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774", merge_commit: "4f1415fdbe9ef1b15e6d4cd9ac0a68b99f3fc900"}
    2025-10-27 13:42:16.206334 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:42:16.206344 I ReleaseTools::Services::PackageCheck::Base -- Results: 1 included, 0 errors
    2025-10-27 13:42:16.206362 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774: ✅ Included (cherry-picked)
    2025-10-27 13:42:16.206461 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.6.202510221307`\nResults: 1/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774|!209774>: ✅ Included (cherry-picked)"}}]}
  4. One MR is included but the other one is not included in the given package version

    • Output
    [11] pry(main)> package_version="18.5.202510150007"
    => "18.5.202510150007"
    [12] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579","https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827"]
    => ["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579", "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827"]
    [13] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:44:55.991497 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510150007", mr_count: 2}
    2025-10-27 13:44:55.991596 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579"}
    2025-10-27 13:44:57.236526 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/208579" - 
    2025-10-27 13:44:57.237044 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510150007"}
    2025-10-27 13:44:57.807920 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510150007.json" - 
    2025-10-27 13:44:58.322954 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:44:58.323028 I ReleaseTools::Services::PackageCheck::MrValidator -- Direct MR inclusion found -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579", merge_commit: "11e9ada76b242a9a50fb0e55d40a1377c83bb145"}
    2025-10-27 13:44:58.323036 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827"}
    2025-10-27 13:44:59.213065 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/208827" - 
    2025-10-27 13:44:59.214285 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510150007"}
    2025-10-27 13:44:59.697173 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510150007.json" - 
    2025-10-27 13:45:00.642664 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:45:01.174714 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/commits/a32f8acc94b6b3a4742174fe87cde51da8dc0cf1/refs" - 
    2025-10-27 13:45:01.175172 I ReleaseTools::Services::PackageCheck::MrValidator -- Searching for cherry-picks -- {branch: "18-6-auto-deploy-2025102000"}
    2025-10-27 13:45:02.112077 D ReleaseTools::GitlabClient -- 502 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/search" 15 
    => nil
    2025-10-27 13:45:07.730106 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/search" 2 
    2025-10-27 13:45:07.730405 I ReleaseTools::Services::PackageCheck::MrValidator -- MR not found in package -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827", merge_commit: "a7bc1fecec6dd9a54ff4df485e456d9df48c1d8a"}
    2025-10-27 13:45:07.730457 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:45:07.730469 I ReleaseTools::Services::PackageCheck::Base -- Results: 1 included, 0 errors
    2025-10-27 13:45:07.730487 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579: ✅ Included (direct)
    2025-10-27 13:45:07.730494 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827: ❌ Not included
    2025-10-27 13:45:07.730595 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510150007`\nResults: 1/2 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208579|!208579>: ✅ Included (direct)\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/208827|!208827>: ❌ Not included"}}]}
  5. MR is unmerged

    • Output
    [17] pry(main)> package_version="18.5.202510150007"
    => "18.5.202510150007"
    [18] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210239"]
    => ["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210239"]
    [19] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:48:20.754134 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510150007", mr_count: 1}
    2025-10-27 13:48:20.754227 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210239"}
    => nil
    2025-10-27 13:48:21.585185 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/210239" - 
    2025-10-27 13:48:21.585739 W ReleaseTools::Services::PackageCheck::MrValidator -- MR has no merge commit SHA -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210239", merge_commit_sha: nil}
    2025-10-27 13:48:21.585766 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:48:21.585772 I ReleaseTools::Services::PackageCheck::Base -- Results: 0 included, 1 errors
    2025-10-27 13:48:21.585780 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210239: ⚠️ ERROR: MR has not been merged yet or merge commit does not exist
    2025-10-27 13:48:21.585815 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510150007`\nResults: 0/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/210239|!210239>: ⚠️ ERROR: MR has not been merged yet or merge commit does not exist"}}]}
  6. MR in an unsupported project

    • Output
    [20] pry(main)> package_version="18.5.202510150007"
    => "18.5.202510150007"
    [21] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/gitlb/-/merge_requests/208579"]
    => ["https://gitlab.com/gitlab-org/gitlb/-/merge_requests/208579"]
    [22] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    => nil
    2025-10-27 13:49:34.878225 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510150007", mr_count: 1}
    2025-10-27 13:49:34.878253 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlb/-/merge_requests/208579"}
    2025-10-27 13:49:34.878346 W ReleaseTools::Services::PackageCheck::MrValidator -- Unknown project path -- {project_path: "gitlab-org/gitlb", known_paths: ["gitlab-org/build/CNG", "gitlab-org/gitaly", "gitlab-org/gitlab", "gitlab-org/gitlab-pages", "gitlab-org/omnibus-gitlab", "gitlab-org/cluster-integration/gitlab-agent"], known_security_paths: ["gitlab-org/security/charts/components/images", "gitlab-org/security/gitaly", "gitlab-org/security/gitlab", "gitlab-org/security/gitlab-pages", "gitlab-org/security/omnibus-gitlab", "gitlab-org/security/cluster-integration/gitlab-agent"]}
    2025-10-27 13:49:34.878356 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:49:34.878359 I ReleaseTools::Services::PackageCheck::Base -- Results: 0 included, 1 errors
    2025-10-27 13:49:34.878362 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlb/-/merge_requests/208579: ⚠️ ERROR: Unknown project: gitlab-org/gitlb
    2025-10-27 13:49:34.878626 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510150007`\nResults: 0/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlb/-/merge_requests/208579|!208579>: ⚠️ ERROR: Unknown project: gitlab-org/gitlb"}}]}
  7. Package version given is invalid

    • Output
    [23] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774"]
    => ["https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774"]
    [24] pry(main)> package_version="18.5.202510150009"
    => "18.5.202510150009"
    [25] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:51:15.198380 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510150009", mr_count: 1}
    2025-10-27 13:51:15.198469 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774"}
    2025-10-27 13:51:18.118857 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab/merge_requests/209774" - 
    2025-10-27 13:51:18.120265 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510150009"}
    => nil
    2025-10-27 13:51:19.797304 D ReleaseTools::GitlabOpsClient -- 404 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510150009.json" 32 
    2025-10-27 13:51:19.797763 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:51:19.797781 I ReleaseTools::Services::PackageCheck::Base -- Results: 0 included, 1 errors
    2025-10-27 13:51:19.797795 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774: ⚠️ ERROR: No package SHA found for project gitlab-org/gitlab
    2025-10-27 13:51:19.797868 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510150009`\nResults: 0/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/gitlab/-/merge_requests/209774|!209774>: ⚠️ ERROR: No package SHA found for project gitlab-org/gitlab"}}]}
  8. MR from other managed projects

    • Output
    [26] pry(main)> package_version="18.5.202510141906"
    => "18.5.202510141906"
    [27] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/build/CNG/-/merge_requests/2663"]
    => ["https://gitlab.com/gitlab-org/build/CNG/-/merge_requests/2663"]
    [28] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:52:53.050777 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.5.202510141906", mr_count: 1}
    2025-10-27 13:52:53.050859 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/build/CNG/-/merge_requests/2663"}
    2025-10-27 13:52:53.921846 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fbuild%2FCNG/merge_requests/2663" - 
    2025-10-27 13:52:53.923088 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.5.202510141906"}
    2025-10-27 13:52:54.599613 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.5.202510141906.json" - 
    => nil
    2025-10-27 13:52:55.501839 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fcharts%2Fcomponents%2Fimages/repository/merge_base" - 
    2025-10-27 13:52:55.502124 I ReleaseTools::Services::PackageCheck::MrValidator -- Direct MR inclusion found -- {mr_url: "https://gitlab.com/gitlab-org/build/CNG/-/merge_requests/2663", merge_commit: "1bd5e22ee0f5734a2105ac75dc441a20b82c1269"}
    2025-10-27 13:52:55.502161 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:52:55.502167 I ReleaseTools::Services::PackageCheck::Base -- Results: 1 included, 0 errors
    2025-10-27 13:52:55.502178 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/build/CNG/-/merge_requests/2663: ✅ Included (direct)
    2025-10-27 13:52:55.502231 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.5.202510141906`\nResults: 1/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/build/CNG/-/merge_requests/2663|!2663>: ✅ Included (direct)"}}]}
  9. MR from the security mirror

    • Output
    [29] pry(main)> package_version="18.6.202510210951"
    => "18.6.202510210951"
    [30] pry(main)> mr_urls=["https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/5278"]
    => ["https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/5278"]
    [31] pry(main)> ReleaseTools::Services::PackageCheck::Base.new(package_version, mr_urls).execute
    2025-10-27 13:54:25.771552 I ReleaseTools::Services::PackageCheck::Base -- Starting MR validation -- {package: "18.6.202510210951", mr_count: 1}
    2025-10-27 13:54:25.771630 D ReleaseTools::Services::PackageCheck::Base -- Checking MR -- {mr_url: "https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/5278"}
    2025-10-27 13:54:27.054802 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/merge_requests/5278" - 
    2025-10-27 13:54:27.055669 I ReleaseTools::ProductVersion -- Fetching release metadata -- {version: "18.6.202510210951"}
    2025-10-27 13:54:27.627554 D ReleaseTools::GitlabOpsClient -- 200 "GET https://ops.gitlab.net/api/v4/projects/gitlab-org%2Frelease%2Fmetadata/repository/files/releases%2F18%2F18.6.202510210951.json" - 
    => nil
    2025-10-27 13:54:28.185618 D ReleaseTools::GitlabClient -- 200 "GET https://gitlab.com/api/v4/projects/gitlab-org%2Fsecurity%2Fgitlab/repository/merge_base" - 
    2025-10-27 13:54:28.185966 I ReleaseTools::Services::PackageCheck::MrValidator -- Direct MR inclusion found -- {mr_url: "https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/5278", merge_commit: "eca7094b198978fa70a760e3d1ca8cd9f61c34de"}
    2025-10-27 13:54:28.186012 I ReleaseTools::Services::PackageCheck::Base -- === MR Validation Complete ===
    2025-10-27 13:54:28.186022 I ReleaseTools::Services::PackageCheck::Base -- Results: 1 included, 0 errors
    2025-10-27 13:54:28.186038 I ReleaseTools::Services::PackageCheck::Base --   • https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/5278: ✅ Included (direct)
    2025-10-27 13:54:28.186109 I ReleaseTools::Services::PackageCheck::SlackNotifier -- Sending Slack notification -- {channel: nil, blocks: [{type: "section", text: {type: "mrkdwn", text: "*📦 MR Package Validation Results*\nPackage: `18.6.202510210951`\nResults: 1/1 MRs included"}}, {type: "section", text: {type: "mrkdwn", text: "📋 *Details:*\n• <https://gitlab.com/gitlab-org/security/gitlab/-/merge_requests/5278|!5278>: ✅ Included (direct)"}}]}

Content

  • Create the classes for PackageCheck module

Author Check-list

  • Has documentation been updated?
Edited by Mawreen Dela Cruz

Merge request reports

Loading