Skip to content

Try getting uv to use arm64 python out of the box #994

Try getting uv to use arm64 python out of the box

Try getting uv to use arm64 python out of the box #994

# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions
name: Lint and build
on:
workflow_dispatch: # Allows manual builds
inputs:
excludeBuildNumber:
description: "Exclude build number"
required: true
default: false
type: boolean
push:
branches:
- main
paths:
- ".github/workflows/lint-and-build.yml"
- "src/**"
- "scripts/**"
- "*.toml"
- "uv.lock"
pull_request:
branches:
- main
paths:
- ".github/workflows/lint-and-build.yml"
- "src/**"
- "scripts/**"
- "*.toml"
- "uv.lock"
env:
GITHUB_HEAD_REPOSITORY: ${{ github.event.pull_request.head.repo.full_name }}
GITHUB_EXCLUDE_BUILD_NUMBER: ${{ inputs.excludeBuildNumber }}
UV_NO_SYNC: true # Avoid accidentally pulling in dependency-groups with uv run
# https://github.com/opencv/opencv-python#source-distributions
# Allows building OpenCV on Windows ARM64
# https://github.com/opencv/opencv-python/issues/1092#issuecomment-2862538656
CMAKE_ARGS: "-DBUILD_opencv_dnn=OFF -DENABLE_NEON=OFF"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
Pyright:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
# Pyright is version and platform sensible
matrix:
os: [windows-latest, ubuntu-22.04]
python-version: ["3.13", "3.14"]
steps:
- uses: actions/checkout@v4
- name: Set up uv for Python ${{ matrix.python-version }}
uses: astral-sh/setup-uv@v7
with:
python-version: ${{ matrix.python-version }}
activate-environment: true
- run: scripts/install.ps1
shell: pwsh
- name: Analysing the code with Pyright
uses: jakebailey/pyright-action@v2
with:
version: PATH
working-directory: src/
python-version: ${{ matrix.python-version }}
uv-secure:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v7
- run: uvx uv-secure[faster-async]
Build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
# Only the Python version we plan on shipping matters.
matrix:
os: [windows-latest, windows-11-arm, ubuntu-22.04, ubuntu-22.04-arm]
python-version: ["3.13", "3.14"]
steps:
- uses: actions/checkout@v4
# https://github.com/astral-sh/uv/issues/12906#issuecomment-3587439179
- name: Set UV_PYTHON for ARM runners
if: ${{ startsWith(matrix.os, 'arm') }}
run: echo "UV_PYTHON=arm64" >> "$GITHUB_ENV"
# region pyinstaller/pyinstaller#9012
- name: Set up Python for PyInstaller tk issue on Linux
if: ${{ startsWith(matrix.os, 'ubuntu') }}
uses: actions/setup-python@v5
with:
allow-prereleases: true
python-version: ${{ matrix.python-version }}
- name: Set up uv for Python ${{ matrix.python-version }}
uses: astral-sh/setup-uv@v7
with:
python-version: ${{ !startsWith(matrix.os, 'ubuntu') && matrix.python-version || null }}
# endregion
- run: scripts/install.ps1
shell: pwsh
- run: scripts/build.ps1
shell: pwsh
- name: Add empty profile
run: echo "" > dist/settings.toml
- name: Extract AutoSplit version
id: artifact_vars
working-directory: src
run: | # This also serves as a sanity check for imports
$Env:AUTOSPLIT_VERSION=uv run python -c "import utils; print(utils.AUTOSPLIT_VERSION)"
echo "AUTOSPLIT_VERSION=$Env:AUTOSPLIT_VERSION" >> $Env:GITHUB_OUTPUT
echo "OS=$([System.Runtime.InteropServices.RuntimeInformation]::RuntimeIdentifier)" >> $Env:GITHUB_OUTPUT
shell: pwsh
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
name: >
AutoSplit v${{ steps.artifact_vars.outputs.AUTOSPLIT_VERSION }}
for ${{ steps.artifact_vars.outputs.OS }} (Python ${{ matrix.python-version }})
path: |
dist/AutoSplit*
dist/settings.toml
if-no-files-found: error
- name: Upload Build logs
uses: actions/upload-artifact@v4
with:
name: Build logs for ${{ steps.artifact_vars.outputs.OS }} (Python ${{ matrix.python-version }})
path: |
build/AutoSplit/*.toc
build/AutoSplit/*.txt
build/AutoSplit/*.html
if-no-files-found: error