Repository: pauldmccarthy/indexed_gzip (language: python)

Issue:
Build abi3 wheels for Python 3.11+
Some initial playing around with getting [Stable ABI](https://docs.python.org/3/c-api/stable.html) builds to work. The benefit would be that if you publish wheels with `cp3N-abi3`, then any Python versions >= 3.N can install the same wheel without your having to do anything apart from fix compatibilities with the new Python versions.

Looking at the symbols indexed_gzip uses, `PyObject_GetBuffer` was only added to the stable ABI in 3.11, so that sets a lower bound on ABI3 wheels.

To get it to compile, I also needed to depend on cython/cython#5871. Leaving as draft for now, since this seems like a Bad Idea to code a dependency on in your `pyproject.toml`. `abi3audit` also complains about the use of `Py_DECREF`; I've removed them here, but we'd need to wait on https://github.com/cython/cython/issues/6063 for it to be entirely clean.

I tried to modify your setup.py defensively, so that it would only attempt to build an ABI3 build if both Python and Cython were new enough. I have tested, and I'm able to install a wheel built with Python 3.11 on Python 3.12.


Discussion / hints:

Fix patch:
diff --git a/.ci/download_zlib.sh b/.ci/download_zlib.sh
index 4f5a27d3..c003d731 100755
--- a/.ci/download_zlib.sh
+++ b/.ci/download_zlib.sh
@@ -4,7 +4,7 @@
 #
 set -e
 
-ZLIB_VERSION=1.3
+ZLIB_VERSION=1.3.1
 
 curl -o zlib.tar.gz https://www.zlib.net/zlib-${ZLIB_VERSION}.tar.gz
 
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..d13cfde6
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,14 @@
+version: 2
+updates:
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "monthly"
+    groups:
+      actions-infrastructure:
+        patterns:
+          - "actions/*"
+      third-party:
+        patterns:
+          - "docker/*"
+          - "pypa/*"
diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml
index 8b41deb6..15fcf1b3 100644
--- a/.github/workflows/main.yaml
+++ b/.github/workflows/main.yaml
@@ -14,7 +14,6 @@ defaults:
   run:
     shell: bash
 
-
 jobs:
 
   # Quick tests run on all OSes/python versions
@@ -37,12 +36,11 @@ jobs:
       ENV_DIR:        ./test.env
 
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v5
         with:
           python-version: ${{ matrix.python-version }}
-          architecture: x64
       - name: Create test environment
         run:  bash ./.ci/create_test_env.sh "$ENV_DIR"
       - name: Log test environment
@@ -108,12 +106,11 @@ jobs:
       ENV_DIR:        ./test.env
 
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Set up Python
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v5
         with:
           python-version: "3.10"
-          architecture:   x64
       - name: Create test environment
         run:  bash ./.ci/create_test_env.sh "$ENV_DIR"
       - name: Log test environment
@@ -220,46 +217,11 @@ jobs:
       ENV_DIR:        ./test.env
 
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Set up Python
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v5
         with:
           python-version: "3.10"
-          architecture:   "x64"
-      - name: Create test environment
-        run:  bash ./.ci/create_test_env.sh "$ENV_DIR"
-      - name: Log test environment
-        run: |
-          source ./.ci/activate_env.sh "$ENV_DIR"
-          python -V
-          pip freeze
-      - name: Build indexed_gzip
-        run:  bash ./.ci/build_dev_indexed_gzip.sh "$ENV_DIR"
-      - name: Run tests
-        run:  bash  ./.ci/run_tests.sh "$ENV_DIR"
-
-
-  # Tests on 32 bit platform
-  test-32bit:
-    runs-on: ubuntu-latest
-    container: i386/ubuntu:20.04
-    strategy:
-      matrix:
-        python-version: ["3.9"]
-        extra-args:     ["", "--concat"]
-
-    env:
-      USING_OS_PYTHON: 1
-      PYTHON_VERSION:  ${{ matrix.python-version }}
-      EXTRA_ARGS:      ${{ matrix.extra-args }}
-      ENV_DIR:         ./test.env
-
-    steps:
-      - name: Install git
-        run:  apt-get update -y && apt-get install -y git
-      - uses: actions/checkout@v1
-      - name: Install system dependencies
-        run:  bash ./.ci/install_32bit_dependencies.sh
       - name: Create test environment
         run:  bash ./.ci/create_test_env.sh "$ENV_DIR"
       - name: Log test environment
diff --git a/.github/workflows/pull_request.yaml b/.github/workflows/pull_request.yaml
index 892f3a1e..53d5d30a 100644
--- a/.github/workflows/pull_request.yaml
+++ b/.github/workflows/pull_request.yaml
@@ -28,12 +28,11 @@ jobs:
       ENV_DIR:        ./test.env
 
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v2
+        uses: actions/setup-python@v5
         with:
           python-version: ${{ matrix.python-version }}
-          architecture: x64
       - name: Create test environment
         run:  bash ./.ci/create_test_env.sh "$ENV_DIR"
       - name: Log test environment
@@ -48,38 +47,3 @@ jobs:
         run:  bash ./.ci/build_dev_indexed_gzip.sh "$ENV_DIR"
       - name: Run tests
         run:  bash  ./.ci/run_tests.sh "$ENV_DIR"
-
-
-  # Quick tests on 32 bit platform
-  test-32bit:
-    runs-on: ubuntu-latest
-    container: i386/ubuntu:20.04
-    strategy:
-      matrix:
-        python-version: ["3.9"]
-        extra-args:     ["", "--concat"]
-
-    env:
-      USING_OS_PYTHON: 1
-      PYTHON_VERSION:  ${{ matrix.python-version }}
-      TEST_SUITE:      "not slow_test"
-      EXTRA_ARGS:      ${{ matrix.extra-args }}
-      ENV_DIR:         ./test.env
-
-    steps:
-      - name: Install git
-        run:  apt-get update -y && apt-get install -y git
-      - uses: actions/checkout@v1
-      - name: Install system dependencies
-        run:  bash ./.ci/install_32bit_dependencies.sh
-      - name: Create test environment
-        run:  bash ./.ci/create_test_env.sh "$ENV_DIR"
-      - name: Log test environment
-        run: |
-          source ./.ci/activate_env.sh "$ENV_DIR"
-          python -V
-          pip freeze
-      - name: Build indexed_gzip
-        run:  bash ./.ci/build_dev_indexed_gzip.sh "$ENV_DIR"
-      - name: Run tests
-        run:  bash  ./.ci/run_tests.sh "$ENV_DIR"
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 8e3f0dcc..8b47e5dc 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -16,9 +16,9 @@ jobs:
     name:    Build source distribution
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
 
-      - uses: actions/setup-python@v2
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
@@ -26,7 +26,7 @@ jobs:
       - name: Build sdist
         run:  python setup.py sdist
 
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: sdist
           path: ./dist/*.tar.gz
@@ -40,8 +40,8 @@ jobs:
       CIBW_ARCHS_MACOS: "x86_64 arm64 universal2"
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
@@ -49,7 +49,7 @@ jobs:
       - name: Build wheels
         run:  bash ./.ci/build_wheels.sh
 
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: wheels
           path: ./dist/*.whl
@@ -67,8 +67,8 @@ jobs:
       CIBW_ARCHS_WINDOWS: ${{ matrix.arch }}
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
@@ -76,7 +76,7 @@ jobs:
         run:  bash ./.ci/download_zlib.sh
       - name: Build wheels
         run:  bash ./.ci/build_wheels.sh
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: wheels
           path: ./dist/*.whl
@@ -95,17 +95,17 @@ jobs:
       CIBW_ARCHS_LINUX: ${{ matrix.arch }}
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
       - name: Set up QEMU for emulated (e.g. ARM) builds
         if:   ${{ matrix.arch == 'aarch64' }}
-        uses: docker/setup-qemu-action@v1
+        uses: docker/setup-qemu-action@v3
       - name: Build wheels
         run:  bash ./.ci/build_wheels.sh
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: wheels
           path: ./dist/*.whl
@@ -118,18 +118,18 @@ jobs:
     steps:
 
       - name: Download source archive
-        uses: actions/download-artifact@v2
+        uses: actions/download-artifact@v4
         with:
           name: sdist
           path: dist/
       - name: Download wheel archives
-        uses: actions/download-artifact@v2
+        uses: actions/download-artifact@v4
         with:
           name: wheels
           path: dist/
 
       - name: Publish archives to PyPI
-        uses: pypa/gh-action-pypi-publish@v1.4.1
+        uses: pypa/gh-action-pypi-publish@v1.9.0
         with:
           user:     __token__
           password: ${{ secrets.PYPI_TOKEN }}


Test patch:
diff --git a/.github/workflows/test_release.yaml b/.github/workflows/test_release.yaml
index 85e48d11..c3a57691 100644
--- a/.github/workflows/test_release.yaml
+++ b/.github/workflows/test_release.yaml
@@ -15,9 +15,9 @@ jobs:
     name:    Build source distribution
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v2
+      - uses: actions/checkout@v4
 
-      - uses: actions/setup-python@v2
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
@@ -25,7 +25,7 @@ jobs:
       - name: Build sdist
         run:  python setup.py sdist
 
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: sdist
           path: ./dist/*.tar.gz
@@ -39,8 +39,8 @@ jobs:
       CIBW_ARCHS_MACOS: "x86_64 arm64 universal2"
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
@@ -48,7 +48,7 @@ jobs:
       - name: Build wheels
         run:  bash ./.ci/build_wheels.sh
 
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: wheels
           path: ./dist/*.whl
@@ -66,8 +66,8 @@ jobs:
       CIBW_ARCHS_WINDOWS: ${{ matrix.arch }}
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
@@ -75,7 +75,7 @@ jobs:
         run:  bash ./.ci/download_zlib.sh
       - name: Build wheels
         run:  bash ./.ci/build_wheels.sh
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: wheels
           path: ./dist/*.whl
@@ -94,17 +94,17 @@ jobs:
       CIBW_ARCHS_LINUX: ${{ matrix.arch }}
 
     steps:
-      - uses: actions/checkout@v2
-      - uses: actions/setup-python@v2
+      - uses: actions/checkout@v4
+      - uses: actions/setup-python@v5
         name: Install Python
         with:
           python-version: "3.10"
       - name: Set up QEMU for emulated (e.g. ARM) builds
         if:   ${{ matrix.arch == 'aarch64' }}
-        uses: docker/setup-qemu-action@v1
+        uses: docker/setup-qemu-action@v3
       - name: Build wheels
         run:  bash ./.ci/build_wheels.sh
-      - uses: actions/upload-artifact@v2
+      - uses: actions/upload-artifact@v4
         with:
           name: wheels
           path: ./dist/*.whl