diff --git a/.github/workflows/run-checks.yml b/.github/workflows/run-checks.yml new file mode 100644 index 0000000..ea290c4 --- /dev/null +++ b/.github/workflows/run-checks.yml @@ -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 . + diff --git a/.github/workflows/setup-python/action.yml b/.github/workflows/setup-python/action.yml new file mode 100644 index 0000000..a846536 --- /dev/null +++ b/.github/workflows/setup-python/action.yml @@ -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