diff --git a/.cruft.json b/.cruft.json index da8f33d..2955515 100644 --- a/.cruft.json +++ b/.cruft.json @@ -1,6 +1,6 @@ { "template": "https://github.com/iterative/cookiecutter-dvc-plugin", - "commit": "5e07217326c0c136274315e550e3932668a407a7", + "commit": "b5468040d24fba172720eaa61fb37dab48bda808", "checkout": null, "context": { "cookiecutter": { diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 60eff31..5d5457c 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -1,23 +1,30 @@ name: Release + on: release: types: [published] + +permissions: + contents: read + jobs: pip: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - - name: Set up Python 3.8 - uses: actions/setup-python@v3 + - uses: actions/setup-python@v3 with: python-version: 3.8 - - name: Build packages + - name: Install run: | - pip install -U pip - pip install -U build setuptools>=58.2 - python -m build --sdist --wheel --outdir dist/ + pip install --upgrade pip wheel + pip install build twine + - name: Build + run: | + python -m build + twine check dist/* - name: Publish packages to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index d1cd0b4..129af0e 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,42 +1,21 @@ name: Tests on: - pull_request: {} - push: {} + push: + branches: [main] + pull_request: schedule: - cron: '5 1 * * *' # every day at 01:05 - workflow_dispatch: -env: - DVC_TEST: "true" - HOMEBREW_NO_AUTO_UPDATE: 1 - SHELL: /bin/bash +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read jobs: - lint: - timeout-minutes: 10 - runs-on: ubuntu-latest - steps: - - name: Cancel Previous Runs - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - - uses: actions/checkout@v2.4.0 - with: - fetch-depth: 0 - - name: Set up Python 3.8 - uses: actions/setup-python@v2.2.2 - with: - python-version: 3.8 - - name: Install requirements - run: | - pip install wheel - pip install -e '.[tests]' - pip install git+https://github.com/iterative/dvc pre-commit - - name: Check README - run: python setup.py checkdocs - - uses: pre-commit/action@v2.0.3 tests: timeout-minutes: 45 runs-on: ${{ matrix.os }} @@ -44,46 +23,36 @@ jobs: fail-fast: false matrix: os: [ubuntu-20.04, windows-latest, macos-latest] - pyv: ["3.8", "3.9", "3.10"] - exclude: - # no wheels for pygit2 yet - - os: windows-latest - pyv: "3.10" + pyv: ["3.8", "3.9", "3.10", "3.11"] + steps: - - uses: actions/checkout@v2.4.0 + - uses: actions/checkout@v3 with: fetch-depth: 0 + - name: Set up Python - uses: actions/setup-python@v2.2.2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.pyv }} - - name: get pip cache dir - id: pip-cache-dir - run: | - echo "::set-output name=dir::$(pip cache dir)" - - name: set pip cache - id: pip-cache - uses: actions/cache@v2.1.6 - with: - path: ${{ steps.pip-cache-dir.outputs.dir }} - key: ${{ runner.os }}-pip-${{ hashFiles('setup.cfg') }} - restore-keys: | - ${{ runner.os }}-pip- + cache: 'pip' + cache-dependency-path: setup.cfg + - name: install - if: steps.cache.pip-cache-dir.cache-hit != 'true' run: | - pip install --upgrade pip setuptools wheel + pip install --upgrade pip wheel pip install -e ".[tests]" - pip install "dvc[testing]@git+https://github.com/iterative/dvc" - - name: setup git - run: | - git config --global user.email "dvctester@example.com" - git config --global user.name "DVC Tester" + pip install "dvc[testing] @ git+https://github.com/iterative/dvc" + + - name: lint + timeout-minutes: 10 + uses: pre-commit/action@v3.0.0 + - name: run tests - timeout-minutes: 40 + timeout-minutes: 15 run: pytest -v -n=auto --cov-report=xml --cov-report=term + - name: upload coverage report - uses: codecov/codecov-action@v2.1.0 + uses: codecov/codecov-action@v3 with: file: ./coverage.xml fail_ci_if_error: false diff --git a/.github/workflows/update-template.yaml b/.github/workflows/update-template.yaml index 3aa58b1..d4963aa 100644 --- a/.github/workflows/update-template.yaml +++ b/.github/workflows/update-template.yaml @@ -3,14 +3,13 @@ name: Update template on: schedule: - cron: '5 1 * * *' # every day at 01:05 - workflow_dispatch: jobs: update: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Install deps run: pip install cruft - name: Update template @@ -25,4 +24,3 @@ jobs: commit-message: update template title: update template token: ${{ secrets.WORKFLOW_TOKEN }} - diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0271f80..f23ca1e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -23,7 +23,7 @@ repos: - id: isort language_version: python3 repo: https://github.com/timothycrosley/isort - rev: 5.9.3 + rev: 5.12.0 - hooks: - id: flake8 language_version: python3 diff --git a/dvc_hdfs/tests/fixtures.py b/dvc_hdfs/tests/fixtures.py index 802e5d2..225c22f 100644 --- a/dvc_hdfs/tests/fixtures.py +++ b/dvc_hdfs/tests/fixtures.py @@ -14,7 +14,7 @@ @pytest.fixture(scope="session") -def docker_compose_file(pytestconfig): +def docker_compose_file(): return os.path.join(os.path.dirname(__file__), "docker-compose.yml") @@ -71,7 +71,11 @@ def _get(url, tar, target): @pytest.fixture(scope="session") -def hdfs_server(hadoop, docker_compose, docker_services): +def hdfs_server( + hadoop, # pylint: disable=redefined-outer-name,unused-argument + docker_compose, # pylint: disable=unused-argument + docker_services, +): import pyarrow.fs port = docker_services.port_for("hdfs", 8020) @@ -102,7 +106,7 @@ def _check(): @pytest.fixture -def real_hdfs(hdfs_server): +def real_hdfs(hdfs_server): # pylint: disable=redefined-outer-name port = hdfs_server["hdfs"] url = f"hdfs://127.0.0.1:{port}/{uuid.uuid4()}" yield HDFS(url) @@ -245,5 +249,5 @@ def _make_hdfs(): @pytest.fixture -def hdfs(make_hdfs): +def hdfs(make_hdfs): # pylint: disable=redefined-outer-name return make_hdfs() diff --git a/pyproject.toml b/pyproject.toml index 9e58c8c..4d4e284 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,8 +58,8 @@ load-plugins = ["pylint_pytest"] [tool.pylint.message_control] disable = [ - "format", "refactoring", "spelling", "design", "no-self-use", - "invalid-name", "misplaced-comparison-constant", "duplicate-code", "fixme", + "format", "refactoring", "spelling", "design", + "invalid-name", "duplicate-code", "fixme", "unused-wildcard-import", "cyclic-import", "wrong-import-order", "wrong-import-position", "ungrouped-imports", "multiple-imports", "logging-format-interpolation", "logging-fstring-interpolation", diff --git a/setup.cfg b/setup.cfg index 1774ae5..6cd25bb 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,6 +17,7 @@ classifiers = Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 [options] setup_requires = @@ -52,14 +53,14 @@ tests = collective.checkdocs==0.2 pydocstyle==6.1.1 # pylint requirements - pylint==2.11.1 + pylint==2.16.2 # we use this to suppress pytest-related false positives in our tests. pylint-pytest==1.1.2 # we use this to suppress some messages in tests, eg: foo/bar naming, # and, protected method calls in our tests pylint-plugin-utils==0.6 # type-checking - mypy==0.910 + mypy==0.981 types-requests==2.25.11 types-tabulate==0.8.3 types-toml==0.10.1 @@ -68,11 +69,15 @@ tests = [flake8] ignore= - E203, # Whitespace before ':' - E266, # Too many leading '#' for block comment - W503, # Line break occurred before a binary operator - P1, # unindexed parameters in the str.format, see: + # Whitespace before ':' + E203, + # Too many leading '#' for block comment + E266, + # Line break occurred before a binary operator + W503, + # unindexed parameters in the str.format, see: # https://pypi.org/project/flake8-string-format/ + P1, max_line_length = 79 max-complexity = 15 select = B,C,E,F,W,T4,B902,T,P