added files

This commit is contained in:
Your Name
2026-08-26 02:02:24 +05:30
parent 58ee8a276a
commit 3419cfba0c
200 changed files with 22132 additions and 0 deletions
+92
View File
@@ -0,0 +1,92 @@
// Best-effort fire of the standalone ai-blitz-jobs (coverage-only) Jenkins
// job after a successful per-repo CI build. ai-blitz-jobs runs the
// coverage-only.Jenkinsfile from devops-lib@coverage-only-pipeline against
// the repo+branch we just built, so coverage and test-quality metrics flow
// to novaviz without anyone having to trigger the job manually.
//
// Gates — skip when triggering would waste compute or pollute the data:
// - PR builds (CHANGE_ID set; coverage on PRs is noise)
// - hot-fix builds (env.hot_fix == true)
// - toolchain image rebuilds (env.INFRA_ENV == 'toolchain')
// - explicit opt-out (skip_coverage_trigger: true in config.yaml)
// - non-develop branches (current policy: ONLY 'develop' fires. main /
// master / gcp-main / gcp-master are
// deploy-only branches at Meesho — tests
// already ran on the develop merge that
// produced their content, so re-running
// coverage on them would be duplicate
// spend. Expand this allowlist if a repo
// ships from a non-develop branch.)
//
// Failure is swallowed — observability must never block prod CI. The
// ai-blitz-jobs Jenkins job being renamed/disabled/missing logs a warning
// and continues; the parent build stays green.
def call(Map param) {
if (env.CHANGE_ID) {
log.info("triggerCoverageOnly: skipping PR build (CHANGE_ID=${env.CHANGE_ID}).")
return
}
if (env.hot_fix == 'true' || env.hot_fix == true) {
log.info("triggerCoverageOnly: skipping hot-fix build.")
return
}
if ((env.INFRA_ENV ?: '') == 'toolchain') {
log.info("triggerCoverageOnly: skipping toolchain (image-rebuild) build.")
return
}
if (param?.skip_coverage_trigger?.toString() == 'true') {
log.info("triggerCoverageOnly: skipping — repo opted out via config.yaml skip_coverage_trigger=true.")
return
}
String branch = (env.BRANCH_NAME ?: '').trim()
Set<String> allowed = ['develop']
if (!allowed.contains(branch)) {
log.info("triggerCoverageOnly: skipping branch '${branch}' (only ${allowed} triggers coverage today).")
return
}
String repoName = param?.repo_name
if (!repoName) {
log.warning("triggerCoverageOnly: param.repo_name missing — cannot construct REPO_URL. Skipping.")
return
}
// Meesho convention: every backend service lives at github.com/Meesho/<repo>.
// ai-blitz-jobs' coverage-only.Jenkinsfile takes the full URL as REPO_URL.
String repoUrl = "https://github.com/Meesho/${repoName}"
// Absolute path. Per-repo CI jobs may live inside Jenkins folders
// (e.g. /Meesho/order-service); a relative 'ai-blitz-jobs' would try
// the parent folder first and 404 there. The leading slash anchors at
// the Jenkins root, where ai-blitz-jobs lives (confirmed by the URL
// shape http://jenkins-dev.../job/ai-blitz-jobs/<N>/).
String targetJob = '/ai-blitz-jobs'
try {
log.info("triggerCoverageOnly: launching ${targetJob} for ${repoName} @ ${branch} (fire-and-forget).")
// The `build` step is in-process Jenkins RPC — no API tokens or
// credentials needed. It runs with the parent build's identity
// (UpstreamCause), and ai-blitz-jobs' coverage-only.Jenkinsfile
// calls coverageOnly() directly (NOT eksCICD), so the
// allowedUsers gate in eksCICD doesn't apply to this path. Bot
// and upstream-triggered builds both work.
// wait:false → parent build queues the downstream and moves on
// immediately. It never reads the downstream result, so `propagate`
// is a no-op here and intentionally omitted. The try/catch below is
// what shields the parent from step-level errors (job not found,
// bad params, queue full).
build(
job: targetJob,
parameters: [
string(name: 'REPO_URL', value: repoUrl),
string(name: 'BRANCH', value: branch)
],
wait: false,
quietPeriod: 0
)
} catch (Exception e) {
// ai-blitz-jobs renamed/disabled/queue-blocked/whatever — log and
// continue. We never block the parent build on observability.
log.warning("triggerCoverageOnly: build(job: '${targetJob}', …) threw: ${e}. Continuing — parent CI stays green.")
}
}