Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
25e2163
set up GitHub Actions for CI
seanbrar Sep 12, 2024
d42e67c
Merge pull request #1 from seanbrar/feature/ci-setup
seanbrar Sep 12, 2024
1237be4
update Actions for better testing compatibility
seanbrar Sep 12, 2024
a27a96e
alter pytest configured paths to resolve import issues
seanbrar Sep 12, 2024
c3a561c
modify config tests to make them more environment agnostic
seanbrar Sep 12, 2024
a901ca4
update pre-commit hook handling
seanbrar Sep 12, 2024
c4cc01e
update action versions
seanbrar Sep 12, 2024
6492fd6
made test more resilient across environments
seanbrar Sep 12, 2024
32787a7
raise minimum Python version to 3.10
seanbrar Sep 12, 2024
fadf856
increment version to v0.1.1
seanbrar Sep 12, 2024
769506c
add docstrings and adjust formatting/style
seanbrar Mar 23, 2025
35e57d9
reorganize and add detail to roadmap
seanbrar Mar 23, 2025
e934114
expand readme
seanbrar Mar 23, 2025
5140f54
increment version to v0.1.2
seanbrar Mar 23, 2025
3cbd526
Merge branch 'master' into dev
seanbrar Mar 23, 2025
9731f7c
adjust README spacing
seanbrar Mar 25, 2025
d724455
expand project background
seanbrar Mar 27, 2025
69dff9a
chore: update dev infrastructure and dependencies
Jan 24, 2026
280350c
feat: add database and storage support
Jan 24, 2026
730256c
feat: update core logic, notifier, and documentation
Jan 24, 2026
978cfda
test: update existing tests and add tests for db and storage
Jan 24, 2026
e220b50
test: restructure test suite and add integration pipeline test
Jan 24, 2026
6991645
feat: add local arXiv mirror for offline integration testing
Jan 24, 2026
9a4cee5
build: migrate project to uv
Jan 27, 2026
896c352
ci: update workflow to use uv
Jan 27, 2026
532ec45
docs: update installation instructions for uv
Jan 27, 2026
2ea8a93
build: move arxiv to production dependencies
Jan 27, 2026
3c1ffa4
feat: refactor scraper to use arxiv library
Jan 27, 2026
73c7e3a
refactor(tests): apply testing manifesto to reduce suite from 112 to …
Jan 29, 2026
2eb82ef
docs: consolidate testing documentation into TESTING.md
Feb 7, 2026
874a15b
build: prepare for PyPI release as academic-paperweight
Feb 7, 2026
8b26d97
feat: switch to pollux-ai PyPI package with full v1.0 integration (#5)
seanbrar Feb 14, 2026
44e16cf
Refocus v0.2 on stdout digest and atom delivery
Feb 14, 2026
128c5b6
Add AI-first triage and shortlist-based content hydration
Feb 14, 2026
ee1d2c1
Polish CLI with run init doctor and rationale-first digest
Feb 14, 2026
df7314e
Define CLI ergonomics and add focused CLI integration tests
Feb 14, 2026
7e9ef56
Add json delivery max-items and strict doctor mode
Feb 14, 2026
0e0fe7b
Audit docs add quantified roadmap and release workflow
Feb 14, 2026
4238de2
chore(release): bump to v0.2.0 and exclude test mocks
Feb 14, 2026
c34e3f1
Merge master into release/v0.2 to resolve PR #6 conflicts
Feb 14, 2026
e69b20e
ci: run required PR checks on master with py3.10-3.12
Feb 14, 2026
f4809eb
ci: align with main and fix pre-commit failures
Feb 14, 2026
6280ac3
typecheck: align mypy config and analyzer provider typing
Feb 14, 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
40 changes: 13 additions & 27 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,43 +16,29 @@ jobs:
steps:
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Cache pip packages
uses: actions/cache@v4
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt', '**/requirements-dev.txt') }}
restore-keys: |
${{ runner.os }}-pip-

- name: Install production dependencies
run: |
python -m pip install --upgrade pip
pip install --no-cache-dir --prefer-binary -r requirements.txt
enable-cache: true
cache-dependency-glob: "uv.lock"

- name: Install development dependencies
run: |
pip install --no-cache-dir --prefer-binary -r requirements-dev.txt
- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}

- name: Install project in editable mode
run: |
pip install -e .
- name: Install dependencies
run: uv sync --all-extras

- name: Run pre-commit hooks
run: |
pip install pre-commit
pre-commit run --all-files
uv run pre-commit install
uv run pre-commit run --all-files
timeout-minutes: 10

- name: Run Pytest
run: pytest
run: uv run pytest

- name: Run Ruff (linter)
run: ruff check .
run: uv run ruff check .

- name: Run Mypy (type checking)
run: mypy .
run: uv run mypy .
64 changes: 64 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Release

on:
push:
tags:
- "v*"
workflow_dispatch:

jobs:
publish:
name: Build and publish to PyPI
runs-on: ubuntu-latest
environment:
name: pypi
url: https://pypi.org/p/academic-paperweight
permissions:
id-token: write
contents: write

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v5
with:
enable-cache: true
cache-dependency-glob: "uv.lock"

- name: Set up Python
run: uv python install 3.11

- name: Install dependencies
run: uv sync --all-extras

- name: Validate tag matches project version
if: startsWith(github.ref, 'refs/tags/')
run: |
TAG="${GITHUB_REF_NAME}"
VERSION="$(uv run python -c "import tomllib; print(tomllib.load(open('pyproject.toml','rb'))['project']['version'])")"
if [ "v${VERSION}" != "${TAG}" ]; then
echo "Tag ${TAG} does not match project version v${VERSION}"
exit 1
fi

- name: Run lint
run: uv run ruff check src tests

- name: Run tests
run: uv run pytest

- name: Build distribution
run: uv build

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
dist/*.whl
dist/*.tar.gz
generate_release_notes: true

- name: Publish to PyPI
run: uv publish
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
*.log
config.yaml
last_processed_date.txt
data/
artifacts/
.DS_Store
.coverage

# Build artifacts
build/
Expand All @@ -14,4 +18,4 @@ dist/
**/__pycache__
.pytest_cache
.ruff_cache
.mypy_cache
.mypy_cache
3 changes: 2 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ repos:
rev: v1.11.2
hooks:
- id: mypy
additional_dependencies: [types-PyYAML, types-requests]
additional_dependencies: [types-PyYAML, types-requests]
exclude: ^src/mocks/
79 changes: 79 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.2.0] - 2026-02-14

### Added
- Database support with PostgreSQL integration for paper storage
- Local arXiv mirror for offline integration testing
- Comprehensive test suite with integration and unit tests
- Deterministic text digest rendering for stdout/file workflows
- Atom feed rendering for secondary delivery workflows
- AI-first title/abstract triage stage with rationale/score annotations
- Content hydration helper to fetch full text only for shortlisted papers
- Minimalist CLI subcommands: `run`, `init`, and `doctor`
- Dedicated CLI ergonomics reference (`docs/CLI.md`)
- Small CLI workflow integration tests (`run` stdout/atom + `doctor`)
- JSON delivery mode for script-friendly output
- Output capping via `--max-items`
- Strict doctor mode (`doctor --strict`) for release/CI gating
- Trusted publishing workflow for release tags (`.github/workflows/release.yml`)

### Changed
- Migrated project to uv for dependency management
- Refactored scraper to use the official `arxiv` Python library
- Restructured test suite with separate integration and unit test directories
- Updated core logic and notifier components
- CLI delivery modes now support `stdout` (default), `atom`, and optional `email`
- Configuration validation now treats notifier/email as optional unless email delivery is used
- Roadmap and docs rewritten around a simplified v0.2 direction
- Main pipeline now runs metadata triage before expensive content extraction
- `paperweight` now defaults to `run` for backward-compatible invocation
- README/CLI/FAQ docs audited and aligned to current behavior
- Roadmap rewritten with quantifiable usefulness and release metrics

### Fixed
- Improved error handling throughout the codebase

## [0.1.2] - 2025-03-23

### Added
- GitHub Actions CI pipeline for automated testing
- Comprehensive docstrings across the codebase
- Expanded README with detailed background and architecture documentation
- Detailed roadmap documentation

### Changed
- Improved test resilience across different environments
- Updated pre-commit hook handling

### Fixed
- pytest configuration for proper import resolution
- Config tests to be more environment agnostic

## [0.1.1] - 2024-09-12

### Changed
- Increased minimum Python version to 3.10

## [0.1.0] - 2024-XX-XX

### Added
- Initial release
- arXiv paper fetching and filtering
- Keyword-based relevance scoring
- LLM-powered summarization (OpenAI and Gemini)
- Email notification system
- YAML-based configuration

[Unreleased]: https://github.com/seanbrar/paperweight/compare/v0.2.0...HEAD
[0.2.0]: https://github.com/seanbrar/paperweight/compare/v0.1.2...v0.2.0
[0.1.2]: https://github.com/seanbrar/paperweight/compare/v0.1.1...v0.1.2
[0.1.1]: https://github.com/seanbrar/paperweight/compare/v0.1.0...v0.1.1
[0.1.0]: https://github.com/seanbrar/paperweight/releases/tag/v0.1.0
38 changes: 38 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
.PHONY: install test lint typecheck format clean build all

# Development setup
install:
uv sync --all-extras

# Run tests
test:
uv run pytest

# Run tests with coverage
test-cov:
uv run pytest --cov=paperweight --cov-report=term-missing

# Lint code
lint:
uv run ruff check src tests

# Type check
typecheck:
uv run mypy src/paperweight

# Format code
format:
uv run ruff format src tests
uv run ruff check --fix src tests

# Clean build artifacts
clean:
rm -rf build/ dist/ *.egg-info/ .pytest_cache/ .mypy_cache/ .ruff_cache/
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true

# Build distribution
build: clean
uv build

# Run all checks (lint, typecheck, test)
all: lint typecheck test
Loading