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
37 changes: 35 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ jobs:
with:
name: dist-packages
path: dist/
if-no-files-found: error
retention-days: 7

version-check:
Expand Down Expand Up @@ -242,6 +243,19 @@ jobs:
python-version: "3.11"
cache: pip

- name: Download dist-packages artifact
uses: actions/download-artifact@v4
with:
name: dist-packages
path: dist

- name: Verify release artifacts exist
run: |
if ! ls -1 dist/* >/dev/null 2>&1; then
echo "dist artifacts missing after download" >&2
exit 1
fi

- name: Extract changelog section for this version
id: changelog
run: |
Expand Down Expand Up @@ -303,6 +317,7 @@ jobs:
tag_name: ${{ steps.changelog.outputs.tag }}
name: "mac-deep-cleaner ${{ steps.changelog.outputs.tag }}"
body_path: release_notes.md
files: dist/*
draft: false
prerelease: false
env:
Expand All @@ -322,20 +337,37 @@ jobs:
permissions:
contents: write # needed to push the commit
steps:
- name: Checkout develop
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: develop
fetch-depth: 1
persist-credentials: true

- name: Check develop branch exists
id: develop_check
run: |
if git ls-remote --heads origin develop | grep -q develop; then
echo "exists=true" >> "$GITHUB_OUTPUT"
else
echo "exists=false" >> "$GITHUB_OUTPUT"
echo "Develop branch not found; skipping auto-bump."
fi

- name: Checkout develop
if: steps.develop_check.outputs.exists == 'true'
run: |
git fetch --depth=1 origin develop
git checkout -B develop FETCH_HEAD

- name: Set up Python 3.11
if: steps.develop_check.outputs.exists == 'true'
uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip

- name: Bump patch version in pyproject.toml
if: steps.develop_check.outputs.exists == 'true'
id: bump
run: |
python - <<'EOF'
Expand Down Expand Up @@ -368,6 +400,7 @@ jobs:
EOF

- name: Commit and push version bump
if: steps.develop_check.outputs.exists == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,4 @@ __marimo__/

# Streamlit
.streamlit/secrets.toml
docs/PYPI_PUBLISHING.md
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

All notable changes to **mac-deep-cleaner** will be documented in this file.

## v2.0.1 (2026-05-22)

### Added
- APFS clone-aware duplicate detection (opt-in) with sampling profiles
- Duplicate export fields for logical vs physical wasted space when available

### Changed
- Duplicates CLI output shows physical group counts and estimated wasted space

## v2.0.0 (2026-05-14)

### Added
Expand Down
4 changes: 2 additions & 2 deletions Formula/mac-deep-cleaner.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ class MacDeepCleaner < Formula

desc "Professional macOS cleanup CLI with safe undo, reports, and scanners"
homepage "https://github.com/NK2552003/Mac-Cleaner"
url "https://files.pythonhosted.org/packages/source/m/mac-deep-cleaner/mac-deep-cleaner-1.0.0.tar.gz"
sha256 "REPLACE_WITH_PYPI_SDIST_SHA256"
url "https://files.pythonhosted.org/packages/source/m/mac-deep-cleaner/mac-deep-cleaner-2.0.1.tar.gz"
sha256 "NONE_FOR_NOW"
license "MIT"

depends_on "python@3.12"
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

[![PyPI Version](https://img.shields.io/pypi/v/mac-deep-cleaner.svg)](https://pypi.org/project/mac-deep-cleaner/)
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/license-Apache%202.0-green.svg)](LICENSE)
[![License](https://img.shields.io/badge/license-Apache%202.0-green.svg)](https://github.com/NK2552003/Mac-Cleaner/blob/main/LICENSE)
[![macOS 10.15+](https://img.shields.io/badge/macOS-10.15+-silver.svg)](https://www.apple.com/macos/)
[![PyPI Downloads](https://static.pepy.tech/personalized-badge/mac-deep-cleaner?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=ORANGE&left_text=downloads)](https://pepy.tech/projects/mac-deep-cleaner)

Expand Down Expand Up @@ -82,10 +82,10 @@ Comprehensive guides for every use case:

| Document | Description |
|----------|-------------|
| **[Features Guide](docs/FEATURES.md)** | Complete list of all 60+ features with examples |
| **[Command Reference](docs/COMMAND_REFERENCE.md)** | Detailed CLI documentation for every command |
| **[Architecture Guide](docs/ARCHITECTURE.md)** | Internal structure, modules, and extension points |
| **[PyPI Publishing](docs/PYPI_PUBLISHING.md)** | Build and publish instructions |
| **[Features Guide](https://github.com/NK2552003/Mac-Cleaner/blob/main/docs/FEATURES.md)** | Complete list of all 60+ features with examples |
| **[Command Reference](https://github.com/NK2552003/Mac-Cleaner/blob/main/docs/COMMAND_REFERENCE.md)** | Detailed CLI documentation for every command |
| **[Architecture Guide](https://github.com/NK2552003/Mac-Cleaner/blob/main/docs/ARCHITECTURE.md)** | Internal structure, modules, and extension points |
| **[PyPI Publishing](https://github.com/NK2552003/Mac-Cleaner/blob/main/docs/PYPI_PUBLISHING.md)** | Build and publish instructions |

---

Expand All @@ -96,7 +96,7 @@ Comprehensive guides for every use case:
- **General Junk** — Caches, logs, crash reports, `.DS_Store`, Xcode artifacts, package manager caches
- **Developer Junk** — `node_modules`, `venv`, build outputs, coverage dirs (opt-in)
- **Global Dev Caches** — `~/.npm`, `~/.gradle`, `~/.m2`, `~/.cargo`, `~/.nuget` (opt-in)
- **Duplicate Finder** — SHA-256 hashing with two-phase optimization
- **Duplicate Finder** — SHA-256 hashing with two-phase optimization, optional APFS clone-aware estimates
- **Large File Scanner** — Find files ≥100 MB, categorized by type
- **Broken Symlink Detector** — Scans Homebrew, `/usr/local`, `~/bin`, and more

Expand Down Expand Up @@ -436,13 +436,13 @@ We welcome contributions! Please read our contributing guidelines before submitt

Copyright © 2024 Mac Deep Cleaner Contributors

Licensed under the [Apache License 2.0](LICENSE).
Licensed under the [Apache License 2.0](https://github.com/NK2552003/Mac-Cleaner/blob/main/LICENSE).

---

## Support

- **Documentation:** [docs/](docs/)
- **Documentation:** [docs/](https://github.com/NK2552003/Mac-Cleaner/tree/main/docs)
- **Issues:** [GitHub Issues](https://github.com/NK2552003/Mac-Cleaner/issues)
---

Expand All @@ -451,7 +451,7 @@ Licensed under the [Apache License 2.0](LICENSE).
**Made with ❤️ for the macOS community**

[⭐ Star this repo](https://github.com/NK2552003/Mac-Cleaner)
[Read the COMMAND REFERENCE](docs/COMMAND_REFERENCE.md)
[Read the COMMAND REFERENCE](https://github.com/NK2552003/Mac-Cleaner/blob/main/docs/COMMAND_REFERENCE.md)
[Report an issue](https://github.com/NK2552003/Mac-Cleaner/issues)

</div>
42 changes: 24 additions & 18 deletions checklist.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
# Mac Deep Cleaner v2.x Feature Checklist
## Checklist

Date: 2026-05-11
### Optimization
- [ ] Profile duplicate detection and hashing hot paths
- [ ] Reduce redundant filesystem stats during scans
- [ ] Tune scan batching and progress update frequency

## Additional (not yet scheduled)
- [ ] Purgeable space reclaimer (src/scanners/purgeable.py)
- [ ] Installer and PKG file hunter (src/scanners/installer_hunter.py)
- [ ] DNS cache flush (src/core/dns_cache.py)
- [ ] Font cache rebuild (src/core/font_cache.py)
- [ ] Spotlight re-index (src/core/spotlight.py)
- [ ] Sleep and power optimizer (src/core/power_optimizer.py)
- [ ] App update checker (src/core/update_checker.py)
- [ ] PKG receipt manager (src/core/pkg_receipts.py)
- [ ] Xcode derived data cleaner (src/scanners/xcode_cleaner.py)
- [ ] Weekly digest report (src/reporting/weekly_digest.py)
- [ ] Cleaning impact score (src/reporting/impact_score.py)
- [ ] Interactive TUI app picker (src/core/tui_picker.py)
- [ ] Multi-Mac config sync (src/core/config_sync.py)
- [ ] Time Machine backup guard (src/core/time_machine_guard.py)
- [ ] Restore checksum verification (src/core/restore_checksums.py)
### CLI Visuals
- [ ] Refresh duplicate finder table layout for clarity
- [ ] Add consistent status icons and color palette
- [ ] Improve spacing and headings in Rich panels

### Issue Fixes
- [ ] Audit recent bug reports and reproduce top 3
- [ ] Add regression tests for resolved issues
- [ ] Validate error handling for permission-denied paths

### CLI Gaps
- [ ] Add `dashboard` to the top-level subcommand list docstring
- [ ] Align scan `--profile` help text with supported profiles (beginner/developer/professional/designer/student/children)
- [ ] Add `--no-save-history` (and wire into scan/clean) to disable history persistence
- [ ] Add a non-interactive mode to skip first-run profile prompt (default to beginner)

### Safety & Consistency
- [ ] Use safety validation + undo staging for duplicate deletions (avoid raw `unlink`)
- [ ] Make scan `--dry-run` either set global dry-run or remove to avoid no-op confusion
Loading
Loading