Skip to content

[WIP] Add GitHub Actions CI workflow for mboxer#2

Merged
xormania merged 1 commit into
masterfrom
copilot/create-ci-workflow
May 2, 2026
Merged

[WIP] Add GitHub Actions CI workflow for mboxer#2
xormania merged 1 commit into
masterfrom
copilot/create-ci-workflow

Conversation

Copilot AI commented May 2, 2026

Copy link
Copy Markdown
Contributor
  • Create .github/workflows/ci.yml with:
    • Triggers on push to master and PRs targeting master
    • ubuntu-latest runner
    • Python 3.11 and 3.12 matrix
    • Steps: checkout → setup Python → install .[dev] → ruff check → mypy → pytest
    • Well-commented, descriptive job/step names for branch protection status checks
Original prompt

Create a GitHub Actions CI workflow at .github/workflows/ci.yml for the uscient/mboxer Python project.

Requirements

The workflow should:

  • Trigger on:

    • Every push to master
    • Every pull request targeting master
  • Run on ubuntu-latest

  • Use a matrix of Python 3.11 and 3.12 (matching the classifiers in pyproject.toml)

  • Steps:

    1. Checkout code
    2. Set up Python using the matrix version
    3. Install dependencies: pip install -e ".[dev]"
    4. Run ruff linting: ruff check src/
    5. Run mypy type checking: mypy src/
    6. Run pytest: pytest

Project details

  • Package manager: pip with pyproject.toml
  • Dev extras group: .[dev] which includes pytest>=8.0, ruff>=0.5.0, mypy>=1.10
  • Source is in src/mboxer/
  • Tests are in tests/
  • ruff line-length is 100, target is py311 (configured in pyproject.toml)
  • mypy strict is false (configured in pyproject.toml)
  • Python requires >=3.11

Notes

  • The job names should be clear and descriptive so they can be referenced as required status checks in branch protection rules
  • Keep lint, type-check, and test as separate steps within the same job, or split into separate jobs — whichever is cleaner for status check granularity
  • The workflow file should be well-commented

The following is the prior conversation context from the user's chat exploration (may be truncated):

User: Give me a high level overview of this repo

Assistant: ## uscient/mboxer — High-Level Overview

mboxer is a local-first Python CLI tool that transforms Gmail/Google Takeout MBOX exports into structured, AI-ready knowledge assets — primarily targeting NotebookLM, RAG pipelines, and local LLM workflows.


🎯 Core Purpose

Gmail MBOX exports are raw and unwieldy. mboxer bridges that gap by converting them into:

Output Purpose
Markdown source packs Organized by category/year for NotebookLM upload
SQLite database Local, durable index for all messages, threads, classifications
JSONL exports RAG pipelines, embeddings, local LLM tools
CSV exports (planned) Spreadsheet review and auditing

⚙️ Pipeline Stages

The full workflow is a sequential CLI pipeline:

ingest → normalize → classify → security-scan → scrub → review → export
  1. Ingest — Parses .mbox files using Python's mailbox stdlib, with resumable checkpoints and deduplication
  2. Classify — Rule-based categorization (sender, domain, subject keywords) at message or thread level; LLM via Ollama is config-wired but not yet fully connected
  3. Review — Interactive CLI to approve/reject proposed categories
  4. Security scan — Flags sensitive content; configurable redaction of phone numbers, SSNs, credit cards, etc.
  5. Export — Outputs Markdown, JSONL, and manifests; five NotebookLM limit profiles (standardultra_safe)

🗂️ Source Layout

src/mboxer/
  cli.py            # argparse CLI entry point
  ingest.py         # MBOX ingest pipeline
  normalize.py      # message normalization
  classify.py       # rule-based classification
  taxonomy.py       # category management
  db/               # SQLite schema + init helpers
  exporters/        # notebooklm, jsonl, manifest writers
  security/         # scan, scrub, policy
config/             # annotated YAML config example
tests/              # 14 test modules covering all pipeline stages

🔑 Key Design Principles

  • Local-first & privacy-conscious — nothing leaves your machine by default
  • Resumable — large MBOX ingests can be interrupted and continued
  • Multi-account — supports multiple Gmail accounts in one project
  • Inspectable — dry-run export, category review, and local SQLite before any cloud upload
  • NotebookLM-optimized — exports respect source limits with named profiles

📊 Implementation Status

The core pipeline is complete and working. Still in progress:

  • CSV export
  • Full LLM classification via Ollama
  • Local web UI for category review
  • Incremental export tracking
  • PII scrub profiles

Tech stack: Pure Python (≥3.11), SQLite, YAML config, pyproject.toml packaging with optional pdf and dev extras. Licensed under MIT.

User: Evaluate the Repo settings

Assistant: Here's a full evaluation of the repository settings for uscient/mboxer:


✅ What's Configured Well

Setting Status Notes
License ✅ MIT Clearly declared
Description ✅ Set Clear and descriptive
Topics ✅ 14 tags Well-tagged (gmail, rag, notebooklm, mbox, etc.)
Issues enabled ✅ On Good for tracking work
Dependabot ✅ Configured Weekly pip updates, grouped by prod/dev, with commit prefix
Default branch named master Consistent and in use

⚠️ Areas of Concern

🔴 High Priority

| Issue | Detail | Recommendation |
|---|---|--...

This pull request was created from Copilot chat.

@xormania
xormania marked this pull request as ready for review May 2, 2026 19:01
@xormania
xormania merged commit 7a9c1b3 into master May 2, 2026
3 of 4 checks passed
Copilot stopped work on behalf of xormania due to an error May 2, 2026 19:02
Copilot AI requested a review from xormania May 2, 2026 19:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants