Skip to content

Commit

Permalink
ci: add CI workflow
Browse files Browse the repository at this point in the history
Test Plan:
- run CI
  • Loading branch information
kod-kristoff committed Jan 19, 2024
1 parent a158b68 commit 8c6fe5c
Show file tree
Hide file tree
Showing 4 changed files with 329 additions and 0 deletions.
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @kod-kristoff
58 changes: 58 additions & 0 deletions .github/actions/setup-python-env/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: "setup-python-env"
description: "Composite action to setup the Python and rye environment."

inputs:
cache-extra-key:
required: false
description: "Extra cache key to use"
default: ""
python-version:
required: false
description: "The python version to use"
default: "3.11"
rye-version:
required: false
description: "The version of rye to use"
default: "latest"
outputs:
python-version:
description: "Python version used"
value: ${{ steps.set-python-version.outputs.python-version }}
rye-version:
description: "rye version used"
value: ${{ steps.set-rye-version.outputs.poetry-version }}

runs:
using: "composite"
steps:
- name: Install rye
id: setup-rye
uses: eifinger/setup-rye@f8f2ca26808cdffef0b77c4fddf4305a5e5b010a
with:
version: ${{ inputs.rye-version }}

- name: Pin python version
run: rye pin ${{ inputs.python-version }}
shell: bash

- name: Output python version
id: set-python-version
run: echo "python-version=$(rye run python -c 'import sys; print(".".join(map(str, sys.version_info[0:3])))')" >> $GITHUB_OUTPUT
shell: bash

- name: Output rye version
id: set-rye-version
run: echo "rye-version=${{ steps.setup-rye.outputs.rye-version}}" >> $GITHUB_OUTPUT
shell: bash

- name: Load cached venv
id: cached-poetry-dependencies
uses: actions/cache@v3
with:
path: .venv
key: venv-${{ runner.os }}-${{ steps.set-python-version.outputs.python-version }}-${{ inputs.cache-extra-key }}-${{ hashFiles('**/pyproject.toml') }}

- name: Install dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: rye sync --features=ci
shell: bash
16 changes: 16 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates

version: 2
updates:
- package-ecosystem: "pip" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
254 changes: 254 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
name: CI

on:
push:
pull_request:
merge_group:

permissions:
contents: read

env:
MINIMUM_PYTHON_VERSION: "3.9"

jobs:
lint:
name: ${{ matrix.task.name }} (${{ matrix.os }})
strategy:
max-parallel: 4
fail-fast: false
matrix:
# Only run checks for ubuntu
os: [ubuntu]
task:
- name: Type check
run: make type-check
- name: Check formatting
run: make check-fmt
- name: Lint code
run: make lint

runs-on: ${{ matrix.os }}-latest

steps:
#----------------------------------------------
# check-out repo
#----------------------------------------------
- name: Check out repository
uses: actions/checkout@v4

#----------------------------------------------
# ----- install & configure python & rye -----
#----------------------------------------------
- name: Set up the environment
uses: ./.github/actions/setup-python-env
with:
python-version: ${{ env.MINIMUM_PYTHON_VERSION }}
#----------------------------------------------
# Run matrix task
#----------------------------------------------
- name: ${{ matrix.task.name }}
run: ${{ matrix.task.run }}

coverage:
name: "Test py-${{ matrix.python-version }} (${{ matrix.os }})"
strategy:
max-parallel: 4
fail-fast: false
matrix:
os: [ubuntu]
python-version:
- "3.9"
- "3.10"
- "3.11"
- "3.12"

# continue-on-error: >-
# ${{ contains(matrix.python-version, 'dev') && true || false }}

runs-on: ${{ matrix.os }}-latest
steps:
#----------------------------------------------
# check-out repo and set-up python
#----------------------------------------------
- name: Check out repository
uses: actions/checkout@v4

#----------------------------------------------
# ----- install & configure python & rye -----
#----------------------------------------------
- name: Set up the environment
uses: ./.github/actions/setup-python-env
with:
python-version: ${{ matrix.python-version }}


#----------------------------------------------
# Run tests and upload coverage
#----------------------------------------------
- name: Run tests for coverage
run: make test-w-coverage

- name: copy coverage
run: |
mkdir coverage
cp -v .coverage coverage/.coverage.${{ matrix.os }}-py${{ matrix.python-version }}
- name: store coverage files
uses: actions/upload-artifact@v4
with:
name: coverage
path: coverage


upload-coverage:
name: Upload test coverage to CodeCov
needs: [coverage]
runs-on: ubuntu-latest
permissions:
statuses: write
steps:
#----------------------------------------------
# check-out repo and set-up python
#----------------------------------------------
- name: Check out repository
uses: actions/checkout@v4
- name: Set up python ${{ env.MINIMUM_PYTHON_VERSION }}
id: setup-python
uses: actions/setup-python@v5
with:
python-version: ${{ env.MINIMUM_PYTHON_VERSION }}

#----------------------------------------------
# install dependencies if cache does not exist
#----------------------------------------------
- name: Install dependencies
run: pip install coverage

- name: download coverage files
uses: actions/download-artifact@v4
with:
name: coverage
path: coverage

- name: convert coverage to xml
run: |
coverage combine --data-file=coverage/.coverage
coverage xml -i --data-file=coverage/.coverage
ls
ls coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
# directory: ./coverage
# env_vars: OS,PYTHON
fail_ci_if_error: false
# files: ./coverage/coverage.xml
# flags: unittests
# name: codecov-umbrella
verbose: true

# https://github.com/marketplace/actions/alls-green#why used for branch protection checks
check:
if: always()
needs: [lint, coverage]
runs-on: ubuntu-latest
permissions: {}
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
# allowed-failures: coverage

build:
name: Build package
# only run on push to main and on release
if: success() && (startsWith(github.ref, 'refs/tags/v') || github.ref == 'refs/heads/main')
runs-on: ubuntu-latest
steps:
#----------------------------------------------
# check-out repo and set-up python
#----------------------------------------------
- name: Check out repository
uses: actions/checkout@v4

#----------------------------------------------
# ----- install & configure rye -----
#----------------------------------------------
- name: Install rye
id: setup-rye
uses: eifinger/setup-rye@5b24b104a68da1e2ea0073aa191a2bab66f55d7c

- name: Set up python ${{ env.MINIMUM_PYTHON_VERSION }}
run: rye pin ${{ env.MINIMUM_PYTHON_VERSION }}
#----------------------------------------------
# ----- build distribution -----
#----------------------------------------------
- name: Build distribution
run: rye build

#----------------------------------------------
# ----- upload artifacts -----
#----------------------------------------------
- uses: actions/upload-artifact@v4
with:
name: pypi_files
path: dist

test-build:
name: test build on ${{ matrix.os }}
needs: [build]

strategy:
fail-fast: false
matrix:
os: [ubuntu]

runs-on: ${{ matrix.os }}-latest
steps:
- uses: actions/checkout@v4

- name: set up python
uses: actions/setup-python@v5
with:
python-version: ${{ env.MINIMUM_PYTHON_VERSION }}

- name: get dist artifacts
uses: actions/download-artifact@v4
with:
name: pypi_files
path: dist

- run: rm -r src/sparv_bert_neighbour
- run: pip install typing-extensions
- run: pip install -r tests/requirements-test.txt
- run: pip install sparv-bert-neighbour-plugin --no-index --no-deps --find-links dist --force-reinstall
- run: pytest

publish:
needs: [check, test-build]
if: success() && startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
environment: release
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python ${{ env.MINIMUM_PYTHON_VERSION }}
uses: actions/setup-python@v5
with:
python-version: ${{ env.MINIMUM_PYTHON_VERSION }}
- name: get dist artifacts
uses: actions/download-artifact@v4
with:
name: pypi_files
path: dist

- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

0 comments on commit 8c6fe5c

Please sign in to comment.