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
-
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)"}}]} -
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"}}]} -
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)"}}]} -
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"}}]} -
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"}}]} -
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"}}]} -
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"}}]} -
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)"}}]} -
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?