Skip to content
This repository has been archived by the owner on Dec 8, 2024. It is now read-only.

Commit

Permalink
build: add github actions for running code tests and styling
Browse files Browse the repository at this point in the history
  • Loading branch information
LimaoC committed Aug 15, 2024
1 parent ebfc8bc commit cb54d84
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 0 deletions.
50 changes: 50 additions & 0 deletions .github/workflows/run-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# REF: https://github.com/UQComputingSociety/uqcsbot-discord/blob/main/.github/workflows/setup-python/action.yml

name: Run code checks

on:
push:
branches: [ main ]
pull_request: []

env:
PYTHON_VERSION: '3.10'
POETRY_VERSION: '1.8.3'

jobs:
tests:
name: Run tests
runs-on: ubuntu-22.04

steps:
- name: Checkout repository
uses: actions/checkout@v4

# Local action that tries to cache as much of python & poetry as possible
- name: Setup environment
uses: ./.github/workflows/setup-python
with:
python-version: ${{ env.PYTHON_VERSION }}
poetry-version: ${{ env.POETRY_VERSION }}

- name: Check with pytest
run: poetry run pytest

styling:
name: Run code styling
runs-on: ubuntu-22.04

steps:
- name: Checkout repository
uses: actions/checkout@v4

# Local action that tries to cache as much of python & poetry as possible
- name: Setup environment
uses: ./.github/workflows/setup-python
with:
python-version: ${{ env.PYTHON_VERSION }}
poetry-version: ${{ env.POETRY_VERSION }}

- name: Check with black
run: poetry run black .

71 changes: 71 additions & 0 deletions .github/workflows/setup-python/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# REF: https://github.com/UQComputingSociety/uqcsbot-discord/blob/main/.github/workflows/setup-python/action.yml

name: Setup environment
description: Setup python & poetry for running tests & typechecking

inputs:
python-version:
description: Version of python to use
required: true
poetry-version:
description: Version of poetry to use
required: true

runs:
using: "composite"
steps:
# ------
# Get python
# ------
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ inputs.python-version }}

# ------
# Get poetry (hopefully from cache)
# ------
- name: Check for cached poetry binary
id: cached-poetry-binary
uses: actions/cache@v4
with:
path: ~/.local
# poetry depends on OS, python version, and poetry version
key: poetry-${{ runner.os }}-${{ inputs.python-version }}-${{ inputs.poetry-version }}

- name: Install poetry on cache miss
# we don't need an `if:` here because poetry checks if it's already installed
uses: snok/install-poetry@v1
with:
version: ${{ inputs.poetry-version }}
virtualenvs-create: true
virtualenvs-in-project: true
virtualenvs-path: '**/.venv'
installer-parallel: true

- name: Ensure poetry is on PATH
run: echo "$HOME/.poetry/bin" >> $GITHUB_PATH
shell: bash

# ------
# Get library dependencies (hopefully from cache)
# ------
- name: Check for cached dependencies
id: cached-poetry-dependencies
uses: actions/cache@v4
with:
path: '**/.venv'
# poetry dependencies depend on OS, python version, poetry version, and repository lockfile
key: poetry-deps-${{ runner.os }}-${{ inputs.python-version }}-${{ inputs.poetry-version }}-${{ hashFiles('**/poetry.lock') }}

- name: Install dependencies on cache miss
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root
shell: bash

# ------
# Finalise install
# ------
- name: Install main project
run: poetry install --no-interaction
shell: bash

0 comments on commit cb54d84

Please sign in to comment.