Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update CI inline with rest of aio-libs #395

Merged
merged 84 commits into from
Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
84 commits
Select commit Hold shift + click to select a range
77f522e
Update CI inline with rest of aio-libs
Dreamsorcerer Feb 4, 2024
517a756
Create auto-merge.yml
Dreamsorcerer Feb 4, 2024
8220ecf
Create dependabot.yml
Dreamsorcerer Feb 4, 2024
d7b6795
Create .codecov.yml
Dreamsorcerer Feb 4, 2024
28c8d70
Create .coveragerc
Dreamsorcerer Feb 4, 2024
32c3134
Create .mypy.ini
Dreamsorcerer Feb 4, 2024
7ad8268
Create CHANGES.rst
Dreamsorcerer Feb 4, 2024
d038eed
Create pytest.ini
Dreamsorcerer Feb 4, 2024
7fc486f
Create requirements.txt
Dreamsorcerer Feb 4, 2024
fb74c64
Create requirements-dev.txt
Dreamsorcerer Feb 4, 2024
68af6af
Update setup.cfg
Dreamsorcerer Feb 4, 2024
691e536
Update requirements-dev.txt
Dreamsorcerer Feb 4, 2024
f99c1ea
Update requirements.txt
Dreamsorcerer Feb 4, 2024
078bbe8
Update .github/workflows/ci-cd.yml
Dreamsorcerer Feb 4, 2024
3c8bdf6
Update pyproject.toml
Dreamsorcerer Feb 4, 2024
20badba
Update test_smtp.py
Dreamsorcerer Feb 4, 2024
f662225
Update smtp.rst
Dreamsorcerer Feb 4, 2024
77ffeb0
Update autoprogramm.py
Dreamsorcerer Feb 4, 2024
98b7bc8
Update controller.py
Dreamsorcerer Feb 4, 2024
d810ce5
Update tox.ini
Dreamsorcerer Feb 4, 2024
30d885e
Update setup.cfg
Dreamsorcerer Feb 4, 2024
0135425
Update README.rst
Dreamsorcerer Feb 4, 2024
2b6bbc7
Update DESCRIPTION.rst
Dreamsorcerer Feb 4, 2024
08ca29e
Update proxy_protocol.py
Dreamsorcerer Feb 4, 2024
4f796a8
Update RTD-requirements.txt
Dreamsorcerer Feb 4, 2024
4dfd0af
Update controller.py
Dreamsorcerer Feb 4, 2024
a18b63c
Update NEWS.rst
Dreamsorcerer Feb 4, 2024
41e2c23
Delete CHANGES.rst
Dreamsorcerer Feb 4, 2024
24251f6
Update ci-cd.yml
Dreamsorcerer Feb 4, 2024
8a2cd01
Create .readthedocs.yml
Dreamsorcerer Feb 4, 2024
3d4ea62
Update controller.py
Dreamsorcerer Feb 4, 2024
6536da1
Update smtp.py
Dreamsorcerer Feb 4, 2024
06dfb8c
Update housekeep.py
Dreamsorcerer Feb 4, 2024
e048ebf
Update ci-cd.yml
Dreamsorcerer Feb 4, 2024
5391ce0
Update .mypy.ini
Dreamsorcerer Feb 4, 2024
ac5daec
Typing
Dreamsorcerer Feb 4, 2024
6d7bd35
Update requirements-dev.txt
Dreamsorcerer Feb 4, 2024
a2203fd
Update requirements-dev.txt
Dreamsorcerer Feb 4, 2024
7628ba9
Update test_0packaging.py
Dreamsorcerer Feb 4, 2024
0629efd
Update controller.py
Dreamsorcerer Feb 4, 2024
47a15dc
Update setup.cfg
Dreamsorcerer Feb 4, 2024
c903698
Update handlers.py
Dreamsorcerer Feb 4, 2024
428275e
Update smtp.py
Dreamsorcerer Feb 4, 2024
64ad386
Update requirements-dev.txt
Dreamsorcerer Feb 4, 2024
54a3c3f
Update requirements-dev.txt
Dreamsorcerer Feb 4, 2024
71ad4e8
Update requirements.txt
Dreamsorcerer Feb 4, 2024
145c570
Update smtp.py
Dreamsorcerer Feb 4, 2024
44dd679
Fix
Dreamsorcerer Feb 4, 2024
dff2a0d
Update requirements-dev.txt
Dreamsorcerer Feb 4, 2024
9db34c3
Update MANIFEST.in
Dreamsorcerer Feb 4, 2024
1c15145
Update pytest.ini
Dreamsorcerer Feb 4, 2024
b291d32
Update controller.py
Dreamsorcerer Feb 4, 2024
8c5559a
Update pytest.ini
Dreamsorcerer Feb 4, 2024
9d5043f
Update pytest.ini
Dreamsorcerer Feb 4, 2024
94ea067
Update controller.py
Dreamsorcerer Feb 4, 2024
31ecbd5
Update proxy_protocol.py
Dreamsorcerer Feb 4, 2024
fa53c61
Apply suggestions from code review
Dreamsorcerer Feb 4, 2024
fc7963d
Update server.py
Dreamsorcerer Feb 4, 2024
d32f076
Update pytest.ini
Dreamsorcerer Feb 4, 2024
7bd63a6
Fix
Dreamsorcerer Feb 4, 2024
822309e
Fix
Dreamsorcerer Feb 4, 2024
6ef21db
Update pytest.ini
Dreamsorcerer Feb 4, 2024
1a0253d
Fix
Dreamsorcerer Feb 4, 2024
0233cdd
Fix
Dreamsorcerer Feb 4, 2024
1855368
Fix
Dreamsorcerer Feb 4, 2024
10ace82
Update setup.cfg
Dreamsorcerer Feb 4, 2024
3af3d6a
Update pytest.ini
Dreamsorcerer Feb 5, 2024
b6d3c26
Update aiosmtpd/tests/test_server.py
Dreamsorcerer Feb 5, 2024
247f3a5
Update pyproject.toml
Dreamsorcerer Feb 5, 2024
86ab843
Update test_server.py
Dreamsorcerer Feb 5, 2024
b9669ea
Update test_server.py
Dreamsorcerer Feb 5, 2024
b740e4b
Update aiosmtpd/tests/test_server.py
Dreamsorcerer Feb 5, 2024
597c61f
Update test_server.py
Dreamsorcerer Feb 5, 2024
88af3cf
Update test_server.py
Dreamsorcerer Feb 5, 2024
6650c99
Update test_server.py
Dreamsorcerer Feb 5, 2024
0753855
Update test_main.py
Dreamsorcerer Feb 5, 2024
94eda4b
Update aiosmtpd/tests/test_main.py
Dreamsorcerer Feb 5, 2024
1f2c2b6
Update .coveragerc
Dreamsorcerer Feb 5, 2024
7c2e0e1
Update test_server.py
Dreamsorcerer Feb 5, 2024
f4ef727
Update controller.py
Dreamsorcerer Feb 5, 2024
3b1a0a6
Update .coveragerc
Dreamsorcerer Feb 5, 2024
a2d8a52
Update controller.py
Dreamsorcerer Feb 5, 2024
49970ba
Update smtp.py
Dreamsorcerer Feb 5, 2024
7523ef3
Update .coveragerc
Dreamsorcerer Feb 5, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
codecov:
notify:
after_n_builds: 10
10 changes: 10 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# .coveragerc to control coverage.py
[run]
branch = True
omit = aiosmtpd/docs/*

[report]
exclude_also =
^\s*if TYPE_CHECKING:
: \.\.\.(\s*#.*)?$
^ +\.\.\.$
11 changes: 11 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: 2
updates:
- package-ecosystem: pip
directory: "/"
schedule:
interval: daily

- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
22 changes: 22 additions & 0 deletions .github/workflows/auto-merge.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Dependabot auto-merge
on: pull_request_target

permissions:
pull-requests: write
contents: write

jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1.6.0
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
141 changes: 141 additions & 0 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
name: CI

on:
push:
branches:
- master
- '[0-9].[0-9]+' # matches to backport branches, e.g. 3.6
tags: [ 'v*' ]
pull_request:
branches:
- master
- '[0-9].[0-9]+'

jobs:
lint:
name: Linter
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
cache: 'pip'
cache-dependency-path: '**/requirements*.txt'
- name: Install dependencies
uses: py-actions/py-dependency-install@v4
with:
path: requirements-dev.txt
- name: Install itself
run: |
pip install .
- name: Mypy
run: mypy
- name: Flake8
run: python -m flake8 aiosmtpd setup.py housekeep.py release.py
- name: Docs Checking
run: |
# Prepare sphinx and the deps for sphinx extensions
sphinx-build --color -b doctest -d build/.doctree aiosmtpd/docs build/doctest
sphinx-build --color -b html -d build/.doctree aiosmtpd/docs build/html
sphinx-build --color -b man -d build/.doctree aiosmtpd/docs build/man
- name: Other QA Checks
shell: bash
run: |
# Final checks before launching the runners
ver_sed='s/^__version__ = (["'"'"'])(.*)\1/\2/p;d'
verfile="aiosmtpd/__init__.py"
if [[ $GITHUB_REF != refs/heads/master ]]; then
# Fetch master because some test cases need its existence
git fetch --no-tags --prune --no-recurse-submodules --depth=1 origin master:master
fi
pytest -v aiosmtpd/qa
check-manifest -v
- name: Prepare twine checker
run: |
pip install -U build twine wheel
python -m build
- name: Run twine checker
run: |
twine check dist/*

test:
name: Test
strategy:
matrix:
pyver: ['3.8', '3.9', '3.10', '3.11', '3.12']
os: [ubuntu, macos, windows]
include:
- pyver: pypy-3.8
os: ubuntu
runs-on: ${{ matrix.os }}-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python ${{ matrix.pyver }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.pyver }}
cache: 'pip'
cache-dependency-path: '**/requirements*.txt'
- name: Install dependencies
uses: py-actions/py-dependency-install@v4
with:
path: requirements.txt
- name: Run unittests
run: pytest
env:
COLOR: 'yes'
- run: python -m coverage xml
- name: Upload coverage
uses: codecov/codecov-action@v3
with:
fail_ci_if_error: true

check: # This job does nothing and is only used for the branch protection
if: always()

needs: [lint, test]

runs-on: ubuntu-latest

steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}

deploy:
name: Deploy
environment: release
runs-on: ubuntu-latest
needs: [check]
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11
- name: Install dependencies
run:
python -m pip install -U pip wheel setuptools build twine
- name: Build dists
run: |
python -m build
- name: Make Release
uses: aio-libs/create-release@v1.6.6
with:
changes_file: aiosmtpd/docs/NEWS.rst
name: aiosmtpd
version_file: aiosmtpd/__init__.py
github_token: ${{ secrets.GITHUB_TOKEN }}
pypi_token: ${{ secrets.PYPI_API_TOKEN }}
dist_dir: dist
fix_issue_regex: "`#(\\d+) <https://github.com/aio-libs/aiosmtpd/issues/\\1>`"
fix_issue_repl: "(#\\1)"
154 changes: 0 additions & 154 deletions .github/workflows/unit-testing-and-coverage.yml

This file was deleted.

41 changes: 41 additions & 0 deletions .mypy.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
[mypy]
files = aiosmtpd, examples
check_untyped_defs = True
follow_imports_for_stubs = True
#disallow_any_decorated = True
#disallow_any_generics = True
disallow_any_unimported = True
#disallow_incomplete_defs = True
disallow_subclassing_any = True
#disallow_untyped_calls = True
disallow_untyped_decorators = True
#disallow_untyped_defs = True
# TODO(PY312): explicit-override
enable_error_code = ignore-without-code, possibly-undefined, redundant-expr, redundant-self, truthy-bool, truthy-iterable, unused-awaitable
extra_checks = True
implicit_reexport = False
no_implicit_optional = True
pretty = True
show_column_numbers = True
show_error_codes = True
show_error_code_links = True
strict_equality = True
warn_incomplete_stub = True
warn_redundant_casts = True
#warn_return_any = True
warn_unreachable = True
warn_unused_ignores = True

[mypy-aiosmtpd.tests.*]
# TODO: Type tests
ignore_errors = True

[mypy-aiosmtpd.proxy_protocol]
disable_error_code = misc
# TODO: Fix this. Maybe try switching to dataclasses?
#aiosmtpd/proxy_protocol.py:312:9: error: Trying to assign name "error" that is not in "__slots__" of type "aiosmtpd.proxy_protocol.ProxyData" [misc]
# self.error = error_msg
# ^~~~~~~~~~

[mypy-sphinx_rtd_theme.*]
ignore_missing_imports = True
Loading
Loading