diff --git a/actions/flakeguard-ai-analysis/.dockerignore b/actions/flakeguard-ai-analysis/.dockerignore deleted file mode 100644 index bee8a64b7..000000000 --- a/actions/flakeguard-ai-analysis/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -__pycache__ diff --git a/actions/flakeguard-ai-analysis/.gitignore b/actions/flakeguard-ai-analysis/.gitignore deleted file mode 100644 index 342ae48df..000000000 --- a/actions/flakeguard-ai-analysis/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -__pycache__ -analysis.jsonl -context/results.json -output.txt diff --git a/actions/flakeguard-ai-analysis/CHANGELOG.md b/actions/flakeguard-ai-analysis/CHANGELOG.md deleted file mode 100644 index 82b773bd9..000000000 --- a/actions/flakeguard-ai-analysis/CHANGELOG.md +++ /dev/null @@ -1,49 +0,0 @@ -# flakeguard-ai-analysis - -## 1.2.1 - -### Patch Changes - -- [#1040](https://github.com/smartcontractkit/.github/pull/1040) - [`a6c900e`](https://github.com/smartcontractkit/.github/commit/a6c900ed9dbd0e1174cddfc64a6bc949b9d4cd57) - Thanks [@dependabot](https://github.com/apps/dependabot)! - Update h11 - dependency - -## 1.2.0 - -### Minor Changes - -- [#973](https://github.com/smartcontractkit/.github/pull/973) - [`d8d5377`](https://github.com/smartcontractkit/.github/commit/d8d53774045f1a0f07e0d774419cc1ff003f55b3) - Thanks [@KMontag42](https://github.com/KMontag42)! - Add new parameters and - handle artifact files from github actions properly - -### Patch Changes - -- [#971](https://github.com/smartcontractkit/.github/pull/971) - [`080ac59`](https://github.com/smartcontractkit/.github/commit/080ac59c28083508996c2fbec3eb064e67282060) - Thanks [@KMontag42](https://github.com/KMontag42)! - Properly forward the - input variable to the docker image ENV Update the `file_path` to use - `/github/workspace` - -## 1.1.0 - -### Minor Changes - -- [#955](https://github.com/smartcontractkit/.github/pull/955) - [`31622aa`](https://github.com/smartcontractkit/.github/commit/31622aae9045da7613bf760add223880eec3cd4a) - Thanks [@KMontag42](https://github.com/KMontag42)! - Return success when there - are no test failures - -## 1.0.0 - -### Major Changes - -- [#928](https://github.com/smartcontractkit/.github/pull/928) - [`b9cab6c`](https://github.com/smartcontractkit/.github/commit/b9cab6c4e16ad458549a1670a84b7b39b458f541) - Thanks [@KMontag42](https://github.com/KMontag42)! - First release of the - Flakeguard AI Analysis action - -## 0.1.0 - -First release of the Flakeguard AI Analysis action. diff --git a/actions/flakeguard-ai-analysis/Dockerfile b/actions/flakeguard-ai-analysis/Dockerfile deleted file mode 100644 index 8b2969e99..000000000 --- a/actions/flakeguard-ai-analysis/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM python:3.11-slim - -COPY requirements.txt requirements.txt -RUN pip3 install -r requirements.txt - -COPY context/ context/ -COPY src/ src/ -COPY main.py main.py - -ENTRYPOINT ["python3.11", "/main.py"] diff --git a/actions/flakeguard-ai-analysis/Makefile b/actions/flakeguard-ai-analysis/Makefile deleted file mode 100644 index f9c0d3894..000000000 --- a/actions/flakeguard-ai-analysis/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -TMP_DIR := $(shell mktemp -d) -IMAGE_NAME := flaky-test-actions - -default: build -.PHONY: build, clean, run - -build: - cp -r src $(TMP_DIR)/src - cp -r context $(TMP_DIR)/context - cp main.py Dockerfile .dockerignore requirements.txt $(TMP_DIR) - - docker build -t $(IMAGE_NAME) $(TMP_DIR) - - rm -rf $(TMP_DIR) - -clean: - docker rmi $(IMAGE_NAME) - -run: - docker run --env-file .env --volume ".":"/github/workspace" -it --rm $(IMAGE_NAME) - diff --git a/actions/flakeguard-ai-analysis/README.md b/actions/flakeguard-ai-analysis/README.md deleted file mode 100644 index b8af134a6..000000000 --- a/actions/flakeguard-ai-analysis/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Flakeguard AI Analysis - -## Project Overview Document - -[Flaky Tests - Reducing quarantine size, and time to remove tests from quarantine with ML/AI - Data Science & Analytics - Confluence](https://smartcontract-it.atlassian.net/wiki/spaces/DA/pages/1388216357/Flaky+Tests+-+Reducing+quarantine+size+and+time+to+remove+tests+from+quarantine+with+ML+AI#Phase-1) - -## Development - -```bash -cp env.example .env -# fill this out -$EDITOR .env -make build -make run -``` diff --git a/actions/flakeguard-ai-analysis/action.yml b/actions/flakeguard-ai-analysis/action.yml deleted file mode 100644 index 7d2b5ce5e..000000000 --- a/actions/flakeguard-ai-analysis/action.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: flakeguard-ai-analysis -description: "AI Powered Analysis for Flakeguard" - -inputs: - failed_test_results: - description: The json file from Flakeguard with failed test results - required: true - openai_api_key: - description: The openai api key - required: true -outputs: - analysis: - description: The generated analysis JSONL file -runs: - using: docker - image: Dockerfile - env: - OPENAI_API_KEY: ${{ inputs.openai_api_key }} - FAILED_TEST_RESULTS: ${{ inputs.failed_test_results }} diff --git a/actions/flakeguard-ai-analysis/context/.gitkeep b/actions/flakeguard-ai-analysis/context/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/actions/flakeguard-ai-analysis/env.example b/actions/flakeguard-ai-analysis/env.example deleted file mode 100644 index e570b8b55..000000000 --- a/actions/flakeguard-ai-analysis/env.example +++ /dev/null @@ -1 +0,0 @@ -OPENAI_API_KEY= diff --git a/actions/flakeguard-ai-analysis/main.py b/actions/flakeguard-ai-analysis/main.py deleted file mode 100644 index 69b09bc8c..000000000 --- a/actions/flakeguard-ai-analysis/main.py +++ /dev/null @@ -1,55 +0,0 @@ -from pathlib import Path -import logging -import os - -import pandas as pd - -from src.dspy_modules import FlakyTestAnalyzer -from src.utils import init, read_results_file, get_repo_file - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -def main(): - file_path = Path(os.environ.get("FILE_PATH", "/github/workspace")) - init() - logger.info("Initialized dspy") - - test_guide = get_repo_file( - "tools/flakeguard/e2e-flaky-test-guide.md", - repo="chainlink-testing-framework", - branch="main", - ) - logger.info("Loaded test guide") - analyzer = FlakyTestAnalyzer(test_guide=test_guide) - logger.info("Initialized analyzer") - - failed_test_results = os.environ.get("FAILED_TEST_RESULTS", "context/results.json") - logger.info(f"Checking for results file at {file_path / failed_test_results}") - if not Path(file_path / failed_test_results).exists(): - logger.info("No Flakeguard failed test results found") - return - - # github actions downloads into a folder with a file underneath it - report_file_name = os.environ.get("REPORT_FILE_NAME", "failed-test-report-with-logs.json") - df = read_results_file(file_path / failed_test_results / report_file_name) - logger.info("Read results file") - - analysis = df.apply(lambda x: analyzer(x), axis=1) - logger.info("Analyzed results") - - df_analysis = pd.json_normalize(analysis) # type: ignore - # write to /github/workspace to ensure the file can be used as an output - df_analysis.to_json( - "/github/workspace/analysis.jsonl", index=False, orient="records", lines=True - ) - logger.info("Wrote analysis to file") - - output_file = os.getenv("GITHUB_OUTPUT", file_path / "output.txt") - open(output_file, "w").write(f"analysis={file_path}/analysis.jsonl") - logger.info(f"Output file written to {output_file}") - - -if __name__ == "__main__": - main() diff --git a/actions/flakeguard-ai-analysis/package.json b/actions/flakeguard-ai-analysis/package.json deleted file mode 100644 index ce55dfda8..000000000 --- a/actions/flakeguard-ai-analysis/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "flakeguard-ai-analysis", - "version": "1.2.1", - "description": "AI Powered Analysis for FlakeGuard", - "private": true, - "scripts": {}, - "author": "@smartcontractkit", - "license": "MIT", - "dependencies": {}, - "repository": "https://github.com/smartcontractkit/.github" -} diff --git a/actions/flakeguard-ai-analysis/project.json b/actions/flakeguard-ai-analysis/project.json deleted file mode 100644 index 112605779..000000000 --- a/actions/flakeguard-ai-analysis/project.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "flakeguard-ai-analysis", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "projectType": "application", - "sourceRoot": "actions/flakeguard-ai-analysis", - "targets": {} -} diff --git a/actions/flakeguard-ai-analysis/requirements.txt b/actions/flakeguard-ai-analysis/requirements.txt deleted file mode 100644 index 0b1bb2b53..000000000 --- a/actions/flakeguard-ai-analysis/requirements.txt +++ /dev/null @@ -1,78 +0,0 @@ -aiohappyeyeballs==2.5.0 ; python_version >= "3.11" and python_version < "3.14" -aiohttp==3.11.13 ; python_version >= "3.11" and python_version < "3.14" -aiosignal==1.3.2 ; python_version >= "3.11" and python_version < "3.14" -alembic==1.15.1 ; python_version >= "3.11" and python_version < "3.14" -annotated-types==0.7.0 ; python_version >= "3.11" and python_version < "3.14" -anyio==4.8.0 ; python_version >= "3.11" and python_version < "3.14" -asyncer==0.0.8 ; python_version >= "3.11" and python_version < "3.14" -attrs==25.1.0 ; python_version >= "3.11" and python_version < "3.14" -backoff==2.2.1 ; python_version >= "3.11" and python_version < "3.14" -cachetools==5.5.2 ; python_version >= "3.11" and python_version < "3.14" -certifi==2025.1.31 ; python_version >= "3.11" and python_version < "3.14" -charset-normalizer==3.4.1 ; python_version >= "3.11" and python_version < "3.14" -click==8.1.8 ; python_version >= "3.11" and python_version < "3.14" -cloudpickle==3.1.1 ; python_version >= "3.11" and python_version < "3.14" -colorama==0.4.6 ; python_version >= "3.11" and python_version < "3.14" and (sys_platform == "win32" or platform_system == "Windows") -colorlog==6.9.0 ; python_version >= "3.11" and python_version < "3.14" -datasets==2.21.0 ; python_version >= "3.11" and python_version < "3.14" -dill==0.3.8 ; python_version >= "3.11" and python_version < "3.14" -diskcache==5.6.3 ; python_version >= "3.11" and python_version < "3.14" -distro==1.9.0 ; python_version >= "3.11" and python_version < "3.14" -dspy==2.6.11 ; python_version >= "3.11" and python_version < "3.14" -filelock==3.17.0 ; python_version >= "3.11" and python_version < "3.14" -frozenlist==1.5.0 ; python_version >= "3.11" and python_version < "3.14" -fsspec==2024.6.1 ; python_version >= "3.11" and python_version < "3.14" -fsspec[http]==2024.6.1 ; python_version >= "3.11" and python_version < "3.14" -greenlet==3.1.1 ; python_version < "3.14" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") and python_version >= "3.11" -h11==0.16.0 ; python_version >= "3.11" and python_version < "3.14" -httpcore==1.0.7 ; python_version >= "3.11" and python_version < "3.14" -httpx==0.28.1 ; python_version >= "3.11" and python_version < "3.14" -huggingface-hub==0.29.3 ; python_version >= "3.11" and python_version < "3.14" -idna==3.10 ; python_version >= "3.11" and python_version < "3.14" -importlib-metadata==8.6.1 ; python_version >= "3.11" and python_version < "3.14" -iniconfig==2.0.0 ; python_version >= "3.11" and python_version < "3.14" -jinja2==3.1.6 ; python_version >= "3.11" and python_version < "3.14" -jiter==0.9.0 ; python_version >= "3.11" and python_version < "3.14" -joblib==1.4.2 ; python_version >= "3.11" and python_version < "3.14" -json-repair==0.39.1 ; python_version >= "3.11" and python_version < "3.14" -jsonschema-specifications==2024.10.1 ; python_version >= "3.11" and python_version < "3.14" -jsonschema==4.23.0 ; python_version >= "3.11" and python_version < "3.14" -litellm==1.63.6 ; python_version >= "3.11" and python_version < "3.14" -magicattr==0.1.6 ; python_version >= "3.11" and python_version < "3.14" -mako==1.3.9 ; python_version >= "3.11" and python_version < "3.14" -markupsafe==3.0.2 ; python_version >= "3.11" and python_version < "3.14" -multidict==6.1.0 ; python_version >= "3.11" and python_version < "3.14" -multiprocess==0.70.16 ; python_version >= "3.11" and python_version < "3.14" -numpy==2.2.3 ; python_version >= "3.11" and python_version < "3.14" -openai==1.65.5 ; python_version >= "3.11" and python_version < "3.14" -optuna==4.2.1 ; python_version >= "3.11" and python_version < "3.14" -packaging==24.2 ; python_version >= "3.11" and python_version < "3.14" -pandas==2.2.3 ; python_version >= "3.11" and python_version < "3.14" -pluggy==1.5.0 ; python_version >= "3.11" and python_version < "3.14" -propcache==0.3.0 ; python_version >= "3.11" and python_version < "3.14" -pyarrow==19.0.1 ; python_version >= "3.11" and python_version < "3.14" -pydantic-core==2.27.2 ; python_version >= "3.11" and python_version < "3.14" -pydantic==2.10.6 ; python_version >= "3.11" and python_version < "3.14" -pytest==8.3.5 ; python_version >= "3.11" and python_version < "3.14" -python-dateutil==2.9.0.post0 ; python_version >= "3.11" and python_version < "3.14" -python-dotenv==1.0.1 ; python_version >= "3.11" and python_version < "3.14" -pytz==2025.1 ; python_version >= "3.11" and python_version < "3.14" -pyyaml==6.0.2 ; python_version >= "3.11" and python_version < "3.14" -referencing==0.36.2 ; python_version >= "3.11" and python_version < "3.14" -regex==2024.11.6 ; python_version >= "3.11" and python_version < "3.14" -requests==2.32.3 ; python_version >= "3.11" and python_version < "3.14" -rpds-py==0.23.1 ; python_version >= "3.11" and python_version < "3.14" -six==1.17.0 ; python_version >= "3.11" and python_version < "3.14" -sniffio==1.3.1 ; python_version >= "3.11" and python_version < "3.14" -sqlalchemy==2.0.38 ; python_version >= "3.11" and python_version < "3.14" -tenacity==9.0.0 ; python_version >= "3.11" and python_version < "3.14" -tiktoken==0.9.0 ; python_version >= "3.11" and python_version < "3.14" -tokenizers==0.21.0 ; python_version >= "3.11" and python_version < "3.14" -tqdm==4.67.1 ; python_version >= "3.11" and python_version < "3.14" -typing-extensions==4.12.2 ; python_version >= "3.11" and python_version < "3.14" -tzdata==2025.1 ; python_version >= "3.11" and python_version < "3.14" -ujson==5.10.0 ; python_version >= "3.11" and python_version < "3.14" -urllib3==2.3.0 ; python_version >= "3.11" and python_version < "3.14" -xxhash==3.5.0 ; python_version >= "3.11" and python_version < "3.14" -yarl==1.18.3 ; python_version >= "3.11" and python_version < "3.14" -zipp==3.21.0 ; python_version >= "3.11" and python_version < "3.14" diff --git a/actions/flakeguard-ai-analysis/src/__init__.py b/actions/flakeguard-ai-analysis/src/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/actions/flakeguard-ai-analysis/src/dspy_modules.py b/actions/flakeguard-ai-analysis/src/dspy_modules.py deleted file mode 100644 index a56106792..000000000 --- a/actions/flakeguard-ai-analysis/src/dspy_modules.py +++ /dev/null @@ -1,64 +0,0 @@ -import dspy - -from src.utils import get_repo_file - - -class FailedOutputsParser(dspy.Signature): - """Parse the output of the failed test. Refer to the test package and return the cause of the failure, the function that failed, and how many times it failed.""" - - failed_test_output: str = dspy.InputField() - test_package: str = dspy.InputField() - test_path: str = dspy.InputField() - cause_of_failure: str = dspy.OutputField( - desc="The cause of the failure, only return the error itself." - ) - function_that_failed: str = dspy.OutputField() - number_of_failed_runs: int = dspy.OutputField() - - -class FlakyTestClassifier(dspy.Signature): - """Classify the type of flaky test.""" - - parsed_failed_output: str = dspy.InputField() - type_of_flake: str = dspy.OutputField() - - -class FlakyTestGuideRecommender(dspy.Signature): - """Given the test guide, the parsed failed output, and the failing code, recommend steps to fix the flaky test. - Include insights not from the guide itself, adding retries and increasing timeouts are not an option. - The tests are running via github actions using self hosted runners. - Suggest ways the test could be rewritten to remove the inconsistent failures.""" - - parsed_failed_output: str = dspy.InputField() - type_of_flake: str = dspy.InputField() - test_guide: str = dspy.InputField() - failing_code: str = dspy.InputField() - guide_steps: str = dspy.OutputField( - desc="Specific steps from the test guide that will be useful to fix the test." - ) - rewrite_recommendations: str = dspy.OutputField() - steps_to_fix: str = dspy.OutputField() - - -class FlakyTestAnalyzer(dspy.Module): - def __init__(self, test_guide: str): - self.parser = dspy.Predict(FailedOutputsParser) - self.classifier = dspy.Predict(FlakyTestClassifier) - self.recommender = dspy.Predict(FlakyTestGuideRecommender) - self.test_guide = test_guide - - def forward(self, df_row): - parsed = self.parser( - failed_test_output=df_row.failed_outputs, - test_package=df_row.test_package, - test_path=df_row.test_path, - ) - classified = self.classifier(parsed_failed_output=parsed) - failed_file = get_repo_file(df_row.test_path) - recommended = self.recommender( - parsed_failed_output=parsed, - test_guide=self.test_guide, - type_of_flake=classified, - failing_code=failed_file, - ) - return {**parsed.toDict(), **classified.toDict(), **recommended.toDict()} diff --git a/actions/flakeguard-ai-analysis/src/utils.py b/actions/flakeguard-ai-analysis/src/utils.py deleted file mode 100644 index e20595d07..000000000 --- a/actions/flakeguard-ai-analysis/src/utils.py +++ /dev/null @@ -1,38 +0,0 @@ -import json -import logging -from pathlib import Path - -import dspy -import pandas as pd -import requests - -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - - -def get_repo_file( - file_path: str, - username: str = "smartcontractkit", - repo: str = "chainlink", - branch: str = "develop", -) -> str: - raw_url = ( - f"https://raw.githubusercontent.com/{username}/{repo}/{branch}/{file_path}" - ) - logger.info(f"Getting file at {raw_url}") - - response = requests.get(raw_url) - response.raise_for_status() - return response.text - - -def init() -> None: - llm = dspy.LM("openai/gpt-4o-mini") - dspy.configure(lm=llm) - - -def read_results_file(file: Path) -> pd.DataFrame: - logger.info(f"Reading results file at {file}") - data = json.loads(file.read_text()) - results = data.get("results", []) - return pd.DataFrame(results) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d401a2fbc..993cbc0ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -331,8 +331,6 @@ importers: actions/ecr-image-exists: {} - actions/flakeguard-ai-analysis: {} - actions/free-disk-space: {} actions/get-latest-github-release: {} @@ -436,6 +434,8 @@ importers: actions/pr-slack-alert: {} + actions/promote-image-ecr: {} + actions/pull-private-ecr-image: {} actions/release-tag-check: {} @@ -633,7 +633,7 @@ importers: version: 0.4.0 '@octokit/plugin-throttling': specifier: ^8.2.0 - version: 8.2.0(@octokit/core@3.6.0) + version: 8.2.0(@octokit/core@7.0.3) '@octokit/types': specifier: ^13.5.0 version: 13.5.0 @@ -2638,24 +2638,28 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] '@nx/nx-linux-arm64-musl@17.3.2': resolution: {integrity: sha512-yko3Xsezkn4tjeudZYLjxFl07X/YB84K+DLK7EFyh9elRWV/8VjFcQmBAKUS2r9LfaEMNXq8/vhWMOWYyWBrIA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] '@nx/nx-linux-x64-gnu@17.3.2': resolution: {integrity: sha512-RiPvvQMmlZmDu9HdT6n6sV0+fEkyAqR5VocrD5ZAzEzFIlh4dyVLripFR3+MD+QhIhXyPt/hpri1kq9sgs4wnw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] '@nx/nx-linux-x64-musl@17.3.2': resolution: {integrity: sha512-PWfVGmFsFJi+N1Nljg/jTKLHdufpGuHlxyfHqhDso/o4Qc0exZKSeZ1C63WkD7eTcT5kInifTQ/PffLiIDE3MA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] '@nx/nx-win32-arm64-msvc@17.3.2': resolution: {integrity: sha512-O+4FFPbQz1mqaIj+SVE02ppe7T9ELj7Z5soQct5TbRRhwjGaw5n5xaPPBW7jUuQe2L5htid1E82LJyq3JpVc8A==} @@ -2990,56 +2994,67 @@ packages: resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.41.1': resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.41.1': resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.41.1': resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loongarch64-gnu@4.41.1': resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.41.1': resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.41.1': resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.41.1': resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.41.1': resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.41.1': resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.41.1': resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==} @@ -3130,24 +3145,28 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [glibc] '@swc/core-linux-arm64-musl@1.7.36': resolution: {integrity: sha512-bqei2YDzvUfG0pth5W2xJaj0eG4XWYk0d/NJ75vBX6bkIzK6dC8iuKQ41jOfUWonnrAs7rTDDJW0sTn/evvRdw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] + libc: [musl] '@swc/core-linux-x64-gnu@1.7.36': resolution: {integrity: sha512-03maXTUyaBjeCxlDltmdzHje1ryQt1C4OWmmNgSSRXjLb+GNnAenwOJMSrcvHP/aNClD2pwsFCnYKDGy+sYE6w==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [glibc] '@swc/core-linux-x64-musl@1.7.36': resolution: {integrity: sha512-XXysqLkvjtQnXm1zHqLhy00UYPv/gk5OtwR732X+piNisnEbcJBqI8Qp9O7YvLWllRcoP8IMBGDWLGdGLSpViA==} engines: {node: '>=10'} cpu: [x64] os: [linux] + libc: [musl] '@swc/core-win32-arm64-msvc@1.7.36': resolution: {integrity: sha512-k7+dmb13a/zPw+E4XYfPmLZFWJgcOcBRKIjYl9nQErtYsgsg3Ji6TBbsvJVETy23lNHyewZ17V5Vq6NzaG0hzg==} @@ -10456,15 +10475,15 @@ snapshots: '@octokit/types': 14.1.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@8.2.0(@octokit/core@3.6.0)': + '@octokit/plugin-throttling@8.2.0(@octokit/core@5.2.1)': dependencies: - '@octokit/core': 3.6.0 + '@octokit/core': 5.2.1 '@octokit/types': 12.6.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@8.2.0(@octokit/core@5.2.1)': + '@octokit/plugin-throttling@8.2.0(@octokit/core@7.0.3)': dependencies: - '@octokit/core': 5.2.1 + '@octokit/core': 7.0.3 '@octokit/types': 12.6.0 bottleneck: 2.19.5 @@ -11099,54 +11118,6 @@ snapshots: optionalDependencies: vite: 5.4.19(@types/node@20.14.13) - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@20.14.9))': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@20.14.9) - - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@20.16.5))': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@20.16.5) - - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@20.17.57))': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@20.17.57) - - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@24.2.1))': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@24.2.1) - - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@24.3.0))': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@24.3.0) - - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@24.3.1))': - dependencies: - '@vitest/spy': 2.1.9 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.19(@types/node@24.3.1) - '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 @@ -15230,7 +15201,7 @@ snapshots: vitest@2.1.9(@types/node@20.14.9)(jsdom@24.1.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.9)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.13)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -15266,7 +15237,7 @@ snapshots: vitest@2.1.9(@types/node@20.16.5)(jsdom@24.1.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.16.5)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.13)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -15302,7 +15273,7 @@ snapshots: vitest@2.1.9(@types/node@20.17.57)(jsdom@24.1.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.17.57)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.13)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -15338,7 +15309,7 @@ snapshots: vitest@2.1.9(@types/node@24.2.1)(jsdom@24.1.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@24.2.1)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.13)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -15374,7 +15345,7 @@ snapshots: vitest@2.1.9(@types/node@24.3.0)(jsdom@24.1.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@24.3.0)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.13)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -15410,7 +15381,7 @@ snapshots: vitest@2.1.9(@types/node@24.3.1)(jsdom@24.1.0): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@24.3.1)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@20.14.13)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9