# Status checks workflow for pull requests # Runs tests and builds on all platforms to verify code quality name: Status Checks on: pull_request: branches: [ main, develop ] workflow_call: permissions: contents: read packages: read env: FPM_VERSION: "1.16.0" CI_CD: true jobs: run-unit-tests-debian: runs-on: ubuntu-latest permissions: contents: read packages: read container: image: ghcr.io/jmr-dev/android-file-handler-debian-builder:debian13-trixie credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 - name: Install dependencies run: | poetry install --no-interaction - name: Run tests run: | poetry run pytest tests/ -v run-unit-tests-arch: runs-on: ubuntu-latest permissions: contents: read packages: read container: image: ghcr.io/jmr-dev/android-file-handler-arch-builder:latest credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 - name: Install dependencies run: | poetry install --no-interaction - name: Run tests run: | poetry run pytest tests/ -v run-unit-tests-rhel: runs-on: ubuntu-latest permissions: contents: read packages: read container: image: ghcr.io/jmr-dev/android-file-handler-rhel-builder:fedora42 credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v4 - name: Install dependencies run: | poetry install --no-interaction - name: Run tests run: | poetry run pytest tests/ -v run-unit-tests-windows: runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Poetry uses: snok/install-poetry@v1 with: version: latest virtualenvs-create: true virtualenvs-in-project: true - name: Ensure Poetry is on PATH (Windows) shell: pwsh run: | # Add Poetry user bin to PATH for subsequent steps in this job $poetryPath = Join-Path $env:USERPROFILE ".local\bin" Write-Output $poetryPath >> $Env:GITHUB_PATH - name: Install dependencies run: | poetry install - name: Run tests run: | poetry run pytest tests/ -v build-and-package-windows: needs: [run-unit-tests-windows] runs-on: windows-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python 3.13 uses: actions/setup-python@v5 with: python-version: '3.13' - name: Install Poetry uses: snok/install-poetry@v1 with: version: latest virtualenvs-create: true virtualenvs-in-project: true - name: Ensure Poetry is on PATH (Windows) shell: pwsh run: | # Add Poetry user bin to PATH for subsequent steps in this job $poetryPath = Join-Path $env:USERPROFILE ".local\bin" Write-Output $poetryPath >> $Env:GITHUB_PATH - name: Install dependencies run: | poetry install - name: Build Windows executable run: | # Use the Windows spec file so packaging is consistent and reproducible poetry run pyinstaller scripts/spec_scripts/android-file-handler-windows.spec - name: Upload Windows artifact uses: actions/upload-artifact@v4 with: name: windows-binary path: | dist/**/android-file-handler*.exe dist/android-file-handler.exe build-and-package-debian: needs: [run-unit-tests-debian, run-unit-tests-arch, run-unit-tests-rhel] permissions: contents: read packages: read env: DISTRO_TYPE: debian runs-on: ubuntu-latest container: image: ghcr.io/jmr-dev/android-file-handler-debian-builder:debian13-trixie credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Build and package Debian run: | # Container has Poetry and all dependencies pre-installed # Python build script handles both PyInstaller build and fpm packaging poetry install --no-interaction poetry run python scripts/build_package_linux.py - name: Upload Debian .deb uses: actions/upload-artifact@v4 with: name: debian-package path: | dist/android-file-handler_*.deb pkg_dist_debian/** build-and-package-arch: needs: [run-unit-tests-debian, run-unit-tests-arch, run-unit-tests-rhel] permissions: contents: read packages: read env: DISTRO_TYPE: arch runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Log in to GitHub Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.CI_CD_PAT }} - name: Pull Docker image run: docker pull ghcr.io/jmr-dev/android-file-handler-arch-builder:latest - name: Build and package Arch run: | docker run --rm \ -v ${{ github.workspace }}:/workspace \ -w /workspace \ -e DISTRO_TYPE=${{ env.DISTRO_TYPE }} \ -e FPM_VERSION=${{ env.FPM_VERSION }} \ -e CI_CD=${{ env.CI_CD }} \ ghcr.io/jmr-dev/android-file-handler-arch-builder:latest \ sh -c "poetry install --no-interaction && poetry run python scripts/build_package_linux.py" - name: Upload Arch package uses: actions/upload-artifact@v4 with: name: arch-package path: | dist/*.pkg.tar.* pkg_dist_arch/** build-and-package-rhel: needs: [run-unit-tests-debian, run-unit-tests-arch, run-unit-tests-rhel] permissions: contents: read packages: read env: DISTRO_TYPE: rhel runs-on: ubuntu-latest container: image: ghcr.io/jmr-dev/android-file-handler-rhel-builder:fedora42 credentials: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Build and package RHEL run: | # Container has Poetry and all dependencies pre-installed # Python build script handles both PyInstaller build and fpm packaging poetry install --no-interaction poetry run python scripts/build_package_linux.py - name: Upload RHEL artifacts uses: actions/upload-artifact@v4 with: name: rhel-package path: | dist/*.rpm pkg_dist_rhel/**