diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c98b96..1aa2e48 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,104 +6,127 @@ jobs: CI: continue-on-error: true runs-on: ${{ matrix.os }} - # Supported Versions: - # https://github.com/actions/python-versions/blob/main/versions-manifest.json + strategy: + fail-fast: false matrix: - os: [macos-13, windows-latest] - python-version: [3.6, 3.7, 3.8, pypy-3.7] - exclude: - - os: windows-latest - python-version: 3.6 - include: - - os: ubuntu-20.04 - python-version: 3.7 - - os: ubuntu-20.04 - python-version: 2.7 + os: [macos-15-intel, macos-latest, windows-latest, ubuntu-latest] + python-version: ["3.9", "3.10", "3.11"] + steps: - - uses: actions/checkout@v2 - - if: ${{ matrix.python-version == '2.7' }} - name: Setup Python environment (2.7) - run: | - sudo apt-get install python-is-python2 - curl -sSL https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py - python get-pip.py - - if: ${{ matrix.python-version != '2.7' }} - name: Setup Python environment - uses: actions/setup-python@v3.1.4 + - uses: actions/checkout@v5 + + - name: Set up Python + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - name: Install Requirements + cache: "pip" + + - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install flake8 pytest - pip install -r requirements.txt - pip install -r test/requirements.txt - python setup.py install --user - - name: Run Linter + python -m pip install -U pip + python -m pip install -U build flake8 pytest + python -m pip install -r requirements.txt + python -m pip install -r test/requirements.txt + + - name: Build wheel + run: python -m build --wheel + + - name: Show dist contents + run: ls -la dist + shell: bash + + - name: Install package from wheel (robust) + shell: bash + run: | + WHEEL="$(python -c "import glob; w=glob.glob('dist/*.whl'); print(w[0] if w else '')")" + if [ -z "$WHEEL" ]; then + echo "No wheel was built. dist contains:" + ls -la dist || true + exit 1 + fi + python -m pip install "$WHEEL" + + - name: Run linter run: | flake8 setup.py dropbox example test - - name: Run Unit Tests + + - name: Run unit tests run: | pytest -v test/unit/test_dropbox_unit.py Docs: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Setup Python environment - uses: actions/setup-python@v3.1.4 + - uses: actions/checkout@v5 + + - name: Set up Python + uses: actions/setup-python@v6 with: - python-version: '3.7' - - name: Install Requirements + python-version: "3.9" + cache: "pip" + + - name: Install build and doc tooling run: | - python -m pip install --upgrade pip - pip install twine sphinx - pip install -r requirements.txt - pip install -r test/requirements.txt - python setup.py install - - name: Test Doc Generation + python -m pip install -U pip + python -m pip install build twine sphinx + python -m pip install -r requirements.txt + python -m pip install -r test/requirements.txt + + - name: Build sdist and wheel (PEP 517) + run: python -m build + + - name: Validate distribution metadata + run: twine check dist/* + + - name: Build wheel + run: python -m build --wheel + + - name: Install package from wheel run: | - sphinx-build -b html docs build/html - - name: Test Dist Generation + python -c "import glob,sys; w=glob.glob('dist/*.whl'); assert w, f'No wheel built. dist contains: {glob.glob(\"dist/*\")}'; print(w[0])" + python -c "import glob; print(glob.glob('dist/*.whl')[0])" > wheel_path.txt + python -m pip install "$(cat wheel_path.txt)" + shell: bash + + + - name: Test documentation generation run: | - python setup.py sdist bdist_wheel - twine check dist/* + sphinx-build -b html docs build/html + Integration: continue-on-error: true runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: - os: [macos-13, windows-latest] - python-version: [3.6, 3.7, 3.8, pypy-3.7] - exclude: - - os: windows-latest - python-version: 3.6 - include: - - os: ubuntu-20.04 - python-version: 3.7 - - os: ubuntu-20.04 - python-version: 2.7 + os: [macos-15-intel, macos-latest, windows-latest, ubuntu-latest] + python-version: ["3.9", "3.10", "3.11"] + steps: - - uses: actions/checkout@v2.3.4 - - if: ${{ matrix.python-version == '2.7' }} - name: Setup Python environment (2.7) - run: | - sudo apt-get install python-is-python2 - curl -sSL https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py - python get-pip.py - - if: ${{ matrix.python-version != '2.7' }} - name: Setup Python environment - uses: actions/setup-python@v3.1.4 + - uses: actions/checkout@v5 + + - name: Set up Python + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - name: Install Requirements + cache: "pip" + + - name: Install dependencies run: | - python -m pip install --upgrade pip - pip install flake8 pytest - pip install -r requirements.txt - pip install -r test/requirements.txt - python setup.py install --user - - name: Run Integration Tests + python -m pip install -U pip + python -m pip install -U build pytest + python -m pip install -r requirements.txt + python -m pip install -r test/requirements.txt + + - name: Build wheel + run: python -m build --wheel + + - name: Install package from wheel (cross-platform) + shell: bash + run: | + python -m pip install "$(python -c "import glob,sys; w=glob.glob('dist/*.whl'); assert w, f'No wheel built. dist contains: {glob.glob(\"dist/*\")}'; print(w[0])")" + + - name: Run integration tests env: LEGACY_USER_DROPBOX_TOKEN: ${{ secrets.LEGACY_USER_DROPBOX_TOKEN }} LEGACY_USER_CLIENT_ID: ${{ secrets.LEGACY_USER_CLIENT_ID }} @@ -119,4 +142,4 @@ jobs: SCOPED_TEAM_REFRESH_TOKEN: ${{ secrets.SCOPED_TEAM_REFRESH_TOKEN }} DROPBOX_SHARED_LINK: ${{ secrets.DROPBOX_SHARED_LINK }} run: | - pytest -v test/integration/test_dropbox.py + pytest -v test/integration/test_dropbox.py \ No newline at end of file diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 7cab535..5ca6c14 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -11,11 +11,16 @@ jobs: Coverage: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python environment - uses: actions/setup-python@v3.1.4 + uses: actions/setup-python@v4 with: - python-version: '3.7' + python-version: '3.9' + - name: Setup virtual environment + run: | + python -m venv venv + source venv/bin/activate + python -m pip install --upgrade pip - name: Install Requirements run: | python -m pip install --upgrade pip @@ -40,7 +45,12 @@ jobs: - name: Setup Python environment uses: actions/setup-python@v3.1.4 with: - python-version: '3.7' + python-version: '3.9' + - name: Setup virtual environment + run: | + python -m venv venv + source venv/bin/activate + python -m pip install --upgrade pip - name: Install Requirements run: | python -m pip install --upgrade pip diff --git a/.github/workflows/pypiupload.yml b/.github/workflows/pypiupload.yml index d8fee15..6632c76 100644 --- a/.github/workflows/pypiupload.yml +++ b/.github/workflows/pypiupload.yml @@ -9,10 +9,10 @@ on: jobs: deploy: - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest strategy: matrix: - python-version: [2.7, 3.7] + python-version: [2.7, 3.x] steps: - uses: actions/checkout@v2.3.4 @@ -24,7 +24,7 @@ jobs: python get-pip.py - if: ${{ matrix.python-version != '2.7' }} name: Setup Python environment - uses: actions/setup-python@v3.1.4 + uses: actions/setup-python@vv3.1.4 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/.github/workflows/spec_update.yml b/.github/workflows/spec_update.yml index 5010e1a..e2f3ad9 100644 --- a/.github/workflows/spec_update.yml +++ b/.github/workflows/spec_update.yml @@ -8,11 +8,11 @@ jobs: Update: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Setup Python environment uses: actions/setup-python@v3.1.4 with: - python-version: 3.7 + python-version: 3.9 - name: Get current time uses: 1466587594/get-current-time@v2 id: current-time diff --git a/MANIFEST.in b/MANIFEST.in index 35332d8..0c2928f 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,4 +1,5 @@ include ez_setup.py include LICENSE include *.rst +include requirements.txt include test/requirements.txt diff --git a/setup.py b/setup.py index 7255a45..6c11c3d 100644 --- a/setup.py +++ b/setup.py @@ -76,6 +76,7 @@ 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: PyPy', 'Topic :: Software Development :: Libraries :: Python Modules',