Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
9 changes: 8 additions & 1 deletion .github/workflows/beta-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
python-version: '3.13'
cache: 'pip'

- name: Install System Dependencies (Linux)
Expand All @@ -49,6 +49,13 @@ jobs:
shell: bash
run: mypy NullifyPDF.py --ignore-missing-imports --no-error-summary 2>&1 | head -50 || true

- name: Resolve beta suffix from tag
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
TAG="${GITHUB_REF#refs/tags/}"
echo "NULLIFYPDF_BETA_SUFFIX=${TAG#*-}" >> "$GITHUB_ENV"

- name: Build
run: python build_local.py

Expand Down
11 changes: 11 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,17 @@ jobs:
--pattern "NullifyPDF_v*_Ubuntu.deb" \
--pattern "NullifyPDF_v*_Fedora.rpm"

- name: Strip beta suffix from filenames
run: |
cd stable-assets
for f in *; do
new="$(echo "$f" | sed -E 's/-beta\.[0-9]+//')"
if [ "$f" != "$new" ]; then
mv "$f" "$new"
fi
done
ls -la

- name: Create Stable Release
uses: softprops/action-gh-release@v3
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.12'
python-version: '3.13'
cache: 'pip' # CACHE RIPRISTINATA!

- name: Install System Dependencies (Linux)
Expand Down
8 changes: 4 additions & 4 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ doc.save("output.pdf", deflate=True)

**Key Constraints:**

- ✅ PyMuPDF wheels are pre-compiled → **requires Python 3.12**
- ✅ PyMuPDF wheels are pre-compiled → **requires Python 3.13**
- ✅ `doc.get_text()` is CPU-bound → run in worker thread
- ✅ Metadata destruction is binary-level → cannot undo after export
- ✅ Digital signatures invalidated after redaction
Expand Down Expand Up @@ -435,7 +435,7 @@ python NullifyPDF.py

# macOS/Linux (Bash)
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

**Effect:** Log level changes from `INFO` to `DEBUG`, includes full stack traces.
Expand All @@ -457,7 +457,7 @@ python3.12 NullifyPDF.py
**Steps:**

1. Detect OS (Windows/macOS/Linux)
2. Create virtual environment with Python 3.12
2. Create virtual environment with Python 3.13
3. Upgrade pip, setuptools, wheel
4. Install requirements.txt dependencies
5. Download spaCy models (EN + IT)
Expand Down Expand Up @@ -619,7 +619,7 @@ NullifyPDF/
1. **Enable debug mode:**
```bash
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

2. **Check logs:** `~/.nullifypdf/logs/nullifypdf.log`
Expand Down
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ e questo progetto aderisce a [Semantic Versioning](https://semver.org/spec/v2.0.

## [Unreleased]

## [2.0.7] - 2026-07-14

### 🔧 Internals

- **Migrazione a Python 3.13**: Il runtime richiesto passa da Python 3.12 a Python 3.13. PyMuPDF 1.28.0 pubblica wheel `abi3` (`cp310-abi3`) forward-compatibili che coprono nativamente Python 3.13, rimuovendo il precedente vincolo di compatibilità.
- Aggiornati i workflow CI/CD (`test_build.yml`, `beta-release.yml`) per compilare con Python 3.13.
- Aggiornata tutta la documentazione (README, DEVELOPMENT, ARCHITECTURE, CONTRIBUTING, TROUBLESHOOTING, USER_GUIDE, GUIDA_UTENTE) e `setup_env.py` per riflettere il nuovo requisito.
- Verificata l'intera suite di test (11/11) e una build completa (PyInstaller) su Python 3.13 in ambiente isolato prima del merge.

## [2.0.6] - 2026-07-06

### ⚡ Optimized (Dependencies)
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ git commit -m "feat(ai): add IBAN detection to Presidio pipeline"
git commit -m "fix(export): resolve memory doubling in forensic scrubbing"

# Documentation
git commit -m "docs: update installation guide for Python 3.12"
git commit -m "docs: update installation guide for Python 3.13"

# Performance
git commit -m "perf(allowlist): implement O(1) exact-match lookup"
Expand Down Expand Up @@ -279,7 +279,7 @@ python NullifyPDF.py

# macOS/Linux (Bash)
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

---
Expand Down Expand Up @@ -351,7 +351,7 @@ feature/your-feature (your work)

## 🎓 Learning Resources

- **Python 3.12** — [docs.python.org](https://docs.python.org/3.12/)
- **Python 3.13** — [docs.python.org](https://docs.python.org/3.13/)
- **PySide6** — [doc.qt.io/qtforpython](https://doc.qt.io/qtforpython/)
- **PyMuPDF** — [pymupdf.io](https://pymupdf.io/)
- **spaCy** — [spacy.io](https://spacy.io/)
Expand Down
14 changes: 7 additions & 7 deletions DEVELOPMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
Complete guide for developers setting up a local development environment and contributing to NullifyPDF.

> [!IMPORTANT]
> Requires **Python 3.12**. Older versions are not compatible with PyMuPDF wheels.
> Requires **Python 3.13**. Older versions are not compatible with PyMuPDF wheels.

---

Expand All @@ -13,7 +13,7 @@ Before starting, verify you have:

| 📦 Requirement | 💾 Space | 📝 Notes |
| ----------------------- | ------- | --------------------------------------------- |
| **Python 3.12** | 150 MB | [Download](https://www.python.org/downloads/) |
| **Python 3.13** | 150 MB | [Download](https://www.python.org/downloads/) |
| **Git** | 50 MB | [Download](https://git-scm.com/) |
| **Virtual Environment** | 2 GB | `.venv/` auto-created by setup script |
| **Disk Space** | 3 GB | Dependencies + spaCy models |
Expand All @@ -30,17 +30,17 @@ git clone https://github.com/overwrite00/NullifyPDF.git
cd NullifyPDF
```

### 2️⃣ Verify Python 3.12
### 2️⃣ Verify Python 3.13

```bash
# Windows
py -3.12 --version
py -3.13 --version

# macOS/Linux
python3.12 --version
python3.13 --version
```

Should output: `Python 3.12.x`
Should output: `Python 3.13.x`

### 3️⃣ Run Automated Setup

Expand Down Expand Up @@ -338,7 +338,7 @@ python NullifyPDF.py

# macOS/Linux
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

**Effect:** Logs verbose output to `~/.nullifypdf/logs/nullifypdf.log`
Expand Down
2 changes: 1 addition & 1 deletion GUIDA_UTENTE.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ python NullifyPDF.py
### macOS/Linux (Bash)
```bash
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

**Effetto**: Il programma creerà log più dettagliati con stacktrace completi in:
Expand Down
2 changes: 1 addition & 1 deletion NullifyPDF.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
)
from PySide6.QtCore import Qt, QThread, QObject, Signal, Slot, QRectF, QPointF, QMutex, QMutexLocker

__version__ = "2.0.6"
__version__ = "2.0.7"


def setup_logging() -> logging.Logger:
Expand Down
30 changes: 15 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
![GitHub Release](https://img.shields.io/github/v/release/overwrite00/NullifyPDF?style=flat-square&color=1fb2e0)
![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/overwrite00/NullifyPDF/release.yml?style=flat-square&label=build)
![GitHub License](https://img.shields.io/github/license/overwrite00/NullifyPDF?style=flat-square&color=blue)
![Python Version](https://img.shields.io/badge/python-3.12-blue?style=flat-square&logo=python)
![Python Version](https://img.shields.io/badge/python-3.13-blue?style=flat-square&logo=python)

<p align="center">
<img src="images/NullifyPDF.png" alt="NullifyPDF Logo" width="500">
Expand Down Expand Up @@ -63,7 +63,7 @@ To keep NullifyPDF lightweight, 100% offline, and secure, be aware of these tech
### 📋 System Requirements

```
✅ Python 3.12 (required for PyMuPDF wheel compatibility)
✅ Python 3.13 (required for PyMuPDF wheel compatibility)
✅ 2 GB disk space (dependencies + spaCy models)
✅ 4 GB RAM minimum (8 GB recommended for large PDFs)
```
Expand All @@ -80,9 +80,9 @@ To keep NullifyPDF lightweight, 100% offline, and secure, be aware of these tech

Download the latest pre-compiled executable from [Releases](https://github.com/overwrite00/NullifyPDF/releases):

- **Windows:** `NullifyPDF_v2.0.6_Windows.exe`
- **macOS:** `NullifyPDF_v2.0.6_macOS.app`
- **Linux:** `nullifypdf_2.0.6_amd64.deb` or `.rpm`
- **Windows:** `NullifyPDF_v2.0.7_Windows.exe`
- **macOS:** `NullifyPDF_v2.0.7_macOS.app`
- **Linux:** `nullifypdf_2.0.7_amd64.deb` or `.rpm`

No installation needed on Windows/macOS — just run. Linux users: `sudo dpkg -i nullifypdf_*.deb`

Expand All @@ -98,14 +98,14 @@ No installation needed on Windows/macOS — just run. Linux users: `sudo dpkg -i
cd NullifyPDF
```

2. **Verify Python 3.12**
2. **Verify Python 3.13**

```bash
# Windows
py -3.12 --version
py -3.13 --version

# macOS/Linux
python3.12 --version
python3.13 --version
```

3. **Run automated setup** (recommended)
Expand All @@ -128,7 +128,7 @@ No installation needed on Windows/macOS — just run. Linux users: `sudo dpkg -i

# macOS/Linux (Bash)
source .venv/bin/activate
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

</details>
Expand All @@ -140,22 +140,22 @@ The repository includes cross-platform Python scripts for developers:
<details>
<summary><strong>🔧 setup_env.py — Environment Setup</strong></summary>

Configures development environment with Python 3.12, virtual environment, and NLP models.
Configures development environment with Python 3.13, virtual environment, and NLP models.

```bash
python setup_env.py
```

**What it does:**
- Detects OS (Windows/macOS/Linux)
- Creates `.venv` with Python 3.12
- Creates `.venv` with Python 3.13
- Installs `requirements.txt` dependencies
- Downloads spaCy models (English, Italian, both)
- Runs smoke tests to verify installation

**Automatic OS detection:**
- Windows: Uses `py -3.12` launcher
- macOS/Linux: Uses `python3.12` directly
- Windows: Uses `py -3.13` launcher
- macOS/Linux: Uses `python3.13` directly

</details>

Expand All @@ -172,7 +172,7 @@ python build_local.py
- Cleans temporary directories
- Auto-detects your OS
- Reads version dynamically from code
- Generates named executable: `NullifyPDF_v2.0.6_Windows.exe`
- Generates named executable: `NullifyPDF_v2.0.7_Windows.exe`

**Linux bonus:** On Ubuntu/Fedora, automatically builds `.deb` and `.rpm` packages in `dist/`

Expand Down Expand Up @@ -229,7 +229,7 @@ See [SECURITY.md](./SECURITY.md) for responsible disclosure and privacy details.

| Technology | Purpose |
| ---------------------- | --------------------------------------------------- |
| **Python 3.12** | Core language (required for PyMuPDF compatibility) |
| **Python 3.13** | Core language (required for PyMuPDF compatibility) |
| **PySide6 (Qt6)** | Modern dark-mode GUI with multi-threading |
| **PyMuPDF (fitz)** | High-performance PDF manipulation |
| **Microsoft Presidio** | PII (Personally Identifiable Information) detection |
Expand Down
10 changes: 5 additions & 5 deletions TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Common issues and how to fix them.

Before diving in, verify these basics:

- ✅ Python 3.12 installed? Run: `python --version` (or `python3.12 --version`)
- ✅ Python 3.13 installed? Run: `python --version` (or `python3.13 --version`)
- ✅ NullifyPDF running? Check: Can you open a PDF?
- ✅ Debug mode enabled? Set: `NULLIFYPDF_DEBUG=true`
- ✅ Logs checked? Look in: `~/.nullifypdf/logs/nullifypdf.log`
Expand Down Expand Up @@ -136,7 +136,7 @@ Enable debug mode and check logs:

```bash
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

Then try export again. Upload `~/.nullifypdf/logs/nullifypdf.log` to GitHub issue.
Expand Down Expand Up @@ -297,7 +297,7 @@ PDF contains unusual characters or encoding.
If still occurring:

1. Try on different PDF (test with simple document)
2. Check Python version: `python --version` (should be 3.12)
2. Check Python version: `python --version` (should be 3.13)
3. Report on GitHub with:
- Python version
- Error message
Expand Down Expand Up @@ -384,7 +384,7 @@ C:\Users\<username>\.nullifypdf\logs\nullifypdf.log

```bash
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

Logs:
Expand All @@ -399,7 +399,7 @@ Logs:

```bash
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

Logs:
Expand Down
2 changes: 1 addition & 1 deletion USER_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ python NullifyPDF.py

```bash
export NULLIFYPDF_DEBUG=true
python3.12 NullifyPDF.py
python3.13 NullifyPDF.py
```

</details>
Expand Down
Loading
Loading