Skip to content

Add Windows shell integration and tray mount manager #40

Add Windows shell integration and tray mount manager

Add Windows shell integration and tray mount manager #40

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
unit-tests:
name: Unit Tests (Python ${{ matrix.python-version }}, ${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e "./amitools[vamos]"
pip install "pytest>=7.0" "pytest-cov>=4.0" "pytest-timeout>=2.0"
pip install -e "." --no-deps
- name: Run unit tests
run: pytest tests/unit/ -v --timeout=30
integration-tests:
name: Integration Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: unit-tests
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up Python 3.13
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: 'pip'
- name: Clone AmiFUSE-testing fixtures
# Clones to sibling directory of workspace checkout.
# Workspace is typically /home/runner/work/<repo>/<repo>.
run: |
git clone --depth 1 https://github.com/reinauer/AmiFUSE-testing.git ../AmiFUSE-testing
continue-on-error: true
- name: Install machine68k-amifuse (Windows)
# Upstream machine68k lacks Windows fixes (cnvogelg/machine68k#8,
# #9). The machine68k-amifuse fork includes all fixes with
# pre-built Windows wheels.
# Remove this step once upstream machine68k merges the fixes.
if: runner.os == 'Windows'
run: pip install "machine68k-amifuse>=0.4.1.post1"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e "./amitools[vamos]"
pip install "pytest>=7.0" "pytest-cov>=4.0" "pytest-timeout>=2.0"
pip install -e "." --no-deps
- name: Verify machine68k
run: |
python -c "import machine68k; print(f'machine68k {machine68k.__version__}')"
python -c "import machine68k; machine68k.CPU(1); print('CPU probe OK')"
continue-on-error: true
- name: Run integration tests
env:
AMIFUSE_FIXTURE_ROOT: ${{ github.workspace }}/../AmiFUSE-testing
run: pytest tests/integration/ -v --timeout=60
tools-smoke:
name: Tools Smoke (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: unit-tests
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up Python 3.13
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: 'pip'
- name: Clone AmiFUSE-testing fixtures
# Clones to sibling directory of workspace checkout.
# Workspace is typically /home/runner/work/<repo>/<repo>.
run: |
git clone --depth 1 https://github.com/reinauer/AmiFUSE-testing.git ../AmiFUSE-testing
continue-on-error: true
- name: Install machine68k-amifuse (Windows)
# Upstream machine68k lacks Windows fixes (cnvogelg/machine68k#8,
# #9). The machine68k-amifuse fork includes all fixes with
# pre-built Windows wheels.
# Remove this step once upstream machine68k merges the fixes.
if: runner.os == 'Windows'
run: pip install "machine68k-amifuse>=0.4.1.post1"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e "./amitools[vamos]"
pip install -e "." --no-deps
- name: Run amifuse_matrix smoke
env:
AMIFUSE_FIXTURE_ROOT: ${{ github.workspace }}/../AmiFUSE-testing
run: python tools/amifuse_matrix.py --fixtures pfs3 sfs ofs --runs 1 --json
- name: Run image_format_smoke
env:
AMIFUSE_FIXTURE_ROOT: ${{ github.workspace }}/../AmiFUSE-testing
run: python tools/image_format_smoke.py --case direct-rdb-pfs3 --json
mount-tests:
name: Mount Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: unit-tests
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Set up Python 3.13
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: 'pip'
- name: Install FUSE backend (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y fuse3 libfuse3-dev libfuse-dev
sudo modprobe fuse || true
- name: Install FUSE backend (macOS)
if: runner.os == 'macOS'
run: |
brew install fuse-t
FUSET_LIB=$(find /opt/homebrew/lib /usr/local/lib -name 'libfuse-t*.dylib' 2>/dev/null | head -1)
if [ -n "$FUSET_LIB" ]; then
FUSET_DIR=$(dirname "$FUSET_LIB")
sudo ln -sf "$FUSET_LIB" "$FUSET_DIR/libfuse.dylib" || true
echo "DYLD_LIBRARY_PATH=$FUSET_DIR" >> "$GITHUB_ENV"
fi
- name: Install FUSE backend (Windows)
if: runner.os == 'Windows'
run: choco install winfsp -y
- name: Clone AmiFUSE-testing fixtures
run: |
git clone --depth 1 https://github.com/reinauer/AmiFUSE-testing.git ../AmiFUSE-testing
continue-on-error: true
- name: Install machine68k-amifuse (Windows)
if: runner.os == 'Windows'
run: pip install "machine68k-amifuse>=0.4.1.post1"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -e "./amitools[vamos]"
pip install "pytest>=7.0" "pytest-cov>=4.0" "pytest-timeout>=2.0"
pip install -e "." --no-deps
- name: Verify FUSE backend
run: |
python -c "
try:
from fuse import FUSE
print('fusepy: OK (FUSE class imported)')
except EnvironmentError as e:
print(f'fusepy: FUSE backend not found: {e}')
except ImportError:
print('fusepy: not installed')
"
continue-on-error: true
- name: Run mount tests
env:
AMIFUSE_FIXTURE_ROOT: ${{ github.workspace }}/../AmiFUSE-testing
run: pytest tests/integration/ -m fuse -v --timeout=60
- name: Cleanup stale mounts (Linux)
if: always() && runner.os == 'Linux'
run: |
pkill -9 -f amifuse || true
find /tmp -maxdepth 3 -name 'mnt_*' -type d 2>/dev/null | while read mp; do
fusermount3 -u "$mp" 2>/dev/null || fusermount -u "$mp" 2>/dev/null || true
done
- name: Cleanup stale mounts (macOS)
if: always() && runner.os == 'macOS'
run: |
pkill -9 -f amifuse || true
find /tmp -maxdepth 3 -name 'mnt_*' -type d 2>/dev/null | while read mp; do
umount "$mp" 2>/dev/null || true
done
- name: Cleanup stale mounts (Windows)
if: always() && runner.os == 'Windows'
shell: pwsh
run: |
Get-CimInstance Win32_Process | Where-Object { $_.CommandLine -match 'amifuse' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }