Skip to content
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

Update running-logstash-kubernetes.asciidoc #16893

Open
wants to merge 83 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
5ef86a8
Fix ConditionalEvaluationError to do not include the event that error…
github-actions[bot] Sep 6, 2024
32e7a25
use gnu tar compatible minitar to generate tar artifact (#16432) (#16…
github-actions[bot] Sep 9, 2024
d2b1900
account for the 8.x in DRA publishing task (#16436) (#16440)
github-actions[bot] Sep 10, 2024
14f52c0
Fixes the issue where LS wipes out all quotes from docker env variabl…
github-actions[bot] Sep 17, 2024
3080378
Known issue for 8.15.1 related to env vars references (#16455) (#16469)
github-actions[bot] Sep 19, 2024
1ccfb16
bump .ruby_version to jruby-9.4.8.0 (#16477) (#16480)
github-actions[bot] Sep 25, 2024
8f20bd9
Release notes for 8.15.2 (#16471) (#16478)
github-actions[bot] Sep 26, 2024
eafcf57
Change LogStash::Util::SubstitutionVariables#replace_placeholders ref…
github-actions[bot] Oct 1, 2024
2c024da
Use jruby-9.4.8.0 in exhaustive CIs. (#16489) (#16491)
github-actions[bot] Oct 2, 2024
476b921
Don't use an older JRuby with oraclelinux-7 (#16499) (#16501)
github-actions[bot] Oct 2, 2024
d115598
Improve pipeline bootstrap error logs (#16495) (#16504)
github-actions[bot] Oct 3, 2024
2f3f6a9
Logstash Health Report Tests Buildkite pipeline setup. (#16416) (#16511)
github-actions[bot] Oct 5, 2024
3b751d9
Make health report test runner script executable. (#16446) (#16512)
github-actions[bot] Oct 5, 2024
e854ac7
Backport PR #16423 to 8.x: DLQ-ing events that trigger an conditional…
github-actions[bot] Oct 8, 2024
c2c62fd
add deprecation log for `--event_api.tags.illegal` (#16507) (#16515)
github-actions[bot] Oct 8, 2024
7eb5185
Feature: health report api (#16520)
yaauie Oct 9, 2024
1e5105f
Fix QA failure introduced by Health API changes and update rspec depe…
mashhurs Oct 9, 2024
ad7c614
Health api minor followups (#16533) (#16534)
github-actions[bot] Oct 10, 2024
986a253
health: add `logstash.forceApiStatus: green` escape hatch (#16535) (#…
github-actions[bot] Oct 11, 2024
26c2f61
Flow worker utilization probe (#16532) (#16537)
github-actions[bot] Oct 11, 2024
0594c88
Backport PR #15679 to 8.x: [Spacetime] Reimplement config Setting cla…
github-actions[bot] Oct 11, 2024
8c6832e
Backport PR #16506 to 8.x: Avoid to access Java DeprecatedAlias value…
github-actions[bot] Oct 11, 2024
a1f4633
Backport PR #16525 to 8.x: [test] Fix xpack test to check for http_ad…
github-actions[bot] Oct 11, 2024
dc0739b
refactor log for event_api.tags.illegal (#16545) (#16547)
github-actions[bot] Oct 11, 2024
4677cb2
add modules deprecation log for netflow, fb_apache and azure (#16548)
kaisecheng Oct 14, 2024
c1374a1
Log deprecation warn if memory buffer type not defined (#16498)
andsel Oct 15, 2024
396b3fe
Deprecate for removal ArcSight module (#16551)
andsel Oct 15, 2024
6a573f4
ensure minitar 1.x is used instead of 0.x (#16565) (#16566)
github-actions[bot] Oct 16, 2024
216c68f
Backport PR #16564 to 8.x: Adds a JMH benchmark to test BufferedToken…
github-actions[bot] Oct 16, 2024
27bd2a0
Backport PR #16482 to 8.x: Bugfix for BufferedTokenizer to completely…
github-actions[bot] Oct 16, 2024
7e1877c
add http.* deprecation log (#16538) (#16582)
github-actions[bot] Oct 17, 2024
8fb1292
Release notes for 8.15.3 (#16527) (#16571)
github-actions[bot] Oct 18, 2024
79e439e
bump version to 8.17.0 (#16592)
edmocosta Oct 24, 2024
d6c96b4
make max inflight warning global to all pipelines (#16597) (#16601)
github-actions[bot] Oct 25, 2024
51851a9
Use jvm catalog for reproducible builds and expose new pipeline to ch…
github-actions[bot] Oct 30, 2024
1335ec8
Fix bad reference to a variable (#16615) (#16616)
github-actions[bot] Oct 30, 2024
b242715
[CI] Change agent for JDK availability check and add schedule also fo…
github-actions[bot] Oct 30, 2024
1cbd092
make docker build and gradle tasks more friendly towards ci output (#…
github-actions[bot] Oct 31, 2024
6c8e086
reduce effort during build of docker images (#16619) (#16620)
github-actions[bot] Oct 31, 2024
2bcb5ad
add boostrap to docker build to fix missing jars (#16622) (#16623)
github-actions[bot] Nov 1, 2024
37b1e90
Update JDK to latest in versions.yml (#16627) (#16631)
github-actions[bot] Nov 4, 2024
a7384c0
fix Windows java not found log (#16633) (#16636)
github-actions[bot] Nov 5, 2024
aea58a3
Anchor the `-java` match pattern at the end of the string. (#16626) (…
github-actions[bot] Nov 5, 2024
0657729
bump jruby to 9.4.9.0 (#16634) (#16639)
github-actions[bot] Nov 6, 2024
00898bd
For custom java plugins, set the platform = 'java'. (#16628) (#16649)
github-actions[bot] Nov 6, 2024
4201628
Update depreacation warning to provide the version the ArcSight modul…
andsel Nov 6, 2024
54caef7
Update .ruby-version to jruby-9.4.9.0 (#16642) (#16645)
github-actions[bot] Nov 6, 2024
9ad33e2
add deprecation warning for `allow_superuser: true` (#16555)
kaisecheng Nov 6, 2024
a402be0
Release notes for 8.16.0 (#16605) (#16662)
github-actions[bot] Nov 11, 2024
01dcd62
Doc: Realign release notes and add known issue (#16663) (#16668)
github-actions[bot] Nov 12, 2024
18e1545
Updates release notes for 8.14.x to call for an update. (#16675) (#16…
github-actions[bot] Nov 18, 2024
8af6343
PipelineBusV2 deadlock proofing (#16671)
yaauie Nov 18, 2024
7914ac0
add lockfile from 8.16.1 and bump version to 8.17.0
jsvd Nov 20, 2024
1051226
Update license checker with new logger dependency (#16695) (#16700)
github-actions[bot] Nov 20, 2024
adfa02b
Update minor plugin versions in gemfile lock for 8.17.0 (#16696)
github-actions[bot] Nov 20, 2024
accc201
Revert "Backport PR #16482 to 8.x: Bugfix for BufferedTokenizer to co…
donoghuc Nov 20, 2024
ab22999
Release notes for 8.16.1 (#16691) (#16707)
github-actions[bot] Nov 20, 2024
c68a631
Docs: Troubleshooting update for JDK bug handling cgroups v1 (#16721)…
github-actions[bot] Nov 27, 2024
5ab462e
Pin `jar-dependencies` to `0.4.1` (#16747) (#16750)
github-actions[bot] Dec 4, 2024
6f8fd5a
ensure jackson overrides are available to static initializers (#16719…
github-actions[bot] Dec 5, 2024
33ac279
ensure inputSize state value is reset during buftok.flush (#16760) (#…
github-actions[bot] Dec 9, 2024
2db4edc
Pin `date` dependency to `3.3.3` (#16755) (#16782)
github-actions[bot] Dec 11, 2024
f663392
Release notes for 8.17.0 (#16768)
github-actions[bot] Dec 11, 2024
b6a74f9
bump to 8.17.1 (#16784)
jsvd Dec 12, 2024
b361ec3
Update minor plugin versions in gemfile lock (#16781)
github-actions[bot] Dec 16, 2024
df557cf
give more memory to tests. 1gb instead of 512mb (#16764) (#16800)
github-actions[bot] Dec 16, 2024
d592e3a
Doc: Update security docs to replace obsolete cacert setting (#16798)…
github-actions[bot] Dec 19, 2024
4f4c210
update ironbank image to ubi9/9.5 (#16825) (#16826)
github-actions[bot] Dec 19, 2024
6115544
Avoid lock when ecs_compatibility is explicitly specified (#16786) (#…
github-actions[bot] Dec 23, 2024
c77396c
Doc: Add json_lines known issue to release notes (#16831)
karenzone Dec 26, 2024
657d95a
Update patch plugin versions in gemfile lock (#16842)
github-actions[bot] Jan 2, 2025
515175f
Apply Jackson stream read constraints defaults at runtime (#16832) (#…
github-actions[bot] Jan 2, 2025
9e729cc
Update logstash-input-azure_event_hubs 1.5.1 (#16848)
jsvd Jan 3, 2025
7609102
Doc: Add appropriate alternate for deprecated module in 8.x (#16856) …
github-actions[bot] Jan 6, 2025
1494f18
Add pipeline metrics to Node Stats API (#16839) (#16865)
github-actions[bot] Jan 7, 2025
af3004c
Respect environment variables in jvm.options (#16834) (#16867)
github-actions[bot] Jan 7, 2025
e9c3abb
bump lock file for 8.17 (#16870)
github-actions[bot] Jan 7, 2025
268b61d
elastic_integration plugin version updated. (#16875)
mashhurs Jan 8, 2025
92d58d1
Forward port 8.15.5 and 8.16.2 release notes to 8.17 (#16810)
jsvd Jan 8, 2025
43f6fc0
Initialize flow metrics if pipeline metric.collect params is enabled.…
github-actions[bot] Jan 9, 2025
5bd02d9
Validate the size limit in BufferedTokenizer. (#16882) (#16891)
github-actions[bot] Jan 10, 2025
3c26016
Update running-logstash-kubernetes.asciidoc
flexitrev Jan 10, 2025
a2478b6
Update docs/static/running-logstash-kubernetes.asciidoc
flexitrev Jan 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .buildkite/health_report_tests_pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/buildkite/pipeline-schema/main/schema.json

agents:
provider: gcp
imageProject: elastic-images-prod
image: family/platform-ingest-logstash-ubuntu-2204
machineType: "n2-standard-4"
diskSizeGb: 64

steps:
- group: ":logstash: Health API integration tests"
key: "testing-phase"
steps:
- label: "main branch"
key: "integ-tests-on-main-branch"
command:
- .buildkite/scripts/health-report-tests/main.sh
retry:
automatic:
- limit: 3
14 changes: 14 additions & 0 deletions .buildkite/jdk_availability_check_pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
steps:
- label: "JDK Availability check"
key: "jdk-availability-check"
agents:
image: "docker.elastic.co/ci-agent-images/platform-ingest/buildkite-agent-logstash-ci"
cpu: "4"
memory: "6Gi"
ephemeralStorage: "100Gi"
command: |
set -euo pipefail

source .buildkite/scripts/common/container-agent.sh
export GRADLE_OPTS="-Xmx2g -Dorg.gradle.daemon=false -Dorg.gradle.logging.level=info"
ci/check_jdk_version_availability.sh
3 changes: 2 additions & 1 deletion .buildkite/scripts/dra/publish.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ RELEASE_VER=`cat versions.yml | sed -n 's/^logstash\:[[:space:]]\([[:digit:]]*\.
if [ -n "$(git ls-remote --heads origin $RELEASE_VER)" ] ; then
RELEASE_BRANCH=$RELEASE_VER
else
RELEASE_BRANCH=main
RELEASE_BRANCH="${BUILDKITE_BRANCH:="main"}"
fi
echo "RELEASE BRANCH: $RELEASE_BRANCH"

if [ -n "$VERSION_QUALIFIER_OPT" ]; then
# Qualifier is passed from CI as optional field and specify the version postfix
Expand Down
5 changes: 0 additions & 5 deletions .buildkite/scripts/exhaustive-tests/generate-steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,6 @@ def acceptance_linux_steps() -> list[typing.Any]:
set -eo pipefail
source .buildkite/scripts/common/vm-agent-multi-jdk.sh
source /etc/os-release
if [[ "$$(echo $$ID_LIKE | tr '[:upper:]' '[:lower:]')" =~ (rhel|fedora) && "$${VERSION_ID%.*}" -le 7 ]]; then
# jruby-9.3.10.0 unavailable on centos-7 / oel-7, see https://github.com/jruby/jruby/issues/7579#issuecomment-1425885324 / https://github.com/jruby/jruby/issues/7695
# we only need a working jruby to run the acceptance test framework -- the packages have been prebuilt in a previous stage
rbenv local jruby-9.4.5.0
fi
ci/acceptance_tests.sh"""),
}
steps.append(step)
Expand Down
18 changes: 18 additions & 0 deletions .buildkite/scripts/health-report-tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## Description
This package for integration tests of the Health Report API.
Export `LS_BRANCH` to run on a specific branch. By default, it uses the main branch.

## How to run the Health Report Integration test?
### Prerequisites
Make sure you have python installed. Install the integration test dependencies with the following command:
```shell
python3 -mpip install -r .buildkite/scripts/health-report-tests/requirements.txt
```

### Run the integration tests
```shell
python3 .buildkite/scripts/health-report-tests/main.py
```

### Troubleshooting
- If you get `WARNING: pip is configured with locations that require TLS/SSL,...` warning message, make sure you have python >=3.12.4 installed.
Empty file.
101 changes: 101 additions & 0 deletions .buildkite/scripts/health-report-tests/bootstrap.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
"""
Health Report Integration test bootstrapper with Python script
- A script to resolve Logstash version if not provided
- Download LS docker image and spin up
- When tests finished, teardown the Logstash
"""
import os
import subprocess
import util
import yaml


class Bootstrap:
ELASTIC_STACK_VERSIONS_URL = "https://artifacts-api.elastic.co/v1/versions"

def __init__(self) -> None:
f"""
A constructor of the {Bootstrap}.
Returns:
Resolves Logstash branch considering provided LS_BRANCH
Checks out git branch
"""
logstash_branch = os.environ.get("LS_BRANCH")
if logstash_branch is None:
# version is not specified, use the main branch, no need to git checkout
print(f"LS_BRANCH is not specified, using main branch.")
else:
# LS_BRANCH accepts major latest as a major.x or specific branch as X.Y
if logstash_branch.find(".x") == -1:
print(f"Using specified branch: {logstash_branch}")
util.git_check_out_branch(logstash_branch)
else:
major_version = logstash_branch.split(".")[0]
if major_version and major_version.isnumeric():
resolved_version = self.__resolve_latest_stack_version_for(major_version)
minor_version = resolved_version.split(".")[1]
branch = major_version + "." + minor_version
print(f"Using resolved branch: {branch}")
util.git_check_out_branch(branch)
else:
raise ValueError(f"Invalid value set to LS_BRANCH. Please set it properly (ex: 8.x or 9.0) and "
f"rerun again")

def __resolve_latest_stack_version_for(self, major_version: str) -> str:
resolved_version = ""
response = util.call_url_with_retry(self.ELASTIC_STACK_VERSIONS_URL)
release_versions = response.json()["versions"]
for release_version in reversed(release_versions):
if release_version.find("SNAPSHOT") > 0:
continue
if release_version.split(".")[0] == major_version:
print(f"Resolved latest version for {major_version} is {release_version}.")
resolved_version = release_version
break

if resolved_version == "":
raise ValueError(f"Cannot resolve latest version for {major_version} major")
return resolved_version

def install_plugin(self, plugin_path: str) -> None:
util.run_or_raise_error(
["bin/logstash-plugin", "install", plugin_path],
f"Failed to install {plugin_path}")

def build_logstash(self):
print(f"Building Logstash...")
util.run_or_raise_error(
["./gradlew", "clean", "bootstrap", "assemble", "installDefaultGems"],
"Failed to build Logstash")
print(f"Logstash has successfully built.")

def apply_config(self, config: dict) -> None:
with open(os.getcwd() + "/.buildkite/scripts/health-report-tests/config/pipelines.yml", 'w') as pipelines_file:
yaml.dump(config, pipelines_file)

def run_logstash(self, full_start_required: bool) -> subprocess.Popen:
# --config.reload.automatic is to make instance active
# it is helpful when testing crash pipeline cases
config_path = os.getcwd() + "/.buildkite/scripts/health-report-tests/config"
process = subprocess.Popen(["bin/logstash", "--config.reload.automatic", "--path.settings", config_path,
"-w 1"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=False)
if process.poll() is not None:
print(f"Logstash failed to run, check the the config and logs, then rerun.")
return None

# Read stdout and stderr in real-time
logs = []
for stdout_line in iter(process.stdout.readline, ""):
logs.append(stdout_line.strip())
# we don't wait for Logstash fully start as we also test slow pipeline start scenarios
if full_start_required is False and "Starting pipeline" in stdout_line:
break
if full_start_required is True and "Pipeline started" in stdout_line:
break
if "Logstash shut down" in stdout_line or "Logstash stopped" in stdout_line:
print(f"Logstash couldn't spin up.")
print(logs)
return None

print(f"Logstash is running with PID: {process.pid}.")
return process
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Intentionally left blank
69 changes: 69 additions & 0 deletions .buildkite/scripts/health-report-tests/config_validator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import yaml
from typing import Any, List, Dict


class ConfigValidator:
REQUIRED_KEYS = {
"root": ["name", "config", "conditions", "expectation"],
"config": ["pipeline.id", "config.string"],
"conditions": ["full_start_required"],
"expectation": ["status", "symptom", "indicators"],
"indicators": ["pipelines"],
"pipelines": ["status", "symptom", "indicators"],
"DYNAMIC": ["status", "symptom", "diagnosis", "impacts", "details"],
"details": ["status"],
"status": ["state"]
}

def __init__(self):
self.yaml_content = None

def __has_valid_keys(self, data: any, key_path: str, repeated: bool) -> bool:
if isinstance(data, str) or isinstance(data, bool): # we reached values
return True

# we have two indicators section and for the next repeated ones, we go deeper
first_key = next(iter(data))
data = data[first_key] if repeated and key_path == "indicators" else data

if isinstance(data, dict):
# pipeline-id is a DYNAMIC
required = self.REQUIRED_KEYS.get("DYNAMIC" if repeated and key_path == "indicators" else key_path, [])
repeated = not repeated if key_path == "indicators" else repeated
for key in required:
if key not in data:
print(f"Missing key '{key}' in '{key_path}'")
return False
else:
dic_keys_result = self.__has_valid_keys(data[key], key, repeated)
if dic_keys_result is False:
return False
elif isinstance(data, list):
for item in data:
list_keys_result = self.__has_valid_keys(item, key_path, repeated)
if list_keys_result is False:
return False
return True

def load(self, file_path: str) -> None:
"""Load the YAML file content into self.yaml_content."""
self.yaml_content: [Dict[str, Any]] = None
try:
with open(file_path, 'r') as file:
self.yaml_content = yaml.safe_load(file)
except yaml.YAMLError as exc:
print(f"Error in YAML file: {exc}")
self.yaml_content = None

def is_valid(self) -> bool:
"""Validate the entire YAML structure."""
if self.yaml_content is None:
print(f"YAML content is empty.")
return False

if not isinstance(self.yaml_content, dict):
print(f"YAML structure is not as expected, it should start with a Dict.")
return False

result = self.__has_valid_keys(self.yaml_content, "root", False)
return True if result is True else False
16 changes: 16 additions & 0 deletions .buildkite/scripts/health-report-tests/logstash_health_report.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
A class to provide information about Logstash node stats.
"""

import util


class LogstashHealthReport:
LOGSTASH_HEALTH_REPORT_URL = "http://localhost:9600/_health_report"

def __init__(self):
pass

def get(self):
response = util.call_url_with_retry(self.LOGSTASH_HEALTH_REPORT_URL)
return response.json()
87 changes: 87 additions & 0 deletions .buildkite/scripts/health-report-tests/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
"""
Main entry point of the LS health report API integration test suites
"""
import glob
import os
import time
import traceback
import yaml
from bootstrap import Bootstrap
from scenario_executor import ScenarioExecutor
from config_validator import ConfigValidator


class BootstrapContextManager:

def __init__(self):
pass

def __enter__(self):
print(f"Starting Logstash Health Report Integration test.")
self.bootstrap = Bootstrap()
self.bootstrap.build_logstash()

plugin_path = os.getcwd() + "/qa/support/logstash-integration-failure_injector/logstash-integration" \
"-failure_injector-*.gem"
matching_files = glob.glob(plugin_path)
if len(matching_files) == 0:
raise ValueError(f"Could not find logstash-integration-failure_injector plugin.")

self.bootstrap.install_plugin(matching_files[0])
print(f"logstash-integration-failure_injector successfully installed.")
return self.bootstrap

def __exit__(self, exc_type, exc_value, exc_traceback):
if exc_type is not None:
print(traceback.format_exception(exc_type, exc_value, exc_traceback))


def main():
with BootstrapContextManager() as bootstrap:
scenario_executor = ScenarioExecutor()
config_validator = ConfigValidator()

working_dir = os.getcwd()
scenario_files_path = working_dir + "/.buildkite/scripts/health-report-tests/tests/*.yaml"
scenario_files = glob.glob(scenario_files_path)

for scenario_file in scenario_files:
print(f"Validating {scenario_file} scenario file.")
config_validator.load(scenario_file)
if config_validator.is_valid() is False:
print(f"{scenario_file} scenario file is not valid.")
return
else:
print(f"Validation succeeded.")

has_failed_scenario = False
for scenario_file in scenario_files:
with open(scenario_file, 'r') as file:
# scenario_content: Dict[str, Any] = None
scenario_content = yaml.safe_load(file)
print(f"Testing `{scenario_content.get('name')}` scenario.")
scenario_name = scenario_content['name']

is_full_start_required = next(sub.get('full_start_required') for sub in
scenario_content.get('conditions') if 'full_start_required' in sub)
config = scenario_content['config']
if config is not None:
bootstrap.apply_config(config)
expectations = scenario_content.get("expectation")
process = bootstrap.run_logstash(is_full_start_required)
if process is not None:
try:
scenario_executor.on(scenario_name, expectations)
except Exception as e:
print(e)
has_failed_scenario = True
process.terminate()
time.sleep(5) # leave some window to terminate the process

if has_failed_scenario:
# intentionally fail due to visibility
raise Exception("Some of scenarios failed, check the log for details.")


if __name__ == "__main__":
main()
17 changes: 17 additions & 0 deletions .buildkite/scripts/health-report-tests/main.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

set -euo pipefail

export PATH="/opt/buildkite-agent/.rbenv/bin:/opt/buildkite-agent/.pyenv/bin:/opt/buildkite-agent/.java/bin:$PATH"
export JAVA_HOME="/opt/buildkite-agent/.java"
eval "$(rbenv init -)"
eval "$(pyenv init -)"

echo "--- Installing pip"
sudo apt-get install python3-pip -y

echo "--- Installing dependencies"
python3 -mpip install -r .buildkite/scripts/health-report-tests/requirements.txt

echo "--- Running tests"
python3 .buildkite/scripts/health-report-tests/main.py
2 changes: 2 additions & 0 deletions .buildkite/scripts/health-report-tests/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
requests==2.32.3
pyyaml==6.0.2
Loading
Loading