Skip to content

Commit

Permalink
chore(CI): add pipeline for triggering version-dependent jobs
Browse files Browse the repository at this point in the history
  • Loading branch information
delanni committed May 22, 2024
1 parent 222cf87 commit b66422a
Show file tree
Hide file tree
Showing 3 changed files with 165 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
###
# For more information on authoring pipeline definitions,
# follow the guides at https://docs.elastic.dev/ci/getting-started-with-buildkite-at-elastic
###
# yaml-language-server: $schema=https://gist.githubusercontent.com/elasticmachine/988b80dae436cafea07d9a4a460a011d/raw/rre.schema.json
apiVersion: backstage.io/v1alpha1
kind: Resource
metadata:
name: bk-kibana-trigger-version-dependent-jobs
description: 'Trigger version-dependent jobs'
links:
- url: 'https://buildkite.com/elastic/kibana-trigger-version-dependent-jobs'
title: Pipeline link
spec:
type: buildkite-pipeline
system: buildkite
owner: 'group:kibana-operations'
implementation:
apiVersion: buildkite.elastic.dev/v1
kind: Pipeline
metadata:
name: kibana / trigger version-dependent jobs
description: 'Trigger version-dependent jobs'
spec:
env:
SLACK_NOTIFICATIONS_CHANNEL: '#kibana-operations-alerts'
ELASTIC_SLACK_NOTIFICATIONS_ENABLED: 'true'

allow_rebuilds: false
branch_configuration: main
default_branch: main
repository: elastic/kibana
pipeline_file: .buildkite/scripts/pipelines/trigger_version_dependent_jobs/pipeline.sh
skip_intermediate_builds: false
provider_settings:
prefix_pull_request_fork_branch_names: false
skip_pull_request_builds_for_existing_commits: true
trigger_mode: none
teams:
kibana-operations:
access_level: MANAGE_BUILD_AND_READ
appex-qa:
access_level: MANAGE_BUILD_AND_READ
kibana-tech-leads:
access_level: MANAGE_BUILD_AND_READ
everyone:
access_level: BUILD_AND_READ
schedules:
Trigger ES forward compatibility tests:
cronline: 0 5 * * *
message: Daily 6 am UTC
branch: main
env:
TRIGGER_PIPELINE_SET: es-forward
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

set -euo pipefail

ts-node .buildkite/scripts/pipelines/trigger_version_dependent_jobs/pipeline.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
#!/usr/bin/env ts-node
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0 and the Server Side Public License, v 1; you may not use this file except
* in compliance with, at your election, the Elastic License 2.0 or the Server
* Side Public License, v 1.
*/

import fs from 'fs';
import path from 'path';
import { getKibanaDir, BuildkiteTriggerStep } from '#pipeline-utils';

function emitPipeline(pipelineSteps: BuildkiteTriggerStep[]) {
console.log(JSON.stringify(pipelineSteps, null, 2));
}

const pipelineSets = {
'es-forward': 'kibana-es-forward',
};

/**
* This pipeline is used to emit trigger steps onto different pipelines, based on dynamic parameters retrieved from the repository.
*/
async function main() {
const pipelineSetNames = Object.keys(pipelineSets);
const pipelineSetName: string | undefined = process.env.TRIGGER_PIPELINE_SET;
const pipelineSteps: BuildkiteTriggerStep[] = [];

if (!isValidPipelineSet(pipelineSetName)) {
throw new Error(
`Env var TRIGGER_PIPELINE_SET is required, and can be one of: ${pipelineSetNames}`
);
}

switch (pipelineSetName) {
case 'es-forward': {
pipelineSteps.push(...getESForwardPipelineTriggers());
break;
}
default: {
throw new Error(`Unknown pipeline set: ${pipelineSetName}`);
}
}

emitPipeline(pipelineSteps);
}

function getESForwardPipelineTriggers(): BuildkiteTriggerStep[] {
const versions = getVersionsFile();
const prevMajorBranch = versions.find((v) => v.previousMajor)?.branch;
const targetESVersions = versions
.filter((v) => {
return v.currentMajor && (v.currentMinor || v.previousMinor);
})
.map((v) => v.version);

return targetESVersions.map((version) => {
return {
trigger: 'kibana-es-forward',
async: true,
label: `ES ${version} forward compatibility`,
build: {
message: `Triggering es-forward-compatibility test for ES ${version}`,
branch: prevMajorBranch,
commit: 'HEAD',
env: {
ES_SNAPSHOT_MANIFEST: `https://storage.googleapis.com/kibana-ci-es-snapshots-daily/${version}/manifest-latest-verified.json`,
},
},
} as BuildkiteTriggerStep;
});
}

function isValidPipelineSet(
pipelineSetName: string | undefined
): pipelineSetName is keyof typeof pipelineSets {
if (!pipelineSetName) {
return false;
} else {
return Object.keys(pipelineSets).includes(pipelineSetName);
}
}

function getVersionsFile(): Array<{
version: string;
branch: string;
previousMajor?: boolean;
previousMinor?: boolean;
currentMajor?: boolean;
currentMinor?: boolean;
}> {
try {
const versions = JSON.parse(
fs.readFileSync(path.join(getKibanaDir(), 'versions.json')).toString()
);
return versions.versions;
} catch (error) {
throw new Error(`Failed to read versions.json: ${error}`);
}
}

main().catch((error) => {
console.error(error);
process.exit(1);
});

0 comments on commit b66422a

Please sign in to comment.