Skip to content

Commit

Permalink
Upgrading versions and adding Continuous Integration and Delivery
Browse files Browse the repository at this point in the history
  • Loading branch information
chris-zen committed Aug 16, 2024
1 parent e8005db commit 7d25153
Show file tree
Hide file tree
Showing 16 changed files with 602 additions and 145 deletions.
8 changes: 8 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
.github
.ruff_cache/
.venv/
data/
dist/
docs/
example/
oncodrivefml.egg-info/
207 changes: 207 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
name: Build and Publish

on:
push:
tags:
- "**"
branches:
- "**"

permissions:
contents: read

env:
TERM: xterm

jobs:
packages-build:
name: Build packages
runs-on: ubuntu-latest
env:
RUFF_FORMAT: github

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Prepare virtual environment
run: make create-env

- name: Check format
run: |
make check-format || true
BOLDRED=$(tput bold && tput setaf 1)
RESET=$(tput sgr0)
echo "${BOLDRED}==> We won't fail on 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 fail on lint errors for the time being, but we will in the future.${RESET}"
- name: Build packages
run: make build-dist

- name: Upload packages
uses: actions/upload-artifact@v4
with:
name: python-packages
path: dist

docker-build:
name: Build Docker image
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Prepare virtual environment
run: make create-env

- name: Check Dockerfile
run: make check-docker

- name: Build Docker image
run: make build-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

docs-build:
name: Build documentation
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Prepare virtual environment
run: make create-env

- name: Check version matching the tag
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:
- packages-build
- docker-build
- docs-build

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Prepare virtual environment
run: make create-env

- 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/')
env:
PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }}
needs:
- check-version

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Prepare virtual environment
run: make create-env

- name: Download packages
uses: actions/download-artifact@v4
with:
name: python-packages

- name: Publish to PyPI
if: ${{ env.PYPI_USERNAME != '' }}
env:
PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: make publish-dist

docker-push:
name: Push Docker image
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
env:
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
needs:
- check-version

steps:
- if: ${{ env.DOCKER_USERNAME != '' }}
uses: actions/checkout@v3

- name: Login to DockerHub
if: ${{ env.DOCKER_USERNAME != '' }}
run: echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin

- name: Push Docker image
if: ${{ env.DOCKER_USERNAME != '' }}
run: make push-image

docs-publish:
name: Publish documentation
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/')
env:
RTD_USERNAME: ${{ secrets.RTD_USERNAME }}
needs:
- check-version

steps:
- uses: actions/checkout@v4

- name: Set up Python 3.8
uses: actions/setup-python@v5
with:
python-version: "3.8"

- name: Prepare virtual environment
run: make create-env

- name: Download documentation
uses: actions/download-artifact@v4
with:
name: documentation

# TODO: Add a step to publish the docs to ReadTheDocs
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,8 @@ example/cdsOriginal
docs/build

# External users tests
external_checks
external_checks

.ruff_cache/
.venv
data/
2 changes: 2 additions & 0 deletions .hadolint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ignored:
- DL3003
1 change: 1 addition & 0 deletions .python-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.8
20 changes: 20 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
FROM python:3.8-slim

# hadolint ignore=DL3013
RUN pip install --no-cache-dir --upgrade pip

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && \
apt-get install -y --no-install-recommends --no-install-suggests \
build-essential=12.9 \
zlib1g-dev=1:1.2.13.dfsg-1 && \
rm -rf /var/lib/apt/lists/*

# hadolint ignore=DL3042
RUN --mount=type=cache,target=/root/.cache/pip \
--mount=type=bind,target=/project,rw \
cd /project && \
pip install .

ENTRYPOINT [ "/usr/local/bin/oncodrivefml" ]
Loading

0 comments on commit 7d25153

Please sign in to comment.