Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
16 changes: 16 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
version: 2
updates:
# GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
groups:
actions:
patterns:
- "*"
# Python
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
99 changes: 99 additions & 0 deletions .github/workflows/release-python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Python Wheels

on:
push:
branches: ["main"]
tags:
- "**"
pull_request:
workflow_dispatch:

concurrency:
group: wheels-${{ github.ref }}
cancel-in-progress: true

defaults:
run:
shell: bash -eux {0}

jobs:

build_dist:
name: Build Distribution Files
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- uses: actions/setup-python@v5
with:
# Build sdist on lowest supported Python
python-version: '3.9'

- name: Install build
run: |
python -m pip install build

- name: build the dist files
run: |
python -m build .

- name: Upload the dist files
uses: actions/upload-artifact@v4
with:
name: dist-${{ github.run_id }}
path: ./dist/*.*

test_dist:
needs: [build_dist]
name: Test Distribution Files
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false

- uses: actions/setup-python@v5
with:
# Build sdist on lowest supported Python
python-version: '3.9'

- name: Download the dists
uses: actions/download-artifact@v4
with:
name: dist-${{ github.run_id }}
path: dist/

- name: Test the sdist
run: |
cd dist
pip install *.tar.gz
python -c "import flask_pymongo"
pip uninstall -y flask_pymongo

- name: Test the wheel
run: |
cd dist
pip install *.whl
python -c "import flask_pymongo"
pip uninstall -y flask_pymongo

publish:
# https://packaging.python.org/en/latest/guides/publishing-package-distribution-releases-using-github-actions-ci-cd-workflows/#publishing-the-distribution-to-pypi
needs: [test_dist]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
environment: release
permissions:
id-token: write
steps:
- name: Download the dists
uses: actions/download-artifact@v4
with:
name: dist-${{ github.run_id }}
path: dist/
- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error

action is not pinned to a hash (required by blanket policy)
107 changes: 107 additions & 0 deletions .github/workflows/test-python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
name: Python Tests

on:
push:
branches: ["main"]
pull_request:

concurrency:
group: tests-${{ github.ref }}
cancel-in-progress: true

defaults:
run:
shell: bash -eux {0}

env:
MIN_PYTHON: "3.9"
MIN_MONGODB: "4.0"
MAX_MONGODB: "8.0"

jobs:
static:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
- name: Install uv
uses: astral-sh/setup-uv@v5

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
with:
enable-cache: true
python-version: ${{ matrix.python-version }}
- uses: extractions/setup-just@v3

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
- run: just install
- run: just lint
- run: just docs
- run: just doctest
Comment on lines +22 to +38

Check warning

Code scanning / zizmor

default permissions used due to no permissions: block Warning test

default permissions used due to no permissions: block
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
fail-fast: false
name: CPython ${{ matrix.python-version }}-${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
- name: Install uv
uses: astral-sh/setup-uv@v5

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
with:
enable-cache: true
python-version: ${{ matrix.python-version }}
- uses: extractions/setup-just@v3

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
- name: Start MongoDB on Linux
if: ${{ startsWith(runner.os, 'Linux') }}
uses: supercharge/[email protected]

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
with:
mongodb-version: ${{ env.MAX_MONGODB }}
mongodb-replica-set: test-rs
- name: Start MongoDB on MacOS
if: ${{ startsWith(runner.os, 'macOS') }}
run: |
brew tap mongodb/brew
brew install mongodb/brew/mongodb-community@${MAX_MONGODB}
brew services start mongodb-community@${MAX_MONGODB}
- name: Start MongoDB on Windows
if: ${{ startsWith(runner.os, 'Windows') }}
shell: powershell
run: |
mkdir data
mongod --remove
mongod --install --dbpath=$(pwd)/data --logpath=$PWD/mongo.log
net start MongoDB
- run: just install
- run: just test
Comment on lines +39 to +79

Check warning

Code scanning / zizmor

default permissions used due to no permissions: block Warning test

default permissions used due to no permissions: block

build-min:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
- name: Install uv
uses: astral-sh/setup-uv@v5

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
with:
enable-cache: true
python-version: ${{ env.MIN_PYTHON }}
- uses: extractions/setup-just@v3

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
- name: Install uv
uses: astral-sh/setup-uv@v5

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
with:
enable-cache: true
python-version: ${{ env.MIN_PYTHON }}
- uses: extractions/setup-just@v3

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
- uses: supercharge/[email protected]

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error test

action is not pinned to a hash (required by blanket policy)
with:
mongodb-version: ${{ env.MIN_MONGODB }}
mongodb-replica-set: test-rs
- name: Run unit tests with minimum dependency versions
run: |
uv sync --python=${MIN_PYTHON} --resolution=lowest-direct
just test
32 changes: 32 additions & 0 deletions .github/workflows/zizmor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: GitHub Actions Security Analysis with zizmor

on:
push:
branches: ["main"]
pull_request:
branches: ["**"]

jobs:
zizmor:
name: zizmor latest via Cargo
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup Rust
uses: actions-rust-lang/setup-rust-toolchain@v1

Check failure

Code scanning / zizmor

action is not pinned to a hash (required by blanket policy) Error

action is not pinned to a hash (required by blanket policy)
- name: Get zizmor
run: cargo install zizmor
- name: Run zizmor
run: zizmor --format sarif . > results.sarif
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
category: zizmor
87 changes: 66 additions & 21 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,22 +1,67 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.7.3
hooks:
- id: ruff
args: [ --fix ]
- id: ruff-format

- repo: https://github.com/djlint/djLint
rev: v1.36.3
hooks:
- id: djlint-reformat-django
- id: djlint-django
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
- id: check-toml
- id: check-yaml
- id: debug-statements
- id: end-of-file-fixer
- id: forbid-new-submodules
- id: trailing-whitespace

# We use the Python version instead of the original version which seems to require Docker
# https://github.com/koalaman/shellcheck-precommit
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0.1
hooks:
- id: shellcheck
name: shellcheck
args: ["--severity=warning"]
stages: [manual]

- repo: https://github.com/sirosen/check-jsonschema
rev: 0.31.0
hooks:
- id: check-github-workflows
args: ["--verbose"]

- repo: https://github.com/codespell-project/codespell
rev: "v2.3.0"
hooks:
- id: codespell
args: ["-L", "nd"]
stages: [manual]

- repo: https://github.com/adamchainz/blacken-docs
rev: "1.19.1"
hooks:
- id: blacken-docs
additional_dependencies: [black==24.*]

- repo: https://github.com/pre-commit/pygrep-hooks
rev: "v1.10.0"
hooks:
- id: rst-backticks
- id: rst-directive-colons
- id: rst-inline-touching-normal

- repo: https://github.com/hukkin/mdformat
rev: 0.7.21
hooks:
- id: mdformat
# Optionally add plugins
additional_dependencies:
- mdformat-gfm

- repo: https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev: v0.9.1
hooks:
# Run the linter.
- id: ruff
args: [ --fix, --show-fixes ]
# Run the formatter.
- id: ruff-format
28 changes: 27 additions & 1 deletion justfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,28 @@
docs_build := "docs/_build"
sphinx_opts:= "-d " + docs_build + "/doctrees docs"

# Default target executed when no arguments are given.
[private]
default:
echo 'Hello, world!'
@just --list

install:
uv sync
uv run pre-commit install

test *args:
uv run pytest {{args}}

lint:
uv run pre-commit run --hook-stage manual --all-files

docs:
uv run sphinx-build -T -b html {{sphinx_opts}} {{docs_build}}

doctest:
uv run python -m doctest -v examples/wiki/wiki.py
uv run sphinx-build -E -b doctest {{sphinx_opts}} {{docs_build}}/doctest
uv run sphinx-build -b linkcheck {{sphinx_opts}} {{docs_build}}/linkcheck

typing:
uv run mypy --install-types --non-interactive .
Loading