diff --git a/.codecov.yml b/.codecov.yml index 54f8a414e..6c772a419 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -7,7 +7,7 @@ coverage: # https://docs.codecov.io/docs/commit-status status: # TODO: re-enable patch in the future - patch: off + patch: false project: default: # minimum coverage ratio that the commit must meet to be considered a success diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index b3a2df32d..358f0f101 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,14 +1,15 @@ +# yamllint disable rule:line-length name: docker -on: +on: # yamllint disable-line rule:truthy push: branches: - - master - - dev - - 'experimental/**' + - master + - dev + - 'experimental/**' tags: - - v* + - v* schedule: - - cron: '0 4 * * *' # nightlies at 4am UTC + - cron: '0 4 * * *' # nightlies at 4am UTC env: TEST_TAG: hathor-core:test jobs: @@ -20,114 +21,114 @@ jobs: fail-fast: false matrix: python-impl: - - python - - pypy + - python + - pypy python-version: - - '3.8' - - '3.9' - - '3.10' - - '3.11' + - '3.8' + - '3.9' + - '3.10' + - '3.11' exclude: - # XXX: neither pypy-3.10 nor pypy-3.11 exist yet, maybe pypy-3.10 will be out on PyPy v7.3.10 - - python-impl: pypy - python-version: '3.10' - - python-impl: pypy - python-version: '3.11' + # XXX: neither pypy-3.10 nor pypy-3.11 exist yet, maybe pypy-3.10 will be out on PyPy v7.3.10 + - python-impl: pypy + python-version: '3.10' + - python-impl: pypy + python-version: '3.11' steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Prepare base version - id: prep - run: | - export GITHUB_REF='${{ github.ref }}' - export GITHUB_EVENT_NAME='${{ github.event_name }}' - export GITHUB_SHA='${{ github.sha }}' - export GITHUB_EVENT_DEFAULT_BRANCH='${{ github.event.repository.default_branch }}' - export GITHUB_EVENT_NUMBER='${{ github.event.number }}' - export MATRIX_PYTHON_IMPL='${{ matrix.python-impl }}' - export MATRIX_PYTHON_VERSION='${{ matrix.python-version }}' - export SECRETS_DOCKERHUB_IMAGE='${{ secrets.DOCKERHUB_IMAGE }}' - export SECRETS_GHCR_IMAGE='${{ secrets.GHCR_IMAGE }}' + - name: Checkout + uses: actions/checkout@v3 + - name: Prepare base version + id: prep + run: | + export GITHUB_REF='${{ github.ref }}' + export GITHUB_EVENT_NAME='${{ github.event_name }}' + export GITHUB_SHA='${{ github.sha }}' + export GITHUB_EVENT_DEFAULT_BRANCH='${{ github.event.repository.default_branch }}' + export GITHUB_EVENT_NUMBER='${{ github.event.number }}' + export MATRIX_PYTHON_IMPL='${{ matrix.python-impl }}' + export MATRIX_PYTHON_VERSION='${{ matrix.python-version }}' + export SECRETS_DOCKERHUB_IMAGE='${{ secrets.DOCKERHUB_IMAGE }}' + export SECRETS_GHCR_IMAGE='${{ secrets.GHCR_IMAGE }}' - python extras/github/docker.py - - name: Check version - if: steps.prep.outputs.check-version - run: | - make check-version VERSION='${{ steps.prep.outputs.check-version }}' - - name: Set up QEMU # arm64 is not available natively - uses: docker/setup-qemu-action@v2 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - with: - version: latest - install: true - driver-opts: network=host - - name: Login to DockerHub - uses: docker/login-action@v2 - if: steps.prep.outputs.login-dockerhub == 'true' - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - if: steps.prep.outputs.login-ghcr == 'true' - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Cache Docker layers - uses: actions/cache@v3 - if: steps.prep_base_version.outputs.is-nightly == 'false' - with: - path: /tmp/.buildx-cache - # this key is setup such that every branch has its cache and new branches can reuse master's cache, but not the other way around - key: ${{ runner.os }}-buildx-${{ matrix.python-impl }}${{ matrix.python-version }}-${{ github.head_ref || github.ref }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-buildx-${{ matrix.python-impl }}${{ matrix.python-version }}-refs/heads/master- - - name: Build and export to Docker - uses: docker/build-push-action@v3 - with: - context: . - file: ${{ steps.prep.outputs.dockerfile }} - build-args: PYTHON=${{ matrix.python-version }} - pull: true - load: true - tags: ${{ env.TEST_TAG }} - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache - - name: Test image - run: docker run --rm ${{ env.TEST_TAG }} quick_test --data / --testnet - - name: Build and push - uses: docker/build-push-action@v3 - continue-on-error: ${{ matrix.python-impl == 'pypy' }} # PyPy is not first-class and has been causing some build failures - if: ${{ !env.ACT }} # Skip this step when testing locally with https://github.com/nektos/act - with: - context: . - file: ${{ steps.prep.outputs.dockerfile }} - build-args: PYTHON=${{ matrix.python-version }} - platforms: linux/amd64,linux/arm64 - pull: true - push: ${{ github.event_name != 'pull_request' && steps.prep.outputs.push }} - tags: ${{ steps.prep.outputs.tags }} - # see: https://github.com/opencontainers/image-spec/blob/master/annotations.md - labels: | - org.opencontainers.image.title=${{ github.event.repository.name }} - org.opencontainers.image.description=${{ github.event.repository.description }} - org.opencontainers.image.url=${{ github.event.repository.html_url }} - org.opencontainers.image.source=${{ github.event.repository.clone_url }} - org.opencontainers.image.version=${{ steps.prep.outputs.version }} - org.opencontainers.image.created=${{ steps.prep.outputs.created }} - org.opencontainers.image.revision=${{ github.sha }} - org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }} - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache - - name: Slack Notification - if: ${{ steps.prep.outputs.slack-notification-version && steps.prep_base_version.outputs.disable-slack-notification == 'false' && job.status == 'success' }} - uses: rtCamp/action-slack-notify@28e8b353eabda5998a2e1203aed33c5999944779 - env: - SLACK_COLOR: ${{ job.status }} # It can turn the job status into a color. Success will be green. - SLACK_MESSAGE: 'We will be deploying this new image soon. Get in touch with the hathor-core team if you want to talk about this deployment.' - SLACK_TITLE: 'Hathor Core - new ${{ steps.prep.outputs.slack-notification-version }} Docker image pushed :rocket:' - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - SLACK_FOOTER: '' - MSG_MINIMAL: actions url + python extras/github/docker.py + - name: Check version + if: steps.prep.outputs.check-version + run: | + make check-version VERSION='${{ steps.prep.outputs.check-version }}' + - name: Set up QEMU # arm64 is not available natively + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + version: latest + install: true + driver-opts: network=host + - name: Login to DockerHub + uses: docker/login-action@v2 + if: steps.prep.outputs.login-dockerhub == 'true' + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + if: steps.prep.outputs.login-ghcr == 'true' + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Cache Docker layers + uses: actions/cache@v3 + if: steps.prep_base_version.outputs.is-nightly == 'false' + with: + path: /tmp/.buildx-cache + # this key is setup such that every branch has its cache and new branches can reuse master's cache, but not the other way around + key: ${{ runner.os }}-buildx-${{ matrix.python-impl }}${{ matrix.python-version }}-${{ github.head_ref || github.ref }}-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx-${{ matrix.python-impl }}${{ matrix.python-version }}-refs/heads/master- + - name: Build and export to Docker + uses: docker/build-push-action@v3 + with: + context: . + file: ${{ steps.prep.outputs.dockerfile }} + build-args: PYTHON=${{ matrix.python-version }} + pull: true + load: true + tags: ${{ env.TEST_TAG }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + - name: Test image + run: docker run --rm ${{ env.TEST_TAG }} quick_test --data / --testnet + - name: Build and push + uses: docker/build-push-action@v3 + continue-on-error: ${{ matrix.python-impl == 'pypy' }} # PyPy is not first-class and has been causing some build failures + if: ${{ !env.ACT }} # Skip this step when testing locally with https://github.com/nektos/act + with: + context: . + file: ${{ steps.prep.outputs.dockerfile }} + build-args: PYTHON=${{ matrix.python-version }} + platforms: linux/amd64,linux/arm64 + pull: true + push: ${{ github.event_name != 'pull_request' && steps.prep.outputs.push }} + tags: ${{ steps.prep.outputs.tags }} + # see: https://github.com/opencontainers/image-spec/blob/master/annotations.md + labels: | + org.opencontainers.image.title=${{ github.event.repository.name }} + org.opencontainers.image.description=${{ github.event.repository.description }} + org.opencontainers.image.url=${{ github.event.repository.html_url }} + org.opencontainers.image.source=${{ github.event.repository.clone_url }} + org.opencontainers.image.version=${{ steps.prep.outputs.version }} + org.opencontainers.image.created=${{ steps.prep.outputs.created }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache + - name: Slack Notification + if: ${{ steps.prep.outputs.slack-notification-version && steps.prep_base_version.outputs.disable-slack-notification == 'false' && job.status == 'success' }} + uses: rtCamp/action-slack-notify@28e8b353eabda5998a2e1203aed33c5999944779 + env: + SLACK_COLOR: ${{ job.status }} # It can turn the job status into a color. Success will be green. + SLACK_MESSAGE: 'We will be deploying this new image soon. Get in touch with the hathor-core team if you want to talk about this deployment.' + SLACK_TITLE: 'Hathor Core - new ${{ steps.prep.outputs.slack-notification-version }} Docker image pushed :rocket:' + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + SLACK_FOOTER: '' + MSG_MINIMAL: actions url diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 99c9b2bb6..304734f4b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,11 +1,12 @@ +# yamllint disable rule:line-length name: tests -on: +on: # yamllint disable-line rule:truthy push: branches: - - master - - dev + - master + - dev tags: - - v* + - v* pull_request: jobs: matrix: @@ -13,45 +14,45 @@ jobs: outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - - id: set-matrix - shell: python - run: | - import os - import json - full_matrix = { - 'python': ['3.8', '3.9', '3.10', '3.11'], - # available OS's: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on - 'os': ['ubuntu-22.04', 'macos-12', 'windows-2022'], - 'include': [ - # XXX: tests fail on these, not sure why, when running them individually each on passes, but not on `make tests` - # {'os': 'ubuntu-22.04', 'python': 'pypy-3.8'}, - # {'os': 'ubuntu-22.04', 'python': 'pypy-3.9'}, - ], - } - # this is the fastest one: - reduced_matrix = { - 'python': ['3.9'], - 'os': ['ubuntu-22.04'], - } - github_repository = os.environ['GITHUB_REPOSITORY'] - if github_repository.lower() == 'hathornetwork/hathor-core': - matrix = full_matrix - else: - matrix = reduced_matrix - print('::set-output name=matrix::' + json.dumps(matrix)) + - id: set-matrix + shell: python + run: | + import os + import json + full_matrix = { + 'python': ['3.8', '3.9', '3.10', '3.11'], + # available OS's: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on + 'os': ['ubuntu-22.04', 'macos-12', 'windows-2022'], + 'include': [ + # XXX: tests fail on these, not sure why, when running them individually each on passes, but not on `make tests` + # {'os': 'ubuntu-22.04', 'python': 'pypy-3.8'}, + # {'os': 'ubuntu-22.04', 'python': 'pypy-3.9'}, + ], + } + # this is the fastest one: + reduced_matrix = { + 'python': ['3.9'], + 'os': ['ubuntu-22.04'], + } + github_repository = os.environ['GITHUB_REPOSITORY'] + if github_repository.lower() == 'hathornetwork/hathor-core': + matrix = full_matrix + else: + matrix = reduced_matrix + print('::set-output name=matrix::' + json.dumps(matrix)) check-matrix: runs-on: ubuntu-latest needs: matrix steps: - - name: Install json2yaml - run: | - sudo npm install -g json2yaml - - name: Check matrix definition - run: | - matrix='${{ needs.matrix.outputs.matrix }}' - echo $matrix - echo $matrix | jq . - echo $matrix | json2yaml + - name: Install json2yaml + run: | + sudo npm install -g json2yaml + - name: Check matrix definition + run: | + matrix='${{ needs.matrix.outputs.matrix }}' + echo $matrix + echo $matrix | jq . + echo $matrix | json2yaml test: name: python-${{ matrix.python }} (${{ matrix.os }}) runs-on: ${{ matrix.os }} @@ -61,41 +62,41 @@ jobs: fail-fast: false matrix: ${{fromJson(needs.matrix.outputs.matrix)}} steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Install Poetry - run: pipx install poetry - - name: Set up Python ${{ matrix.python }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python }} - cache: 'poetry' - - name: Install Ubuntu dependencies - if: startsWith(matrix.os, 'ubuntu') - run: | - sudo apt-get -qy update - sudo apt-get -qy install graphviz librocksdb-dev libsnappy-dev liblz4-dev - - name: Install macOS dependencies - if: startsWith(matrix.os, 'macos') - run: | - brew cleanup -q - # brew update -q - brew install -q graphviz rocksdb pkg-config - - name: Install Poetry dependencies - run: poetry install -n --no-root - - name: Cache mypy - uses: actions/cache@v3 - with: - path: .mypy_cache - # this key is setup such that every branch has its cache and new branches can reuse dev's cache, but not the other way around - key: ${{ runner.os }}-py${{ matrix.python }}-mypy-${{ github.head_ref || github.ref }} - restore-keys: | - ${{ runner.os }}-py${{ matrix.python }}-mypy-refs/heads/dev- - ${{ runner.os }}-py${{ matrix.python }}-mypy- - - name: Run linters - run: poetry run make check - - name: Run tests - run: poetry run make tests - - name: Upload coverage - uses: codecov/codecov-action@v3 - if: matrix.python == 3.9 && startsWith(matrix.os, 'ubuntu') + - name: Checkout + uses: actions/checkout@v3 + - name: Install Poetry + run: pipx install poetry + - name: Set up Python ${{ matrix.python }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python }} + cache: 'poetry' + - name: Install Ubuntu dependencies + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo apt-get -qy update + sudo apt-get -qy install graphviz librocksdb-dev libsnappy-dev liblz4-dev + - name: Install macOS dependencies + if: startsWith(matrix.os, 'macos') + run: | + brew cleanup -q + # brew update -q + brew install -q graphviz rocksdb pkg-config + - name: Install Poetry dependencies + run: poetry install -n --no-root + - name: Cache mypy + uses: actions/cache@v3 + with: + path: .mypy_cache + # this key is setup such that every branch has its cache and new branches can reuse dev's cache, but not the other way around + key: ${{ runner.os }}-py${{ matrix.python }}-mypy-${{ github.head_ref || github.ref }} + restore-keys: | + ${{ runner.os }}-py${{ matrix.python }}-mypy-refs/heads/dev- + ${{ runner.os }}-py${{ matrix.python }}-mypy- + - name: Run linters + run: poetry run make check + - name: Run tests + run: poetry run make tests + - name: Upload coverage + uses: codecov/codecov-action@v3 + if: matrix.python == 3.9 && startsWith(matrix.os, 'ubuntu') diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 000000000..077d1e328 --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,10 @@ +extends: default + +rules: + document-start: disable + line-length: + max: 100 + new-lines: + type: platform + comments: + min-spaces-from-content: 1 diff --git a/Makefile b/Makefile index d22dbcccc..56a229b4d 100644 --- a/Makefile +++ b/Makefile @@ -74,15 +74,19 @@ flake8: isort-check: isort --ac --check-only $(py_sources) +.PHONY: yamllint +yamllint: + yamllint . + .PHONY: check-version check-version: bash ./extras/check_version.sh $(VERSION) .PHONY: check -check: check-version flake8 isort-check mypy +check: check-version yamllint flake8 isort-check mypy .PHONY: dcheck -dcheck: check-version flake8 isort-check dmypy +dcheck: check-version yamllint flake8 isort-check dmypy # formatting: diff --git a/changelogs/unreleased/fix-output-negative-value.yml b/changelogs/unreleased/fix-output-negative-value.yml index b33f66135..3c8784e15 100644 --- a/changelogs/unreleased/fix-output-negative-value.yml +++ b/changelogs/unreleased/fix-output-negative-value.yml @@ -2,4 +2,4 @@ title: Prevent outputs from accepting negative values merge_request: 303 author: -type: fix \ No newline at end of file +type: fix diff --git a/changelogs/unreleased/fix-ws-notification-broadcast.yml b/changelogs/unreleased/fix-ws-notification-broadcast.yml index 36a27451a..1361385b2 100644 --- a/changelogs/unreleased/fix-ws-notification-broadcast.yml +++ b/changelogs/unreleased/fix-ws-notification-broadcast.yml @@ -2,4 +2,4 @@ title: Fixing ws message being sent to wrong user merge_request: 302 author: -type: fix \ No newline at end of file +type: fix diff --git a/poetry.lock b/poetry.lock index 72e4cd6ee..46758372e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "aiohttp" @@ -1102,6 +1102,18 @@ files = [ qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + [[package]] name = "pexpect" version = "4.8.0" @@ -1451,6 +1463,56 @@ files = [ {file = "pywin32-305-cp39-cp39-win_amd64.whl", hash = "sha256:50768c6b7c3f0b38b7fb14dd4104da93ebced5f1a50dc0e834594bff6fbe1271"}, ] +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + [[package]] name = "requests" version = "2.28.1" @@ -1940,6 +2002,25 @@ files = [ {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, ] +[[package]] +name = "yamllint" +version = "1.31.0" +description = "A linter for YAML files." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yamllint-1.31.0-py3-none-any.whl", hash = "sha256:15f4bdb645e6a4a0a22fe5415bc38b4a934c51419b30104896d2f3f95e329185"}, + {file = "yamllint-1.31.0.tar.gz", hash = "sha256:2d83f1d12f733e162a87e06b176149d7bb9c5bae4a9e5fce1c771d7f703f7a65"}, +] + +[package.dependencies] +pathspec = ">=0.5.3" +pyyaml = "*" + +[package.extras] +dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] + [[package]] name = "yarl" version = "1.8.2" @@ -2128,4 +2209,4 @@ sentry = ["sentry-sdk", "structlog-sentry"] [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4" -content-hash = "d1b70ed0381b8680d8c4ebf91fca2519fdc51ecb71b32833efac6747cc7ce183" +content-hash = "17520e2c0c85413966ac2feeedde03289e347ef625725a8677550f4e210e1c7e" diff --git a/pyproject.toml b/pyproject.toml index ac9e82044..e130cd9d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ pytest = "~7.2.0" pytest-cov = "~4.0.0" flaky = "~3.7.0" pytest-xdist = "~3.2.0" +yamllint = "~1.31.0" # stubs: types-requests = "=2.28.11.4" types-pyopenssl = "=22.1.0.2"