Merge pull request #45 from kchason/ci-fixes #53
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Pipeline | |
on: [ push ] | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
# This allows the pipeline to be run against multiple Python versions. eg. [3.6, 3.7, 3.8, 3.9, 3.10]. This results | |
# in linting and unit tests running for all listed versions as well as the creation of packages and wheels on | |
# creation of a tag in Git. | |
python-version: [ "3.8", "3.9", "3.10", "3.11", "3.12" ] | |
steps: | |
# Get the code from the repository to be packaged | |
- name: Get Repo | |
uses: actions/checkout@v3 | |
# Setup the Python environment (currently Python 2.7). This will need to be | |
# updated when the project is upgraded to Python 3.x | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
# Install the packages to build the SQLite Dissect package | |
- name: Prepare Build Environment | |
run: | | |
sudo apt install python3-setuptools | |
python -m pip install -q --upgrade pip | |
pip install . | |
pip install -q flake8 pytest pytest-cov build twine wheel | |
# Lint the Python code to check for syntax errors | |
- name: Lint with Flake8 | |
run: | | |
# stop the build if there are Python syntax errors or undefined names | |
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics | |
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide | |
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics | |
# Test the Python unit tests | |
- name: PyTest | |
run: | | |
# Create the directory for the test output | |
mkdir output | |
# Run the test suite | |
pytest --cov-report term-missing --cov-report html --cov=sqlite_dissect --cov-config=.coveragerc | |
# Run the CASE validation job to confirm the output is valid | |
- name: CASE Export Validation | |
uses: kchason/case-validation-action@v2.5 | |
with: | |
case-path: ./output/case.json | |
case-version: "case-1.1.0" | |
# Upload the PyTest HTML coverage report for review | |
- name: Upload PyTest Coverage | |
uses: actions/upload-artifact@v3 | |
with: | |
name: code-coverage-report | |
path: htmlcov | |
# Build the Sphinx documentation into a PDF for easier distribution | |
- name: Build Documentation | |
run: | | |
pip install -q sphinx | |
pip install -q sphinx-rtd-theme | |
sphinx-build -b html ./docs/source/ ./docs/build/ | |
# Upload the HTML documentation for distribution | |
- name: Upload HTML Docs | |
uses: actions/upload-artifact@v3 | |
with: | |
name: html-docs | |
path: ./docs/build/ | |
# Build the binary wheel as well as the source tar | |
- name: Build Objects | |
if: startsWith(github.ref, 'refs/tags') | |
run: python setup.py sdist bdist_wheel | |
env: | |
TAG_VERSION: "${GITHUB_REF#refs/*/}" | |
# Ensure the objects were packaged correctly and there wasn't an issue with | |
# the compilation or packaging process. | |
- name: Check Objects | |
if: startsWith(github.ref, 'refs/tags') | |
run: twine check dist/* | |
# If this commit is the result of a Git tag, push the wheel and tar packages | |
# to the PyPi registry | |
- name: Publish to PyPI | |
if: startsWith(github.ref, 'refs/tags') | |
run: twine upload --repository-url https://upload.pypi.org/legacy/ -u __token__ -p ${{ secrets.PYPI_API_TOKEN }} --skip-existing --verbose dist/* |