Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
8842514
chore: Harden security
skupriienko-mailgun Jun 10, 2026
4307c78
build(ci): configure CodeQL, security workflows, and dev environments
skupriienko-mailgun Jun 22, 2026
9480e8c
refactor(core): decouple client into configuration, routing, and endp…
skupriienko-mailgun Jun 22, 2026
a3b5dd1
feat(security): enforce path sanitization, log redaction, and handler…
skupriienko-mailgun Jun 22, 2026
40647d0
feat(dx): introduce fluent payload builders and strict schemas
skupriienko-mailgun Jun 22, 2026
05d77cc
test(suites): reorganize and expand unit, integration, and property t…
skupriienko-mailgun Jun 22, 2026
d669b30
test(fuzz): implement advanced structure-aware and stateful fuzzing s…
skupriienko-mailgun Jun 22, 2026
21f68ef
docs(examples): update examples to use context managers, async, and b…
skupriienko-mailgun Jun 22, 2026
acbf285
docs(release): update CHANGELOG, README, and SECURITY for v1.8.0
skupriienko-mailgun Jun 22, 2026
33c4fb4
docs(release): update CHANGELOG, README
skupriienko-mailgun Jun 22, 2026
ae91cd1
test(perf): update the performance test and benchmarks
skupriienko-mailgun Jun 23, 2026
b54d890
test(perf): update the performance test and benchmarks
skupriienko-mailgun Jun 23, 2026
1773b5e
test(perf): update the performance test
skupriienko-mailgun Jun 23, 2026
275dc9a
docs(perf): update the performance docs
skupriienko-mailgun Jun 23, 2026
1b5711b
Apply suggestions from code review
skupriienko-mailgun Jun 23, 2026
830ac0e
Potential fix for pull request finding 'Use of exit() or quit()'
skupriienko-mailgun Jun 23, 2026
5265c5b
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
6f3062a
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
37747ad
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
c0106ad
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
327fd40
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
e64ddfb
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
ae4ee66
Potential fix for pull request finding 'Empty except'
skupriienko-mailgun Jun 23, 2026
3899f27
build(deps): Bump actions/checkout from 6 to 7
skupriienko-mailgun Jun 24, 2026
6da6bed
chore: replace empty broad exception handlers with explicit handling …
skupriienko-mailgun Jun 24, 2026
a369b51
chore: update ci security jobs, clean up an unused stuff
skupriienko-mailgun Jun 24, 2026
ada04ae
test: fix the logger path
skupriienko-mailgun Jun 24, 2026
0e43cb4
ci(workflows): remove cache
skupriienko-mailgun Jun 24, 2026
5eecae6
build: disable atheris on ci
skupriienko-mailgun Jun 24, 2026
3b65289
test: Replace real clients with mocks
skupriienko-mailgun Jun 24, 2026
3b855bb
test: fix mock as a async coroutine
skupriienko-mailgun Jun 25, 2026
ba02b24
ci(workflows): remove codeql.yml and rely on GitHub's UI-based Defaul…
skupriienko-mailgun Jun 25, 2026
b362c2d
style: address mypy linting issues
skupriienko-mailgun Jun 25, 2026
6ffe8e1
style: address mypy linting issues
skupriienko-mailgun Jun 25, 2026
3b177ab
style: improve type hints
skupriienko-mailgun Jun 25, 2026
1c767bc
chore: set lower bound for types-requests dev dependency
skupriienko-mailgun Jun 25, 2026
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
5 changes: 2 additions & 3 deletions .github/workflows/commit_checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
pre-commit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: '3.13' # Specify a Python version explicitly
Expand All @@ -35,7 +35,7 @@ jobs:
APIKEY: ${{ secrets.APIKEY }}
DOMAIN: ${{ secrets.DOMAIN }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0 # Required for setuptools-scm

Expand All @@ -45,7 +45,6 @@ jobs:
channels: defaults
show-channel-urls: true
environment-file: environment-dev.yaml
cache: 'pip' # Drastically speeds up CI by caching pip dependencies

- name: Install package
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr_validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
contents: read

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0

Expand Down
64 changes: 64 additions & 0 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Continuous Security Verification

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '37 3 * * 0' # Run weekly on Sundays to catch newly published CVEs

permissions:
contents: read

jobs:
static-analysis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.13"
cache: 'pip'
- run: python -m pip install --upgrade pip
- run: pip install ruff bandit mypy pip-audit
# Fast checks
- run: ruff check .
- run: bandit -c pyproject.toml -r mailgun
- run: mypy --strict mailgun

semgrep:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: returntocorp/semgrep-action@v1
with:
config: >-
p/python
p/owasp-top-ten
p/supply-chain
p/command-injection
p/insecure-transport
error: true # Fails CI if issues found

pip-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with: { python-version: "3.13" }
- run: python -m pip install --upgrade pip
- run: pip install pip-audit
- run: pip-audit --strict

osv-scan:
permissions:
actions: read
security-events: write # For Security Tab
contents: read
uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.3.8"
with:
# Explicit root scanning
scan-args: |-
--recursive
./
Loading
Loading