Skip to content

Fix CI for publishing #47

Fix CI for publishing

Fix CI for publishing #47

Workflow file for this run

name: Build and Publish
on:
push:
tags:
- "**"
branches:
- "**"
permissions:
contents: read
env:
TERM: xterm
PYTHON_VERSION: 3.11
jobs:
checks:
name: Check code
runs-on: ubuntu-latest
env:
RUFF_FORMAT: github
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Check format
run: |
make check-format || true
BOLDRED=$(tput bold && tput setaf 1)
RESET=$(tput sgr0)
echo "${BOLDRED}==> We won't penalise formatting errors for the time being, but we will in the future.${RESET}"
- name: Check lint
run: |
make check-lint || true
BOLDRED=$(tput bold && tput setaf 1)
RESET=$(tput sgr0)
echo "${BOLDRED}==> We won't enforce linting errors for the time being, but we will in the future.${RESET}"
sdist-build:
name: Build sdist
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Build sdist
run: make build-sdist
- name: Upload packages
uses: actions/upload-artifact@v4
with:
name: sdist
path: dist
wheels-build:
name: Build wheels
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Build wheels
run: make build-wheels
- name: Upload packages
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}
path: dist
docker-build:
name: Build Docker image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Check Dockerfile
run: make check-docker
- name: Build Docker image
run: make save-image
# TODO: Enable this when we figure out how to run it without having to download several Gigabytes of data.
# - name: Test Docker image
# run: make run-example
- name: Upload Docker image
uses: actions/upload-artifact@v4
with:
name: docker-image
path: oncodrivefml.tar
docs-build:
name: Build documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Build the docs
shell: bash
run: make docs
- name: Upload documentation
uses: actions/upload-artifact@v4
with:
name: documentation
path: docs/build
check-version:
name: Check version
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
needs:
- checks
- sdist-build
- wheels-build
- docker-build
- docs-build
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Check version matching the tag
run: make check-version
packages-publish:
name: Publish packages
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
needs:
- check-version
- sdist-build
- wheels-build
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Download packages
uses: actions/download-artifact@v4
with:
path: dist
- name: Publish to PyPI
env:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
run: make publish-dist
docker-push:
name: Push Docker image
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs:
- check-version
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION }}
- uses: astral-sh/setup-uv@v4
- name: Download Docker image
uses: actions/download-artifact@v4
with:
name: docker-image
- name: Login to DockerHub
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
run: make docker-login
- name: Push Docker image
run: make load-image push-image