From 64e5e809f3df30f149b217cd0fd9cb55978b63f7 Mon Sep 17 00:00:00 2001 From: Jakob Keller <57402305+jakob-keller@users.noreply.github.com> Date: Wed, 21 Aug 2024 10:35:45 +0200 Subject: [PATCH] modernize CI/CD workflow (#1164) --- .github/workflows/ci-cd.yml | 120 +++++++++++++++++++----------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index a4548c75..dd6ee314 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -1,31 +1,61 @@ +--- 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 +70,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 +87,34 @@ 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 + timeout-minutes: 15 - deploy: - name: Deploy - needs: [build-tarball] + pypi-publish: + name: Publish Python 🐍 distribution 📦 to PyPI + if: startsWith(github.ref, 'refs/tags/') # 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