diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index a4548c75..56d8b4c6 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -1,31 +1,65 @@ +--- name: CI/CD on: push: branches: - - 'master' - tags: [ '[0-9]+.[0-9]+.[0-9]+' ] + - master + tags: + - >- + [0-9]+.[0-9]+.[0-9]+ pull_request: branches: - - 'master' - - '[0-9].[0-9]+.[0-9]+' + - master + - >- + [0-9].[0-9]+.[0-9]+ env: FORCE_COLOR: 1 jobs: + build: + name: Build distribution 📦 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Install build dependencies + run: python -m pip install build twine + - name: Build distribution 📦 + run: python -m build + - name: Check distribution 📦 + run: python -m twine check --strict dist/* + - name: Upload distribution 📦 + uses: actions/upload-artifact@v4 + with: + name: python-package-distributions + path: dist/ + test: name: Test Python ${{ matrix.python-version }} runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: + - 3.8 + - 3.9 + - >- + 3.10 + - 3.11 + - 3.12 + - 3.13 include: - - aiohttp-version: '==3.9.2' - - aiohttp-version: '<4.0.0' - python-version: '3.11' + - aiohttp-version: ==3.9.2 + - aiohttp-version: <4.0.0 + python-version: 3.11 fail-fast: false timeout-minutes: 15 + steps: - name: Checkout uses: actions/checkout@v4 @@ -40,8 +74,8 @@ jobs: env: AIOHTTP_VERSION: ${{ matrix.aiohttp-version }} run: | - python -c "import sys; print(f'Python version: {sys.version}')" - python -m pip install -U setuptools pip codecov wheel pip-tools + python -V -V + python -m pip install -U pip codecov pip-tools time pip-compile requirements-dev.in time pip-sync requirements-dev.txt - name: Run pre-commit hooks @@ -57,60 +91,32 @@ jobs: if: matrix.python-version == '3.11' uses: codecov/codecov-action@v4.5.0 with: - token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos + token: ${{ secrets.CODECOV_TOKEN }} # not required for public repos files: ./coverage.xml - flags: unittests # optional - name: codecov-umbrella # optional - fail_ci_if_error: true # optional (default = false) - verbose: true # optional (default = false) - - - pre-deploy: - name: Pre-Deploy - runs-on: ubuntu-latest - needs: test - # Run only on pushing a tag - if: github.event_name == 'push' && contains(github.ref, 'refs/tags/') - steps: - - name: Dummy - run: | - echo "Predeploy step" + flags: unittests # optional + name: codecov-umbrella # optional + fail_ci_if_error: true # optional (default = false) + verbose: true # optional (default = false) - build-tarball: - name: Tarball - runs-on: ubuntu-latest - needs: pre-deploy - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: true - - name: Setup Python 3.8 - uses: actions/setup-python@v5 - with: - python-version: 3.8 - - name: Make distributions (sdist and wheel) - run: | - python -c "import sys; print(f'Python version: {sys.version}')" - python -m pip install -U setuptools pip wheel - python setup.py sdist bdist_wheel - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: dist - path: dist - - deploy: - name: Deploy - needs: [build-tarball] + pypi-publish: + name: Publish Python 🐍 distribution 📦 to PyPI + if: github.ref_type == 'tag' # only publish on tag pushes + needs: + - build + - test runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/project/aiobotocore/${{ github.ref_name }} permissions: + # IMPORTANT: this permission is mandatory for trusted publishing id-token: write + steps: - - name: Download dists + - name: Download distribution 📦 uses: actions/download-artifact@v4 with: - name: dist - path: dist - - name: PyPI upload + name: python-package-distributions + path: dist/ + - name: Publish distribution 📦 to PyPI uses: pypa/gh-action-pypi-publish@release/v1 diff --git a/pyproject.toml b/pyproject.toml index 06b69c0c..9d20b214 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools"] +requires = ["setuptools>=72.2.0"] build-backend = "setuptools.build_meta" [project]