diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..97892da --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,41 @@ +name: Publish package +on: + release: + types: [created] + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.10' + architecture: 'x64' + + - name: Install dependencies and package + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + + - name: Build source and binary distribution package + run: | + python setup.py sdist bdist_wheel + env: + PACKAGE_VERSION: ${{ github.ref }} + + - name: Check distribution package + run: | + twine check dist/* + + - name: Publish distribution package + run: | + twine upload dist/* + env: + TWINE_REPOSITORY: ${{ secrets.PYPI_REPOSITORY }} + TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }} + TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + TWINE_NON_INTERACTIVE: yes diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..09d73b7 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,64 @@ +name: Run linter and tests +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: + - '3.7' + - '3.8' + - '3.9' + - '3.10' + django-version: + - '3.2' + djangorestframework-version: + - '3.10' + - '3.11' + - '3.12' + exclude: + - django-version: '3.1' + djangorestframework-version: '3.10' + - django-version: '3.2' + djangorestframework-version: '3.10' + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies and package + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install django~=${{ matrix.django-version }}.0 + pip install djangorestframework~=${{ matrix.djangorestframework-version }}.0 + + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 './drf_attachments' --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 './drf_attachments' --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + + - name: Run tests with coverage + run: | + # prepare Django project: link all necessary data from the test project into the root directory + # Hint: Simply changing the directory does not work (leads to missing files in coverage report) + ln -s ./tests/core core + ln -s ./tests/testapp testapp + ln -s ./tests/manage.py manage.py + + # run tests with coverage + coverage run \ + --source='./drf_attachments' \ + manage.py test + coverage xml + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 diff --git a/requirements.txt b/requirements.txt index 08181b4..e399643 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,9 +2,14 @@ -e . # Development dependencies +flake8>=3.9,<3.10 +codecov>=2.1,<2.2 +setuptools>=42 +wheel>=0.37 +twine>=3.4 # Linters and formatters -pre-commit>=2.20,<2.21 +pre-commit>=2.17.0,<2.18 isort>=5.10,<5.11 black>=22.6.0,<22.7