diff --git a/.craft.yml b/.craft.yml index 996b6f137..9025f453a 100644 --- a/.craft.yml +++ b/.craft.yml @@ -1,16 +1,15 @@ github: - owner: getsentry - repo: prevent-cli + owner: codecov + repo: codecov-cli changelogPolicy: auto targets: - # For direct binary downloads + cosign bundles - name: github tagPrefix: v checksums: - algorithm: sha256 - includeNames: /^(sentry-prevent-|sentry_prevent_|codecov|codecov_)cli.*/i + includeNames: /^(codecov|codecov_)cli.*/i - name: pypi - includeNames: /sentry_prevent_cli-*/i + includeNames: /codecov_cli-*/i diff --git a/.github/workflows/broadcast_api_changes.yml b/.github/workflows/broadcast_api_changes.yml index 96b78dddb..1ff215084 100644 --- a/.github/workflows/broadcast_api_changes.yml +++ b/.github/workflows/broadcast_api_changes.yml @@ -6,7 +6,7 @@ name: Broadcast API changes on: push: branches: ['main'] - paths: ['codecov-cli/codecovcli_commands', 'prevent-cli/preventcli_commands'] + paths: ['codecovcli_commands'] jobs: run: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de9ba8e60..2e3c43fa2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,6 +1,5 @@ -# This workflow builds both sentry-prevent-cli and codecov-cli on push to a -# release/* branch. These are later released by Craft and another workflow, -# respectively. +# This workflow builds codecov-cli on push to a release/* branch. The artifacts +# are later picked up and released by Craft. name: Build release on: @@ -25,26 +24,13 @@ jobs: run: pip install uv - name: Build codecov-cli sdist and bdist - run: | - cd codecov-cli - uv build - - - name: Build prevent-cli sdist and bdist - run: | - cd prevent-cli - uv build + run: uv build - name: Upload codecov-cli artifacts uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: codecov-cli_wheel - path: ./codecov-cli/dist/* - - - name: Upload prevent-cli artifacts - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: sentry-prevent-cli_wheel - path: ./prevent-cli/dist/* + path: ./dist/* build_assets: name: Build ${{ matrix.os }} binaries @@ -56,24 +42,16 @@ jobs: - os: macos-14 TARGET: macos CMD_BUILD: > - cd ./codecov-cli && uv run pyinstaller --target-arch universal2 -F ./codecov_cli/main.py && - mv ./dist/main ./dist/codecovcli_macos && - cd ../prevent-cli && - uv run pyinstaller --target-arch universal2 -F ./src/prevent_cli/main.py && - mv ./dist/main ./dist/sentry-prevent-cli_macos + mv ./dist/main ./dist/codecovcli_macos OUT_FILE_SUFFIX: _macos ASSET_MIME: application/octet-stream - os: windows-2022 TARGET: windows CMD_BUILD: > - Set-Location .\codecov-cli && uv run pyinstaller -F .\codecov_cli\main.py && - Move-Item -Path ".\dist\main.exe" -Destination ".\dist\codecovcli_windows.exe" && - Set-Location ..\prevent-cli && - uv run pyinstaller -F .\src\prevent_cli\main.py && - Move-Item -Path ".\dist\main.exe" -Destination ".\dist\sentry-prevent-cli_windows.exe" + Move-Item -Path ".\dist\main.exe" -Destination ".\dist\codecovcli_windows.exe" OUT_FILE_SUFFIX: _windows.exe ASSET_MIME: application/vnd.microsoft.portable-executable @@ -88,14 +66,8 @@ jobs: - name: Install dependencies run: | pip install uv - cd prevent-cli # Need to build pyyaml and ijson from sdists to get universal2 macos build to work uv sync --no-binary-package pyyaml --no-binary-package ijson - cd ../codecov-cli - uv sync --no-binary-package pyyaml --no-binary-package ijson - - - name: Run pre-build script - run: ./scripts/pre-build.sh - name: Build with pyinstaller for ${{matrix.TARGET}} run: ${{matrix.CMD_BUILD}} @@ -104,13 +76,7 @@ jobs: uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: codecovcli${{matrix.OUT_FILE_SUFFIX}} - path: ./codecov-cli/dist/codecovcli${{matrix.OUT_FILE_SUFFIX}} - - - name: Upload sentry-prevent-cli binary for ${{matrix.TARGET}} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: sentry-prevent-cli${{matrix.OUT_FILE_SUFFIX}} - path: ./prevent-cli/dist/sentry-prevent-cli${{matrix.OUT_FILE_SUFFIX}} + path: ./dist/codecovcli${{matrix.OUT_FILE_SUFFIX}} build_linux_assets: name: Build ${{ matrix.distro_name }}_${{ matrix.arch }} binary @@ -152,46 +118,23 @@ jobs: uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: codecovcli_${{ matrix.distro_name }}_${{ matrix.arch }} - path: ./codecov-cli/dist/codecovcli_* - - - name: Upload sentry-prevent-cli binary for ${{matrix.distro_name}}_${{ matrix.arch}} - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - with: - name: sentry-prevent-cli_${{ matrix.distro_name }}_${{ matrix.arch }} - path: ./prevent-cli/dist/sentry-prevent-cli_* + path: ./dist/codecovcli_* package_artifacts: # Craft requires one artifact named after the long commit sha of the release. name: Package assets for Craft runs-on: ubuntu-latest needs: [build_for_pypi, build_assets, build_linux_assets] - permissions: - id-token: write # needed for signing binaries with OIDC token via Cosign steps: - name: Download artifacts uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: - pattern: "{sentry-prevent-,codecov-,codecov}cli*" - - - name: Install Cosign - uses: sigstore/cosign-installer@d58896d6a1865668819e1d91763c7751a165e159 # v3.9.2 - - - name: Sign sentry-prevent-cli binaries - run: | - # Glob matches all prevent-cli binaries, not python wheel nor anything else. - for file in sentry-prevent-cli_*/sentry-prevent-cli_*; do - cosign sign-blob $file --bundle "$file.bundle" --yes; - # Test verification because why not - cosign verify-blob $file --bundle "$file.bundle" --certificate-identity-regexp="^https://github\.com/getsentry/prevent-cli/\.github/workflows/build\.yml@refs/heads/release/[0-9]+\.[0-9]+\.[0-9]+" --certificate-oidc-issuer=https://token.actions.githubusercontent.com - done + pattern: "{codecov-,codecov}cli*" - name: Upload release artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: ${{ github.sha }} path: | - sentry-prevent-cli* - sentry-prevent-cli_wheel/* codecovcli* codecov-cli_wheel/* - *.bundle diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6b0800cb..ebf63ed2a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: - name: Install dependencies run: | python -m pip install uv - uv sync --project prevent-cli + uv sync - name: Run command_dump run: | @@ -45,15 +45,15 @@ jobs: - name: Detect changes on commit run: | - if [ -n "$(git diff codecov-cli/codecovcli_commands prevent-cli/preventcli_commands)" ]; then + if [ -n "$(git diff codecovcli_commands)" ]; then echo "Please run `make command_dump` before submitting, or install the hooks" - echo "$(git diff codecov-cli/codecovcli_commands prevent-cli/preventcli_commands)" + echo "$(git diff codecovcli_commands)" exit 1 fi codecov-startup: runs-on: ubuntu-latest - if: ${{ !github.event.pull_request.head.repo.fork && github.repository_owner == 'getsentry' }} + if: ${{ !github.event.pull_request.head.repo.fork && github.repository_owner == 'codecov' }} steps: - uses: actions/checkout@v4 with: @@ -66,15 +66,15 @@ jobs: - name: Install CLI run: | pip install uv - uv sync --project codecov-cli + uv sync - name: Create commit in codecov run: | - uv run --project codecov-cli codecovcli -v create-commit -t ${{ secrets.CODECOV_TOKEN }} --git-service github + uv run codecovcli -v create-commit -t ${{ secrets.CODECOV_TOKEN }} --git-service github - name: Create commit report in codecov run: | - uv run --project codecov-cli codecovcli -v create-report -t ${{ secrets.CODECOV_TOKEN }} --git-service github + uv run codecovcli -v create-report -t ${{ secrets.CODECOV_TOKEN }} --git-service github build-test-upload: strategy: @@ -96,25 +96,16 @@ jobs: - name: Install dependencies run: | pip install uv - uv sync --project codecov-cli - uv sync --project prevent-cli + uv sync - name: Test with pytest run: | - cd codecov-cli uv run pytest --cov --junitxml=${{matrix.os}}-${{matrix.python-version}}junit.xml env: CODECOV_ENV: test - name: Dogfooding codecov-cli - if: ${{ !github.event.pull_request.head.repo.fork && github.repository_owner == 'getsentry' }} + if: ${{ !github.event.pull_request.head.repo.fork && github.repository_owner == 'codecov' }} run: | - uv run --project codecov-cli codecovcli -v do-upload --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag codecovcli - uv run --project codecov-cli codecovcli do-upload --report-type test_results --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag codecovcli - - - name: Dogfooding sentry-prevent-cli - if: ${{ !github.event.pull_request.head.repo.fork && github.repository_owner == 'getsentry' }} - run: | - uv run --project prevent-cli sentry-prevent-cli upload --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag sentry-prevent-cli - uv run --project prevent-cli sentry-prevent-cli upload --report-type test_results --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag sentry-prevent-cli - uv run --project prevent-cli sentry-prevent-cli upload --report-type test-results --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag sentry-prevent-cli + uv run codecovcli -v do-upload --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag codecovcli + uv run codecovcli do-upload --report-type test_results --fail-on-error -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag python${{matrix.python-version}} --flag codecovcli diff --git a/.github/workflows/release-codecov-cli.yml b/.github/workflows/release-codecov-cli.yml index a234b5070..b89e7729e 100644 --- a/.github/workflows/release-codecov-cli.yml +++ b/.github/workflows/release-codecov-cli.yml @@ -20,13 +20,13 @@ jobs: with: tag: ${{ github.ref_name }} fileName: codecov_cli-* - out-file-path: codecov-cli/dist + out-file-path: dist - name: Publish package to PyPi uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4 with: verbose: true - packages-dir: codecov-cli/dist + packages-dir: dist publish_release: name: Publish release diff --git a/codecov-cli/MANIFEST.in b/MANIFEST.in similarity index 100% rename from codecov-cli/MANIFEST.in rename to MANIFEST.in diff --git a/Makefile b/Makefile index 746120a42..a70d34112 100644 --- a/Makefile +++ b/Makefile @@ -24,10 +24,10 @@ lint: make lint.run test: - cd codecov-cli && uv run pytest + uv run pytest command_dump: - cd prevent-cli && uv run command_dump.py + uv run python command_dump.py tag.release: ifeq ($(shell echo ${version} | egrep "${tag_regex}"),) diff --git a/README.md b/README.md index 0d785c645..a3e9d15fe 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,281 @@ -# Sentry Prevent CLI +# CodecovCLI -[![codecov](https://codecov.io/gh/getsentry/prevent-cli/branch/main/graph/badge.svg)](https://codecov.io/gh/getsentry/prevent-cli) +[![codecov](https://codecov.io/github/codecov/codecov-cli/graph/badge.svg?token=K1xQn7DaxT)](https://codecov.io/github/codecov/codecov-cli) +[![Build-Test-Upload](https://github.com/codecov/codecov-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/codecov/codecov-cli/actions/workflows/ci.yml) -The Sentry Prevent CLI is responsible for uploading code coverage and test results to Sentry. It can be used directly or indirectly through our [Sentry Prevent GitHub Action](https://github.com/getsentry/prevent-action). - -> [!NOTE] -> The Codecov CLI is still around! We have moved the Codecov CLI's codebase into the `codecov-cli` sub-project in this repository because the Sentry Prevent CLI uses it as a backend and we wanted to keep the projects together in the `getsentry` organization. The Codecov CLI is still being maintained, improved, and published - just from this repository. See the sub-project's [README](/codecov-cli/README.md) for Codecov CLI specific information, the rest of this document will be about the Prevent CLI. +CodecovCLI is a new way for users to interact with Codecov directly from the user’s terminal or CI platform. Many Codecov features that require the user’s interference can be done via the codecovCLI. It saves commits, creates reports, uploads coverage and has many more features. +- [CodecovCLI](#codecovcli) - [Installing](#installing) + - [Using PIP](#using-pip) + - [As a Binary](#as-a-binary) + - [Integrity Checking the Binary](#integrity-checking-the-binary) +- [How to Upload to Codecov](#how-to-upload-to-codecov) + - [How to Get an Upload Token](#how-to-get-an-upload-token) - [Usage](#usage) +- [Codecov-cli Commands](#codecov-cli-commands) + - [create-commit](#create-commit) + - [create-report](#create-report) + - [do-upload](#do-upload) + - [pr-base-picking](#pr-base-picking) + - [send-notifications](#send-notifications) + - [empty-upload](#empty-upload) +- [Work in Progress Features](#work-in-progress-features) + - [Plugin System](#plugin-system) + - [Static Analysis](#static-analysis) - [Contributions](#contributions) + - [Requirements](#requirements) + - [Guidelines](#guidelines) + - [Dependencies](#dependencies) - [Releases](#releases) # Installing -### PyPI +## Using PIP +To use codecov-cli in your local machine, or your CI workflows, you need to install it: + +`pip install codecov-cli` + +The above command will download the latest version of Codecov-cli. If you wish to use a specific version, releases can be viewed [here](https://pypi.org/project/codecov-cli/#history). + +Note: If you're installing in a `pyenv` environment, you may need to call `pyenv rehash` before the CLI will work. + +## As a Binary +If you would like to use the CLI in an environment that does not have access to Python / PIP, you can install the CLI as a compiled binary. Linux and macOS releases can be found [here](https://cli.codecov.io/), along with SHASUMs and signatures for each released version. Binary releases are also available via [Github releases](https://github.com/codecov/codecov-cli/releases) on this repository. + +You can retrieve the Binary for Linux directly from your command line as follows: ``` -pip install sentry-prevent-cli +curl -Os https://cli.codecov.io/latest/linux/codecov +sudo chmod +x codecov +./codecov --help ``` -### Binary +### Integrity Checking the Binary + +The binary can be integrity checked using a SHASUM256 and SHASUM256.sig file. The process for macos and Linux is identical. Linux is as follows: -We build and publish binaries for Linux, MacOS, and Windows. See our GitHub Releases for the full list of OS/architecture combinations we build for. We'll use our macos binary for demonstration purposes here: ``` -curl -o sentry-prevent-cli -L "https://github.com/getsentry/prevent-cli/releases/latest/download/sentry-prevent-cli_macos" -chmod +x sentry-prevent-cli +curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import # One-time step +curl -Os https://cli.codecov.io/latest/linux/codecov +curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM +curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM.sig + +gpgv codecov.SHA256SUM.sig codecov.SHA256SUM + +shasum -a 256 -c codecov.SHA256SUM ``` -#### Verifying the binary -If you'd like, you may use Sigstore's Cosign to verify the integrity of your download against our provided Cosign bundles and identity details. For more information on Cosign along with installation instructions, see their [documentation](https://docs.sigstore.dev/cosign/system_config/installation). +For macos you will want to use the macos distributions of the binary (e.g., https://cli.codecov.io/latest/macos/codecov) + + +# How to Upload to Codecov +If desired, the CLI can be used as a replacement for our [NodeJS Binary Uploader](https://github.com/codecov/uploader). To use the CLI to upload from your CI workflow, you need to add these commands: -First get the appropriate Cosign bundle from our GitHub Release assets. Appending `.bundle` to the binary URL will get you the right file. ``` -curl -O -L "https://github.com/getsentry/prevent-cli/releases/latest/download/sentry-prevent-cli_macos.bundle" +pip install codecov-cli +codecovcli create-commit +codecovcli create-report +codecovcli do-upload ``` -Then, use `cosign` to verify the binary: +OR ``` -cosign verify-blob sentry-prevent-cli \ - --bundle sentry-prevent-cli_macos.bundle \ - --certificate-identity-regexp="^https://github\.com/getsentry/prevent-cli/\.github/workflows/build\.yml@refs/heads/release/[0-9]+\.[0-9]+\.[0-9]+" \ - --certificate-oidc-issuer=https://token.actions.githubusercontent.com +pip install codecov-cli +codecovcli upload-process ``` -The OIDC identity here is associated with the specific workflow run that signs the binary. If the verification succeeds, you can trust you've recieved the same binary we built in our GitHub Actions workflow. +codecovcli upload-process is a wrapper for create-commit, create-report and do-upload. + +You can customize the commands with the options aligned with each command. + +Note that these commands will automatically search your environment for a `$CODECOV_TOKEN` environment variable and use it if found. If you do not have a repository upload token, or global upload token, stored as an environment variable, you will need to pass it into **each command manually**, like so: `-t {$CODECOV_TOKEN}`. + +## How to Get an Upload Token +The following tokens are suitable for uploading: + +* The [Repository Upload Token](https://docs.codecov.com/docs/codecov-uploader#upload-token): Found on the settings page of your repository, also viewable on the `/new` page when setting up a repository on Codecov for the first time. +* The [Global Upload Token](https://docs.codecov.com/docs/codecov-uploader#organization-upload-token): Found on your organization settings page (e.g., `https://app.codecov.io/account///org-upload-token`). # Usage +If the installation is successful, running `codecovcli --help` will output the available commands along with the different general options that can be used with them. + +> [!IMPORTANT] +> For up-to-date command usage, please check the `codecovcli_commands` [file](https://github.com/codecov/codecov-cli/blob/main/codecovcli_commands) + +``` +Usage: codecovcli [OPTIONS] COMMAND [ARGS]... +``` +Codecov-cli supports user input. These inputs, along with their descriptions and usage contexts, are listed in the table below: + +| Input | Description | Usage | +| :---: | :---: | :---: | +| `--auto-load-params-from` | The CI/CD platform | Optional | +| `--codecov-yml-path` | The path for your codecov.yml | Optional +| `--enterprise-url` | Change the upload host (Enterprise use) | Optional +| `--version` | Codecov-cli's version | Optional +| `--verbose` or `-v` | Run the cli with verbose logging | Optional + +# Codecov-cli Commands +| Command | Description | +| :---: | :---: | +| `create-commit` | Saves the commit's metadata in codecov, it's only necessary to run this once per commit +| `create-report` | Creates an empty report in codecov with initial data e.g. report name, report's commit +| `do-upload` | Searches for and uploads coverage data to codecov +| `pr-base-picking` | Tells codecov that you want to explicitly define a base for your PR +| `upload-process` | A wrapper for 3 commands. Create-commit, create-report and do-upload. You can use this command to upload to codecov instead of using the previously mentioned commands. +| `send-notifications` | A command that tells Codecov that you finished uploading and you want to be sent notifications. To disable automatically sent notifications please consider adding manual_trigger to your codecov.yml, so it will look like codecov: notify: manual_trigger: true. +>**Note**: Every command has its own different options that will be mentioned later in this doc. Codecov will try to load these options from your CI environment variables, if not, it will try to load them from git, if not found, you may need to add them manually. + + + +## create-commit +`codecovcli create-commit [Options]` + +| Option | Description | Usage +| :---: | :---: | :---: | +| -C, --sha, --commit-sha | Commit SHA (with 40 chars) | Required +|--parent-sha | SHA (with 40 chars) of what should be the parent of this commit | Optional +|-P, --pr, --pull-request-number| Specify the pull request number manually. Used to override pre-existing CI environment variables | Optional +|-B, --branch | Branch to which this commit belongs to | Optional +|-r, --slug | owner/repo slug used instead of the private repo token in Self-hosted | Required +|-t, --token | Codecov upload token | Required +|--git-service | Git Provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Required +|-h, --help | Shows usage, and command options + + +## create-report +`codecovcli create-report [OPTIONS]` + +| Option | Description | Usage +| :---: | :---: | :---: | +| -C, --sha, --commit-sha | Commit SHA (with 40 chars) | Required +|-r, --slug | owner/repo slug used instead of the private repo token in Self-hosted | Required +|-t, --token | Codecov upload token | Required +|--git-service | Git Provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Required +|-h, --help | Shows usage, and command options + +## do-upload +`codecovcli do-upload [OPTIONS]` + +| Option | Description | Usage +| :---: | :---: | :---: | +|-C, --sha, --commit-sha| Commit SHA (with 40 chars) | Required +|--network-root-folder | Root folder from which to consider paths on the network section default: (Current working directory) | Optional +|-s, --dir, --coverage-files-search-root-folder | Folder where to search for coverage files default: (Current Working Directory) | Optional +|--exclude, --coverage-files-search-exclude-folder | Folders to exclude from search | Optional +|-f, --file, --coverage-files-search-direct-file | Explicit files to upload | Optional +|--recurse-submodules | Whether to enumerate files inside of submodules for path-fixing purposes. Off by default. | Optional +|--disable-search | Disable search for coverage files. This is helpful when specifying what files you want to upload with the --file option.| Optional +|-b, --build, --build-code | Specify the build number manually | Optional +|--build-url | The URL of the build where this is running | Optional +|--job-code | The job code for the CI run | Optional +|-t, --token | Codecov upload token | Required +|-n, --name | Custom defined name of the upload. Visible in Codecov UI | Optional +|-B, --branch | Branch to which this commit belongs to | Optional +|-r, --slug | owner/repo slug | Required +|-P, --pr, --pull-request-number | Specify the pull request number manually. Used to override pre-existing CI environment variables | Optional +|-e, --env, --env-var | Specify environment variables to be included with this build. | Optional +|-F, --flag | Flag the upload to group coverage metrics. Multiple flags allowed. | Optional +|--plugin | plugins to run. Options: xcode, gcov, pycoverage. The default behavior runs them all. | Optional +|-Z, --fail-on-error | Exit with non-zero code in case of error uploading.|Optional +|-d, --dry-run | Don't upload files to Codecov | Optional +|--legacy, --use-legacy-uploader | Use the legacy upload endpoint | Optional +|--git-service | Git Provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Required +|-h, --help | Shows usage, and command options -Todo +## pr-base-picking +`codecovcli pr-base-picking [OPTIONS]` + +| Option | Description | Usage +| :---: | :---: | :---: | +|--base-sha | Base commit SHA (with 40 chars) | Required +|--pr | Pull Request id to associate commit with | Required +|--slug | owner/repo slug | Required +|-t, --token| Codecov upload token | Required +|--service | Git provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Optional +|-h, --help | Shows usage, and command options + +## send-notifications +`codecovcli send-notifications [OPTIONS]` + +| Option | Description | Usage +| :---: | :---: | :---: | +| -C, --sha, --commit-sha TEXT |Commit SHA (with 40 chars) | Required +| -r, --slug TEXT |owner/repo slug used instead of the private repo token in Self-hosted | Required +| -t, --token TEXT |Codecov upload token | Required +| --git-service | Git provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Optional +| -h,--help |Show this message and exit. + +## empty-upload + +Used if the changes made don't need testing, but PRs require a passing codecov status to be merged. +This command will scan the files in the commit and send passing status checks configured if all the changed files +are ignored by codecov (including README and configuration files) + +`Usage: codecovcli empty-upload [OPTIONS]` + +| Options | Description | usage | +| :--------------------------: | :----------------------------------------------------------------------------------------: | :------: | +| -C, --sha, --commit-sha TEXT | Commit SHA (with 40 chars) | Required | +| -t, --token TEXT | Codecov upload token | Required | +| -r, --slug TEXT | owner/repo slug used instead of the private repo token in Self-hosted | Optional | +| --force | Always emit passing checks regardless of changed files | Optional | +| -Z, --fail-on-error | Exit with non-zero code in case of error | Optional | +| --git-service | Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Optional | +| -h, --help | Show this message and exit. | Optional | + +# Work in Progress Features + +The following features are somewhat implemented in code, but are not yet meant for use. These features will be documented once they are fully implemented in the CLI. + +## Plugin System + +To provide extensibility to some of its commands, the CLI makes use of a plugin system. For most cases, the default commands are sufficient. But in some cases, having some custom logic specific to your use case can be beneficial. Note that full documentation of the plugin system is pending, as the feature is still heavily a work in progress. # Contributions -Todo +This repository, like all of Codecov's repositories, strives to follow our general [Contributing guidelines](https://github.com/codecov/contributing). If you're considering making a contribution to this repository, we encourage review of our Contributing guidelines first. + +## Requirements + +Most of this package is a very conventional Python package. The main difference is the static the CLI's analysis module uses both git submodules and C code + +Before installing, one should pull the submodules with: + +``` +git submodule update --init +``` +Then, install dependencies with +``` +pip install -r requirements.txt +python -m pip install --editable . +``` + +The C code shouldn't require any additional setup to get running, but depending on your environment, you may be prompted to install compilers and supporting tools. If errors are generated during installation, it is likely due to missing dependencies / tools required of the C code. In many cases, resulting error messages should be clear enough to determine what is missing and how to install it, but common errors will be collected here as they are encountered. + +## Guidelines + +There are a few guidelines when developing in this system. Some notable folders: + +1. `commands` - It's the folder that interacts with the caller. This is where the commands themselves should reside. These commands are not meant to do heavy lifting. They only do wiring, which is mostly parsing the input parameters. +2. `services` - It's where the heavy logic resides. It's mostly organized by which command needs them. Commands should generally be thin wrappers around these services. +3. `helpers` - This is meant for logic that is useful across different commands. For example, logging helpers, or the logic that searches folders. + +## Dependencies + +If external dependencies need to be added, it's important to check whether those dependencies have wheels available on PyPI with the `any` or `universal2` platform tags. If those dependencies don't have those wheels available, then they will need to built during the CI, so they will have to be added to the list of +dependencies in the `--no-binary` flag when building the requirements for the macos release in `build_assets.yml`. # Releases -Todo +The standard way to making a new release is the following: +1) Open a PR that increases the version number in pyproject.toml. As a rule of thumb, just add one to the micro/patch version (e.g., v0.1.6 -> v0.1.7). + +2) Get the up-to-date master branch locally and run the `tag.release` command from the Makefile. + +`$ make tag.release version=v` + +The version tag must match the regex defined on the Makefile (`tag_regex := ^v([0-9]{1,}\.){2}[0-9]{1,}([-_]\w+)?$`). + +>**Note**: \ +>Releases with `test` word in them are created as `draft`. \ +>Releases with `beta` word in them are created as `pre-release`. diff --git a/codecov-cli/LICENSE b/codecov-cli/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/codecov-cli/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/codecov-cli/README.md b/codecov-cli/README.md deleted file mode 100644 index 914d30092..000000000 --- a/codecov-cli/README.md +++ /dev/null @@ -1,281 +0,0 @@ -# CodecovCLI - -[![codecov](https://codecov.io/github/getsentry/prevent-cli/graph/badge.svg?token=K1xQn7DaxT)](https://codecov.io/github/getsentry/prevent-cli) -[![Build-Test-Upload](https://github.com/getsentry/prevent-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/getsentry/prevent-cli/actions/workflows/ci.yml) - -CodecovCLI is a new way for users to interact with Codecov directly from the user’s terminal or CI platform. Many Codecov features that require the user’s interference can be done via the codecovCLI. It saves commits, creates reports, uploads coverage and has many more features. - -- [CodecovCLI](#codecovcli) -- [Installing](#installing) - - [Using PIP](#using-pip) - - [As a Binary](#as-a-binary) - - [Integrity Checking the Binary](#integrity-checking-the-binary) -- [How to Upload to Codecov](#how-to-upload-to-codecov) - - [How to Get an Upload Token](#how-to-get-an-upload-token) -- [Usage](#usage) -- [Codecov-cli Commands](#codecov-cli-commands) - - [create-commit](#create-commit) - - [create-report](#create-report) - - [do-upload](#do-upload) - - [pr-base-picking](#pr-base-picking) - - [send-notifications](#send-notifications) - - [empty-upload](#empty-upload) -- [Work in Progress Features](#work-in-progress-features) - - [Plugin System](#plugin-system) - - [Static Analysis](#static-analysis) -- [Contributions](#contributions) - - [Requirements](#requirements) - - [Guidelines](#guidelines) - - [Dependencies](#dependencies) -- [Releases](#releases) - -# Installing - -## Using PIP -To use codecov-cli in your local machine, or your CI workflows, you need to install it: - -`pip install codecov-cli` - -The above command will download the latest version of Codecov-cli. If you wish to use a specific version, releases can be viewed [here](https://pypi.org/project/codecov-cli/#history). - -Note: If you're installing in a `pyenv` environment, you may need to call `pyenv rehash` before the CLI will work. - -## As a Binary -If you would like to use the CLI in an environment that does not have access to Python / PIP, you can install the CLI as a compiled binary. Linux and macOS releases can be found [here](https://cli.codecov.io/), along with SHASUMs and signatures for each released version. Binary releases are also available via [Github releases](https://github.com/getsentry/prevent-cli/releases) on this repository. - -You can retrieve the Binary for Linux directly from your command line as follows: - -``` -curl -Os https://cli.codecov.io/latest/linux/codecov -sudo chmod +x codecov -./codecov --help -``` - -### Integrity Checking the Binary - -The binary can be integrity checked using a SHASUM256 and SHASUM256.sig file. The process for macos and Linux is identical. Linux is as follows: - -``` -curl https://keybase.io/codecovsecurity/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import # One-time step -curl -Os https://cli.codecov.io/latest/linux/codecov -curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM -curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM.sig - -gpgv codecov.SHA256SUM.sig codecov.SHA256SUM - -shasum -a 256 -c codecov.SHA256SUM -``` - -For macos you will want to use the macos distributions of the binary (e.g., https://cli.codecov.io/latest/macos/codecov) - - -# How to Upload to Codecov -If desired, the CLI can be used as a replacement for our [NodeJS Binary Uploader](https://github.com/codecov/uploader). To use the CLI to upload from your CI workflow, you need to add these commands: - -``` -pip install codecov-cli -codecovcli create-commit -codecovcli create-report -codecovcli do-upload -``` -OR -``` -pip install codecov-cli -codecovcli upload-process -``` -codecovcli upload-process is a wrapper for create-commit, create-report and do-upload. - -You can customize the commands with the options aligned with each command. - -Note that these commands will automatically search your environment for a `$CODECOV_TOKEN` environment variable and use it if found. If you do not have a repository upload token, or global upload token, stored as an environment variable, you will need to pass it into **each command manually**, like so: `-t {$CODECOV_TOKEN}`. - -## How to Get an Upload Token -The following tokens are suitable for uploading: - -* The [Repository Upload Token](https://docs.codecov.com/docs/codecov-uploader#upload-token): Found on the settings page of your repository, also viewable on the `/new` page when setting up a repository on Codecov for the first time. -* The [Global Upload Token](https://docs.codecov.com/docs/codecov-uploader#organization-upload-token): Found on your organization settings page (e.g., `https://app.codecov.io/account///org-upload-token`). - -# Usage -If the installation is successful, running `codecovcli --help` will output the available commands along with the different general options that can be used with them. - -> [!IMPORTANT] -> For up-to-date command usage, please check the `codecovcli_commands` [file](https://github.com/getsentry/prevent-cli/blob/main/codecov-cli/codecovcli_commands) - -``` -Usage: codecovcli [OPTIONS] COMMAND [ARGS]... -``` -Codecov-cli supports user input. These inputs, along with their descriptions and usage contexts, are listed in the table below: - -| Input | Description | Usage | -| :---: | :---: | :---: | -| `--auto-load-params-from` | The CI/CD platform | Optional | -| `--codecov-yml-path` | The path for your codecov.yml | Optional -| `--enterprise-url` | Change the upload host (Enterprise use) | Optional -| `--version` | Codecov-cli's version | Optional -| `--verbose` or `-v` | Run the cli with verbose logging | Optional - -# Codecov-cli Commands -| Command | Description | -| :---: | :---: | -| `create-commit` | Saves the commit's metadata in codecov, it's only necessary to run this once per commit -| `create-report` | Creates an empty report in codecov with initial data e.g. report name, report's commit -| `do-upload` | Searches for and uploads coverage data to codecov -| `pr-base-picking` | Tells codecov that you want to explicitly define a base for your PR -| `upload-process` | A wrapper for 3 commands. Create-commit, create-report and do-upload. You can use this command to upload to codecov instead of using the previously mentioned commands. -| `send-notifications` | A command that tells Codecov that you finished uploading and you want to be sent notifications. To disable automatically sent notifications please consider adding manual_trigger to your codecov.yml, so it will look like codecov: notify: manual_trigger: true. ->**Note**: Every command has its own different options that will be mentioned later in this doc. Codecov will try to load these options from your CI environment variables, if not, it will try to load them from git, if not found, you may need to add them manually. - - - -## create-commit -`codecovcli create-commit [Options]` - -| Option | Description | Usage -| :---: | :---: | :---: | -| -C, --sha, --commit-sha | Commit SHA (with 40 chars) | Required -|--parent-sha | SHA (with 40 chars) of what should be the parent of this commit | Optional -|-P, --pr, --pull-request-number| Specify the pull request number manually. Used to override pre-existing CI environment variables | Optional -|-B, --branch | Branch to which this commit belongs to | Optional -|-r, --slug | owner/repo slug used instead of the private repo token in Self-hosted | Required -|-t, --token | Codecov upload token | Required -|--git-service | Git Provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Required -|-h, --help | Shows usage, and command options - - -## create-report -`codecovcli create-report [OPTIONS]` - -| Option | Description | Usage -| :---: | :---: | :---: | -| -C, --sha, --commit-sha | Commit SHA (with 40 chars) | Required -|-r, --slug | owner/repo slug used instead of the private repo token in Self-hosted | Required -|-t, --token | Codecov upload token | Required -|--git-service | Git Provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Required -|-h, --help | Shows usage, and command options - -## do-upload -`codecovcli do-upload [OPTIONS]` - -| Option | Description | Usage -| :---: | :---: | :---: | -|-C, --sha, --commit-sha| Commit SHA (with 40 chars) | Required -|--network-root-folder | Root folder from which to consider paths on the network section default: (Current working directory) | Optional -|-s, --dir, --coverage-files-search-root-folder | Folder where to search for coverage files default: (Current Working Directory) | Optional -|--exclude, --coverage-files-search-exclude-folder | Folders to exclude from search | Optional -|-f, --file, --coverage-files-search-direct-file | Explicit files to upload | Optional -|--recurse-submodules | Whether to enumerate files inside of submodules for path-fixing purposes. Off by default. | Optional -|--disable-search | Disable search for coverage files. This is helpful when specifying what files you want to upload with the --file option.| Optional -|-b, --build, --build-code | Specify the build number manually | Optional -|--build-url | The URL of the build where this is running | Optional -|--job-code | The job code for the CI run | Optional -|-t, --token | Codecov upload token | Required -|-n, --name | Custom defined name of the upload. Visible in Codecov UI | Optional -|-B, --branch | Branch to which this commit belongs to | Optional -|-r, --slug | owner/repo slug | Required -|-P, --pr, --pull-request-number | Specify the pull request number manually. Used to override pre-existing CI environment variables | Optional -|-e, --env, --env-var | Specify environment variables to be included with this build. | Optional -|-F, --flag | Flag the upload to group coverage metrics. Multiple flags allowed. | Optional -|--plugin | plugins to run. Options: xcode, gcov, pycoverage. The default behavior runs them all. | Optional -|-Z, --fail-on-error | Exit with non-zero code in case of error uploading.|Optional -|-d, --dry-run | Don't upload files to Codecov | Optional -|--legacy, --use-legacy-uploader | Use the legacy upload endpoint | Optional -|--git-service | Git Provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Required -|-h, --help | Shows usage, and command options - -## pr-base-picking -`codecovcli pr-base-picking [OPTIONS]` - -| Option | Description | Usage -| :---: | :---: | :---: | -|--base-sha | Base commit SHA (with 40 chars) | Required -|--pr | Pull Request id to associate commit with | Required -|--slug | owner/repo slug | Required -|-t, --token| Codecov upload token | Required -|--service | Git provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Optional -|-h, --help | Shows usage, and command options - -## send-notifications -`codecovcli send-notifications [OPTIONS]` - -| Option | Description | Usage -| :---: | :---: | :---: | -| -C, --sha, --commit-sha TEXT |Commit SHA (with 40 chars) | Required -| -r, --slug TEXT |owner/repo slug used instead of the private repo token in Self-hosted | Required -| -t, --token TEXT |Codecov upload token | Required -| --git-service | Git provider. Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Optional -| -h,--help |Show this message and exit. - -## empty-upload - -Used if the changes made don't need testing, but PRs require a passing codecov status to be merged. -This command will scan the files in the commit and send passing status checks configured if all the changed files -are ignored by codecov (including README and configuration files) - -`Usage: codecovcli empty-upload [OPTIONS]` - -| Options | Description | usage | -| :--------------------------: | :----------------------------------------------------------------------------------------: | :------: | -| -C, --sha, --commit-sha TEXT | Commit SHA (with 40 chars) | Required | -| -t, --token TEXT | Codecov upload token | Required | -| -r, --slug TEXT | owner/repo slug used instead of the private repo token in Self-hosted | Optional | -| --force | Always emit passing checks regardless of changed files | Optional | -| -Z, --fail-on-error | Exit with non-zero code in case of error | Optional | -| --git-service | Options: github, gitlab, bitbucket, github_enterprise, gitlab_enterprise, bitbucket_server | Optional | -| -h, --help | Show this message and exit. | Optional | - -# Work in Progress Features - -The following features are somewhat implemented in code, but are not yet meant for use. These features will be documented once they are fully implemented in the CLI. - -## Plugin System - -To provide extensibility to some of its commands, the CLI makes use of a plugin system. For most cases, the default commands are sufficient. But in some cases, having some custom logic specific to your use case can be beneficial. Note that full documentation of the plugin system is pending, as the feature is still heavily a work in progress. - -# Contributions - -This repository, like all of Codecov's repositories, strives to follow our general [Contributing guidelines](https://github.com/codecov/contributing). If you're considering making a contribution to this repository, we encourage review of our Contributing guidelines first. - -## Requirements - -Most of this package is a very conventional Python package. The main difference is the static the CLI's analysis module uses both git submodules and C code - -Before installing, one should pull the submodules with: - -``` -git submodule update --init -``` -Then, install dependencies with -``` -pip install -r requirements.txt -python -m pip install --editable . -``` - -The C code shouldn't require any additional setup to get running, but depending on your environment, you may be prompted to install compilers and supporting tools. If errors are generated during installation, it is likely due to missing dependencies / tools required of the C code. In many cases, resulting error messages should be clear enough to determine what is missing and how to install it, but common errors will be collected here as they are encountered. - -## Guidelines - -There are a few guidelines when developing in this system. Some notable folders: - -1. `commands` - It's the folder that interacts with the caller. This is where the commands themselves should reside. These commands are not meant to do heavy lifting. They only do wiring, which is mostly parsing the input parameters. -2. `services` - It's where the heavy logic resides. It's mostly organized by which command needs them. Commands should generally be thin wrappers around these services. -3. `helpers` - This is meant for logic that is useful across different commands. For example, logging helpers, or the logic that searches folders. - -## Dependencies - -If external dependencies need to be added, it's important to check whether those dependencies have wheels available on PyPI with the `any` or `universal2` platform tags. If those dependencies don't have those wheels available, then they will need to built during the CI, so they will have to be added to the list of -dependencies in the `--no-binary` flag when building the requirements for the macos release in `build_assets.yml`. - -# Releases - -The standard way to making a new release is the following: -1) Open a PR that increases the version number in pyproject.toml. As a rule of thumb, just add one to the micro/patch version (e.g., v0.1.6 -> v0.1.7). - -2) Get the up-to-date master branch locally and run the `tag.release` command from the Makefile. - -`$ make tag.release version=v` - -The version tag must match the regex defined on the Makefile (`tag_regex := ^v([0-9]{1,}\.){2}[0-9]{1,}([-_]\w+)?$`). - ->**Note**: \ ->Releases with `test` word in them are created as `draft`. \ ->Releases with `beta` word in them are created as `pre-release`. diff --git a/codecov-cli/codecov_cli/__init__.py b/codecov_cli/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/__init__.py rename to codecov_cli/__init__.py diff --git a/codecov-cli/codecov_cli/branding.py b/codecov_cli/branding.py similarity index 100% rename from codecov-cli/codecov_cli/branding.py rename to codecov_cli/branding.py diff --git a/codecov-cli/codecov_cli/commands/__init__.py b/codecov_cli/commands/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/commands/__init__.py rename to codecov_cli/commands/__init__.py diff --git a/codecov-cli/codecov_cli/commands/base_picking.py b/codecov_cli/commands/base_picking.py similarity index 100% rename from codecov-cli/codecov_cli/commands/base_picking.py rename to codecov_cli/commands/base_picking.py diff --git a/codecov-cli/codecov_cli/commands/commit.py b/codecov_cli/commands/commit.py similarity index 100% rename from codecov-cli/codecov_cli/commands/commit.py rename to codecov_cli/commands/commit.py diff --git a/codecov-cli/codecov_cli/commands/create_report_result.py b/codecov_cli/commands/create_report_result.py similarity index 100% rename from codecov-cli/codecov_cli/commands/create_report_result.py rename to codecov_cli/commands/create_report_result.py diff --git a/codecov-cli/codecov_cli/commands/empty_upload.py b/codecov_cli/commands/empty_upload.py similarity index 100% rename from codecov-cli/codecov_cli/commands/empty_upload.py rename to codecov_cli/commands/empty_upload.py diff --git a/codecov-cli/codecov_cli/commands/get_report_results.py b/codecov_cli/commands/get_report_results.py similarity index 100% rename from codecov-cli/codecov_cli/commands/get_report_results.py rename to codecov_cli/commands/get_report_results.py diff --git a/codecov-cli/codecov_cli/commands/labelanalysis.py b/codecov_cli/commands/labelanalysis.py similarity index 100% rename from codecov-cli/codecov_cli/commands/labelanalysis.py rename to codecov_cli/commands/labelanalysis.py diff --git a/codecov-cli/codecov_cli/commands/process_test_results.py b/codecov_cli/commands/process_test_results.py similarity index 100% rename from codecov-cli/codecov_cli/commands/process_test_results.py rename to codecov_cli/commands/process_test_results.py diff --git a/codecov-cli/codecov_cli/commands/report.py b/codecov_cli/commands/report.py similarity index 100% rename from codecov-cli/codecov_cli/commands/report.py rename to codecov_cli/commands/report.py diff --git a/codecov-cli/codecov_cli/commands/send_notifications.py b/codecov_cli/commands/send_notifications.py similarity index 100% rename from codecov-cli/codecov_cli/commands/send_notifications.py rename to codecov_cli/commands/send_notifications.py diff --git a/codecov-cli/codecov_cli/commands/staticanalysis.py b/codecov_cli/commands/staticanalysis.py similarity index 100% rename from codecov-cli/codecov_cli/commands/staticanalysis.py rename to codecov_cli/commands/staticanalysis.py diff --git a/codecov-cli/codecov_cli/commands/upload.py b/codecov_cli/commands/upload.py similarity index 100% rename from codecov-cli/codecov_cli/commands/upload.py rename to codecov_cli/commands/upload.py diff --git a/codecov-cli/codecov_cli/commands/upload_coverage.py b/codecov_cli/commands/upload_coverage.py similarity index 100% rename from codecov-cli/codecov_cli/commands/upload_coverage.py rename to codecov_cli/commands/upload_coverage.py diff --git a/codecov-cli/codecov_cli/commands/upload_process.py b/codecov_cli/commands/upload_process.py similarity index 100% rename from codecov-cli/codecov_cli/commands/upload_process.py rename to codecov_cli/commands/upload_process.py diff --git a/codecov-cli/codecov_cli/fallbacks.py b/codecov_cli/fallbacks.py similarity index 100% rename from codecov-cli/codecov_cli/fallbacks.py rename to codecov_cli/fallbacks.py diff --git a/codecov-cli/codecov_cli/helpers/__init__.py b/codecov_cli/helpers/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/__init__.py rename to codecov_cli/helpers/__init__.py diff --git a/codecov-cli/codecov_cli/helpers/args.py b/codecov_cli/helpers/args.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/args.py rename to codecov_cli/helpers/args.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/__init__.py b/codecov_cli/helpers/ci_adapters/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/__init__.py rename to codecov_cli/helpers/ci_adapters/__init__.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/appveyor_ci.py b/codecov_cli/helpers/ci_adapters/appveyor_ci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/appveyor_ci.py rename to codecov_cli/helpers/ci_adapters/appveyor_ci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/azure_pipelines.py b/codecov_cli/helpers/ci_adapters/azure_pipelines.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/azure_pipelines.py rename to codecov_cli/helpers/ci_adapters/azure_pipelines.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/base.py b/codecov_cli/helpers/ci_adapters/base.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/base.py rename to codecov_cli/helpers/ci_adapters/base.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/bitbucket_ci.py b/codecov_cli/helpers/ci_adapters/bitbucket_ci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/bitbucket_ci.py rename to codecov_cli/helpers/ci_adapters/bitbucket_ci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/bitrise_ci.py b/codecov_cli/helpers/ci_adapters/bitrise_ci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/bitrise_ci.py rename to codecov_cli/helpers/ci_adapters/bitrise_ci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/buildkite.py b/codecov_cli/helpers/ci_adapters/buildkite.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/buildkite.py rename to codecov_cli/helpers/ci_adapters/buildkite.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/circleci.py b/codecov_cli/helpers/ci_adapters/circleci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/circleci.py rename to codecov_cli/helpers/ci_adapters/circleci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/cirrus_ci.py b/codecov_cli/helpers/ci_adapters/cirrus_ci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/cirrus_ci.py rename to codecov_cli/helpers/ci_adapters/cirrus_ci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/cloudbuild.py b/codecov_cli/helpers/ci_adapters/cloudbuild.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/cloudbuild.py rename to codecov_cli/helpers/ci_adapters/cloudbuild.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/codebuild.py b/codecov_cli/helpers/ci_adapters/codebuild.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/codebuild.py rename to codecov_cli/helpers/ci_adapters/codebuild.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/droneci.py b/codecov_cli/helpers/ci_adapters/droneci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/droneci.py rename to codecov_cli/helpers/ci_adapters/droneci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/github_actions.py b/codecov_cli/helpers/ci_adapters/github_actions.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/github_actions.py rename to codecov_cli/helpers/ci_adapters/github_actions.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/gitlab_ci.py b/codecov_cli/helpers/ci_adapters/gitlab_ci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/gitlab_ci.py rename to codecov_cli/helpers/ci_adapters/gitlab_ci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/heroku.py b/codecov_cli/helpers/ci_adapters/heroku.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/heroku.py rename to codecov_cli/helpers/ci_adapters/heroku.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/jenkins.py b/codecov_cli/helpers/ci_adapters/jenkins.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/jenkins.py rename to codecov_cli/helpers/ci_adapters/jenkins.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/local.py b/codecov_cli/helpers/ci_adapters/local.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/local.py rename to codecov_cli/helpers/ci_adapters/local.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/teamcity.py b/codecov_cli/helpers/ci_adapters/teamcity.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/teamcity.py rename to codecov_cli/helpers/ci_adapters/teamcity.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/travis_ci.py b/codecov_cli/helpers/ci_adapters/travis_ci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/travis_ci.py rename to codecov_cli/helpers/ci_adapters/travis_ci.py diff --git a/codecov-cli/codecov_cli/helpers/ci_adapters/woodpeckerci.py b/codecov_cli/helpers/ci_adapters/woodpeckerci.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/ci_adapters/woodpeckerci.py rename to codecov_cli/helpers/ci_adapters/woodpeckerci.py diff --git a/codecov-cli/codecov_cli/helpers/config.py b/codecov_cli/helpers/config.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/config.py rename to codecov_cli/helpers/config.py diff --git a/codecov-cli/codecov_cli/helpers/encoder.py b/codecov_cli/helpers/encoder.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/encoder.py rename to codecov_cli/helpers/encoder.py diff --git a/codecov-cli/codecov_cli/helpers/folder_searcher.py b/codecov_cli/helpers/folder_searcher.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/folder_searcher.py rename to codecov_cli/helpers/folder_searcher.py diff --git a/codecov-cli/codecov_cli/helpers/git.py b/codecov_cli/helpers/git.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/git.py rename to codecov_cli/helpers/git.py diff --git a/codecov-cli/codecov_cli/helpers/git_services/__init__.py b/codecov_cli/helpers/git_services/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/git_services/__init__.py rename to codecov_cli/helpers/git_services/__init__.py diff --git a/codecov-cli/codecov_cli/helpers/git_services/github.py b/codecov_cli/helpers/git_services/github.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/git_services/github.py rename to codecov_cli/helpers/git_services/github.py diff --git a/codecov-cli/codecov_cli/helpers/glob.py b/codecov_cli/helpers/glob.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/glob.py rename to codecov_cli/helpers/glob.py diff --git a/codecov-cli/codecov_cli/helpers/logging_utils.py b/codecov_cli/helpers/logging_utils.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/logging_utils.py rename to codecov_cli/helpers/logging_utils.py diff --git a/codecov-cli/codecov_cli/helpers/options.py b/codecov_cli/helpers/options.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/options.py rename to codecov_cli/helpers/options.py diff --git a/codecov-cli/codecov_cli/helpers/request.py b/codecov_cli/helpers/request.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/request.py rename to codecov_cli/helpers/request.py diff --git a/codecov-cli/codecov_cli/helpers/upload_type.py b/codecov_cli/helpers/upload_type.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/upload_type.py rename to codecov_cli/helpers/upload_type.py diff --git a/codecov-cli/codecov_cli/helpers/upload_url_validation.py b/codecov_cli/helpers/upload_url_validation.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/upload_url_validation.py rename to codecov_cli/helpers/upload_url_validation.py diff --git a/codecov-cli/codecov_cli/helpers/validators.py b/codecov_cli/helpers/validators.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/validators.py rename to codecov_cli/helpers/validators.py diff --git a/codecov-cli/codecov_cli/helpers/versioning_systems.py b/codecov_cli/helpers/versioning_systems.py similarity index 100% rename from codecov-cli/codecov_cli/helpers/versioning_systems.py rename to codecov_cli/helpers/versioning_systems.py diff --git a/codecov-cli/codecov_cli/main.py b/codecov_cli/main.py similarity index 100% rename from codecov-cli/codecov_cli/main.py rename to codecov_cli/main.py diff --git a/codecov-cli/codecov_cli/opentelemetry.py b/codecov_cli/opentelemetry.py similarity index 100% rename from codecov-cli/codecov_cli/opentelemetry.py rename to codecov_cli/opentelemetry.py diff --git a/codecov-cli/codecov_cli/plugins/__init__.py b/codecov_cli/plugins/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/plugins/__init__.py rename to codecov_cli/plugins/__init__.py diff --git a/codecov-cli/codecov_cli/plugins/compress_pycoverage_contexts.py b/codecov_cli/plugins/compress_pycoverage_contexts.py similarity index 100% rename from codecov-cli/codecov_cli/plugins/compress_pycoverage_contexts.py rename to codecov_cli/plugins/compress_pycoverage_contexts.py diff --git a/codecov-cli/codecov_cli/plugins/gcov.py b/codecov_cli/plugins/gcov.py similarity index 100% rename from codecov-cli/codecov_cli/plugins/gcov.py rename to codecov_cli/plugins/gcov.py diff --git a/codecov-cli/codecov_cli/plugins/pycoverage.py b/codecov_cli/plugins/pycoverage.py similarity index 100% rename from codecov-cli/codecov_cli/plugins/pycoverage.py rename to codecov_cli/plugins/pycoverage.py diff --git a/codecov-cli/codecov_cli/plugins/types.py b/codecov_cli/plugins/types.py similarity index 100% rename from codecov-cli/codecov_cli/plugins/types.py rename to codecov_cli/plugins/types.py diff --git a/codecov-cli/codecov_cli/plugins/xcode.py b/codecov_cli/plugins/xcode.py similarity index 100% rename from codecov-cli/codecov_cli/plugins/xcode.py rename to codecov_cli/plugins/xcode.py diff --git a/codecov-cli/codecov_cli/runners/__init__.py b/codecov_cli/runners/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/runners/__init__.py rename to codecov_cli/runners/__init__.py diff --git a/codecov-cli/codecov_cli/runners/dan_runner.py b/codecov_cli/runners/dan_runner.py similarity index 100% rename from codecov-cli/codecov_cli/runners/dan_runner.py rename to codecov_cli/runners/dan_runner.py diff --git a/codecov-cli/codecov_cli/runners/pytest_standard_runner.py b/codecov_cli/runners/pytest_standard_runner.py similarity index 100% rename from codecov-cli/codecov_cli/runners/pytest_standard_runner.py rename to codecov_cli/runners/pytest_standard_runner.py diff --git a/codecov-cli/codecov_cli/runners/types.py b/codecov_cli/runners/types.py similarity index 100% rename from codecov-cli/codecov_cli/runners/types.py rename to codecov_cli/runners/types.py diff --git a/codecov-cli/codecov_cli/services/__init__.py b/codecov_cli/services/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/__init__.py rename to codecov_cli/services/__init__.py diff --git a/codecov-cli/codecov_cli/services/commit/__init__.py b/codecov_cli/services/commit/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/commit/__init__.py rename to codecov_cli/services/commit/__init__.py diff --git a/codecov-cli/codecov_cli/services/commit/base_picking.py b/codecov_cli/services/commit/base_picking.py similarity index 100% rename from codecov-cli/codecov_cli/services/commit/base_picking.py rename to codecov_cli/services/commit/base_picking.py diff --git a/codecov-cli/codecov_cli/services/empty_upload/__init__.py b/codecov_cli/services/empty_upload/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/empty_upload/__init__.py rename to codecov_cli/services/empty_upload/__init__.py diff --git a/codecov-cli/codecov_cli/services/report/__init__.py b/codecov_cli/services/report/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/report/__init__.py rename to codecov_cli/services/report/__init__.py diff --git a/codecov-cli/codecov_cli/services/upload/__init__.py b/codecov_cli/services/upload/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload/__init__.py rename to codecov_cli/services/upload/__init__.py diff --git a/codecov-cli/codecov_cli/services/upload/file_finder.py b/codecov_cli/services/upload/file_finder.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload/file_finder.py rename to codecov_cli/services/upload/file_finder.py diff --git a/codecov-cli/codecov_cli/services/upload/legacy_upload_sender.py b/codecov_cli/services/upload/legacy_upload_sender.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload/legacy_upload_sender.py rename to codecov_cli/services/upload/legacy_upload_sender.py diff --git a/codecov-cli/codecov_cli/services/upload/network_finder.py b/codecov_cli/services/upload/network_finder.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload/network_finder.py rename to codecov_cli/services/upload/network_finder.py diff --git a/codecov-cli/codecov_cli/services/upload/upload_collector.py b/codecov_cli/services/upload/upload_collector.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload/upload_collector.py rename to codecov_cli/services/upload/upload_collector.py diff --git a/codecov-cli/codecov_cli/services/upload/upload_sender.py b/codecov_cli/services/upload/upload_sender.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload/upload_sender.py rename to codecov_cli/services/upload/upload_sender.py diff --git a/codecov-cli/codecov_cli/services/upload_completion/__init__.py b/codecov_cli/services/upload_completion/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload_completion/__init__.py rename to codecov_cli/services/upload_completion/__init__.py diff --git a/codecov-cli/codecov_cli/services/upload_coverage/__init__.py b/codecov_cli/services/upload_coverage/__init__.py similarity index 100% rename from codecov-cli/codecov_cli/services/upload_coverage/__init__.py rename to codecov_cli/services/upload_coverage/__init__.py diff --git a/codecov-cli/codecov_cli/types.py b/codecov_cli/types.py similarity index 100% rename from codecov-cli/codecov_cli/types.py rename to codecov_cli/types.py diff --git a/codecov-cli/codecovcli_commands b/codecovcli_commands similarity index 100% rename from codecov-cli/codecovcli_commands rename to codecovcli_commands diff --git a/command_dump.py b/command_dump.py new file mode 100644 index 000000000..4fb0e741b --- /dev/null +++ b/command_dump.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python3 +import subprocess + + +def command_dump(commands): + print(f"Dumping {' '.join(commands)}") + command_docs = subprocess.run( + [*commands, "--help"], capture_output=True + ).stdout.decode("utf-8") + + split_docs = command_docs.split("\n") + + try: + index_of = split_docs.index("Commands:") + except ValueError: + return command_docs + + if "Commands:" in split_docs: + sub_commands = [ + sub_command.strip() for sub_command in split_docs[index_of + 1 :] if sub_command.strip() + ] + for sub_command in sub_commands: + command_docs = "\n".join( + [command_docs, command_dump([*commands, sub_command])] + ) + + with open("codecovcli_commands", "w") as f: + f.write(command_docs) + + +if __name__ == "__main__": + command_dump(["codecovcli"]) diff --git a/hooks/pre-commit b/hooks/pre-commit index b7cff3f6f..9378e6a1e 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -3,5 +3,4 @@ set -e make command_dump -git add codecov-cli/codecovcli_commands -git add prevent-cli/preventcli_commands +git add codecovcli_commands diff --git a/prevent-cli/LICENSE b/prevent-cli/LICENSE deleted file mode 100644 index 261eeb9e9..000000000 --- a/prevent-cli/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/prevent-cli/README.md b/prevent-cli/README.md deleted file mode 100644 index f4e02924a..000000000 --- a/prevent-cli/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Sentry Prevent CLI - -[![codecov](https://codecov.io/gh/getsentry/prevent-cli/branch/main/graph/badge.svg)](https://codecov.io/gh/getsentry/prevent-cli) - -The Sentry Prevent CLI is responsible for uploading code coverage and test results to Sentry. It can be used directly, but it is also used behind the scenes when using our [Sentry Prevent GitHub Action](https://github.com/getsentry/prevent-action). - -# Usage - -To upload test results to Sentry: -``` -sentry-prevent-cli upload --report-type test-results -``` - -If your repository is not configured for tokenless uploads, you will need to set your upload token with either the PREVENT_TOKEN environment variable or by passing the --token flag at the end of your command. diff --git a/prevent-cli/command_dump.py b/prevent-cli/command_dump.py deleted file mode 100755 index 54f64bbce..000000000 --- a/prevent-cli/command_dump.py +++ /dev/null @@ -1,52 +0,0 @@ -import subprocess - - -def command_dump(commands: list[str], out_path: str): - print(f"Dumping {' '.join(commands)}") - command_docs = subprocess.run( - [*commands, "--help"], capture_output=True - ).stdout.decode("utf-8") - - split_docs = command_docs.split("\n") - - try: - index_of = split_docs.index("Commands:") - except ValueError: - return command_docs - - if "Commands:" in split_docs: - sub_commands = [ - sub_command.strip() - for sub_command in split_docs[index_of + 1 :] - if sub_command.strip() - ] - for sub_command in sub_commands: - command_docs = "\n".join( - [command_docs, command_dump([*commands, sub_command], out_path)] - ) - - with open(out_path, "w") as f: - f.write(command_docs) - - -if __name__ == "__main__": - try: - subprocess.check_call(["codecovcli", "--help"], stdout=subprocess.DEVNULL) - except Exception: - print( - "codecovcli is not executable. You can install it with uv sync --project prevent-cli" - ) - exit(1) - - try: - subprocess.check_call( - ["sentry-prevent-cli", "--help"], stdout=subprocess.DEVNULL - ) - except Exception: - print( - "sentry-prevent-cli is not executable. You can install it with uv sync --project prevent-cli" - ) - exit(1) - - command_dump(["codecovcli"], "../codecov-cli/codecovcli_commands") - command_dump(["sentry-prevent-cli"], "preventcli_commands") diff --git a/prevent-cli/preventcli_commands b/prevent-cli/preventcli_commands deleted file mode 100644 index e7dabef99..000000000 --- a/prevent-cli/preventcli_commands +++ /dev/null @@ -1,411 +0,0 @@ -Usage: sentry-prevent-cli [OPTIONS] COMMAND [ARGS]... - -Options: - --auto-load-params-from [CircleCI|GithubActions|GitlabCI|Bitbucket|Bitrise|AppVeyor|Woodpecker|Heroku|DroneCI|BuildKite|AzurePipelines|Jenkins|CirrusCI|Teamcity|Travis|AWSCodeBuild|GoogleCloudBuild|Local] - --yml-path PATH - -u, --enterprise-url, --url TEXT - Change the upload host (Enterprise use) - -v, --verbose Use verbose logging - --disable-telem Disable sending telemetry data to Codecov - --version Show the version and exit. - --help Show this message and exit. - -Commands: - create-commit - create-report - do-upload - empty-upload - pr-base-picking - process-test-results - send-notifications - upload - upload-coverage - upload-process - -Usage: sentry-prevent-cli create-commit [OPTIONS] - -Options: - --parent-sha TEXT SHA (with 40 chars) of what should be the - parent of this commit - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -B, --branch TEXT Branch to which this commit belongs to - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli create-report [OPTIONS] - -Options: - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli do-upload [OPTIONS] - -Options: - --network-root-folder PATH Root folder from which to consider paths on - the network section [default: (Current - working directory)] - -s, --dir, --coverage-files-search-root-folder, --files-search-root-folder PATH - Folder where to search for coverage files - [default: (Current Working Directory)] - --exclude, --coverage-files-search-exclude-folder, --files-search-exclude-folder PATH - Folders to exclude from search - -f, --file, --coverage-files-search-direct-file, --files-search-direct-file PATH - Explicit files to upload. These will be - added to the coverage files found for - upload. If you wish to only upload the - specified files, please consider using - --disable-search to disable uploading other - files. - --recurse-submodules Whether to enumerate files inside of - submodules for path-fixing purposes. Off by - default. - --disable-search Disable search for coverage files. This is - helpful when specifying what files you want - to upload with the --file option. - --disable-file-fixes Disable file fixes to ignore common lines - from coverage (e.g. blank lines or empty - brackets) - -b, --build, --build-code TEXT Specify the build number manually - --build-url TEXT The URL of the build where this is running - --job-code TEXT - -n, --name TEXT Custom defined name of the upload. Visible - in Codecov UI - -B, --branch TEXT Branch to which this commit belongs to - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -e, --env, --env-var TEXT Specify environment variables to be included - with this build. - -F, --flag TEXT Flag the upload to group coverage metrics. - Multiple flags allowed. - --plugin TEXT - -d, --dry-run Don't upload files to Codecov - --legacy, --use-legacy-uploader - Use the legacy upload endpoint - --handle-no-reports-found Raise no exceptions when no coverage reports - found. - --report-type [coverage|test_results] - The type of the file to upload, coverage by - default. Possible values are: testing, - coverage. - --network-filter TEXT Specify a filter on the files listed in the - network section of the Codecov report. This - will only add files whose path begin with - the specified filter. Useful for upload- - specific path fixing - --network-prefix TEXT Specify a prefix on files listed in the - network section of the Codecov report. - Useful to help resolve path fixing - --gcov-args TEXT Extra arguments to pass to gcov - --gcov-ignore TEXT Paths to ignore during gcov gathering - --gcov-include TEXT Paths to include during gcov gathering - --gcov-executable TEXT gcov executable to run. Defaults to 'gcov' - --swift-project TEXT Specify the swift project - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli empty-upload [OPTIONS] - -Options: - --force - --parent-sha TEXT SHA (with 40 chars) of what should be the - parent of this commit - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -B, --branch TEXT Branch to which this commit belongs to - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli pr-base-picking [OPTIONS] - -Options: - --base-sha TEXT Base commit SHA (with 40 chars) [required] - --pr TEXT Pull Request id to associate commit with - --slug TEXT owner/repo slug - -t, --token TEXT Codecov upload token - --service TEXT Specify the service provider of the repo e.g. github - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli process-test-results [OPTIONS] - -Options: - -s, --dir, --files-search-root-folder PATH - Folder where to search for test results - files [default: (Current Working - Directory)] - -f, --file, --files-search-direct-file PATH - Explicit files to upload. These will be - added to the test results files to be - processed. If you wish to only process the - specified files, please consider using - --disable-search to disable processing other - files. - --exclude, --files-search-exclude-folder PATH - Folders to exclude from search - --disable-search Disable search for coverage files. This is - helpful when specifying what files you want - to upload with the --file option. - --github-token TEXT If specified, output the message to the - specified GitHub PR. - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli send-notifications [OPTIONS] - -Options: - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli upload [OPTIONS] - -Options: - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - --network-root-folder PATH Root folder from which to consider paths on - the network section [default: (Current - working directory)] - -s, --dir, --coverage-files-search-root-folder, --files-search-root-folder PATH - Folder where to search for coverage files - [default: (Current Working Directory)] - --exclude, --coverage-files-search-exclude-folder, --files-search-exclude-folder PATH - Folders to exclude from search - -f, --file, --coverage-files-search-direct-file, --files-search-direct-file PATH - Explicit files to upload. These will be - added to the coverage files found for - upload. If you wish to only upload the - specified files, please consider using - --disable-search to disable uploading other - files. - --recurse-submodules Whether to enumerate files inside of - submodules for path-fixing purposes. Off by - default. - --disable-search Disable search for coverage files. This is - helpful when specifying what files you want - to upload with the --file option. - --disable-file-fixes Disable file fixes to ignore common lines - from coverage (e.g. blank lines or empty - brackets) - -b, --build, --build-code TEXT Specify the build number manually - --build-url TEXT The URL of the build where this is running - --job-code TEXT Specify the job code manually - -n, --name TEXT Custom defined name of the upload. Visible - in Codecov UI - -B, --branch TEXT Branch to which this commit belongs to - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -e, --env, --env-var TEXT Specify environment variables to be included - with this build. - -F, --flag TEXT Flag the upload to group coverage metrics. - Multiple flags allowed. - --plugin TEXT - -d, --dry-run Don't upload files to Codecov - --legacy, --use-legacy-uploader - Use the legacy upload endpoint - --handle-no-reports-found Raise no exceptions when no coverage reports - found. - --report-type [coverage|test-results|test_results] - The type of report to upload - --network-filter TEXT Specify a filter on the files listed in the - network section of the Codecov report. This - will only add files whose path begin with - the specified filter. Useful for upload- - specific path fixing - --network-prefix TEXT Specify a prefix on files listed in the - network section of the Codecov report. - Useful to help resolve path fixing - --gcov-args TEXT Extra arguments to pass to gcov - --gcov-ignore TEXT Paths to ignore during gcov gathering - --gcov-include TEXT Paths to include during gcov gathering - --gcov-executable TEXT gcov executable to run. Defaults to 'gcov' - --swift-project TEXT Specify the swift project - --parent-sha TEXT SHA (with 40 chars) of what should be the - parent of this commit - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli upload-coverage [OPTIONS] - -Options: - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - --network-root-folder PATH Root folder from which to consider paths on - the network section [default: (Current - working directory)] - -s, --dir, --coverage-files-search-root-folder, --files-search-root-folder PATH - Folder where to search for coverage files - [default: (Current Working Directory)] - --exclude, --coverage-files-search-exclude-folder, --files-search-exclude-folder PATH - Folders to exclude from search - -f, --file, --coverage-files-search-direct-file, --files-search-direct-file PATH - Explicit files to upload. These will be - added to the coverage files found for - upload. If you wish to only upload the - specified files, please consider using - --disable-search to disable uploading other - files. - --recurse-submodules Whether to enumerate files inside of - submodules for path-fixing purposes. Off by - default. - --disable-search Disable search for coverage files. This is - helpful when specifying what files you want - to upload with the --file option. - --disable-file-fixes Disable file fixes to ignore common lines - from coverage (e.g. blank lines or empty - brackets) - -b, --build, --build-code TEXT Specify the build number manually - --build-url TEXT The URL of the build where this is running - --job-code TEXT - -n, --name TEXT Custom defined name of the upload. Visible - in Codecov UI - -B, --branch TEXT Branch to which this commit belongs to - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -e, --env, --env-var TEXT Specify environment variables to be included - with this build. - -F, --flag TEXT Flag the upload to group coverage metrics. - Multiple flags allowed. - --plugin TEXT - -d, --dry-run Don't upload files to Codecov - --legacy, --use-legacy-uploader - Use the legacy upload endpoint - --handle-no-reports-found Raise no exceptions when no coverage reports - found. - --report-type [coverage|test_results] - The type of the file to upload, coverage by - default. Possible values are: testing, - coverage. - --network-filter TEXT Specify a filter on the files listed in the - network section of the Codecov report. This - will only add files whose path begin with - the specified filter. Useful for upload- - specific path fixing - --network-prefix TEXT Specify a prefix on files listed in the - network section of the Codecov report. - Useful to help resolve path fixing - --gcov-args TEXT Extra arguments to pass to gcov - --gcov-ignore TEXT Paths to ignore during gcov gathering - --gcov-include TEXT Paths to include during gcov gathering - --gcov-executable TEXT gcov executable to run. Defaults to 'gcov' - --swift-project TEXT Specify the swift project - --parent-sha TEXT SHA (with 40 chars) of what should be the - parent of this commit - -h, --help Show this message and exit. - -Usage: sentry-prevent-cli upload-process [OPTIONS] - -Options: - -C, --sha, --commit-sha TEXT Commit SHA (with 40 chars) [required] - -Z, --fail-on-error Exit with non-zero code in case of error - --git-service [github|gitlab|bitbucket|github_enterprise|gitlab_enterprise|bitbucket_server] - -t, --token TEXT Codecov upload token - -r, --slug TEXT owner/repo slug used instead of the private - repo token in Self-hosted - --network-root-folder PATH Root folder from which to consider paths on - the network section [default: (Current - working directory)] - -s, --dir, --coverage-files-search-root-folder, --files-search-root-folder PATH - Folder where to search for coverage files - [default: (Current Working Directory)] - --exclude, --coverage-files-search-exclude-folder, --files-search-exclude-folder PATH - Folders to exclude from search - -f, --file, --coverage-files-search-direct-file, --files-search-direct-file PATH - Explicit files to upload. These will be - added to the coverage files found for - upload. If you wish to only upload the - specified files, please consider using - --disable-search to disable uploading other - files. - --recurse-submodules Whether to enumerate files inside of - submodules for path-fixing purposes. Off by - default. - --disable-search Disable search for coverage files. This is - helpful when specifying what files you want - to upload with the --file option. - --disable-file-fixes Disable file fixes to ignore common lines - from coverage (e.g. blank lines or empty - brackets) - -b, --build, --build-code TEXT Specify the build number manually - --build-url TEXT The URL of the build where this is running - --job-code TEXT - -n, --name TEXT Custom defined name of the upload. Visible - in Codecov UI - -B, --branch TEXT Branch to which this commit belongs to - -P, --pr, --pull-request-number TEXT - Specify the pull request number manually. - Used to override pre-existing CI environment - variables - -e, --env, --env-var TEXT Specify environment variables to be included - with this build. - -F, --flag TEXT Flag the upload to group coverage metrics. - Multiple flags allowed. - --plugin TEXT - -d, --dry-run Don't upload files to Codecov - --legacy, --use-legacy-uploader - Use the legacy upload endpoint - --handle-no-reports-found Raise no exceptions when no coverage reports - found. - --report-type [coverage|test_results] - The type of the file to upload, coverage by - default. Possible values are: testing, - coverage. - --network-filter TEXT Specify a filter on the files listed in the - network section of the Codecov report. This - will only add files whose path begin with - the specified filter. Useful for upload- - specific path fixing - --network-prefix TEXT Specify a prefix on files listed in the - network section of the Codecov report. - Useful to help resolve path fixing - --gcov-args TEXT Extra arguments to pass to gcov - --gcov-ignore TEXT Paths to ignore during gcov gathering - --gcov-include TEXT Paths to include during gcov gathering - --gcov-executable TEXT gcov executable to run. Defaults to 'gcov' - --swift-project TEXT Specify the swift project - --parent-sha TEXT SHA (with 40 chars) of what should be the - parent of this commit - -h, --help Show this message and exit. diff --git a/prevent-cli/pyproject.toml b/prevent-cli/pyproject.toml deleted file mode 100644 index 255d66c0b..000000000 --- a/prevent-cli/pyproject.toml +++ /dev/null @@ -1,32 +0,0 @@ -[project] -name = "sentry-prevent-cli" -version = "11.2.8" -description = "Sentry Prevent Command Line Interface" -readme = "README.md" -license-files = ["LICENSE"] -authors = [{ name = "Sentry", email = "oss@sentry.io" }] - -requires-python = ">=3.9" -dependencies = [ - "codecov-cli==11.2.8", - "click>=8.0.0,<8.3.0", - "sentry-sdk==2.*", -] - -[dependency-groups] -dev = [ - "pyinstaller==6.*", -] - -[tool.uv.sources] -codecov-cli = { path = "../codecov-cli", editable = true } - -[project.scripts] -sentry-prevent-cli = "prevent_cli.main:run" - -[build-system] -requires = ["setuptools"] -build-backend = "setuptools.build_meta" - -[tool.setuptools] -package-dir = { "" = "src" } diff --git a/prevent-cli/src/prevent_cli/__init__.py b/prevent-cli/src/prevent_cli/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/prevent-cli/src/prevent_cli/commands/__init__.py b/prevent-cli/src/prevent_cli/commands/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/prevent-cli/src/prevent_cli/commands/upload.py b/prevent-cli/src/prevent_cli/commands/upload.py deleted file mode 100644 index 2b33f1daa..000000000 --- a/prevent-cli/src/prevent_cli/commands/upload.py +++ /dev/null @@ -1,324 +0,0 @@ -import logging -import os -import pathlib -import typing - -import click -import sentry_sdk -from codecov_cli.fallbacks import CodecovOption, FallbackFieldEnum -from codecov_cli.helpers.args import get_cli_args -from codecov_cli.helpers.upload_type import report_type_from_str -from codecov_cli.opentelemetry import close_telem -from codecov_cli.services.upload_coverage import upload_coverage_logic - -from prevent_cli.options import global_options - - -def _turn_env_vars_into_dict(ctx, params, value): - return dict((v, os.getenv(v, None)) for v in value) - - -_global_upload_options = [ - click.option( - "--code", - "--report-code", - "report_code", - help="The code of the report. If unsure, leave default", - default="default", - hidden=True, - ), - click.option( - "--network-root-folder", - help="Root folder from which to consider paths on the network section", - type=click.Path(path_type=pathlib.Path), - default=pathlib.Path.cwd, - show_default="Current working directory", - ), - click.option( - "-s", - "--dir", - "--coverage-files-search-root-folder", - "--files-search-root-folder", - "files_search_root_folder", - help="Folder where to search for coverage files", - type=click.Path(path_type=pathlib.Path), - default=pathlib.Path.cwd, - show_default="Current Working Directory", - ), - click.option( - "--exclude", - "--coverage-files-search-exclude-folder", - "--files-search-exclude-folder", - "files_search_exclude_folders", - help="Folders to exclude from search", - type=click.Path(path_type=pathlib.Path), - multiple=True, - default=[], - ), - click.option( - "-f", - "--file", - "--coverage-files-search-direct-file", - "--files-search-direct-file", - "files_search_explicitly_listed_files", - help="Explicit files to upload. These will be added to the coverage files found for upload. If you wish to only upload the specified files, please consider using --disable-search to disable uploading other files.", - type=click.Path(path_type=pathlib.Path), - multiple=True, - default=[], - ), - click.option( - "--recurse-submodules", - help="Whether to enumerate files inside of submodules for path-fixing purposes. Off by default.", - is_flag=True, - default=False, - ), - click.option( - "--disable-search", - help="Disable search for coverage files. This is helpful when specifying what files you want to upload with the --file option.", - is_flag=True, - default=False, - ), - click.option( - "--disable-file-fixes", - help="Disable file fixes to ignore common lines from coverage (e.g. blank lines or empty brackets)", - is_flag=True, - default=False, - ), - click.option( - "-b", - "--build", - "--build-code", - "build_code", - cls=CodecovOption, - help="Specify the build number manually", - fallback_field=FallbackFieldEnum.build_code, - ), - click.option( - "--build-url", - "build_url", - cls=CodecovOption, - help="The URL of the build where this is running", - fallback_field=FallbackFieldEnum.build_url, - ), - click.option( - "--job-code", - cls=CodecovOption, - help="Specify the job code manually", - fallback_field=FallbackFieldEnum.job_code, - ), - click.option( - "-n", - "--name", - help="Custom defined name of the upload. Visible in Codecov UI", - ), - click.option( - "-B", - "--branch", - cls=CodecovOption, - help="Branch to which this commit belongs to", - fallback_field=FallbackFieldEnum.branch, - ), - click.option( - "-P", - "--pr", - "--pull-request-number", - "pull_request_number", - cls=CodecovOption, - help="Specify the pull request number manually. Used to override pre-existing CI environment variables", - fallback_field=FallbackFieldEnum.pull_request_number, - ), - click.option( - "-e", - "--env", - "--env-var", - "env_vars", - multiple=True, - callback=_turn_env_vars_into_dict, - help="Specify environment variables to be included with this build.", - ), - click.option( - "-F", - "--flag", - "flags", - multiple=True, - default=[], - help="Flag the upload to group coverage metrics. Multiple flags allowed.", - ), - click.option( - "--plugin", - "plugin_names", - multiple=True, - default=["xcode", "gcov", "pycoverage"], - ), - click.option( - "-d", - "--dry-run", - "dry_run", - is_flag=True, - help="Don't upload files to Codecov", - ), - click.option( - "--legacy", - "--use-legacy-uploader", - "use_legacy_uploader", - is_flag=True, - help="Use the legacy upload endpoint", - ), - click.option( - "--handle-no-reports-found", - "handle_no_reports_found", - is_flag=True, - help="Raise no exceptions when no coverage reports found.", - ), - click.option( - "--report-type", - "report_type_str", - help="The type of report to upload", - default="coverage", - type=click.Choice(["coverage", "test-results", "test_results"]), - ), - click.option( - "--network-filter", - help="Specify a filter on the files listed in the network section of the Codecov report. This will only add files whose path begin with the specified filter. Useful for upload-specific path fixing", - ), - click.option( - "--network-prefix", - help="Specify a prefix on files listed in the network section of the Codecov report. Useful to help resolve path fixing", - ), - click.option( - "--gcov-args", - help="Extra arguments to pass to gcov", - ), - click.option( - "--gcov-ignore", - help="Paths to ignore during gcov gathering", - ), - click.option( - "--gcov-include", - help="Paths to include during gcov gathering", - ), - click.option( - "--gcov-executable", - help="gcov executable to run. Defaults to 'gcov'", - ), - click.option( - "--swift-project", - help="Specify the swift project", - ), - click.option( - "--parent-sha", - help="SHA (with 40 chars) of what should be the parent of this commit", - ), -] - - -def global_upload_options(func): - for option in reversed(_global_upload_options): - func = option(func) - return func - - -logger = logging.getLogger("codecovcli") - - -@click.command() -@global_options -@global_upload_options -@click.pass_context -def upload( - ctx: click.Context, - branch: typing.Optional[str], - build_code: typing.Optional[str], - build_url: typing.Optional[str], - commit_sha: str, - disable_file_fixes: bool, - disable_search: bool, - dry_run: bool, - env_vars: typing.Dict[str, str], - fail_on_error: bool, - files_search_exclude_folders: typing.List[pathlib.Path], - files_search_explicitly_listed_files: typing.List[pathlib.Path], - files_search_root_folder: pathlib.Path, - flags: typing.List[str], - gcov_args: typing.Optional[str], - gcov_executable: typing.Optional[str], - gcov_ignore: typing.Optional[str], - gcov_include: typing.Optional[str], - git_service: typing.Optional[str], - handle_no_reports_found: bool, - job_code: typing.Optional[str], - name: typing.Optional[str], - network_filter: typing.Optional[str], - network_prefix: typing.Optional[str], - network_root_folder: pathlib.Path, - parent_sha: typing.Optional[str], - plugin_names: typing.List[str], - pull_request_number: typing.Optional[str], - recurse_submodules: bool, - report_code: str, - report_type_str: str, - slug: typing.Optional[str], - swift_project: typing.Optional[str], - token: typing.Optional[str], - use_legacy_uploader: bool, -): - with sentry_sdk.start_transaction(op="task", name="Upload"): - with sentry_sdk.start_span(name="upload"): - args = get_cli_args(ctx) - logger.debug( - "Starting upload", - extra=dict( - extra_log_attributes=args, - ), - ) - - report_type = report_type_from_str(report_type_str) - - versioning_system = ctx.obj["versioning_system"] - codecov_yaml = ctx.obj["codecov_yaml"] or {} - cli_config = codecov_yaml.get("cli", {}) - ci_adapter = ctx.obj.get("ci_adapter") - enterprise_url = ctx.obj.get("enterprise_url") - - upload_coverage_logic( - cli_config, - versioning_system, - ci_adapter, - branch=branch, - build_code=build_code, - build_url=build_url, - commit_sha=commit_sha, - disable_file_fixes=disable_file_fixes, - disable_search=disable_search, - dry_run=dry_run, - enterprise_url=enterprise_url, - env_vars=env_vars, - fail_on_error=fail_on_error, - files_search_exclude_folders=files_search_exclude_folders, - files_search_explicitly_listed_files=files_search_explicitly_listed_files, - files_search_root_folder=files_search_root_folder, - flags=flags, - gcov_args=gcov_args, - gcov_executable=gcov_executable, - gcov_ignore=gcov_ignore, - gcov_include=gcov_include, - git_service=git_service, - handle_no_reports_found=handle_no_reports_found, - job_code=job_code, - name=name, - network_filter=network_filter, - network_prefix=network_prefix, - network_root_folder=network_root_folder, - parent_sha=parent_sha, - plugin_names=plugin_names, - pull_request_number=pull_request_number, - recurse_submodules=recurse_submodules, - report_code=report_code, - slug=slug, - swift_project=swift_project, - token=token, - report_type=report_type, - use_legacy_uploader=use_legacy_uploader, - args=args, - ) - close_telem() diff --git a/prevent-cli/src/prevent_cli/fallbacks.py b/prevent-cli/src/prevent_cli/fallbacks.py deleted file mode 100644 index c7804ef60..000000000 --- a/prevent-cli/src/prevent_cli/fallbacks.py +++ /dev/null @@ -1,56 +0,0 @@ -import typing -from enum import Enum, auto - -import click - - -class FallbackFieldEnum(Enum): - branch = auto() - build_code = auto() - build_url = auto() - commit_sha = auto() - git_service = auto() - job_code = auto() - pull_request_number = auto() - service = auto() - slug = auto() - - -class CodecovOption(click.Option): - def __init__(self, *args, **kwargs): - self.fallback_field = kwargs.pop("fallback_field", None) - super().__init__(*args, **kwargs) - - def get_default( - self, ctx: click.Context, call: bool = True - ) -> typing.Optional[typing.Union[typing.Any, typing.Callable[[], typing.Any]]]: - res = super().get_default(ctx, call=call) - if res is not None: - return res - if self.fallback_field is not None: - if ctx.obj.get("ci_adapter") is not None: - res = ctx.obj.get("ci_adapter").get_fallback_value(self.fallback_field) - if res is not None: - return res - if ctx.obj.get("versioning_system") is not None: - res = ctx.obj.get("versioning_system").get_fallback_value( - self.fallback_field - ) - if res is not None: - return res - return None - - -class BrandedOption(click.Option): - def resolve_envvar_value(self, ctx: click.Context) -> typing.Optional[str]: - actual_var = self.envvar - self.envvar = [ - f"{brand.value.upper()}_{actual_var}" for brand in ctx.obj["branding"] - ] - res = super().resolve_envvar_value(ctx) - self.envvar = actual_var - return res - - -class BrandedCodecovOption(CodecovOption, BrandedOption): - pass diff --git a/prevent-cli/src/prevent_cli/main.py b/prevent-cli/src/prevent_cli/main.py deleted file mode 100644 index a095ecd54..000000000 --- a/prevent-cli/src/prevent_cli/main.py +++ /dev/null @@ -1,111 +0,0 @@ -import logging -import pathlib -import typing - -import click -from codecov_cli import __version__ -from codecov_cli.branding import Branding -from codecov_cli.commands.base_picking import pr_base_picking -from codecov_cli.commands.commit import create_commit -from codecov_cli.commands.create_report_result import create_report_results -from codecov_cli.commands.empty_upload import empty_upload -from codecov_cli.commands.get_report_results import get_report_results -from codecov_cli.commands.process_test_results import process_test_results -from codecov_cli.commands.report import create_report -from codecov_cli.commands.send_notifications import send_notifications -from codecov_cli.commands.upload import do_upload -from codecov_cli.commands.upload_coverage import upload_coverage -from codecov_cli.commands.upload_process import upload_process -from codecov_cli.helpers.ci_adapters import get_ci_adapter, get_ci_providers_list -from codecov_cli.helpers.config import load_cli_config -from codecov_cli.helpers.logging_utils import configure_logger -from codecov_cli.helpers.versioning_systems import get_versioning_system -from codecov_cli.opentelemetry import init_telem - -from prevent_cli.commands.upload import upload - -logger = logging.getLogger("codecovcli") - - -@click.group() -@click.option( - "--auto-load-params-from", - type=click.Choice( - [provider.get_service_name() for provider in get_ci_providers_list()], - case_sensitive=False, - ), -) -@click.option( - "--yml-path", - type=click.Path(path_type=pathlib.Path), - default=None, -) -@click.option( - "--codecov-yml-path", - hidden=True, - type=click.Path(path_type=pathlib.Path), - default=None, -) -@click.option( - "--enterprise-url", "--url", "-u", help="Change the upload host (Enterprise use)" -) -@click.option("-v", "--verbose", "verbose", help="Use verbose logging", is_flag=True) -@click.option( - "--disable-telem", help="Disable sending telemetry data to Codecov", is_flag=True -) -@click.pass_context -@click.version_option(__version__, prog_name="codecovcli") -def cli( - ctx: click.Context, - auto_load_params_from: typing.Optional[str], - yml_path: typing.Optional[pathlib.Path], - codecov_yml_path: typing.Optional[pathlib.Path], - enterprise_url: str, - verbose: bool = False, - disable_telem: bool = False, -): - branding = [Branding.PREVENT, Branding.CODECOV] - ctx.obj["cli_args"] = ctx.params - ctx.obj["cli_args"]["version"] = f"cli-{__version__}" - configure_logger(logger, log_level=(logging.DEBUG if verbose else logging.INFO)) - ctx.help_option_names = ["-h", "--help"] - ctx.obj["ci_adapter"] = get_ci_adapter(auto_load_params_from) - ctx.obj["versioning_system"] = get_versioning_system() - ctx.obj["codecov_yaml"] = load_cli_config(yml_path or codecov_yml_path) - if ctx.obj["codecov_yaml"] is None: - logger.debug("No yaml found") - else: - token = ctx.obj["codecov_yaml"].get("codecov", {}).get("token") or ctx.obj[ - "codecov_yaml" - ].get("prevent", {}).get("token") - if token is not None: - ctx.default_map = {ctx.invoked_subcommand: {"token": token}} - ctx.obj["enterprise_url"] = enterprise_url - ctx.obj["disable_telem"] = disable_telem - ctx.obj["branding"] = branding - - init_telem(ctx.obj) - - -cli.add_command(do_upload) -cli.add_command(create_commit) -cli.add_command(create_report) -cli.add_command(pr_base_picking) -cli.add_command(empty_upload) -cli.add_command(upload_coverage) -cli.add_command(upload) -cli.add_command(upload_process) -cli.add_command(send_notifications) -cli.add_command(process_test_results) - -# deprecated commands: -cli.add_command(create_report_results) -cli.add_command(get_report_results) - - -def run(): - cli(obj={}) - - -if __name__ == "__main__": - run() diff --git a/prevent-cli/src/prevent_cli/options.py b/prevent-cli/src/prevent_cli/options.py deleted file mode 100644 index 9072fde96..000000000 --- a/prevent-cli/src/prevent_cli/options.py +++ /dev/null @@ -1,56 +0,0 @@ -import click -from codecov_cli.fallbacks import ( - BrandedCodecovOption, - BrandedOption, - CodecovOption, - FallbackFieldEnum, -) -from codecov_cli.helpers.git import GitService - -_global_options = [ - click.option( - "-C", - "--sha", - "--commit-sha", - "commit_sha", - help="Commit SHA (with 40 chars)", - cls=CodecovOption, - fallback_field=FallbackFieldEnum.commit_sha, - required=True, - ), - click.option( - "-Z", - "--fail-on-error", - "fail_on_error", - is_flag=True, - help="Exit with non-zero code in case of error", - ), - click.option( - "--git-service", - cls=CodecovOption, - fallback_field=FallbackFieldEnum.git_service, - type=click.Choice([service.value for service in GitService]), - ), - click.option( - "-t", - "--token", - help="Codecov upload token", - cls=BrandedOption, - envvar="TOKEN", - ), - click.option( - "-r", - "--slug", - "slug", - cls=BrandedCodecovOption, - fallback_field=FallbackFieldEnum.slug, - help="owner/repo slug used instead of the private repo token in Self-hosted", - envvar="SLUG", - ), -] - - -def global_options(func): - for option in reversed(_global_options): - func = option(func) - return func diff --git a/prevent-cli/uv.lock b/prevent-cli/uv.lock deleted file mode 100644 index 88343ac33..000000000 --- a/prevent-cli/uv.lock +++ /dev/null @@ -1,534 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.9" - -[[package]] -name = "altgraph" -version = "0.17.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/a8/7145824cf0b9e3c28046520480f207df47e927df83aa9555fb47f8505922/altgraph-0.17.4.tar.gz", hash = "sha256:1b5afbb98f6c4dcadb2e2ae6ab9fa994bbb8c1d75f4fa96d340f9437ae454406", size = 48418, upload-time = "2023-09-25T09:04:52.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/3f/3bc3f1d83f6e4a7fcb834d3720544ca597590425be5ba9db032b2bf322a2/altgraph-0.17.4-py2.py3-none-any.whl", hash = "sha256:642743b4750de17e655e6711601b077bc6598dbfa3ba5fa2b2a35ce12b508dff", size = 21212, upload-time = "2023-09-25T09:04:50.691Z" }, -] - -[[package]] -name = "certifi" -version = "2025.1.31" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1c/ab/c9f1e32b7b1bf505bf26f0ef697775960db7932abeb7b516de930ba2705f/certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651", size = 167577, upload-time = "2025-01-31T02:16:47.166Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe", size = 166393, upload-time = "2025-01-31T02:16:45.015Z" }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188, upload-time = "2024-12-24T18:12:35.43Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013, upload-time = "2024-12-24T18:09:43.671Z" }, - { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285, upload-time = "2024-12-24T18:09:48.113Z" }, - { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449, upload-time = "2024-12-24T18:09:50.845Z" }, - { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892, upload-time = "2024-12-24T18:09:52.078Z" }, - { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123, upload-time = "2024-12-24T18:09:54.575Z" }, - { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943, upload-time = "2024-12-24T18:09:57.324Z" }, - { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063, upload-time = "2024-12-24T18:09:59.794Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578, upload-time = "2024-12-24T18:10:02.357Z" }, - { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629, upload-time = "2024-12-24T18:10:03.678Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778, upload-time = "2024-12-24T18:10:06.197Z" }, - { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453, upload-time = "2024-12-24T18:10:08.848Z" }, - { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479, upload-time = "2024-12-24T18:10:10.044Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790, upload-time = "2024-12-24T18:10:11.323Z" }, - { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995, upload-time = "2024-12-24T18:10:12.838Z" }, - { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471, upload-time = "2024-12-24T18:10:14.101Z" }, - { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831, upload-time = "2024-12-24T18:10:15.512Z" }, - { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335, upload-time = "2024-12-24T18:10:18.369Z" }, - { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862, upload-time = "2024-12-24T18:10:19.743Z" }, - { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673, upload-time = "2024-12-24T18:10:21.139Z" }, - { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211, upload-time = "2024-12-24T18:10:22.382Z" }, - { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039, upload-time = "2024-12-24T18:10:24.802Z" }, - { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939, upload-time = "2024-12-24T18:10:26.124Z" }, - { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075, upload-time = "2024-12-24T18:10:30.027Z" }, - { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340, upload-time = "2024-12-24T18:10:32.679Z" }, - { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205, upload-time = "2024-12-24T18:10:34.724Z" }, - { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441, upload-time = "2024-12-24T18:10:37.574Z" }, - { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105, upload-time = "2024-12-24T18:10:38.83Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404, upload-time = "2024-12-24T18:10:44.272Z" }, - { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423, upload-time = "2024-12-24T18:10:45.492Z" }, - { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184, upload-time = "2024-12-24T18:10:47.898Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268, upload-time = "2024-12-24T18:10:50.589Z" }, - { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601, upload-time = "2024-12-24T18:10:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098, upload-time = "2024-12-24T18:10:53.789Z" }, - { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520, upload-time = "2024-12-24T18:10:55.048Z" }, - { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852, upload-time = "2024-12-24T18:10:57.647Z" }, - { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488, upload-time = "2024-12-24T18:10:59.43Z" }, - { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192, upload-time = "2024-12-24T18:11:00.676Z" }, - { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550, upload-time = "2024-12-24T18:11:01.952Z" }, - { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785, upload-time = "2024-12-24T18:11:03.142Z" }, - { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698, upload-time = "2024-12-24T18:11:05.834Z" }, - { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162, upload-time = "2024-12-24T18:11:07.064Z" }, - { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263, upload-time = "2024-12-24T18:11:08.374Z" }, - { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966, upload-time = "2024-12-24T18:11:09.831Z" }, - { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992, upload-time = "2024-12-24T18:11:12.03Z" }, - { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162, upload-time = "2024-12-24T18:11:13.372Z" }, - { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972, upload-time = "2024-12-24T18:11:14.628Z" }, - { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095, upload-time = "2024-12-24T18:11:17.672Z" }, - { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668, upload-time = "2024-12-24T18:11:18.989Z" }, - { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073, upload-time = "2024-12-24T18:11:21.507Z" }, - { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732, upload-time = "2024-12-24T18:11:22.774Z" }, - { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391, upload-time = "2024-12-24T18:11:24.139Z" }, - { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702, upload-time = "2024-12-24T18:11:26.535Z" }, - { url = "https://files.pythonhosted.org/packages/7f/c0/b913f8f02836ed9ab32ea643c6fe4d3325c3d8627cf6e78098671cafff86/charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41", size = 197867, upload-time = "2024-12-24T18:12:10.438Z" }, - { url = "https://files.pythonhosted.org/packages/0f/6c/2bee440303d705b6fb1e2ec789543edec83d32d258299b16eed28aad48e0/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f", size = 141385, upload-time = "2024-12-24T18:12:11.847Z" }, - { url = "https://files.pythonhosted.org/packages/3d/04/cb42585f07f6f9fd3219ffb6f37d5a39b4fd2db2355b23683060029c35f7/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2", size = 151367, upload-time = "2024-12-24T18:12:13.177Z" }, - { url = "https://files.pythonhosted.org/packages/54/54/2412a5b093acb17f0222de007cc129ec0e0df198b5ad2ce5699355269dfe/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770", size = 143928, upload-time = "2024-12-24T18:12:14.497Z" }, - { url = "https://files.pythonhosted.org/packages/5a/6d/e2773862b043dcf8a221342954f375392bb2ce6487bcd9f2c1b34e1d6781/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4", size = 146203, upload-time = "2024-12-24T18:12:15.731Z" }, - { url = "https://files.pythonhosted.org/packages/b9/f8/ca440ef60d8f8916022859885f231abb07ada3c347c03d63f283bec32ef5/charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537", size = 148082, upload-time = "2024-12-24T18:12:18.641Z" }, - { url = "https://files.pythonhosted.org/packages/04/d2/42fd330901aaa4b805a1097856c2edf5095e260a597f65def493f4b8c833/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496", size = 142053, upload-time = "2024-12-24T18:12:20.036Z" }, - { url = "https://files.pythonhosted.org/packages/9e/af/3a97a4fa3c53586f1910dadfc916e9c4f35eeada36de4108f5096cb7215f/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78", size = 150625, upload-time = "2024-12-24T18:12:22.804Z" }, - { url = "https://files.pythonhosted.org/packages/26/ae/23d6041322a3556e4da139663d02fb1b3c59a23ab2e2b56432bd2ad63ded/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7", size = 153549, upload-time = "2024-12-24T18:12:24.163Z" }, - { url = "https://files.pythonhosted.org/packages/94/22/b8f2081c6a77cb20d97e57e0b385b481887aa08019d2459dc2858ed64871/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6", size = 150945, upload-time = "2024-12-24T18:12:25.415Z" }, - { url = "https://files.pythonhosted.org/packages/c7/0b/c5ec5092747f801b8b093cdf5610e732b809d6cb11f4c51e35fc28d1d389/charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294", size = 146595, upload-time = "2024-12-24T18:12:28.03Z" }, - { url = "https://files.pythonhosted.org/packages/0c/5a/0b59704c38470df6768aa154cc87b1ac7c9bb687990a1559dc8765e8627e/charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5", size = 95453, upload-time = "2024-12-24T18:12:29.569Z" }, - { url = "https://files.pythonhosted.org/packages/85/2d/a9790237cb4d01a6d57afadc8573c8b73c609ade20b80f4cda30802009ee/charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765", size = 102811, upload-time = "2024-12-24T18:12:30.83Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767, upload-time = "2024-12-24T18:12:32.852Z" }, -] - -[[package]] -name = "click" -version = "8.1.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, -] - -[[package]] -name = "codecov-cli" -version = "11.2.8" -source = { editable = "../codecov-cli" } -dependencies = [ - { name = "click" }, - { name = "ijson" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "sentry-sdk" }, - { name = "test-results-parser" }, -] - -[package.metadata] -requires-dist = [ - { name = "click", specifier = ">=8.0.0,<8.3.0" }, - { name = "ijson", specifier = "==3.*" }, - { name = "pyyaml", specifier = "==6.*" }, - { name = "requests", specifier = ">=2.25.0" }, - { name = "sentry-sdk", specifier = "==2.*" }, - { name = "test-results-parser", specifier = "==0.6.1" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "pre-commit", specifier = "==3.*" }, - { name = "pyinstaller", specifier = "==6.*" }, - { name = "pytest", specifier = "==7.*" }, - { name = "pytest-cov", specifier = "==4.*" }, - { name = "pytest-env", specifier = "==1.*" }, - { name = "pytest-mock", specifier = "==3.*" }, - { name = "responses", specifier = "==0.21.*" }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, -] - -[[package]] -name = "ijson" -version = "3.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/83/28e9e93a3a61913e334e3a2e78ea9924bb9f9b1ac45898977f9d9dd6133f/ijson-3.3.0.tar.gz", hash = "sha256:7f172e6ba1bee0d4c8f8ebd639577bfe429dee0f3f96775a067b8bae4492d8a0", size = 60079, upload-time = "2024-06-06T08:37:13.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ad/89/96e3608499b4a500b9bc27aa8242704e675849dd65bdfa8682b00a92477e/ijson-3.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7f7a5250599c366369fbf3bc4e176f5daa28eb6bc7d6130d02462ed335361675", size = 85009, upload-time = "2024-06-06T08:34:37.172Z" }, - { url = "https://files.pythonhosted.org/packages/e4/7e/1098503500f5316c5f7912a51c91aca5cbc609c09ce4ecd9c4809983c560/ijson-3.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f87a7e52f79059f9c58f6886c262061065eb6f7554a587be7ed3aa63e6b71b34", size = 57796, upload-time = "2024-06-06T08:34:39.35Z" }, - { url = "https://files.pythonhosted.org/packages/78/f7/27b8c27a285628719ff55b68507581c86b551eb162ce810fe51e3e1a25f2/ijson-3.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b73b493af9e947caed75d329676b1b801d673b17481962823a3e55fe529c8b8b", size = 57218, upload-time = "2024-06-06T08:34:41.651Z" }, - { url = "https://files.pythonhosted.org/packages/0c/c5/1698094cb6a336a223c30e1167cc1b15cdb4bfa75399c1a2eb82fa76cc3c/ijson-3.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5576415f3d76290b160aa093ff968f8bf6de7d681e16e463a0134106b506f49", size = 117153, upload-time = "2024-06-06T08:34:43.463Z" }, - { url = "https://files.pythonhosted.org/packages/4b/21/c206dda0945bd832cc9b0894596b0efc2cb1819a0ac61d8be1429ac09494/ijson-3.3.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e9ffe358d5fdd6b878a8a364e96e15ca7ca57b92a48f588378cef315a8b019e", size = 110781, upload-time = "2024-06-06T08:34:45.412Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f5/2d733e64577109a9b255d14d031e44a801fa20df9ccc58b54a31e8ecf9e6/ijson-3.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8643c255a25824ddd0895c59f2319c019e13e949dc37162f876c41a283361527", size = 114527, upload-time = "2024-06-06T08:34:46.66Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a8/78bfee312aa23417b86189a65f30b0edbceaee96dc6a616cc15f611187d1/ijson-3.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:df3ab5e078cab19f7eaeef1d5f063103e1ebf8c26d059767b26a6a0ad8b250a3", size = 116824, upload-time = "2024-06-06T08:34:48.471Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a4/aff410f7d6aa1a77ee2ab2d6a2d2758422726270cb149c908a9baf33cf58/ijson-3.3.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3dc1fb02c6ed0bae1b4bf96971258bf88aea72051b6e4cebae97cff7090c0607", size = 112647, upload-time = "2024-06-06T08:34:50.339Z" }, - { url = "https://files.pythonhosted.org/packages/77/ee/2b5122dc4713f5a954267147da36e7156240ca21b04ed5295bc0cabf0fbe/ijson-3.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e9afd97339fc5a20f0542c971f90f3ca97e73d3050cdc488d540b63fae45329a", size = 114156, upload-time = "2024-06-06T08:34:51.598Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d7/ad3b266490b60c6939e8a07fd8e4b7e2002aea08eaa9572a016c3e3a9129/ijson-3.3.0-cp310-cp310-win32.whl", hash = "sha256:844c0d1c04c40fd1b60f148dc829d3f69b2de789d0ba239c35136efe9a386529", size = 48931, upload-time = "2024-06-06T08:34:53.995Z" }, - { url = "https://files.pythonhosted.org/packages/0b/68/b9e1c743274c8a23dddb12d2ed13b5f021f6d21669d51ff7fa2e9e6c19df/ijson-3.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d654d045adafdcc6c100e8e911508a2eedbd2a1b5f93f930ba13ea67d7704ee9", size = 50965, upload-time = "2024-06-06T08:34:55.206Z" }, - { url = "https://files.pythonhosted.org/packages/fd/df/565ba72a6f4b2c833d051af8e2228cfa0b1fef17bb44995c00ad27470c52/ijson-3.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:501dce8eaa537e728aa35810656aa00460a2547dcb60937c8139f36ec344d7fc", size = 85041, upload-time = "2024-06-06T08:34:56.479Z" }, - { url = "https://files.pythonhosted.org/packages/f0/42/1361eaa57ece921d0239881bae6a5e102333be5b6e0102a05ec3caadbd5a/ijson-3.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:658ba9cad0374d37b38c9893f4864f284cdcc7d32041f9808fba8c7bcaadf134", size = 57829, upload-time = "2024-06-06T08:34:57.632Z" }, - { url = "https://files.pythonhosted.org/packages/f5/b0/143dbfe12e1d1303ea8d8cd6f40e95cea8f03bcad5b79708614a7856c22e/ijson-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2636cb8c0f1023ef16173f4b9a233bcdb1df11c400c603d5f299fac143ca8d70", size = 57217, upload-time = "2024-06-06T08:34:59.397Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/b3b60c5e5be2839365b03b915718ca462c544fdc71e7a79b7262837995ef/ijson-3.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd174b90db68c3bcca273e9391934a25d76929d727dc75224bf244446b28b03b", size = 121878, upload-time = "2024-06-06T08:35:01.024Z" }, - { url = "https://files.pythonhosted.org/packages/8d/eb/7560fafa4d40412efddf690cb65a9bf2d3429d6035e544103acbf5561dc4/ijson-3.3.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97a9aea46e2a8371c4cf5386d881de833ed782901ac9f67ebcb63bb3b7d115af", size = 115620, upload-time = "2024-06-06T08:35:02.896Z" }, - { url = "https://files.pythonhosted.org/packages/51/2b/5a34c7841388dce161966e5286931518de832067cd83e6f003d93271e324/ijson-3.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c594c0abe69d9d6099f4ece17763d53072f65ba60b372d8ba6de8695ce6ee39e", size = 119200, upload-time = "2024-06-06T08:35:06.291Z" }, - { url = "https://files.pythonhosted.org/packages/3e/b7/1d64fbec0d0a7b0c02e9ad988a89614532028ead8bb52a2456c92e6ee35a/ijson-3.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e0ff16c224d9bfe4e9e6bd0395826096cda4a3ef51e6c301e1b61007ee2bd24", size = 121107, upload-time = "2024-06-06T08:35:08.261Z" }, - { url = "https://files.pythonhosted.org/packages/d4/b9/01044f09850bc545ffc85b35aaec473d4f4ca2b6667299033d252c1b60dd/ijson-3.3.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0015354011303175eae7e2ef5136414e91de2298e5a2e9580ed100b728c07e51", size = 116658, upload-time = "2024-06-06T08:35:09.99Z" }, - { url = "https://files.pythonhosted.org/packages/fb/0d/53856b61f3d952d299d1695c487e8e28058d01fa2adfba3d6d4b4660c242/ijson-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:034642558afa57351a0ffe6de89e63907c4cf6849070cc10a3b2542dccda1afe", size = 118186, upload-time = "2024-06-06T08:35:11.561Z" }, - { url = "https://files.pythonhosted.org/packages/95/2d/5bd86e2307dd594840ee51c4e32de953fee837f028acf0f6afb08914cd06/ijson-3.3.0-cp311-cp311-win32.whl", hash = "sha256:192e4b65495978b0bce0c78e859d14772e841724d3269fc1667dc6d2f53cc0ea", size = 48938, upload-time = "2024-06-06T08:35:13.212Z" }, - { url = "https://files.pythonhosted.org/packages/55/e1/4ba2b65b87f67fb19d698984d92635e46d9ce9dd748ce7d009441a586710/ijson-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:72e3488453754bdb45c878e31ce557ea87e1eb0f8b4fc610373da35e8074ce42", size = 50972, upload-time = "2024-06-06T08:35:14.698Z" }, - { url = "https://files.pythonhosted.org/packages/8a/4d/3992f7383e26a950e02dc704bc6c5786a080d5c25fe0fc5543ef477c1883/ijson-3.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:988e959f2f3d59ebd9c2962ae71b97c0df58323910d0b368cc190ad07429d1bb", size = 84550, upload-time = "2024-06-06T08:35:16.756Z" }, - { url = "https://files.pythonhosted.org/packages/1b/cc/3d4372e0d0b02a821b982f1fdf10385512dae9b9443c1597719dd37769a9/ijson-3.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b2f73f0d0fce5300f23a1383d19b44d103bb113b57a69c36fd95b7c03099b181", size = 57572, upload-time = "2024-06-06T08:35:18.077Z" }, - { url = "https://files.pythonhosted.org/packages/02/de/970d48b1ff9da5d9513c86fdd2acef5cb3415541c8069e0d92a151b84adb/ijson-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0ee57a28c6bf523d7cb0513096e4eb4dac16cd935695049de7608ec110c2b751", size = 56902, upload-time = "2024-06-06T08:35:20.065Z" }, - { url = "https://files.pythonhosted.org/packages/5e/a0/4537722c8b3b05e82c23dfe09a3a64dd1e44a013a5ca58b1e77dfe48b2f1/ijson-3.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0155a8f079c688c2ccaea05de1ad69877995c547ba3d3612c1c336edc12a3a5", size = 127400, upload-time = "2024-06-06T08:35:21.81Z" }, - { url = "https://files.pythonhosted.org/packages/b2/96/54956062a99cf49f7a7064b573dcd756da0563ce57910dc34e27a473d9b9/ijson-3.3.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ab00721304af1ae1afa4313ecfa1bf16b07f55ef91e4a5b93aeaa3e2bd7917c", size = 118786, upload-time = "2024-06-06T08:35:23.496Z" }, - { url = "https://files.pythonhosted.org/packages/07/74/795319531c5b5504508f595e631d592957f24bed7ff51a15bc4c61e7b24c/ijson-3.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40ee3821ee90be0f0e95dcf9862d786a7439bd1113e370736bfdf197e9765bfb", size = 126288, upload-time = "2024-06-06T08:35:25.473Z" }, - { url = "https://files.pythonhosted.org/packages/69/6a/e0cec06fbd98851d5d233b59058c1dc2ea767c9bb6feca41aa9164fff769/ijson-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:da3b6987a0bc3e6d0f721b42c7a0198ef897ae50579547b0345f7f02486898f5", size = 129569, upload-time = "2024-06-06T08:35:26.871Z" }, - { url = "https://files.pythonhosted.org/packages/2a/4f/82c0d896d8dcb175f99ced7d87705057bcd13523998b48a629b90139a0dc/ijson-3.3.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:63afea5f2d50d931feb20dcc50954e23cef4127606cc0ecf7a27128ed9f9a9e6", size = 121508, upload-time = "2024-06-06T08:35:28.236Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b6/8973474eba4a917885e289d9e138267d3d1f052c2d93b8c968755661a42d/ijson-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b5c3e285e0735fd8c5a26d177eca8b52512cdd8687ca86ec77a0c66e9c510182", size = 127896, upload-time = "2024-06-06T08:35:29.61Z" }, - { url = "https://files.pythonhosted.org/packages/94/25/00e66af887adbbe70002e0479c3c2340bdfa17a168e25d4ab5a27b53582d/ijson-3.3.0-cp312-cp312-win32.whl", hash = "sha256:907f3a8674e489abdcb0206723e5560a5cb1fa42470dcc637942d7b10f28b695", size = 49272, upload-time = "2024-06-06T08:35:31.137Z" }, - { url = "https://files.pythonhosted.org/packages/25/a2/e187beee237808b2c417109ae0f4f7ee7c81ecbe9706305d6ac2a509cc45/ijson-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:8f890d04ad33262d0c77ead53c85f13abfb82f2c8f078dfbf24b78f59534dfdd", size = 51272, upload-time = "2024-06-06T08:35:32.38Z" }, - { url = "https://files.pythonhosted.org/packages/43/ba/d7a3259db956332f17ba93be2980db020e10c1bd01f610ff7d980b281fbd/ijson-3.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3c556f5553368dff690c11d0a1fb435d4ff1f84382d904ccc2dc53beb27ba62e", size = 85069, upload-time = "2024-06-06T08:36:22.352Z" }, - { url = "https://files.pythonhosted.org/packages/a4/79/97b47b9110fc5ef92d004e615526de6d16af436e7374098004fa79242440/ijson-3.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e4396b55a364a03ff7e71a34828c3ed0c506814dd1f50e16ebed3fc447d5188e", size = 57818, upload-time = "2024-06-06T08:36:24.054Z" }, - { url = "https://files.pythonhosted.org/packages/9d/e7/69ddad6389f4d96c095e89c80b765189facfa2cb51f72f3b6fdfe4dcb815/ijson-3.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6850ae33529d1e43791b30575070670070d5fe007c37f5d06aebc1dd152ab3f", size = 57228, upload-time = "2024-06-06T08:36:25.561Z" }, - { url = "https://files.pythonhosted.org/packages/88/84/ba713c8e4f13b0642d7295cc94924fb21e9f26c1fbf71d47fe16f03904f6/ijson-3.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36aa56d68ea8def26778eb21576ae13f27b4a47263a7a2581ab2ef58b8de4451", size = 116369, upload-time = "2024-06-06T08:36:27.355Z" }, - { url = "https://files.pythonhosted.org/packages/a0/27/ed16f80f7be403f2e4892b1c5eecf18c5bff57cbb23c4b059b9eb0b369cc/ijson-3.3.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7ec759c4a0fc820ad5dc6a58e9c391e7b16edcb618056baedbedbb9ea3b1524", size = 109994, upload-time = "2024-06-06T08:36:29.319Z" }, - { url = "https://files.pythonhosted.org/packages/5d/90/5071a6f491663d3bf1f4f59acfc6d29ea0e0d1aa13a16f06f03fcc4f3497/ijson-3.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b51bab2c4e545dde93cb6d6bb34bf63300b7cd06716f195dd92d9255df728331", size = 113745, upload-time = "2024-06-06T08:36:30.75Z" }, - { url = "https://files.pythonhosted.org/packages/de/e3/e39b7a24c156a5d70c39ffb8383231593e549d2e42dda834758f3934fea8/ijson-3.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:92355f95a0e4da96d4c404aa3cff2ff033f9180a9515f813255e1526551298c1", size = 115930, upload-time = "2024-06-06T08:36:32.303Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7a/cd669bf1c65b6b99f4d326e425ef89c02abe62abc36c134e021d8193ecfd/ijson-3.3.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8795e88adff5aa3c248c1edce932db003d37a623b5787669ccf205c422b91e4a", size = 111869, upload-time = "2024-06-06T08:36:34.658Z" }, - { url = "https://files.pythonhosted.org/packages/dd/34/69074a83f3769f527c81952c002ae55e7c43814d1fb71621ada79f2e57b7/ijson-3.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8f83f553f4cde6d3d4eaf58ec11c939c94a0ec545c5b287461cafb184f4b3a14", size = 113322, upload-time = "2024-06-06T08:36:36.603Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d8/2762aac7d749ed443a7c3e25ad071fe143f21ea5f3f33e184e2cf8026c86/ijson-3.3.0-cp39-cp39-win32.whl", hash = "sha256:ead50635fb56577c07eff3e557dac39533e0fe603000684eea2af3ed1ad8f941", size = 48961, upload-time = "2024-06-06T08:36:38.009Z" }, - { url = "https://files.pythonhosted.org/packages/b0/9a/16a68841edea8168a58b200d7b46a7670349ecd35a75bcb96fd84092f603/ijson-3.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:c8a9befb0c0369f0cf5c1b94178d0d78f66d9cebb9265b36be6e4f66236076b8", size = 50985, upload-time = "2024-06-06T08:36:39.369Z" }, - { url = "https://files.pythonhosted.org/packages/c3/28/2e1cf00abe5d97aef074e7835b86a94c9a06be4629a0e2c12600792b51ba/ijson-3.3.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2af323a8aec8a50fa9effa6d640691a30a9f8c4925bd5364a1ca97f1ac6b9b5c", size = 54308, upload-time = "2024-06-06T08:36:41.127Z" }, - { url = "https://files.pythonhosted.org/packages/04/d2/8c541c28da4f931bac8177e251efe2b6902f7c486d2d4bdd669eed4ff5c0/ijson-3.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f64f01795119880023ba3ce43072283a393f0b90f52b66cc0ea1a89aa64a9ccb", size = 66010, upload-time = "2024-06-06T08:36:43.079Z" }, - { url = "https://files.pythonhosted.org/packages/d0/02/8fec0b9037a368811dba7901035e8e0973ebda308f57f30c42101a16a5f7/ijson-3.3.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a716e05547a39b788deaf22725490855337fc36613288aa8ae1601dc8c525553", size = 66770, upload-time = "2024-06-06T08:36:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/47/23/90c61f978c83647112460047ea0137bde9c7fe26600ce255bb3e17ea7a21/ijson-3.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473f5d921fadc135d1ad698e2697025045cd8ed7e5e842258295012d8a3bc702", size = 64159, upload-time = "2024-06-06T08:36:45.887Z" }, - { url = "https://files.pythonhosted.org/packages/20/af/aab1a36072590af62d848f03981f1c587ca40a391fc61e418e388d8b0d46/ijson-3.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd26b396bc3a1e85f4acebeadbf627fa6117b97f4c10b177d5779577c6607744", size = 51095, upload-time = "2024-06-06T08:36:47.414Z" }, - { url = "https://files.pythonhosted.org/packages/ee/38/7e1988ff3b6eb4fc9f3639ac7bbb7ae3a37d574f212635e3bf0106b6d78d/ijson-3.3.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:891f95c036df1bc95309951940f8eea8537f102fa65715cdc5aae20b8523813b", size = 54336, upload-time = "2024-06-06T08:37:04.942Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8d/556e94b4f7e0c68a35597036ad9329b3edadfc6da260c749e2b55b310798/ijson-3.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed1336a2a6e5c427f419da0154e775834abcbc8ddd703004108121c6dd9eba9d", size = 66028, upload-time = "2024-06-06T08:37:06.648Z" }, - { url = "https://files.pythonhosted.org/packages/ba/bb/3ef5b0298e8e4524ed9aa338ec224cb159b5f9b8cace05be3a6c5c01bd10/ijson-3.3.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0c819f83e4f7b7f7463b2dc10d626a8be0c85fbc7b3db0edc098c2b16ac968e", size = 66796, upload-time = "2024-06-06T08:37:08.104Z" }, - { url = "https://files.pythonhosted.org/packages/2e/c1/d1507639ad7a9f1673a16a6e0993524a65d85e4f65cde1097039c3dfdaba/ijson-3.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33afc25057377a6a43c892de34d229a86f89ea6c4ca3dd3db0dcd17becae0dbb", size = 64215, upload-time = "2024-06-06T08:37:09.81Z" }, - { url = "https://files.pythonhosted.org/packages/1b/36/92ea416ff6383e66d83a576347b7edd9b0aa22cd3bd16c42dbb3608a105b/ijson-3.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7914d0cf083471856e9bc2001102a20f08e82311dfc8cf1a91aa422f9414a0d6", size = 51107, upload-time = "2024-06-06T08:37:11.494Z" }, -] - -[[package]] -name = "importlib-metadata" -version = "8.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, -] - -[[package]] -name = "macholib" -version = "1.16.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "altgraph" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/95/ee/af1a3842bdd5902ce133bd246eb7ffd4375c38642aeb5dc0ae3a0329dfa2/macholib-1.16.3.tar.gz", hash = "sha256:07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30", size = 59309, upload-time = "2023-09-25T09:10:16.155Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/5d/c059c180c84f7962db0aeae7c3b9303ed1d73d76f2bfbc32bc231c8be314/macholib-1.16.3-py2.py3-none-any.whl", hash = "sha256:0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c", size = 38094, upload-time = "2023-09-25T09:10:14.188Z" }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, -] - -[[package]] -name = "pefile" -version = "2023.2.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/78/c5/3b3c62223f72e2360737fd2a57c30e5b2adecd85e70276879609a7403334/pefile-2023.2.7.tar.gz", hash = "sha256:82e6114004b3d6911c77c3953e3838654b04511b8b66e8583db70c65998017dc", size = 74854, upload-time = "2023-02-07T12:23:55.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/26/d0ad8b448476d0a1e8d3ea5622dc77b916db84c6aa3cb1e1c0965af948fc/pefile-2023.2.7-py3-none-any.whl", hash = "sha256:da185cd2af68c08a6cd4481f7325ed600a88f6a813bad9dea07ab3ef73d8d8d6", size = 71791, upload-time = "2023-02-07T12:28:36.678Z" }, -] - -[[package]] -name = "pyinstaller" -version = "6.14.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "altgraph" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "macholib", marker = "sys_platform == 'darwin'" }, - { name = "packaging" }, - { name = "pefile", marker = "sys_platform == 'win32'" }, - { name = "pyinstaller-hooks-contrib" }, - { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/25/41d6be08d65bdc5126e86d854f5767397483acf360f2c95c890e3fa96a31/pyinstaller-6.14.2.tar.gz", hash = "sha256:142cce0719e79315f0cc26400c2e5c45d9b6b17e7e0491fee444a9f8f16f4917", size = 4284885, upload-time = "2025-07-04T21:49:35.718Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/dd/e5f4a4be80e291d2443ac7e73fa78f17003e4f2e3ec15a2ffdea0583a5c6/pyinstaller-6.14.2-py3-none-macosx_10_13_universal2.whl", hash = "sha256:d77d18bf5343a1afef2772393d7a489d4ec2282dee5bca549803fc0d74b78330", size = 1000610, upload-time = "2025-07-04T21:48:00.727Z" }, - { url = "https://files.pythonhosted.org/packages/8f/a5/0780ce0f9916012cafd65673a4cc3d59aee65af84c773f49b36aa98d0ce9/pyinstaller-6.14.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:3fa0c391e1300a9fd7752eb1ffe2950112b88fba9d2743eee2ef218a15f4705f", size = 720241, upload-time = "2025-07-04T21:48:05.669Z" }, - { url = "https://files.pythonhosted.org/packages/c8/d6/bf9e385cc20ee5dba5248716eda4d1271599c9ff2e173a0e7577d57866f0/pyinstaller-6.14.2-py3-none-manylinux2014_i686.whl", hash = "sha256:077efb2d01d16d9c8fdda3ad52788f0fead2791c5cec9ed6ce058af7e26eb74b", size = 730496, upload-time = "2025-07-04T21:48:09.954Z" }, - { url = "https://files.pythonhosted.org/packages/97/6f/358d23398cf210ba5a588e1311b6611762e353670d11838633cbb4c5ff79/pyinstaller-6.14.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:fdd2bd020a18736806a6bd5d3c4352f1209b427a96ad6c459d88aec1d90c4f21", size = 728609, upload-time = "2025-07-04T21:48:13.661Z" }, - { url = "https://files.pythonhosted.org/packages/9f/08/379af897977d77a4cf7d8c50dbe0135950be6d97be24c3ca4b45ccccd33b/pyinstaller-6.14.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:03862c6b3cf7b16843d24b529f89cd4077cbe467883cd54ce7a81940d6da09d3", size = 725434, upload-time = "2025-07-04T21:48:27.748Z" }, - { url = "https://files.pythonhosted.org/packages/b8/98/460a32d2e325ad0ea81e4df478a8d84b5ebe0ceaca0cd3088f16afcaba5f/pyinstaller-6.14.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:78827a21ada2a848e98671852d20d74b2955b6e2aaf2359ed13a462e1a603d84", size = 725629, upload-time = "2025-07-04T21:48:32.118Z" }, - { url = "https://files.pythonhosted.org/packages/6f/bc/16eef174580bf4ca386479e48d5be8a977bf36cb6a9006814d754834c773/pyinstaller-6.14.2-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:185710ab1503dfdfa14c43237d394d96ac183422d588294be42531480dfa6c38", size = 724803, upload-time = "2025-07-04T21:48:36.053Z" }, - { url = "https://files.pythonhosted.org/packages/3c/6b/7162d59ee37e6883a5c4830cfe7dfb06c4997cc6aeb5f170d30ae76d9a39/pyinstaller-6.14.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:6c673a7e761bd4a2560cfd5dbe1ccdcfe2dff304b774e6e5242fc5afed953661", size = 724519, upload-time = "2025-07-04T21:48:40.358Z" }, - { url = "https://files.pythonhosted.org/packages/2a/26/d9559ac0851b1e3427a6b3ab0cd9edc8082b114f2499f78af532fdd5e14d/pyinstaller-6.14.2-py3-none-win32.whl", hash = "sha256:1697601aa788e3a52f0b5e620b4741a34b82e6f222ec6e1318b3a1349f566bb2", size = 1300415, upload-time = "2025-07-04T21:48:46.896Z" }, - { url = "https://files.pythonhosted.org/packages/79/69/111c85292ff99567a2408a6c6e9bf0b31910239f82b97d106321762d222c/pyinstaller-6.14.2-py3-none-win_amd64.whl", hash = "sha256:e10e0e67288d6dcb5898a917dd1d4272aa0ff33f197ad49a0e39618009d63ed9", size = 1358298, upload-time = "2025-07-04T21:48:55.685Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e2/c267cadb3307a4979757b086674f592669c04bd960a8d2746dd2d18ad57d/pyinstaller-6.14.2-py3-none-win_arm64.whl", hash = "sha256:69fd11ca57e572387826afaa4a1b3d4cb74927d76f231f0308c0bd7872ca5ac1", size = 1299280, upload-time = "2025-07-04T21:49:07.744Z" }, -] - -[[package]] -name = "pyinstaller-hooks-contrib" -version = "2025.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "packaging" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ea/f7/d375cf8112d839afaf05b90c70dd128624473fd915fce211f5646b0afbc7/pyinstaller_hooks_contrib-2025.6.tar.gz", hash = "sha256:223ae773733fb7a0ee9cb5e817480998a90a6c7a9c3d2b7b580d2dfa2b325751", size = 163799, upload-time = "2025-07-14T21:42:50.497Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/da/e6/ab065bd226099a4e39aa08a54810f846beb7a9c534fa221ee750a3befa25/pyinstaller_hooks_contrib-2025.6-py3-none-any.whl", hash = "sha256:06779d024f7d60dd75b05520923bba16b17df5f64073434b23e570ffb71094dc", size = 440590, upload-time = "2025-07-14T21:42:49.381Z" }, -] - -[[package]] -name = "pywin32-ctypes" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/95/a3fac87cb7158e231b5a6012e438c647e1a87f09f8e0d123acec8ab8bf71/PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086", size = 184199, upload-time = "2024-08-06T20:31:40.178Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7a/68bd47624dab8fd4afbfd3c48e3b79efe09098ae941de5b58abcbadff5cb/PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf", size = 171758, upload-time = "2024-08-06T20:31:42.173Z" }, - { url = "https://files.pythonhosted.org/packages/49/ee/14c54df452143b9ee9f0f29074d7ca5516a36edb0b4cc40c3f280131656f/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237", size = 718463, upload-time = "2024-08-06T20:31:44.263Z" }, - { url = "https://files.pythonhosted.org/packages/4d/61/de363a97476e766574650d742205be468921a7b532aa2499fcd886b62530/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b", size = 719280, upload-time = "2024-08-06T20:31:50.199Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4e/1523cb902fd98355e2e9ea5e5eb237cbc5f3ad5f3075fa65087aa0ecb669/PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed", size = 751239, upload-time = "2024-08-06T20:31:52.292Z" }, - { url = "https://files.pythonhosted.org/packages/b7/33/5504b3a9a4464893c32f118a9cc045190a91637b119a9c881da1cf6b7a72/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180", size = 695802, upload-time = "2024-08-06T20:31:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/5c/20/8347dcabd41ef3a3cdc4f7b7a2aff3d06598c8779faa189cdbf878b626a4/PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68", size = 720527, upload-time = "2024-08-06T20:31:55.565Z" }, - { url = "https://files.pythonhosted.org/packages/be/aa/5afe99233fb360d0ff37377145a949ae258aaab831bde4792b32650a4378/PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99", size = 144052, upload-time = "2024-08-06T20:31:56.914Z" }, - { url = "https://files.pythonhosted.org/packages/b5/84/0fa4b06f6d6c958d207620fc60005e241ecedceee58931bb20138e1e5776/PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e", size = 161774, upload-time = "2024-08-06T20:31:58.304Z" }, - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, - { url = "https://files.pythonhosted.org/packages/65/d8/b7a1db13636d7fb7d4ff431593c510c8b8fca920ade06ca8ef20015493c5/PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d", size = 184777, upload-time = "2024-08-06T20:33:25.896Z" }, - { url = "https://files.pythonhosted.org/packages/0a/02/6ec546cd45143fdf9840b2c6be8d875116a64076218b61d68e12548e5839/PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f", size = 172318, upload-time = "2024-08-06T20:33:27.212Z" }, - { url = "https://files.pythonhosted.org/packages/0e/9a/8cc68be846c972bda34f6c2a93abb644fb2476f4dcc924d52175786932c9/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290", size = 720891, upload-time = "2024-08-06T20:33:28.974Z" }, - { url = "https://files.pythonhosted.org/packages/e9/6c/6e1b7f40181bc4805e2e07f4abc10a88ce4648e7e95ff1abe4ae4014a9b2/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12", size = 722614, upload-time = "2024-08-06T20:33:34.157Z" }, - { url = "https://files.pythonhosted.org/packages/3d/32/e7bd8535d22ea2874cef6a81021ba019474ace0d13a4819c2a4bce79bd6a/PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19", size = 737360, upload-time = "2024-08-06T20:33:35.84Z" }, - { url = "https://files.pythonhosted.org/packages/d7/12/7322c1e30b9be969670b672573d45479edef72c9a0deac3bb2868f5d7469/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e", size = 699006, upload-time = "2024-08-06T20:33:37.501Z" }, - { url = "https://files.pythonhosted.org/packages/82/72/04fcad41ca56491995076630c3ec1e834be241664c0c09a64c9a2589b507/PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725", size = 723577, upload-time = "2024-08-06T20:33:39.389Z" }, - { url = "https://files.pythonhosted.org/packages/ed/5e/46168b1f2757f1fcd442bc3029cd8767d88a98c9c05770d8b420948743bb/PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631", size = 144593, upload-time = "2024-08-06T20:33:46.63Z" }, - { url = "https://files.pythonhosted.org/packages/19/87/5124b1c1f2412bb95c59ec481eaf936cd32f0fe2a7b16b97b81c4c017a6a/PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8", size = 162312, upload-time = "2024-08-06T20:33:49.073Z" }, -] - -[[package]] -name = "requests" -version = "2.32.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, -] - -[[package]] -name = "sentry-prevent-cli" -version = "11.2.8" -source = { editable = "." } -dependencies = [ - { name = "click" }, - { name = "codecov-cli" }, - { name = "sentry-sdk" }, -] - -[package.dev-dependencies] -dev = [ - { name = "pyinstaller" }, -] - -[package.metadata] -requires-dist = [ - { name = "click", specifier = ">=8.0.0,<8.3.0" }, - { name = "codecov-cli", editable = "../codecov-cli" }, - { name = "sentry-sdk", specifier = "==2.*" }, -] - -[package.metadata.requires-dev] -dev = [{ name = "pyinstaller", specifier = "==6.*" }] - -[[package]] -name = "sentry-sdk" -version = "2.25.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/85/2f/a0f732270cc7c1834f5ec45539aec87c360d5483a8bd788217a9102ccfbd/sentry_sdk-2.25.1.tar.gz", hash = "sha256:f9041b7054a7cf12d41eadabe6458ce7c6d6eea7a97cfe1b760b6692e9562cf0", size = 322190, upload-time = "2025-04-02T15:13:10.225Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/b6/84049ab0967affbc7cc7590d86ae0170c1b494edb69df8786707100420e5/sentry_sdk-2.25.1-py2.py3-none-any.whl", hash = "sha256:60b016d0772789454dc55a284a6a44212044d4a16d9f8448725effee97aaf7f6", size = 339851, upload-time = "2025-04-02T15:13:08.616Z" }, -] - -[[package]] -name = "setuptools" -version = "80.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, -] - -[[package]] -name = "test-results-parser" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/bd/ee2278f92c6fdee1490c9dacd3ab5d6cdf61a26de988465723f52c17fb03/test_results_parser-0.6.1.tar.gz", hash = "sha256:5ea92dc7ae84bd89e9c3fc375317d85c981f9d139c3cca1b0afe16d96e34e7f6", size = 17272, upload-time = "2025-11-17T15:40:34.035Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/59/6a/071ca1c9ef346d04ec9ab4bbf54e3b29eecc6250879be0893f63106a9b35/test_results_parser-0.6.1-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:be4fc78d28a44439f80215262e22132697afde3ca0c414791c6f615ed5d985d0", size = 1938264, upload-time = "2025-11-17T15:40:25.191Z" }, - { url = "https://files.pythonhosted.org/packages/bb/77/5654fcc76c4f400156f77ce6febbb267b3abb1a8e0a1715dffd50dcbc577/test_results_parser-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6d653bf8a6177ba2ade551e82d6e0a241e764d861528da6cabc13f88f9fbb67", size = 1075035, upload-time = "2025-11-17T15:39:35.886Z" }, - { url = "https://files.pythonhosted.org/packages/63/66/f2873c50454cd0fad0b251c1298a3295fa852a29b63872150ff0b7c0d029/test_results_parser-0.6.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1a522c115bc6186c7e2ea82438138a29df36d2ec1bda407f544e099a56430dbc", size = 1025049, upload-time = "2025-11-17T15:39:43.251Z" }, - { url = "https://files.pythonhosted.org/packages/27/08/c651e5aa4417a5c97504d7f10f912e566a8cffb58a19e0dafe43c6f692c3/test_results_parser-0.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c539072e94fa8e33e9c13a65ee425b77959f7b7ff7a6f3428ec7be28f96a7e4", size = 1229682, upload-time = "2025-11-17T15:39:52.92Z" }, - { url = "https://files.pythonhosted.org/packages/67/b7/2743981f4bca8b3e780bf25a58781221ba51fc1d78595d62e62b02c26d5d/test_results_parser-0.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f52b70e3ca48d0fe2a96aba7834a120676bddaa166ee7c8a79fc17cddbaaef27", size = 1131820, upload-time = "2025-11-17T15:40:00.687Z" }, - { url = "https://files.pythonhosted.org/packages/71/a4/d4bbd00e704ec5516f2be78b6015dc12d6114c737770ae163ce7190d431a/test_results_parser-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19ba9edccb3e5dcf2e5b8acf4aab6a1ea9abfdfd7f196e3282185b1979474a57", size = 1085384, upload-time = "2025-11-17T15:40:16.607Z" }, - { url = "https://files.pythonhosted.org/packages/c0/e6/e8348bdbe554fb75cd2123d530fdb48fa377548f799ccc8b209448b2ce2b/test_results_parser-0.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e7742c759925df05f056cf4126db3e3cbdd4ed4b72833f9d3caddcaaf6259b29", size = 1116619, upload-time = "2025-11-17T15:40:08.517Z" }, - { url = "https://files.pythonhosted.org/packages/31/bb/cd54135b08f1e7139b9c4cf428464a7b84e80d963e9dffa53437ffc43a50/test_results_parser-0.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:783d1bfd0989f5a625c710b1c4e2264044d9695e6a33fce05cbd3dd2a2960eb7", size = 1257713, upload-time = "2025-11-17T15:39:03.364Z" }, - { url = "https://files.pythonhosted.org/packages/3c/13/0280c5564b1c094e3fa7928c871bd938bd211297f8a75a397dfa1ee47a28/test_results_parser-0.6.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:e7f9bd1e417dcace281b92dd0fbc02f19f4b3662592580e82da486b738928711", size = 1292579, upload-time = "2025-11-17T15:39:11.565Z" }, - { url = "https://files.pythonhosted.org/packages/ae/30/d65c36ac1fb291084cfeda0382258700709209f16faa0adb118c1e5eb9df/test_results_parser-0.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2538ee7ca49d3616bab8323964fbdc6d1a98d66e3e28c64278e3f4d755f6ed8b", size = 1259778, upload-time = "2025-11-17T15:39:19.528Z" }, - { url = "https://files.pythonhosted.org/packages/f7/86/c094c6b67daa3809e61e1743c4c8cc9ee798830af781980de6b03c67e06c/test_results_parser-0.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bb40d3bf1e04e06538603bf6edef9bf831e238b84844092869e7f0be5029a9e1", size = 1285313, upload-time = "2025-11-17T15:39:27.72Z" }, - { url = "https://files.pythonhosted.org/packages/4d/02/0dc496102a98a8034b74fe7acfc22aad1fa4730b8c271d69ce71968758f7/test_results_parser-0.6.1-cp310-cp310-win32.whl", hash = "sha256:46a9d47de446d816ca485ec45540e0c7497caf313f9781ab34c8b1252ebb7522", size = 752000, upload-time = "2025-11-17T15:40:42.48Z" }, - { url = "https://files.pythonhosted.org/packages/74/7f/5f2f93f1bb3d329c8db267402895f75d770e3a1bbe06899bb6b6e7fef1b1/test_results_parser-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:4de306cbf46fe118984dd36847ef41dde6b3e92bc755f3e72a9c3c6ecf645796", size = 835113, upload-time = "2025-11-17T15:40:34.911Z" }, - { url = "https://files.pythonhosted.org/packages/13/ea/5be03c306bd95be671fd2ac3daa62b0483d66d1345a5741c7d67b8c93eda/test_results_parser-0.6.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5950f9c566739ee14a0b85266436a6e28e7b34b639213c5d7efa263327fa9b9c", size = 1937730, upload-time = "2025-11-17T15:40:26.632Z" }, - { url = "https://files.pythonhosted.org/packages/89/83/40752cf8bdffda7dd500334bb207249d2c1e5120c9815811f083db023825/test_results_parser-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f28d1c51cbb75f2a3c8a20c6b96b9a45e2a4f37bebff490ed26f91e4729652e4", size = 1074956, upload-time = "2025-11-17T15:39:37.113Z" }, - { url = "https://files.pythonhosted.org/packages/0b/f7/265d9a29f0ad254e0a178857773fbc880b9f2e069fc43004a2b692bc580d/test_results_parser-0.6.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f495c9806492f4beb5077b916918ce1aca854f51a0f6d1ade6c841c2efee3f1c", size = 1024613, upload-time = "2025-11-17T15:39:45.556Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ff/0f56b9f3993b05a87a99fc8da5b9aade7218a4802485d4786b110efa671c/test_results_parser-0.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:814dd8793611dec110aac3db7c5082282c32439648affc15e09248d93558208c", size = 1230759, upload-time = "2025-11-17T15:39:54.361Z" }, - { url = "https://files.pythonhosted.org/packages/a2/6d/27fe9463e81b074778c503023a389607b70b6485aacc27a0737003db37f8/test_results_parser-0.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bebf4d032f1aae44dbb75614e0df2850e6572e2e148445753b3324bcfeba9cf2", size = 1131802, upload-time = "2025-11-17T15:40:02.201Z" }, - { url = "https://files.pythonhosted.org/packages/41/26/85404bcbfc4d81aa447fcb558e953053ce201df41ca077a5b438dd59331d/test_results_parser-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c41884685d41b55dc1b68376c4a7c7a6dd473e0b42b2cd4fe919c7d581707f15", size = 1085277, upload-time = "2025-11-17T15:40:19.123Z" }, - { url = "https://files.pythonhosted.org/packages/52/5e/8febef58178254bfdd8b48696bacad6fb3cc87b47f2dcea927931ed7f23f/test_results_parser-0.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f6225e21a9195f70f6bbfbad932a392c7828a3b9158248554aa8fdc7cd584a0e", size = 1116578, upload-time = "2025-11-17T15:40:10.049Z" }, - { url = "https://files.pythonhosted.org/packages/23/be/02e10d663e6719eb34065556707d82cff4ecb78e88c7649768d7e97cae7b/test_results_parser-0.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d37aaa543419babfb0e9d039092418f229c7f5a11375462f3ea072d3c3c8094d", size = 1257396, upload-time = "2025-11-17T15:39:04.611Z" }, - { url = "https://files.pythonhosted.org/packages/e2/da/aabd89f5ccba0b6444f8e55245ad34b82cd2536d81daa74ebb1df8b26a50/test_results_parser-0.6.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:dad3b38677b48a15381e15ef0bbf65e2d10c23c9a8ff4f7fb72ffb0bb1e8f070", size = 1292191, upload-time = "2025-11-17T15:39:12.965Z" }, - { url = "https://files.pythonhosted.org/packages/49/5d/7d9da8567aa7f1c0fc48969696e53326cea8a4667c21c07db2bbf9dd35a9/test_results_parser-0.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b60a7e8cf68820e0b6acf54db36f09fb7948e51e9ad29d948d25a69733e830ba", size = 1259684, upload-time = "2025-11-17T15:39:20.622Z" }, - { url = "https://files.pythonhosted.org/packages/87/52/68cd8a4dfc778854dcd9bbfbe404a938ab9522759e6b40e41ab2539553d5/test_results_parser-0.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:01a00d118de4b712ef5b52e1e30acacfe6150e64d58b6e684a640f4ee50b3c3a", size = 1285046, upload-time = "2025-11-17T15:39:28.972Z" }, - { url = "https://files.pythonhosted.org/packages/26/7a/c50c1c3fecb37b946dd5f009d7b7aae30480f09bdc6bcc62d6955aa9d0c9/test_results_parser-0.6.1-cp311-cp311-win32.whl", hash = "sha256:34fe9ed35397e14cc43476e112cba456fbfaaf068ab3639c0c4ace56bcaec71c", size = 751666, upload-time = "2025-11-17T15:40:44.006Z" }, - { url = "https://files.pythonhosted.org/packages/aa/df/97923286e5d4bb2ff2d9fd5287d03999ca5a1682fd130c585cbca4c1d522/test_results_parser-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:f2172cc4268d02df97753de852041d9583108d7a1bdf7c568a21eb9e03d7e8be", size = 835046, upload-time = "2025-11-17T15:40:36.105Z" }, - { url = "https://files.pythonhosted.org/packages/00/58/7dc2d6c76e7469cfb9a9998e1b24b5db588f9bfaa389b29c552d15aa6ca3/test_results_parser-0.6.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:45e51676be71094d0866e30de13e8d5cfef3cd0459c5ed63698f8c5fc51522ba", size = 1936891, upload-time = "2025-11-17T15:40:27.989Z" }, - { url = "https://files.pythonhosted.org/packages/55/6d/42e1f0361e8480e506ab1f718984071193cbd0cd34ed06f86ed575d35184/test_results_parser-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fb270c888b94dbd24c6dca68df4b0a3799d7c17b4221a06a33b7b3cf208dfae", size = 1073693, upload-time = "2025-11-17T15:39:38.265Z" }, - { url = "https://files.pythonhosted.org/packages/8a/2a/2f130c16b3545d3f22a80f8578afe80b70e76070607e7c97196203427b0b/test_results_parser-0.6.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:871586dd22b2da8a77c2ab115591efd98406ce50a7d27911fa1831efea96e88b", size = 1024098, upload-time = "2025-11-17T15:39:47.669Z" }, - { url = "https://files.pythonhosted.org/packages/8a/5e/58c727bdef1025f85a5d9df2d7632eb31e81d365bf03dc17b72af998a467/test_results_parser-0.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:284e505daff6c47ff241c71e8405708a7d549e365720ddbbee39e5800b38c315", size = 1225621, upload-time = "2025-11-17T15:39:55.654Z" }, - { url = "https://files.pythonhosted.org/packages/12/40/7804db8dbf07e3373602e1528da8ab831446555dfa8067bf0eab6639022a/test_results_parser-0.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6803261a14eda22ba56e5bfd8788e9b0820a884dc4003371586630e01e313117", size = 1130619, upload-time = "2025-11-17T15:40:03.38Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f2/b5df608e198be81dfc4252d159771132d82c4dd49f44834914f2c8122adb/test_results_parser-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d5f324b6d2fd0ea0317a72f2e823901b459a765cfc542a5c5d02465433c601b", size = 1083969, upload-time = "2025-11-17T15:40:20.327Z" }, - { url = "https://files.pythonhosted.org/packages/dc/71/0ebfb6817c10d82104af7d58d1b036ee4cd496272511f1c3bf4f401bd799/test_results_parser-0.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:147e539cfcc238794f04693063d726e0bfe4565abac4da2f775a4ad2fc3ff06d", size = 1114326, upload-time = "2025-11-17T15:40:11.242Z" }, - { url = "https://files.pythonhosted.org/packages/2b/07/600a721e79767a7e6bb3503b68f4fb93981fba7314eb1b8bdc984cb0a79b/test_results_parser-0.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:dc862a840298686decc96b1fff1af049d212384f2be01704ba171bf395c1b70b", size = 1255930, upload-time = "2025-11-17T15:39:06.037Z" }, - { url = "https://files.pythonhosted.org/packages/06/eb/774718f25920b3e2386bc55fe436e3061ae7a00b32d4dd3550ee48d14abe/test_results_parser-0.6.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e6fd37e4b032b051de7eca6c83dd4debd1ba02a9dba7820461ba8e8cfbd2d65c", size = 1292572, upload-time = "2025-11-17T15:39:14.104Z" }, - { url = "https://files.pythonhosted.org/packages/29/9c/73247f1b84703d1b322e2f37fb3761e5d3066ce6c8bd62f5b2785f669ae0/test_results_parser-0.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a07773d3e9c8fb9c8bee7119cb3caa7d1ed7a87e6db9fa1d6c2db4152552d0eb", size = 1256664, upload-time = "2025-11-17T15:39:22.081Z" }, - { url = "https://files.pythonhosted.org/packages/d2/84/cb36832fd52b84203bcc5d0e825a298e7c236611b75bb58d7b630d23d00b/test_results_parser-0.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4c430604ecd931bccf86a3249c9e292ff0371ec2f8533545e27ab699659f7a08", size = 1283813, upload-time = "2025-11-17T15:39:30.375Z" }, - { url = "https://files.pythonhosted.org/packages/43/62/4dfe1a65d57d5985cbd728c71665bf51a1afc417d6b155fb08c8013ab772/test_results_parser-0.6.1-cp312-cp312-win32.whl", hash = "sha256:6cbe077ad1e6bfd525c9fbb797310cffafb0b8f14b573ebcd744f122b1880715", size = 750140, upload-time = "2025-11-17T15:40:45.455Z" }, - { url = "https://files.pythonhosted.org/packages/8c/8b/6d386f41b4ea2f356d8fd2da001f3af3afe70808c305645a20cc6fc4b0ac/test_results_parser-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:7eb18ccf4054000aeabcec239e46115332d529d87c9b3e3571c64863244b8091", size = 834800, upload-time = "2025-11-17T15:40:37.327Z" }, - { url = "https://files.pythonhosted.org/packages/d6/28/11e530de8e6eb5ce1bd912a8a7329e3d45c5a5630b38673c04bc894a6e44/test_results_parser-0.6.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:b1be08a5668dbbac188e76205b2206667b44f70375ee65c6cf4bfd674d5de272", size = 1937516, upload-time = "2025-11-17T15:40:30.065Z" }, - { url = "https://files.pythonhosted.org/packages/63/e9/ebd276df62e9d2bbba0f81e8c95afed0e2406e365868f0edce96282564d3/test_results_parser-0.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f87ccdc5ba81c689cded90ac7887d335cc01cc37b282fa0a595bb2e7480e281", size = 1073193, upload-time = "2025-11-17T15:39:39.337Z" }, - { url = "https://files.pythonhosted.org/packages/9d/bc/5f291c853c2dab8cbc7bb45f0aa288b7946f7041eb1f690d0c08a7d6e241/test_results_parser-0.6.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:12338cb5a284d423e5e424737d12802e7e304a93c06f5788458d69549a50a579", size = 1023666, upload-time = "2025-11-17T15:39:48.88Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5e/640f61cb6ed08b499967e7a80d96ebbd65c144dd4383168062fdfc16a696/test_results_parser-0.6.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e3eff2f92fdb6598b73b3ff8159c38fdbf610b47c52f1afb287f972d28894206", size = 1226057, upload-time = "2025-11-17T15:39:56.792Z" }, - { url = "https://files.pythonhosted.org/packages/82/e4/a277a8f102cc7ad5d68a32253fa2274d00790887f26f8723a8eb9c8781a0/test_results_parser-0.6.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdfe63371f6d1e6d4f49de20ab5c3fd4c42caf481af7e65335f361f541d96c63", size = 1131961, upload-time = "2025-11-17T15:40:04.507Z" }, - { url = "https://files.pythonhosted.org/packages/a6/b5/24caf6939443536f4b7ddc4aff7ba523f466a76512212fcf2c2d42fb0eaa/test_results_parser-0.6.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e954216758324161aa9c02f9cdec657d13ea484a081e5f34619d07d8d23b06f", size = 1083830, upload-time = "2025-11-17T15:40:21.5Z" }, - { url = "https://files.pythonhosted.org/packages/f7/9f/2b3d448e9081f12f36f8dc32c9cabe5b5a64b2641104496e8e91b2200915/test_results_parser-0.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1c2adab1eeeaad82639a184567409628a634dd18c8de7578f0b2fefd762d086", size = 1113781, upload-time = "2025-11-17T15:40:12.408Z" }, - { url = "https://files.pythonhosted.org/packages/98/ed/739a4c6ccc5c0e9fd4b1fd678f819acb86dc9fbd37b342898d3a9cc7251a/test_results_parser-0.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9dff5d0954a2464336d1d569e5913f0ad8080611420fc79ad8ae8ed143f38b4d", size = 1255300, upload-time = "2025-11-17T15:39:07.554Z" }, - { url = "https://files.pythonhosted.org/packages/92/4d/ea961e694096c8a311b7e8191af6a48a07909f133d40f704ea67d796ca36/test_results_parser-0.6.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cd81dba17fe82afe92bcf9d6e4f2d665145ca27515e96d6b346cfc35134520dd", size = 1292100, upload-time = "2025-11-17T15:39:15.35Z" }, - { url = "https://files.pythonhosted.org/packages/fe/81/b48707703d1dd4cf6f052dd635a6ca4988c8d1867e52dc90c375ce05e106/test_results_parser-0.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d6096995f5b2c32e1aa61c214bdc833e14b3d66c7886a809ab7d87500cf73e32", size = 1256104, upload-time = "2025-11-17T15:39:23.695Z" }, - { url = "https://files.pythonhosted.org/packages/ac/45/3d3010f75a007a44a2b94391af0efd6914f439c977a8eca30e0c946dd8cb/test_results_parser-0.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f2712cb1f472ce4d01b473e4e19d66a98500e4b5e83538b6a4ddc8972d148e6f", size = 1284040, upload-time = "2025-11-17T15:39:31.819Z" }, - { url = "https://files.pythonhosted.org/packages/83/f1/52a22cc1093a02a34004c50cded025b78956171ecd35d6cb6bf72e3a54dd/test_results_parser-0.6.1-cp313-cp313-win32.whl", hash = "sha256:19b907d3f45a1c122d582797ccb50781762b48752b664cad18a4220792b8867a", size = 750240, upload-time = "2025-11-17T15:40:47.307Z" }, - { url = "https://files.pythonhosted.org/packages/67/87/1e210f709c8c57bb24b8458957d643e37d0783875e97a8480f8fe42fa42a/test_results_parser-0.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:c3c751bc91ea26a90c4768fa2c711ee3d96ebc04e8997614fa6199b9efc72d9f", size = 834918, upload-time = "2025-11-17T15:40:38.561Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b1/828bca164d2d6ead099bb33f429d9083771af6baf6aefdaf84f5cb6a58bb/test_results_parser-0.6.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:f11741a816681f6ff01fd4c5dbc4d890dcb0464fa5c4b5a174b66d898b580074", size = 1929621, upload-time = "2025-11-17T15:40:31.587Z" }, - { url = "https://files.pythonhosted.org/packages/cc/c9/2f80fa9e74beefcbdbeb74c64a6b1ccdfd3d271c4f95f34f6ae08a7cdf5c/test_results_parser-0.6.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5109479cda333f0665f89b71e3c4a1d9569bfd15f7c2aff3d307ee7363776b63", size = 1071517, upload-time = "2025-11-17T15:39:40.504Z" }, - { url = "https://files.pythonhosted.org/packages/c5/95/206b36fa6d026b1b4a6566b7d0fd3965027d7c3944b602335f2e06d3f52e/test_results_parser-0.6.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0f0b04d3b078040657b0483b11fd0634ea8331d5d24bdcd97f2ec7380598effd", size = 1023179, upload-time = "2025-11-17T15:39:50.115Z" }, - { url = "https://files.pythonhosted.org/packages/b7/3f/d598c2bfd24636678320d243ff34199862c4277b47301e86fd154ec5b2a7/test_results_parser-0.6.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3419fd93807f93dd673b8b8c0a79b66f098f2e1e8e3c72d008f8cf790730e7af", size = 1226017, upload-time = "2025-11-17T15:39:57.998Z" }, - { url = "https://files.pythonhosted.org/packages/01/d7/c569eb079e64c6c55c984dec5abdd7e79ba76b3688178dd53cc3be305f54/test_results_parser-0.6.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3cd3ef8c03532865a4e00978b026b4aafd4a2b69fb757543be408477f3ed8e5f", size = 1129930, upload-time = "2025-11-17T15:40:05.717Z" }, - { url = "https://files.pythonhosted.org/packages/1b/82/3019511b8a7da13247f0c01dd41ac3f2adc08d9dc3cf90318fb694e1ad55/test_results_parser-0.6.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61832592a4ab45b06053f299c7ad03d30654ef0b4c3f49289e4ffb11816e2b45", size = 1081525, upload-time = "2025-11-17T15:40:22.676Z" }, - { url = "https://files.pythonhosted.org/packages/f6/bb/c6be2cecfca756b1647741cc50ef542cae73b5c69c23be0499ac73fc4628/test_results_parser-0.6.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cb7ae303e2f818f5ca09977b0a961f5c051f9a3a60e119d253177d22a0ae38bb", size = 1113184, upload-time = "2025-11-17T15:40:13.845Z" }, - { url = "https://files.pythonhosted.org/packages/ee/b8/2b8f6dd2a5563a64ecf86556be0ce8157e03d581c1381a1d50cb838a022b/test_results_parser-0.6.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:22a2ba7a8f07d65fde0cf61ebb0cbf991376e9f25b3e38250f5f3bf95aba26e0", size = 1253641, upload-time = "2025-11-17T15:39:09.075Z" }, - { url = "https://files.pythonhosted.org/packages/0f/cb/6f980a9e653ad7e2998c6731b073b2373f8da45ef23c41aaa9a20e92f976/test_results_parser-0.6.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:ff81f9b57a7805331b48511e26dc7da713425bdb220419800991a070c5b00166", size = 1291260, upload-time = "2025-11-17T15:39:16.492Z" }, - { url = "https://files.pythonhosted.org/packages/54/25/b842bd702ac3014373660bed47fe5d3744311dccb85493fab3de9f545f19/test_results_parser-0.6.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e3ed6bf909209e544c79cf41742b73029aaca28c94a7d34d70c38c0c124e553b", size = 1255389, upload-time = "2025-11-17T15:39:25.111Z" }, - { url = "https://files.pythonhosted.org/packages/71/a6/4bc37d368d2dc42f5cc02e4faf29be6dcda95135f84493bc91cf9f86a5c8/test_results_parser-0.6.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:88c42fa9a67fd696648ca18bd3d6e578937d398c83a21523afc308311b483b22", size = 1282644, upload-time = "2025-11-17T15:39:33.375Z" }, - { url = "https://files.pythonhosted.org/packages/73/f8/74508f373a092ed334db5aac8a8b31cd2ed52606bbb92bc4b1a8105e9154/test_results_parser-0.6.1-cp314-cp314-win32.whl", hash = "sha256:bc92df39f10348e0a4de9f8a56fd1632e61f6bd914bfb6eeb6b63efbe4eca2ad", size = 748939, upload-time = "2025-11-17T15:40:48.557Z" }, - { url = "https://files.pythonhosted.org/packages/48/32/aa1b46cf50bab66419355d7009877618c49d3162d04a5703586762accbd3/test_results_parser-0.6.1-cp314-cp314-win_amd64.whl", hash = "sha256:4181db8f5818f00b26c509a60a4383079359954db6e9741c37a7d2d3e53b20b5", size = 832378, upload-time = "2025-11-17T15:40:39.821Z" }, - { url = "https://files.pythonhosted.org/packages/a1/7d/d425966e502befcc593ea213362b410d3cc224d92e9b006a8d14e1b5f171/test_results_parser-0.6.1-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:eab228d76140e8fc8629655316b4f35f84d373f31960d9e985fa565bf59e8100", size = 1943003, upload-time = "2025-11-17T15:40:32.847Z" }, - { url = "https://files.pythonhosted.org/packages/aa/15/e3d46b2a1356737706575a61d174ec7ba981d3cc98770b36fd6ceb42e697/test_results_parser-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c555b383b7596cf29aca672cb0014b23173cb59953d41dfe7f5062dffa1d74fd", size = 1077946, upload-time = "2025-11-17T15:39:41.701Z" }, - { url = "https://files.pythonhosted.org/packages/71/78/8f3626a92988e8dad4511821e729b4e4ab343461cc78a54257637d512090/test_results_parser-0.6.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e5f728f542a41db7b1e2159580b2ff27defe0dea10619040ea974c003b3ee186", size = 1029506, upload-time = "2025-11-17T15:39:51.811Z" }, - { url = "https://files.pythonhosted.org/packages/61/7a/c0c198ea4e690a846c2e212db3f2aa34eafe77647c7a638596fbb8688eab/test_results_parser-0.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11297086477f9b0b3df0c87296977f8b463ed76d9bd7a8588c7802f7a15aa4ee", size = 1233296, upload-time = "2025-11-17T15:39:59.214Z" }, - { url = "https://files.pythonhosted.org/packages/0a/9c/eb679613aa71c6c9ff58b51bc47e0daab87b0752ff97e2592c4d86557a62/test_results_parser-0.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:433b9fa84cb4ea93b40c991507e1d5c2b3e05da02c59a8acd6b2c1a58111242b", size = 1134790, upload-time = "2025-11-17T15:40:07.299Z" }, - { url = "https://files.pythonhosted.org/packages/55/79/806ee5b804ec776ac1b2324147a2d197c2467fd420e9560a5f093b18d7fc/test_results_parser-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e260dfba9fcb3b88c17028f5ad5a94170554740b9a992179c987406b8e85fa8", size = 1087611, upload-time = "2025-11-17T15:40:23.948Z" }, - { url = "https://files.pythonhosted.org/packages/24/95/3fe5310764ff1d9dedcc762345e3d29880678a3041602e49bed0e21f5940/test_results_parser-0.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:554e414fa3fd984927af45584b666a78f894f44cd638490020dce96e6040d063", size = 1120230, upload-time = "2025-11-17T15:40:15.425Z" }, - { url = "https://files.pythonhosted.org/packages/f7/b1/e08b88f4c420ea6fb038a154ba7adc82bdb73907883608c5605c873f905f/test_results_parser-0.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f7e9344bb1fa17a7d5a6cb90cb5e48aabd38d027fe7f972dc95e82c9a6ca963f", size = 1261319, upload-time = "2025-11-17T15:39:10.384Z" }, - { url = "https://files.pythonhosted.org/packages/a8/d2/01363e093b01b6dd808434ee29deef830f9001f002238e8ded4c1334eb46/test_results_parser-0.6.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:81839aff85fa6b5ead29b27b3c55d5a84c79febc7e145db2c7fb88971fcf37d1", size = 1294534, upload-time = "2025-11-17T15:39:18.095Z" }, - { url = "https://files.pythonhosted.org/packages/76/7c/a032a15b79adc9d532fa5dd94eabfd5229d0914c4ffa6825cd83e5601cd9/test_results_parser-0.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cd5b4fafe0bb15a5a37703856e4fae7a237f53e4bef1fc8d1d16319f6272a0a5", size = 1262090, upload-time = "2025-11-17T15:39:26.405Z" }, - { url = "https://files.pythonhosted.org/packages/3b/40/7297e431134cdfb1d69e8b1598f76bce10cf608a22143cde2c291d842a52/test_results_parser-0.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f56547a55578cf6bf9b34b0066190f27ec51bfb9392f3ffc6a0291edb2e06404", size = 1286611, upload-time = "2025-11-17T15:39:34.501Z" }, - { url = "https://files.pythonhosted.org/packages/b6/7a/a5ac43733a24cf5f27b051fb93eb259963c7419ab1ddb26fb7db558e970b/test_results_parser-0.6.1-cp39-cp39-win32.whl", hash = "sha256:484539ed0768cc08099a64b9d30ed902b474b0318387d28ac18bf1c0e0271fc5", size = 753492, upload-time = "2025-11-17T15:40:49.828Z" }, - { url = "https://files.pythonhosted.org/packages/24/92/1be9e2af9905305090383e83d179eda0ac3044ff4958976e45668d28d6d9/test_results_parser-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:c40dcebb3bd1bf384277bc3a425becdf04f1e3178fd4b4b0b6e1b6884286a6fc", size = 837049, upload-time = "2025-11-17T15:40:41.211Z" }, -] - -[[package]] -name = "urllib3" -version = "2.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, -] - -[[package]] -name = "zipp" -version = "3.23.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, -] diff --git a/codecov-cli/pyproject.toml b/pyproject.toml similarity index 83% rename from codecov-cli/pyproject.toml rename to pyproject.toml index d820e703f..1764279f5 100644 --- a/codecov-cli/pyproject.toml +++ b/pyproject.toml @@ -38,10 +38,10 @@ codecov-cli = "codecov_cli.main:run" [project.urls] Homepage = "https://about.codecov.io" -"CI: GitHub" = "https://github.com/getsentry/prevent-cli/actions/workflows/ci.yml" +"CI: GitHub" = "https://github.com/codecov/codecov-cli/actions/workflows/ci.yml" "Docs" = "https://docs.codecov.com" -"GitHub: issues" = "https://github.com/getsentry/prevent-cli/issues" -"GitHub: repo" = "https://github.com/getsentry/prevent-cli" +"GitHub: issues" = "https://github.com/codecov/codecov-cli/issues" +"GitHub: repo" = "https://github.com/codecov/codecov-cli" [build-system] requires = ["setuptools"] diff --git a/codecov-cli/ruff.toml b/ruff.toml similarity index 100% rename from codecov-cli/ruff.toml rename to ruff.toml diff --git a/codecov-cli/samples/example_cli_config.yml b/samples/example_cli_config.yml similarity index 100% rename from codecov-cli/samples/example_cli_config.yml rename to samples/example_cli_config.yml diff --git a/codecov-cli/samples/example_module.js b/samples/example_module.js similarity index 100% rename from codecov-cli/samples/example_module.js rename to samples/example_module.js diff --git a/codecov-cli/samples/fake_project/.codecov.yaml b/samples/fake_project/.codecov.yaml similarity index 100% rename from codecov-cli/samples/fake_project/.codecov.yaml rename to samples/fake_project/.codecov.yaml diff --git a/codecov-cli/samples/fake_project/.codecov.yml b/samples/fake_project/.codecov.yml similarity index 100% rename from codecov-cli/samples/fake_project/.codecov.yml rename to samples/fake_project/.codecov.yml diff --git a/codecov-cli/samples/fake_project/.github/.codecov.yaml b/samples/fake_project/.github/.codecov.yaml similarity index 100% rename from codecov-cli/samples/fake_project/.github/.codecov.yaml rename to samples/fake_project/.github/.codecov.yaml diff --git a/codecov-cli/samples/fake_project/.github/.codecov.yml b/samples/fake_project/.github/.codecov.yml similarity index 100% rename from codecov-cli/samples/fake_project/.github/.codecov.yml rename to samples/fake_project/.github/.codecov.yml diff --git a/codecov-cli/samples/fake_project/.github/codecov.yaml b/samples/fake_project/.github/codecov.yaml similarity index 100% rename from codecov-cli/samples/fake_project/.github/codecov.yaml rename to samples/fake_project/.github/codecov.yaml diff --git a/codecov-cli/samples/fake_project/.github/codecov.yml b/samples/fake_project/.github/codecov.yml similarity index 100% rename from codecov-cli/samples/fake_project/.github/codecov.yml rename to samples/fake_project/.github/codecov.yml diff --git a/codecov-cli/samples/fake_project/codecov.yaml b/samples/fake_project/codecov.yaml similarity index 100% rename from codecov-cli/samples/fake_project/codecov.yaml rename to samples/fake_project/codecov.yaml diff --git a/codecov-cli/samples/fake_project/codecov.yml b/samples/fake_project/codecov.yml similarity index 100% rename from codecov-cli/samples/fake_project/codecov.yml rename to samples/fake_project/codecov.yml diff --git a/codecov-cli/samples/fake_project/dev/.codecov.yaml b/samples/fake_project/dev/.codecov.yaml similarity index 100% rename from codecov-cli/samples/fake_project/dev/.codecov.yaml rename to samples/fake_project/dev/.codecov.yaml diff --git a/codecov-cli/samples/fake_project/dev/.codecov.yml b/samples/fake_project/dev/.codecov.yml similarity index 100% rename from codecov-cli/samples/fake_project/dev/.codecov.yml rename to samples/fake_project/dev/.codecov.yml diff --git a/codecov-cli/samples/fake_project/dev/codecov.yaml b/samples/fake_project/dev/codecov.yaml similarity index 100% rename from codecov-cli/samples/fake_project/dev/codecov.yaml rename to samples/fake_project/dev/codecov.yaml diff --git a/codecov-cli/samples/fake_project/dev/codecov.yml b/samples/fake_project/dev/codecov.yml similarity index 100% rename from codecov-cli/samples/fake_project/dev/codecov.yml rename to samples/fake_project/dev/codecov.yml diff --git a/codecov-cli/samples/inputs/sample_001.py b/samples/inputs/sample_001.py similarity index 100% rename from codecov-cli/samples/inputs/sample_001.py rename to samples/inputs/sample_001.py diff --git a/codecov-cli/samples/inputs/sample_002.py b/samples/inputs/sample_002.py similarity index 100% rename from codecov-cli/samples/inputs/sample_002.py rename to samples/inputs/sample_002.py diff --git a/codecov-cli/samples/inputs/sample_003.js b/samples/inputs/sample_003.js similarity index 100% rename from codecov-cli/samples/inputs/sample_003.js rename to samples/inputs/sample_003.js diff --git a/codecov-cli/samples/inputs/sample_004.js b/samples/inputs/sample_004.js similarity index 100% rename from codecov-cli/samples/inputs/sample_004.js rename to samples/inputs/sample_004.js diff --git a/codecov-cli/samples/inputs/sample_005.py b/samples/inputs/sample_005.py similarity index 100% rename from codecov-cli/samples/inputs/sample_005.py rename to samples/inputs/sample_005.py diff --git a/codecov-cli/samples/junit.xml b/samples/junit.xml similarity index 100% rename from codecov-cli/samples/junit.xml rename to samples/junit.xml diff --git a/codecov-cli/samples/outputs/sample_001.json b/samples/outputs/sample_001.json similarity index 100% rename from codecov-cli/samples/outputs/sample_001.json rename to samples/outputs/sample_001.json diff --git a/codecov-cli/samples/outputs/sample_002.json b/samples/outputs/sample_002.json similarity index 100% rename from codecov-cli/samples/outputs/sample_002.json rename to samples/outputs/sample_002.json diff --git a/codecov-cli/samples/outputs/sample_003.json b/samples/outputs/sample_003.json similarity index 100% rename from codecov-cli/samples/outputs/sample_003.json rename to samples/outputs/sample_003.json diff --git a/codecov-cli/samples/outputs/sample_004.json b/samples/outputs/sample_004.json similarity index 100% rename from codecov-cli/samples/outputs/sample_004.json rename to samples/outputs/sample_004.json diff --git a/codecov-cli/samples/outputs/sample_005.json b/samples/outputs/sample_005.json similarity index 100% rename from codecov-cli/samples/outputs/sample_005.json rename to samples/outputs/sample_005.json diff --git a/scripts/build_alpine.sh b/scripts/build_alpine.sh index 8c85f864f..d0fbdf4b0 100755 --- a/scripts/build_alpine.sh +++ b/scripts/build_alpine.sh @@ -1,19 +1,9 @@ #!/bin/sh set -eux apk add build-base python3 py3-pip curl -curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.8/uv-installer.sh > uv-installer.sh -# Added sanity check file has not been tampered with -if sha256sum -c ./scripts/uv-installer-0.7.8.sha256sum; then - sh uv-installer.sh; else - echo "uv-installer failed checksum" && exit 1 -fi -./scripts/pre-build.sh -cd prevent-cli -/root/.local/bin/uv python pin 3.9 # we need to build with python 3.9 to support systems with libpython >= 3.9 -/root/.local/bin/uv sync -/root/.local/bin/uv run pyinstaller -F src/prevent_cli/main.py -mv ./dist/main ./dist/sentry-prevent-cli_$1 - -cd ../codecov-cli -/root/.local/bin/uv run pyinstaller -F codecov_cli/main.py +python3 -m pip install --break-system-packages uv +# Need to build with python 3.9 to support systems with libpython >= 3.9 +uv python pin 3.9 +uv sync --no-binary-package pyyaml --no-binary-package ijson +uv run pyinstaller -F codecov_cli/main.py mv ./dist/main ./dist/codecovcli_$1 diff --git a/scripts/build_linux.sh b/scripts/build_linux.sh index 88403a585..84923aeca 100755 --- a/scripts/build_linux.sh +++ b/scripts/build_linux.sh @@ -3,19 +3,14 @@ set -eux apt update DEBIAN_FRONTEND=noninteractive apt install -y tzdata apt install -y python3.9 python3.9-dev python3-pip -./scripts/pre-build.sh -cd prevent-cli python3.9 -m pip install uv --only-binary uv -uv python pin 3.9 # we need to build with python 3.9 to support systems with libpython >= 3.9 -uv sync -uv run pyinstaller -F src/prevent_cli/main.py -mv ./dist/main ./dist/sentry-prevent-cli_$1 -cd ../codecov-cli +# Need to build with python 3.9 to support systems with libpython >= 3.9 +uv python pin 3.9 +uv sync --no-binary-package pyyaml --no-binary-package ijson uv run pyinstaller -F codecov_cli/main.py mv ./dist/main ./dist/codecovcli_$1 # codecov linux binary should be just codecovcli_linux -if [ $1 = "linux_x86_64" ]; then - cd .. - mv ./codecov-cli/dist/codecovcli_$1 ./codecov-cli/dist/codecovcli_linux +if [ "$1" = "linux_x86_64" ]; then + mv ./dist/codecovcli_$1 ./dist/codecovcli_linux fi diff --git a/scripts/bump-version.sh b/scripts/bump-version.sh deleted file mode 100644 index 868fac5fe..000000000 --- a/scripts/bump-version.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -eux -# $1 is the old version but we don't need it -NEW_VERSION="${2}" - -# update package versions -sed -i "s/version\ =\ \"[0-9]\+.[0-9]\+.[0-9]\+\"/version\ =\ \"$NEW_VERSION\"/g" codecov-cli/pyproject.toml prevent-cli/pyproject.toml -# update codecov-cli dependency version in prevent-cli -sed -i "s/codecov-cli==[0-9]\+.[0-9]\+.[0-9]\+/codecov-cli==$NEW_VERSION/g" prevent-cli/pyproject.toml - -pip install uv -# updates uv.locks -uv sync --project codecov-cli -uv sync --project prevent-cli diff --git a/scripts/pre-build.sh b/scripts/pre-build.sh deleted file mode 100755 index 77da30ae6..000000000 --- a/scripts/pre-build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# this updates the editable property on the codecov-cli import in prevent-cli -# to be false. This is necessary for the pyinstaller build to work. -if [[ "$OSTYPE" == "darwin"* ]]; then - sed -i '' "s/editable\ =\ true/editable\ =\ false/g" prevent-cli/pyproject.toml -else - sed -i "s/editable\ =\ true/editable\ =\ false/g" prevent-cli/pyproject.toml -fi diff --git a/scripts/uv-installer-0.7.8.sha256sum b/scripts/uv-installer-0.7.8.sha256sum deleted file mode 100644 index 403ea06d8..000000000 --- a/scripts/uv-installer-0.7.8.sha256sum +++ /dev/null @@ -1 +0,0 @@ -3e3043ca08e1156fbe18d90a1a4def3ae795418857c8f4ed3f807ffc45e51c3d uv-installer.sh diff --git a/codecov-cli/setup.py b/setup.py similarity index 100% rename from codecov-cli/setup.py rename to setup.py diff --git a/codecov-cli/tests/__init__.py b/tests/__init__.py similarity index 100% rename from codecov-cli/tests/__init__.py rename to tests/__init__.py diff --git a/codecov-cli/tests/ci_adapters/test_appveyor.py b/tests/ci_adapters/test_appveyor.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_appveyor.py rename to tests/ci_adapters/test_appveyor.py diff --git a/codecov-cli/tests/ci_adapters/test_azure_pipelines.py b/tests/ci_adapters/test_azure_pipelines.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_azure_pipelines.py rename to tests/ci_adapters/test_azure_pipelines.py diff --git a/codecov-cli/tests/ci_adapters/test_bitbucket_ci.py b/tests/ci_adapters/test_bitbucket_ci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_bitbucket_ci.py rename to tests/ci_adapters/test_bitbucket_ci.py diff --git a/codecov-cli/tests/ci_adapters/test_bitrise.py b/tests/ci_adapters/test_bitrise.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_bitrise.py rename to tests/ci_adapters/test_bitrise.py diff --git a/codecov-cli/tests/ci_adapters/test_buildkite.py b/tests/ci_adapters/test_buildkite.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_buildkite.py rename to tests/ci_adapters/test_buildkite.py diff --git a/codecov-cli/tests/ci_adapters/test_circleci.py b/tests/ci_adapters/test_circleci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_circleci.py rename to tests/ci_adapters/test_circleci.py diff --git a/codecov-cli/tests/ci_adapters/test_cirrusci.py b/tests/ci_adapters/test_cirrusci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_cirrusci.py rename to tests/ci_adapters/test_cirrusci.py diff --git a/codecov-cli/tests/ci_adapters/test_cloudbuild.py b/tests/ci_adapters/test_cloudbuild.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_cloudbuild.py rename to tests/ci_adapters/test_cloudbuild.py diff --git a/codecov-cli/tests/ci_adapters/test_codebuild.py b/tests/ci_adapters/test_codebuild.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_codebuild.py rename to tests/ci_adapters/test_codebuild.py diff --git a/codecov-cli/tests/ci_adapters/test_droneci.py b/tests/ci_adapters/test_droneci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_droneci.py rename to tests/ci_adapters/test_droneci.py diff --git a/codecov-cli/tests/ci_adapters/test_ghactions.py b/tests/ci_adapters/test_ghactions.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_ghactions.py rename to tests/ci_adapters/test_ghactions.py diff --git a/codecov-cli/tests/ci_adapters/test_gitlabci.py b/tests/ci_adapters/test_gitlabci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_gitlabci.py rename to tests/ci_adapters/test_gitlabci.py diff --git a/codecov-cli/tests/ci_adapters/test_herokuci.py b/tests/ci_adapters/test_herokuci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_herokuci.py rename to tests/ci_adapters/test_herokuci.py diff --git a/codecov-cli/tests/ci_adapters/test_jenkins.py b/tests/ci_adapters/test_jenkins.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_jenkins.py rename to tests/ci_adapters/test_jenkins.py diff --git a/codecov-cli/tests/ci_adapters/test_local.py b/tests/ci_adapters/test_local.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_local.py rename to tests/ci_adapters/test_local.py diff --git a/codecov-cli/tests/ci_adapters/test_teamcity.py b/tests/ci_adapters/test_teamcity.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_teamcity.py rename to tests/ci_adapters/test_teamcity.py diff --git a/codecov-cli/tests/ci_adapters/test_travis_ci.py b/tests/ci_adapters/test_travis_ci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_travis_ci.py rename to tests/ci_adapters/test_travis_ci.py diff --git a/codecov-cli/tests/ci_adapters/test_woodpeckerci.py b/tests/ci_adapters/test_woodpeckerci.py similarity index 100% rename from codecov-cli/tests/ci_adapters/test_woodpeckerci.py rename to tests/ci_adapters/test_woodpeckerci.py diff --git a/codecov-cli/tests/commands/__init__.py b/tests/commands/__init__.py similarity index 100% rename from codecov-cli/tests/commands/__init__.py rename to tests/commands/__init__.py diff --git a/codecov-cli/tests/commands/test_invoke_empty_upload.py b/tests/commands/test_invoke_empty_upload.py similarity index 100% rename from codecov-cli/tests/commands/test_invoke_empty_upload.py rename to tests/commands/test_invoke_empty_upload.py diff --git a/codecov-cli/tests/commands/test_invoke_labelanalysis.py b/tests/commands/test_invoke_labelanalysis.py similarity index 100% rename from codecov-cli/tests/commands/test_invoke_labelanalysis.py rename to tests/commands/test_invoke_labelanalysis.py diff --git a/codecov-cli/tests/commands/test_invoke_upload.py b/tests/commands/test_invoke_upload.py similarity index 100% rename from codecov-cli/tests/commands/test_invoke_upload.py rename to tests/commands/test_invoke_upload.py diff --git a/codecov-cli/tests/commands/test_invoke_upload_coverage.py b/tests/commands/test_invoke_upload_coverage.py similarity index 100% rename from codecov-cli/tests/commands/test_invoke_upload_coverage.py rename to tests/commands/test_invoke_upload_coverage.py diff --git a/codecov-cli/tests/commands/test_invoke_upload_process.py b/tests/commands/test_invoke_upload_process.py similarity index 100% rename from codecov-cli/tests/commands/test_invoke_upload_process.py rename to tests/commands/test_invoke_upload_process.py diff --git a/codecov-cli/tests/commands/test_process_test_results.py b/tests/commands/test_process_test_results.py similarity index 100% rename from codecov-cli/tests/commands/test_process_test_results.py rename to tests/commands/test_process_test_results.py diff --git a/codecov-cli/tests/commands/test_upload_token_discovery.py b/tests/commands/test_upload_token_discovery.py similarity index 100% rename from codecov-cli/tests/commands/test_upload_token_discovery.py rename to tests/commands/test_upload_token_discovery.py diff --git a/codecov-cli/tests/conftest.py b/tests/conftest.py similarity index 100% rename from codecov-cli/tests/conftest.py rename to tests/conftest.py diff --git a/codecov-cli/tests/data/files_to_fix_examples/bad_encoding.go b/tests/data/files_to_fix_examples/bad_encoding.go similarity index 100% rename from codecov-cli/tests/data/files_to_fix_examples/bad_encoding.go rename to tests/data/files_to_fix_examples/bad_encoding.go diff --git a/codecov-cli/tests/data/files_to_fix_examples/sample.cpp b/tests/data/files_to_fix_examples/sample.cpp similarity index 100% rename from codecov-cli/tests/data/files_to_fix_examples/sample.cpp rename to tests/data/files_to_fix_examples/sample.cpp diff --git a/codecov-cli/tests/data/files_to_fix_examples/sample.go b/tests/data/files_to_fix_examples/sample.go similarity index 100% rename from codecov-cli/tests/data/files_to_fix_examples/sample.go rename to tests/data/files_to_fix_examples/sample.go diff --git a/codecov-cli/tests/data/files_to_fix_examples/sample.kt b/tests/data/files_to_fix_examples/sample.kt similarity index 100% rename from codecov-cli/tests/data/files_to_fix_examples/sample.kt rename to tests/data/files_to_fix_examples/sample.kt diff --git a/codecov-cli/tests/data/files_to_fix_examples/sample.php b/tests/data/files_to_fix_examples/sample.php similarity index 100% rename from codecov-cli/tests/data/files_to_fix_examples/sample.php rename to tests/data/files_to_fix_examples/sample.php diff --git a/codecov-cli/tests/data/reports_examples.py b/tests/data/reports_examples.py similarity index 100% rename from codecov-cli/tests/data/reports_examples.py rename to tests/data/reports_examples.py diff --git "a/codecov-cli/tests/data/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213/\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214/\320\223\320\273\320\260\320\262\320\275\321\213\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200.php" "b/tests/data/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213/\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214/\320\223\320\273\320\260\320\262\320\275\321\213\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200.php" similarity index 100% rename from "codecov-cli/tests/data/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213/\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214/\320\223\320\273\320\260\320\262\320\275\321\213\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200.php" rename to "tests/data/\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200\321\213/\320\237\320\276\320\273\321\214\320\267\320\276\320\262\320\260\321\202\320\265\320\273\321\214/\320\223\320\273\320\260\320\262\320\275\321\213\320\271\320\232\320\276\320\275\321\202\321\200\320\276\320\273\320\273\320\265\321\200.php" diff --git a/codecov-cli/tests/factory.py b/tests/factory.py similarity index 100% rename from codecov-cli/tests/factory.py rename to tests/factory.py diff --git a/codecov-cli/tests/helpers/git_services/test_github.py b/tests/helpers/git_services/test_github.py similarity index 100% rename from codecov-cli/tests/helpers/git_services/test_github.py rename to tests/helpers/git_services/test_github.py diff --git a/codecov-cli/tests/helpers/test_args.py b/tests/helpers/test_args.py similarity index 100% rename from codecov-cli/tests/helpers/test_args.py rename to tests/helpers/test_args.py diff --git a/codecov-cli/tests/helpers/test_ci_adapter_selection.py b/tests/helpers/test_ci_adapter_selection.py similarity index 100% rename from codecov-cli/tests/helpers/test_ci_adapter_selection.py rename to tests/helpers/test_ci_adapter_selection.py diff --git a/codecov-cli/tests/helpers/test_config.py b/tests/helpers/test_config.py similarity index 100% rename from codecov-cli/tests/helpers/test_config.py rename to tests/helpers/test_config.py diff --git a/codecov-cli/tests/helpers/test_encoder.py b/tests/helpers/test_encoder.py similarity index 100% rename from codecov-cli/tests/helpers/test_encoder.py rename to tests/helpers/test_encoder.py diff --git a/codecov-cli/tests/helpers/test_folder_searcher.py b/tests/helpers/test_folder_searcher.py similarity index 100% rename from codecov-cli/tests/helpers/test_folder_searcher.py rename to tests/helpers/test_folder_searcher.py diff --git a/codecov-cli/tests/helpers/test_git.py b/tests/helpers/test_git.py similarity index 100% rename from codecov-cli/tests/helpers/test_git.py rename to tests/helpers/test_git.py diff --git a/codecov-cli/tests/helpers/test_legacy_upload_sender.py b/tests/helpers/test_legacy_upload_sender.py similarity index 100% rename from codecov-cli/tests/helpers/test_legacy_upload_sender.py rename to tests/helpers/test_legacy_upload_sender.py diff --git a/codecov-cli/tests/helpers/test_network_finder.py b/tests/helpers/test_network_finder.py similarity index 100% rename from codecov-cli/tests/helpers/test_network_finder.py rename to tests/helpers/test_network_finder.py diff --git a/codecov-cli/tests/helpers/test_request.py b/tests/helpers/test_request.py similarity index 100% rename from codecov-cli/tests/helpers/test_request.py rename to tests/helpers/test_request.py diff --git a/codecov-cli/tests/helpers/test_upload_sender.py b/tests/helpers/test_upload_sender.py similarity index 100% rename from codecov-cli/tests/helpers/test_upload_sender.py rename to tests/helpers/test_upload_sender.py diff --git a/codecov-cli/tests/helpers/test_validators.py b/tests/helpers/test_validators.py similarity index 100% rename from codecov-cli/tests/helpers/test_validators.py rename to tests/helpers/test_validators.py diff --git a/codecov-cli/tests/helpers/test_versioning_systems.py b/tests/helpers/test_versioning_systems.py similarity index 97% rename from codecov-cli/tests/helpers/test_versioning_systems.py rename to tests/helpers/test_versioning_systems.py index 4ab1a6532..2437be897 100644 --- a/codecov-cli/tests/helpers/test_versioning_systems.py +++ b/tests/helpers/test_versioning_systems.py @@ -151,7 +151,7 @@ def test_exotic_git_filenames(): # See assert ( - "codecov-cli/tests/data/Контроллеры/Пользователь/ГлавныйКонтроллер.php" in found_repo_files + "tests/data/Контроллеры/Пользователь/ГлавныйКонтроллер.php" in found_repo_files ) diff --git a/codecov-cli/tests/plugins/test_compress_pycoverage_contexts.py b/tests/plugins/test_compress_pycoverage_contexts.py similarity index 100% rename from codecov-cli/tests/plugins/test_compress_pycoverage_contexts.py rename to tests/plugins/test_compress_pycoverage_contexts.py diff --git a/codecov-cli/tests/plugins/test_gcov.py b/tests/plugins/test_gcov.py similarity index 100% rename from codecov-cli/tests/plugins/test_gcov.py rename to tests/plugins/test_gcov.py diff --git a/codecov-cli/tests/plugins/test_instantiation.py b/tests/plugins/test_instantiation.py similarity index 100% rename from codecov-cli/tests/plugins/test_instantiation.py rename to tests/plugins/test_instantiation.py diff --git a/codecov-cli/tests/plugins/test_pycoverage.py b/tests/plugins/test_pycoverage.py similarity index 100% rename from codecov-cli/tests/plugins/test_pycoverage.py rename to tests/plugins/test_pycoverage.py diff --git a/codecov-cli/tests/plugins/test_xcode.py b/tests/plugins/test_xcode.py similarity index 100% rename from codecov-cli/tests/plugins/test_xcode.py rename to tests/plugins/test_xcode.py diff --git a/codecov-cli/tests/runners/test_dan_runner.py b/tests/runners/test_dan_runner.py similarity index 100% rename from codecov-cli/tests/runners/test_dan_runner.py rename to tests/runners/test_dan_runner.py diff --git a/codecov-cli/tests/runners/test_pytest_standard_runner.py b/tests/runners/test_pytest_standard_runner.py similarity index 100% rename from codecov-cli/tests/runners/test_pytest_standard_runner.py rename to tests/runners/test_pytest_standard_runner.py diff --git a/codecov-cli/tests/runners/test_runners.py b/tests/runners/test_runners.py similarity index 100% rename from codecov-cli/tests/runners/test_runners.py rename to tests/runners/test_runners.py diff --git a/codecov-cli/tests/runners/test_types.py b/tests/runners/test_types.py similarity index 100% rename from codecov-cli/tests/runners/test_types.py rename to tests/runners/test_types.py diff --git a/codecov-cli/tests/services/commit/test_base_picking.py b/tests/services/commit/test_base_picking.py similarity index 100% rename from codecov-cli/tests/services/commit/test_base_picking.py rename to tests/services/commit/test_base_picking.py diff --git a/codecov-cli/tests/services/commit/test_commit_service.py b/tests/services/commit/test_commit_service.py similarity index 100% rename from codecov-cli/tests/services/commit/test_commit_service.py rename to tests/services/commit/test_commit_service.py diff --git a/codecov-cli/tests/services/empty_upload/test_empty_upload.py b/tests/services/empty_upload/test_empty_upload.py similarity index 100% rename from codecov-cli/tests/services/empty_upload/test_empty_upload.py rename to tests/services/empty_upload/test_empty_upload.py diff --git a/codecov-cli/tests/services/report/test_report_results.py b/tests/services/report/test_report_results.py similarity index 100% rename from codecov-cli/tests/services/report/test_report_results.py rename to tests/services/report/test_report_results.py diff --git a/codecov-cli/tests/services/report/test_report_service.py b/tests/services/report/test_report_service.py similarity index 100% rename from codecov-cli/tests/services/report/test_report_service.py rename to tests/services/report/test_report_service.py diff --git a/codecov-cli/tests/services/upload/test_coverage_file_finder.py b/tests/services/upload/test_coverage_file_finder.py similarity index 100% rename from codecov-cli/tests/services/upload/test_coverage_file_finder.py rename to tests/services/upload/test_coverage_file_finder.py diff --git a/codecov-cli/tests/services/upload/test_upload_collector.py b/tests/services/upload/test_upload_collector.py similarity index 100% rename from codecov-cli/tests/services/upload/test_upload_collector.py rename to tests/services/upload/test_upload_collector.py diff --git a/codecov-cli/tests/services/upload/test_upload_service.py b/tests/services/upload/test_upload_service.py similarity index 100% rename from codecov-cli/tests/services/upload/test_upload_service.py rename to tests/services/upload/test_upload_service.py diff --git a/codecov-cli/tests/services/upload_completion/test_upload_completion.py b/tests/services/upload_completion/test_upload_completion.py similarity index 100% rename from codecov-cli/tests/services/upload_completion/test_upload_completion.py rename to tests/services/upload_completion/test_upload_completion.py diff --git a/codecov-cli/tests/test_codecov_cli.py b/tests/test_codecov_cli.py similarity index 100% rename from codecov-cli/tests/test_codecov_cli.py rename to tests/test_codecov_cli.py diff --git a/codecov-cli/tests/test_fallbacks.py b/tests/test_fallbacks.py similarity index 100% rename from codecov-cli/tests/test_fallbacks.py rename to tests/test_fallbacks.py diff --git a/codecov-cli/tests/test_helpers.py b/tests/test_helpers.py similarity index 100% rename from codecov-cli/tests/test_helpers.py rename to tests/test_helpers.py diff --git a/codecov-cli/tests/test_types.py b/tests/test_types.py similarity index 100% rename from codecov-cli/tests/test_types.py rename to tests/test_types.py diff --git a/codecov-cli/uv.lock b/uv.lock similarity index 100% rename from codecov-cli/uv.lock rename to uv.lock