Skip to content

Ensure volume.read and volume.peek will always return the full amount of requested if available #301

Ensure volume.read and volume.peek will always return the full amount of requested if available

Ensure volume.read and volume.peek will always return the full amount of requested if available #301

Workflow file for this run

name: Check and Build
on:
push:
branches:
- main
pull_request:
workflow_dispatch:
release:
types: [released]
permissions: read-all
jobs:
lint:
name: Lint codebase
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: &python-versions
- "3.11"
- "3.12"
- "3.13"
- "3.14"
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python }}
cache: pip
- &install-emake
name: Install emake
run: pip install emake
- name: Run lint
run: emake lint
env:
PYTHONUNBUFFERED: "1"
test-image:
name: Generate test ext4 image
runs-on: ubuntu-latest
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- name: Install dependencies
shell: bash
run: |
set -e
sudo apt-get install -y attr
- name: Generate test.ext4
shell: bash
run: |
set -e
./_test_image.sh
env:
PYTHONUNBUFFERED: "1"
- uses: actions/upload-artifact@v6
with:
name: test.ext4
path: |
test32.ext4
test32.ext4.tmp
test64.ext4
test64.ext4.tmp
test_htree.ext4
test_htree_multi.ext4
if-no-files-found: error
test:
name: Test
runs-on: ${{ matrix.os }}
needs: test-image
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- windows-latest
- macos-latest
python: *python-versions
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python }}
cache: pip
- *install-emake
- name: Download test.ext4
uses: actions/download-artifact@v8
with:
name: test.ext4
path: .
- name: Run tests
shell: bash
run: emake test
env:
PYTHONUNBUFFERED: "1"
fuzz:
name: Fuzz
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python:
- "3.11"
- "3.12"
- "3.13"
#- "3.14" # not supported by atheris yet
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python }}
cache: "pip"
- *install-emake
- name: Run test
shell: bash
run: make fuzz
env:
PYTHONUNBUFFERED: "1"
build-sdist:
name: Build sdist
needs: &build-needs
- lint
- test
runs-on: ubuntu-latest
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- *install-emake
- name: Building sdist
run: emake build --sdist
env:
PYTHONUNBUFFERED: "1"
- uses: actions/upload-artifact@v6
with:
name: pip-sdist
path: dist/*
if-no-files-found: error
build-any-wheel:
name: Build wheel
needs: *build-needs
runs-on: ubuntu-latest
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- *install-emake
- name: Building wheel
run: emake build --wheel
- name: Download test.ext4
uses: actions/download-artifact@v8
with:
name: test.ext4
path: .
- name: Test wheel
run: emake test --wheel
env:
PYTHONUNBUFFERED: "1"
- uses: actions/upload-artifact@v6
with:
name: pip-wheel-none-any
path: dist/*
if-no-files-found: error
build-wheel:
name: Build wheel
needs: *build-needs
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python: *python-versions
arch:
- x86_64
- i686
- ppc64le
- aarch64
- armv7l
- riscv64
- s390x
libc:
- glibc
- musl
exclude:
- arch: i686 # segfaults currently
python: "3.14"
libc: glibc
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- *install-emake
- name: Building wheel
run: |
emake build \
--native-wheel \
--arch ${{ matrix.arch }} \
--libc ${{ matrix.libc }} \
--python ${{ matrix.python }}
env:
PYTHONUNBUFFERED: "1"
- name: Download test.ext4
uses: actions/download-artifact@v8
with:
name: test.ext4
path: .
- name: Testing wheel
run: |
emake test \
--wheel \
--arch ${{ matrix.arch }} \
--libc ${{ matrix.libc }} \
--python ${{ matrix.python }}
env:
PYTHONUNBUFFERED: "1"
- uses: actions/upload-artifact@v6
with:
name: pip-wheel-${{ matrix.python }}-${{ matrix.arch }}-${{ matrix.libc }}
path: dist/*
if-no-files-found: error
publish:
name: Publish to PyPi
if: github.repository == 'Eeems/python-ext4' && github.event_name == 'release' && startsWith(github.ref, 'refs/tags')
needs: &release-needs
- build-sdist
- build-any-wheel
- build-wheel
runs-on: ubuntu-latest
permissions:
id-token: write
environment:
name: pypi
url: https://pypi.org/p/ext4
steps:
- name: Download pip packages
id: download
uses: actions/download-artifact@v8
with:
pattern: pip-*
merge-multiple: true
path: dist
- name: Publish package distributions to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: ${{ steps.download.outputs.download-path }}
skip-existing: true
release:
name: Add release artifacts
if: github.repository == 'Eeems/python-ext4' && github.event_name == 'release' && startsWith(github.ref, 'refs/tags')
needs: *release-needs
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout the Git repository
uses: actions/checkout@v6
- name: Download artifact
id: download
uses: actions/download-artifact@v8
with:
pattern: pip-*
merge-multiple: true
path: dist
- name: Upload to release
run: find . -type f | xargs -rI {} gh release upload "$TAG" {} --clobber
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.event.release.tag_name }}
working-directory: ${{ steps.download.outputs.download-path }}
aur:
name: Update the AUR
if: github.repository == 'Eeems/python-ext4' && github.event_name == 'release' && startsWith(github.ref, 'refs/tags')
needs: publish
runs-on: ubuntu-latest
container:
image: eeems/archlinux:nuitka
options: --user=root:root
steps:
- name: Setup
run: |
chmod a+rwx .
chown notroot ~ .
su notroot -c '
yay -Syu --noconfirm
yay -S --noconfirm \
python-build \
python-installer \
python-setuptools \
rhash
mkdir -p "$HOME"/.ssh/
pushd "$HOME"/.ssh/
echo "${AUR_SSH:?ssh key missing}" > aur
chmod 0600 aur
chmod 0700 .
file aur
popd
'
env:
AUR_SSH: ${{ secrets.AUR_SSH }}
- name: Checkout the AUR repository
run: |
su notroot -c '
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -i $HOME/.ssh/aur" \
git clone ssh://aur@aur.archlinux.org/python-ext4.git .
'
- name: Download test.ext4
uses: actions/download-artifact@v8
with:
name: test.ext4
path: .
- name: Update PKGBUILD
run: |
su notroot -c '
version="${{ github.ref_name }}"
tar czvf test-images.tar.gz test*.ext4*
sed -i "s|pkgver=.*|pkgver=${version#v}|" PKGBUILD
updpkgsums PKGBUILD
makepkg --printsrcinfo > .SRCINFO
git add -f PKGBUILD .SRCINFO
git config --local user.email "nathaniel.vandiepen@gmail.com"
git config --local user.name "Nathaniel van Diepen"
git commit -m "Update to ${version#v}"
git show
'
- name: Test PKGBUILD
run: |
sudo -u notroot makepkg \
--noconfirm \
--syncdeps \
--install
- name: Push PKGBUILD
run: |
su notroot -c '
GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no -i $HOME/.ssh/aur" \
git push
'