-
Notifications
You must be signed in to change notification settings - Fork 25.6k
Extend CI intake pipeline to run BC upgrade tests #128614
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
ldematte
merged 17 commits into
elastic:main
from
ldematte:bc-upgrade/bc-commit-hash-script
Jun 17, 2025
Merged
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
8b74368
Create get-bc-commit.sh
ldematte 049ec16
exit without pipeline upload for empty/failure; consider snapshots too
ldematte ea607b9
Merge branch 'main' into bc-upgrade/bc-commit-hash-script
ldematte 1cc969a
add log
ldematte 86d45b4
Merge branch 'bc-upgrade/bc-commit-hash-script' of github.com:ldematt…
ldematte 0670191
Merge remote-tracking branch 'upstream/main' into bc-upgrade/bc-commi…
ldematte 5a3e18a
extract version from manifest
ldematte ecab2e8
pr feedback
mosche b913f7a
fix whitespaces
mosche d02f5a2
Merge branch 'main' into bc-upgrade/bc-commit-hash-script
elasticmachine becfaf2
integrate script into build step, various minor fixes
mosche a2e0235
revert hardcoded branch filter for testing on branch
mosche 7086a6f
Update .buildkite/scripts/run-bc-upgrade-tests.sh
ldematte c5a424b
Merge remote-tracking branch 'upstream/main' into bc-upgrade/bc-commi…
ldematte f7f2b07
PR comments
ldematte 9e5b934
Merge branch 'main' into bc-upgrade/bc-commit-hash-script
ldematte 56b6503
Merge branch 'main' into bc-upgrade/bc-commit-hash-script
ldematte File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,69 @@ | ||
| #!/bin/bash | ||
|
|
||
| # | ||
| # 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", the "GNU Affero General Public License v3.0 only", 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", the "GNU Affero General Public | ||
| # License v3.0 only", or the "Server Side Public License, v 1". | ||
| # | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| # Select the most recent build from the current branch. | ||
| # We collect snapshots, order by date, then collect BCs, order by date, and concat them; then we select the last. | ||
| # So if we have one (or more) BC, we will always prefer to use that. Otherwise we will use the latest snapshot. | ||
| MANIFEST_URL="$(curl -s https://artifacts.elastic.co/releases/TfEVhiaBGqR64ie0g0r0uUwNAbEQMu1Z/future-releases/stack.json | | ||
| jq ".releases[] | | ||
| select(.branch == \"$BUILDKITE_BRANCH\") | | ||
| select(.active_release == true) | | ||
| ((.snapshots | to_entries | sort_by(.value.completed_at)) + | ||
| (.build_candidates | to_entries | sort_by(.value.completed_at))) | | ||
| last | .value.manifest_url")" | ||
|
|
||
| if [[ -z "$MANIFEST_URL" ]]; then | ||
| echo "No snapshots or build candidates for branch [$BUILDKITE_BRANCH]." | ||
| echo "Skipping BC upgrade tests." | ||
| exit 0 | ||
| fi | ||
|
|
||
| MANIFEST="$(curl -s "$MANIFEST_URL")" | ||
| if [[ -z "$MANIFEST" ]]; then | ||
| echo "Cannot get the build manifest from [$MANIFEST_URL]" | ||
| exit 1 | ||
| fi | ||
|
|
||
| CURRENT_VERSION=$(sed -n 's/^elasticsearch[[:space:]]*=[[:space:]]*\(.*\)/\1/p' build-tools-internal/version.properties) | ||
|
|
||
| BC_VERSION=$(echo "$MANIFEST" | jq -r .version) | ||
| BC_BUILD_ID=$(echo "$MANIFEST" | jq -r .build_id) | ||
| BC_COMMIT_HASH=$(echo "$MANIFEST" | jq -r .projects.elasticsearch.commit_hash) | ||
|
|
||
| if [ "$CURRENT_VERSION-SNAPSHOT" != "$BC_VERSION" ]; then | ||
| echo "Version [$BC_VERSION] of BC (or snapshot) does not match current version [$CURRENT_VERSION] of branch [$BUILDKITE_BRANCH]." | ||
| echo "Skipping BC upgrade tests." | ||
| exit 0 | ||
| fi | ||
|
|
||
| echo "Running BC upgrade tests on $BUILDKITE_BRANCH [$BC_VERSION] using BC (or snapshot) build of commit [$BC_COMMIT_HASH] with build id [$BC_BUILD_ID]." | ||
|
|
||
| cat <<EOF | buildkite-agent pipeline upload | ||
| steps: | ||
| - label: bc-upgrade $BC_BUILD_ID -> $BUILDKITE_BRANCH | ||
| command: .ci/scripts/run-gradle.sh -Dbwc.checkout.align=true -Dorg.elasticsearch.build.cache.push=true -Dignore.tests.seed -Dscan.capture-file-fingerprints -Dtests.bwc.main.version=${BC_VERSION} -Dtests.bwc.refspec.main=${BC_COMMIT_HASH} bcUpgradeTest -Dtests.jvm.argline="-Des.serverless_transport=true" | ||
| timeout_in_minutes: 300 | ||
| agents: | ||
| provider: gcp | ||
| image: family/elasticsearch-ubuntu-2004 | ||
| machineType: n1-standard-32 | ||
| buildDirectory: /dev/shm/bk | ||
| preemptible: true | ||
| retry: | ||
| automatic: | ||
| - exit_status: "-1" | ||
| limit: 3 | ||
| signal_reason: none | ||
| - signal_reason: agent_stop | ||
| limit: 3 | ||
| EOF | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is there a particular reason we use buildkite retry mechanism here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no, to be honest this is mostly copy paste from similar scripts. what would you recommend here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Scracth that. I think the problem is that it would potentially almost duplicte the pipeine duration if there are (valid) failures here. Lets remove the retry logic for now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
preemptible: truewill make this step run using a spot instance, which is cheaper but could be turned off before the job is complete. The retry logic will generally only retry the step if the agent is pre-empted, which we want. So, we should keep the retry logic if we're keepingpreemptible: true.