Skip to content

CI

CI #21

Workflow file for this run

name: CI
on:
push:
branches: [ "main", "dev" ]
pull_request:
branches: [ "main", "dev" ]
workflow_dispatch:
jobs:
test:
name: Test Python ${{ matrix.python }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python: ['3.9', '3.10', '3.11', '3.12', '3.13']
exclude:
# Windows with Python 3.13 sometimes has issues with numpy availability
- os: windows-latest
python: '3.13'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
cache: 'pip'
- name: Install Nim
shell: bash
run: |
if [ "$RUNNER_OS" == "macOS" ]; then
# macOS: Use chosenim
curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
sh init.sh -y
echo "$HOME/.nimble/bin" >> $GITHUB_PATH
elif [ "$RUNNER_OS" == "Windows" ]; then
# Windows: Use choco
choco install nim --version 2.0.4 -y
echo "C:\\tools\\Nim\\nim-2.0.4\\bin" >> $GITHUB_PATH
else
# Linux: Download and extract
curl -L https://nim-lang.org/download/nim-2.0.4-linux_x64.tar.xz -o nim.tar.xz
tar -xf nim.tar.xz
sudo mv nim-2.0.4 /opt/nim
sudo ln -s /opt/nim/bin/nim /usr/local/bin/nim
sudo ln -s /opt/nim/bin/nimble /usr/local/bin/nimble
rm nim.tar.xz
fi
- name: Verify Nim installation
run: |
nim --version
nimble --version
- name: Install nuwa-build
run: |
pip install nuwa-build
- name: Install dependencies
run: |
pip install -e ".[dev,test]"
- name: Run linter
run: |
ruff check .
- name: Run formatter check
run: |
ruff format --check .
- name: Build extension
run: |
nuwa develop
- name: Run tests
run: |
pytest tests/ -v --tb=short
test-integration:
name: Integration tests (Nuwa SDK wrappers)
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
python: ['3.10', '3.12', '3.13']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
cache: 'pip'
- name: Install Nim
shell: bash
run: |
if [ "$RUNNER_OS" == "macOS" ]; then
# macOS: Use chosenim
curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
sh init.sh -y
echo "$HOME/.nimble/bin" >> $GITHUB_PATH
elif [ "$RUNNER_OS" == "Linux" ]; then
# Linux: Download and extract
curl -L https://nim-lang.org/download/nim-2.0.4-linux_x64.tar.xz -o nim.tar.xz
tar -xf nim.tar.xz
sudo mv nim-2.0.4 /opt/nim
sudo ln -s /opt/nim/bin/nim /usr/local/bin/nim
sudo ln -s /opt/nim/bin/nimble /usr/local/bin/nimble
rm nim.tar.xz
fi
- name: Install nuwa-build
run: |
pip install nuwa-build
- name: Install dependencies
run: |
pip install -e ".[test]"
- name: Build extension
run: |
nuwa develop
- name: Run integration tests
run: |
pytest tests/test_integration_nuwa_sdk.py -v --tb=short
build-wheel:
name: Build wheel on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install Nim
shell: bash
run: |
if [ "$RUNNER_OS" == "macOS" ]; then
# macOS: Use chosenim
curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh
sh init.sh -y
echo "$HOME/.nimble/bin" >> $GITHUB_PATH
elif [ "$RUNNER_OS" == "Windows" ]; then
# Windows: Use choco
choco install nim --version 2.0.4 -y
echo "C:\\tools\\Nim\\nim-2.0.4\\bin" >> $GITHUB_PATH
else
# Linux: Download and extract
curl -L https://nim-lang.org/download/nim-2.0.4-linux_x64.tar.xz -o nim.tar.xz
tar -xf nim.tar.xz
sudo mv nim-2.0.4 /opt/nim
sudo ln -s /opt/nim/bin/nim /usr/local/bin/nim
sudo ln -s /opt/nim/bin/nimble /usr/local/bin/nimble
rm nim.tar.xz
fi
- name: Install build tools
run: |
pip install build nuwa-build
- name: Build wheel
run: |
python -m build
- name: Upload wheel
uses: actions/upload-artifact@v4
with:
name: wheel-${{ matrix.os }}
path: dist/*.whl