Skip to content

Commit d5c2123

Browse files
Docs, screenshots and header for 2.3; releases are built locally only
1 parent 647b7c8 commit d5c2123

24 files changed

Lines changed: 39 additions & 191 deletions

‎.github/workflows/release.yml‎

Lines changed: 0 additions & 78 deletions
This file was deleted.

‎.github/workflows/tests.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name: Tests
22

3-
# Test only. This workflow never publishes, packs or uploads anything built from SpaceSharp;
4-
# releases come from release.yml (Windows) and release-mac-linux.yml.
3+
# Test only. This is the only workflow: it never publishes, packs or uploads anything built from SpaceSharp.
4+
# Releases are built and signed on the developer's PC with installer\release.ps1.
55

66
on:
77
push:

‎CHANGELOG.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ What changed in each SpaceSharp release, newest first. The 1.x releases are in [
1616

1717
### Under the hood
1818
- The code is three projects: `SpaceSharp.Core` (the file tree, the treemap layout, scanning, saved scans and compare, CSV export, every string and translation, the settings, the looks, the command line; plain .NET 10 with the Win32 calls behind an `IPlatformFiles` interface), `SpaceSharp` (the app, on Avalonia), and the tests, which run on all three desktops. The WPF app that 2.2.x shipped as is gone; git history has it. DEVELOPING.md says what goes where.
19-
- Releases are signed. The Windows downloads (the portable exes, the Setup installers and the MSIs) carry a code signature from a Certum certificate, so SmartScreen learns the publisher over time instead of warning on every version.
19+
- Releases are signed. Every Windows download and every file inside the installers and update packages carries a code signature from a Certum certificate, so Windows shows a verified publisher and SmartScreen learns it over time instead of warning on every version. Releases are built and signed on the developer's PC; GitHub Actions only runs the tests.
2020

2121
## 2.2.0
2222

‎DEVELOPING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,4 @@ Until 2.3.0 the Windows app was a separate WPF project; git history has it. Next
9797

9898
**Name, version and author** come from `SpaceSharp.csproj` and appear in About and in the exe's properties. Tag releases with the bare version number; the update window reads the changelog at that tag.
9999

100-
**Releasing.** Finish the changelog section (take "(unreleased)" off its heading), make sure `<Version>` matches and the version badge at the top of the README says the same (it is a static badge; the live one timed out behind GitHub's image proxy), run `python tools/make-assets.py` if the major.minor changed so the header badge follows, commit, then `git tag 2.1.0 && git push origin main --tags`. The tag starts `.github/workflows/release.yml`, which checks that the tag, the version and the changelog heading agree, then runs `installer/release.ps1` in three stages: Build (tests, the four publishes), Pack (vpk, the MSIs, the 1.x bridge files) and Upload (a draft release). A signed release is made from your own PC, where the certificate is: `.\installer\release.ps1 -Sign <thumbprint> -Upload` builds, signs the app exes, lets vpk sign everything inside the packages plus Setup.exe and Update.exe, signs the branded MSIs, checks every signature, and drafts the release; the tag workflow still runs the tests and a dry build. The thumbprint is the certificate's SHA-1 in certmgr.msc, and the certificate has to be present in the user store while the script runs (SimplySign Desktop signed in, or the card inserted). From the Actions tab the workflow can be run by hand as a dry run: it builds everything but creates no release. A broken run reaches nobody: installed copies only see published releases, and the draft is yours to delete; fix, delete the tag, tag again.
100+
**Releasing.** Finish the changelog section (take "(unreleased)" off its heading), make sure `<Version>` matches and the version badge at the top of the README says the same (it is a static badge; the live one timed out behind GitHub's image proxy), run `python tools/make-assets.py` if the major.minor changed so the header badge follows, commit and push. Then, on the PC with the certificate (SimplySign Desktop signed in, or the card inserted), with `$env:GITHUB_TOKEN` set: `.\installer\release.ps1 -Sign <thumbprint> -Upload`. It runs `installer/release.ps1` in three stages: Build (tests, the four publishes, the app exes signed), Pack (vpk with everything inside the packages plus Setup.exe and Update.exe signed, the branded MSIs signed, the 1.x bridge files, a check of every signature) and Upload (a draft release). The thumbprint is the certificate's SHA-1 in certmgr.msc. Read the draft on GitHub, press Publish, then `git tag 2.3.0 && git push --tags` so the tag marks the released commit. GitHub Actions only runs the tests; nothing is built there. A broken run reaches nobody: installed copies only see published releases, and the draft is yours to delete.

‎README.md‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<p align="center">
66
<b>See where your disk space went.</b><br>
7-
A fast, zoomable treemap of your drives for Windows, in the spirit of <a href="https://www.stardock.com/products/spacemonger/">SpaceMonger</a>.
7+
A fast, zoomable treemap of your drives, in the spirit of <a href="https://www.stardock.com/products/spacemonger/">SpaceMonger</a>.
88
</p>
99

1010
<p align="center">
@@ -13,6 +13,7 @@
1313
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-F5B82E" alt="MIT License"></a>
1414
<img src="https://img.shields.io/badge/Windows-10%20%7C%2011-74A6CC" alt="Windows 10 and 11">
1515
<img src="https://img.shields.io/badge/.NET-10-8C84D6" alt=".NET 10">
16+
<img src="https://img.shields.io/badge/Avalonia-11-8B44AC" alt="Avalonia 11">
1617
</p>
1718

1819
<p align="center">
@@ -28,7 +29,7 @@
2829

2930
Scan a drive, and the whole thing fills the window: folders are frames with a title bar, files are boxes inside them, and the biggest boxes are where your space went. Zoom into any folder, filter in plain words, see what changed since last time, and send what you do not need to the Recycle Bin without leaving the map.
3031

31-
One portable `.exe`, or an installer that updates itself. Free and open source.
32+
One portable `.exe`, or an installer that updates itself. Free and open source, and code-signed. Since 2.3 SpaceSharp is one app for Windows, macOS and Linux, built on [Avalonia](https://avaloniaui.net); the Mac and Linux packages follow in a later release.
3233

3334
## What it does
3435

@@ -40,7 +41,7 @@ One portable `.exe`, or an installer that updates itself. Free and open source.
4041
| **Insights view** | One click swaps the map for the numbers: what is scanned, free and safe to clear; space by file type with its biggest extensions; places that are usually safe to empty (Windows.old, caches, the Recycle Bin, old Downloads) with a checkbox per row and one Recycle button; a histogram of when files were last changed with the oldest big files; the largest folders and files; what grew, shrank and appeared since last scan; and the biggest extensions and where they live. Every row is a click back to the map, filtered to it. |
4142
| **Remembers every scan** | Opens with yesterday's map on screen. Color by change shows what grew, shrank or appeared since last time. |
4243
| **Inspect anything** | Size and share, where the space is inside, donuts by type and by age, and a callout when one thing holds most of a folder. |
43-
| **Fifteen palettes, and your own** | Eight for the dark theme, seven for the light one, twelve hues each. A palette creator makes new ones: generate twelve hues from a base color or set each one by hex or sliders, see them on a sample map as you go, and save. |
44+
| **Thirteen palettes, twelve looks, and your own** | Seven palettes for the dark theme, six for the light one, twelve hues each, and six looks per theme for the window itself (Graphite, Slate, Mocha, Midnight, Carbon, GitHub Dark; Paper, Linen, Mist, Sand, Snow, GitHub Light). A palette creator makes new ones: generate twelve hues from a base color or set each one by hex or sliders, see them on a sample map as you go, and save. |
4445
| **Cleans up safely** | Everything goes to the Recycle Bin and the map updates without a rescan. |
4546

4647
<table align="center">
@@ -71,7 +72,7 @@ For 64-bit Windows 10 and 11 (Windows on ARM runs them through x64 emulation). G
7172
32-bit Windows gets the same three with **x86** in the name: **SpaceSharp-win-x86.exe**, **SpaceSharp-win-x86-Setup.exe** and **SpaceSharp-win-x86.msi**. They update from their own channel, so an x86 install never pulls an x64 package. A 32-bit process has less memory to work with, so a drive with several million files is better scanned with the x64 build.
7273

7374
> [!NOTE]
74-
> The downloads are not code-signed yet, so SmartScreen may show "Windows protected your PC" the first time; click **More info**, then **Run anyway**.
75+
> Every download is code-signed, so Windows shows a verified publisher. SmartScreen may still show "Windows protected your PC" while a new certificate earns its reputation; click **More info**, then **Run anyway**.
7576
>
7677
> SpaceSharp collects no data. The only network requests it makes are the update check and What's new, which read the public release list on GitHub; the portable exe makes neither, and the check can be switched off in Settings.
7778
@@ -103,7 +104,7 @@ Terms combine. **Select matches** (Ctrl+A) selects all of them; Del sends them t
103104
Everything applies at once and is saved. The pages:
104105

105106
- **General**: language, update check, confirm before the Recycle Bin, "Scan with SpaceSharp" in Explorer's right-click menu, and the command-line options.
106-
- **Appearance**: theme (match Windows, light, dark).
107+
- **Appearance**: theme (match the system, light, dark) and the look: six for each theme, the GitHub Dark and GitHub Light ones drawn in GitHub's own grays.
107108
- **Treemap**: a preview map of sample data pinned at the top, then Colors (palette per theme, Color by, custom palettes), Shading (cushion on or off, presets, Depth, Spread, Tone, Fade, Light from), Text and title bars (label size, font, folder and file text colors, outlined labels, title bar padding and tint), Grid and highlight, and Layout (density, bias, padding).
108109
- **Map**: size measure (file size or size on disk), free space, merge single-folder chains, hover details, filter layout, side panel, animated zoom.
109110
- **Scanning**: fast NTFS scan, names to leave out, reopen the last scan, how long saved scans are kept, hidden and system files, hard links counted once.
@@ -164,14 +165,14 @@ Nothing leaves the machine except the update check against GitHub Releases, whic
164165

165166
## Building
166167

167-
Windows 10 or 11 and the [.NET 10 SDK](https://dotnet.microsoft.com/download). Open `SpaceSharp.sln` in Rider or Visual Studio, or:
168+
The [.NET 10 SDK](https://dotnet.microsoft.com/download) on Windows, macOS or Linux. Open `SpaceSharp.sln` in Rider or Visual Studio, or:
168169

169170
```powershell
170171
dotnet run --project .\SpaceSharp\SpaceSharp.csproj
171172
dotnet test
172173
```
173174

174-
The only NuGet dependency is Velopack, for the installer and updates. `SpaceSharp.Tests` covers what does not need a screen: layout and grouping, the filter parser, the panel's numbers, formatting, and the tree operations behind delete and free space. Every push runs them on GitHub Actions. Pushing a version tag (`git tag 2.3.0 && git push --tags`) makes the release workflow run the tests, publish the builds, pack the installers and MSIs and create the GitHub release as a draft. The code-signing certificate lives on the developer's PC, so `installer\sign-draft.ps1 -Sign <thumbprint>` is run there next: it downloads the draft's exes and MSIs, signs them, uploads them back and rewrites the checksums; then the draft is read and published. `installer\release.ps1 -Sign <thumbprint> -Upload` does the whole thing locally instead, with every file signed, when the workflow is not an option. The Mac and Linux packages, once they are ready to ship, come from the release-mac-linux workflow, run by hand against the tag afterwards. `installer\release.ps1` without `-Upload` is the same build for your own PC, when you want files to try on another machine. Portable, Portable-x86 and Small (needs the .NET Desktop Runtime) exes come from the publish profiles in `SpaceSharp/Properties/PublishProfiles`; the script builds the x64 and x86 channels side by side (`-NoX86` skips the second).
175+
The app is `SpaceSharp` (Avalonia, drawn with Skia) on top of `SpaceSharp.Core` (plain .NET: the tree, the layout, scanning, scan files, strings, settings, looks). The NuGet dependencies are Avalonia and Velopack, for the installer and updates. `SpaceSharp.Tests` covers what does not need a screen: layout and grouping, the filter parser, the panel's numbers, formatting, and the tree operations behind delete and free space. Every push runs them on GitHub Actions, on Windows, Linux and macOS; that is all the Actions do. A release is built on the developer's PC, where the code-signing certificate is: `installer\release.ps1 -Sign <thumbprint> -Upload` runs the tests, publishes the builds, packs the installers and MSIs, signs every file, checks the signatures and creates the GitHub release as a draft, which is read and published by hand; the version tag is pushed afterwards. `installer\release.ps1` without `-Upload` is the same build for your own PC, when you want files to try on another machine. The Mac and Linux packages are not built yet. Portable, Portable-x86 and Small (needs the .NET Desktop Runtime) exes come from the publish profiles in `SpaceSharp/Properties/PublishProfiles`; the script builds the x64 and x86 channels side by side (`-NoX86` skips the second).
175176

176177
How the scanner, layout, renderer, filter and updater work, and where to add a palette, a file type or a translation, is in [DEVELOPING.md](DEVELOPING.md).
177178

@@ -189,6 +190,6 @@ How the scanner, layout, renderer, filter and updater work, and where to add a p
189190

190191
## Credits and license
191192

192-
Squarified treemaps by Bruls, Huizing and van Wijk (2000). Inspired by [SpaceMonger](https://www.stardock.com/products/spacemonger/). Interface icons are [Lucide](https://lucide.dev) (ISC license; see THIRD-PARTY.md). The color-blind safe palette is Okabe and Ito's.
193+
Squarified treemaps by Bruls, Huizing and van Wijk (2000). Inspired by [SpaceMonger](https://www.stardock.com/products/spacemonger/). Built with [Avalonia UI](https://avaloniaui.net) and [SkiaSharp](https://github.com/mono/SkiaSharp) on .NET 10, in the [Inter](https://rsms.me/inter/) typeface, with [Velopack](https://velopack.io) for the installer and updates. Interface icons are [Lucide](https://lucide.dev). The color-blind safe palette is Okabe and Ito's. Licenses for all of it are in [THIRD-PARTY.md](THIRD-PARTY.md), and About › Credits in the app says the same.
193194

194195
[MIT License](LICENSE). Made by ClearanceClarence.

‎SECURITY.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Only the latest release receives fixes. Please check that the problem is still p
3030

3131
## Downloads and signing
3232

33-
Release builds are produced by `installer/release.ps1` from a tagged commit, and the GitHub Actions workflow on the same tag runs the tests. Each release lists its assets on the Releases page; download from there or through winget (`ClearanceClarence.SpaceSharp`), not from third-party download sites, which repackage at their own pace.
33+
Release builds are produced by `installer/release.ps1` on the developer's PC and code-signed with a Certum certificate (Windows shows the publisher on every download); the commit they come from is tagged with the version. GitHub Actions only runs the tests. Each release lists its assets on the Releases page; download from there or through winget (`ClearanceClarence.SpaceSharp`), not from third-party download sites, which repackage at their own pace.
3434

3535
The downloads are not code-signed yet, so SmartScreen may show "Windows protected your PC" the first time; choose More info, then Run anyway. If you want to verify a download before running it, compare its SHA-256 (`Get-FileHash .\SpaceSharp-win-x64.exe` in PowerShell) with the line for it in `SHA256SUMS.txt`, which every release carries as an asset. Once a code-signing certificate is in place the installers and exes will carry a signature you can check in the file's Properties › Digital Signatures, and this file will say so.
3636

‎THIRD-PARTY.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ On Windows the scanner, the Recycle Bin, the title bar colors and the drive dete
4242
## Used to build and test, not shipped
4343

4444
- **xUnit** 2.9 (Apache License 2.0), **xunit.runner.visualstudio** (Apache License 2.0) and **Microsoft.NET.Test.Sdk** (MIT): the test project, `SpaceSharp.Tests`.
45-
- **GitHub Actions**: `actions/checkout`, `actions/setup-dotnet` and `actions/upload-artifact` (MIT), in `.github/workflows`.
45+
- **GitHub Actions**: `actions/checkout` and `actions/setup-dotnet` (MIT), in `.github/workflows/tests.yml`.
4646
- **Windows SDK** `signtool.exe` for code signing (Microsoft Software License Terms), called by `installer/release.ps1`.
4747

4848
## Used for the website, the screenshots and the brand files, not shipped

‎docs/header.png‎

8.6 KB
Loading

‎docs/screenshot.png‎

300 Bytes
Loading

‎docs/shot-about.png‎

-4.69 KB
Loading

0 commit comments

Comments
 (0)