Rename PrintCraft to PdfCraft (#174)

The app, crates, binaries, bundle id, packaging, icons, screenshots and docs are now
PdfCraft / pdfcraft (repo storytold/pdfcraft). On first launch the desktop app moves the
PrintCraft settings and crash-recovery folders to the new name, and both apps read settings
saved under the old storage key, so upgrades keep recent files, preferences and unsaved work.
The signing test fixtures keep their PrintCraft subject names (they are binary).

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Brandon Thomas
2026-10-07 16:03:57 -04:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 1c78ff479c
commit d3db99818f
351 changed files with 3218 additions and 3216 deletions
+6 -6
View File
@@ -2,7 +2,7 @@ ArtCraft brand assets: license
The ArtCraft name, wordmark and mark (the "ArtCraft Marks"), including every file in this
directory in every color, size and format, are owned by the ArtCraft Team. They are trademarks
and are NOT open source. They are not covered by PrintCraft's MIT OR Apache-2.0 license, and nothing in
and are NOT open source. They are not covered by PdfCraft's MIT OR Apache-2.0 license, and nothing in
that license, in NOTICE or in any other file of this repository grants any right to them.
Permission
@@ -11,7 +11,7 @@ The ArtCraft Team grants a limited, non-exclusive, non-transferable, revocable,
permission to use the ArtCraft Marks only:
1. as part of copies of this repository; and
2. within PrintCraft itself, its documentation and its official builds, to identify PrintCraft as made
2. within PdfCraft itself, its documentation and its official builds, to identify PdfCraft as made
by the ArtCraft team and community and to link to getartcraft.com and its community.
Conditions
@@ -21,17 +21,17 @@ The permission holds only while every one of these is true:
- The marks are used exactly as supplied in this directory. Do not redraw, recolor, crop,
stretch, rotate, animate, outline or add effects to them, extract parts of them, or combine
them with any other name, mark or artwork.
- They are used only in the context of PrintCraft, and only to say that the ArtCraft team makes it.
- They are used only in the context of PdfCraft, and only to say that the ArtCraft team makes it.
They must never suggest that the ArtCraft Team made, sponsors, endorses, certifies or supports
any other product, service, fork, modified version, plug-in, organization or person.
- Neither the marks nor the ArtCraft name appear in the name, logo, icon, domain, social media
handle, app-store listing, advertising or marketing of anything other than PrintCraft.
handle, app-store listing, advertising or marketing of anything other than PdfCraft.
Forks and modified versions
If you distribute or publish a modified version of PrintCraft, or any work derived from it, you must
If you distribute or publish a modified version of PdfCraft, or any work derived from it, you must
remove the ArtCraft Marks from it (or replace them with your own) and must not call it ArtCraft or
present it as an ArtCraft product. You may say, in plain text, that your work is based on PrintCraft by
present it as an ArtCraft product. You may say, in plain text, that your work is based on PdfCraft by
the ArtCraft team. A fork kept only to propose changes back to this repository may keep the marks
unchanged.

Before

Width:  |  Height:  |  Size: 505 KiB

After

Width:  |  Height:  |  Size: 505 KiB

Before

Width:  |  Height:  |  Size: 692 KiB

After

Width:  |  Height:  |  Size: 692 KiB

Before

Width:  |  Height:  |  Size: 459 KiB

After

Width:  |  Height:  |  Size: 459 KiB

Before

Width:  |  Height:  |  Size: 434 KiB

After

Width:  |  Height:  |  Size: 434 KiB

Before

Width:  |  Height:  |  Size: 432 KiB

After

Width:  |  Height:  |  Size: 432 KiB

Before

Width:  |  Height:  |  Size: 543 KiB

After

Width:  |  Height:  |  Size: 543 KiB

Before

Width:  |  Height:  |  Size: 524 KiB

After

Width:  |  Height:  |  Size: 524 KiB

Before

Width:  |  Height:  |  Size: 566 KiB

After

Width:  |  Height:  |  Size: 566 KiB

Before

Width:  |  Height:  |  Size: 455 KiB

After

Width:  |  Height:  |  Size: 455 KiB

Before

Width:  |  Height:  |  Size: 468 KiB

After

Width:  |  Height:  |  Size: 468 KiB

Before

Width:  |  Height:  |  Size: 361 KiB

After

Width:  |  Height:  |  Size: 361 KiB

Before

Width:  |  Height:  |  Size: 820 KiB

After

Width:  |  Height:  |  Size: 820 KiB

Before

Width:  |  Height:  |  Size: 691 KiB

After

Width:  |  Height:  |  Size: 691 KiB

+24 -24
View File
@@ -1,12 +1,12 @@
# Releasing PrintCraft
# Releasing PdfCraft
Every push to the `release` branch runs `.github/workflows/release.yml`. It builds installers for
macOS, Windows, Linux, FreeBSD and the web, signs the ones it has certificates for, and creates or
updates a **draft** GitHub Release named `PrintCraft v<version>`. Nobody sees a draft until a
updates a **draft** GitHub Release named `PdfCraft v<version>`. Nobody sees a draft until a
maintainer publishes it.
The pipeline was ported from PhotoCraft's. User-facing names say **PrintCraft**; files, binaries and
ids stay lowercase (`printcraft-<version>-<platform>-<arch>.<ext>`, `ai.storyteller.printcraft`).
The pipeline was ported from PhotoCraft's. User-facing names say **PdfCraft**; files, binaries and
ids stay lowercase (`pdfcraft-<version>-<platform>-<arch>.<ext>`, `ai.storyteller.pdfcraft`).
## Cutting a release
@@ -18,10 +18,10 @@ ids stay lowercase (`printcraft-<version>-<platform>-<arch>.<ext>`, `ai.storytel
cargo xtask version set 0.3.0 # or 0.3.0-rc.1; updates Cargo.toml and Cargo.lock
```
Commit the change through the normal review flow (see the `Release: PrintCraft v0.2.1` PR).
Commit the change through the normal review flow (see the `Release: PdfCraft v0.2.1` PR).
2. **Merge `main` into `release`** (or fast-forward it) and push. The workflow starts by itself.
3. **Wait for the draft.** When every job has finished (notarization is the slow part), the
Releases page has a draft `PrintCraft v0.3.0` targeting the pushed commit, with every artifact
Releases page has a draft `PdfCraft v0.3.0` targeting the pushed commit, with every artifact
and `SHA256SUMS.txt`. The notes are generated from the merged PRs.
4. **Check it.** Download an installer or two and read the job summaries. A `::warning::` there
means a signing secret was missing and that artifact is unsigned.
@@ -40,21 +40,21 @@ with `cargo xtask version set` before building, so the binaries report it too. T
| Platform | Artifacts | Built on |
|---|---|---|
| macOS 11+ (universal: Apple silicon + Intel) | `printcraft-<v>-macos-universal.dmg`, `printcraft-cli-<v>-macos-universal.zip` | `macos-15` |
| Windows 10+ x64 | `printcraft-<v>-windows-x64.msi`, `printcraft-<v>-windows-x64-portable.zip` | `windows-latest` |
| Windows 10+ x86 (32-bit) | `printcraft-<v>-windows-x86.msi`, `printcraft-<v>-windows-x86-portable.zip` | `windows-latest` |
| Windows 11 on ARM64 | `printcraft-<v>-windows-arm64.msi`, `printcraft-<v>-windows-arm64-portable.zip` | `windows-latest` (cross-compiled) |
| Linux x86_64 | `printcraft-<v>-linux-x86_64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04` |
| Linux aarch64 | `printcraft-<v>-linux-aarch64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04-arm` |
| FreeBSD 14 x86_64 | `printcraft-<v>-freebsd-x86_64.tar.gz` | FreeBSD VM on `ubuntu-latest` |
| Web | `printcraft-web-<v>.zip` (a static site; see [`packaging/web/README.md`](../packaging/web/README.md)) | `ubuntu-latest` |
| macOS 11+ (universal: Apple silicon + Intel) | `pdfcraft-<v>-macos-universal.dmg`, `pdfcraft-cli-<v>-macos-universal.zip` | `macos-15` |
| Windows 10+ x64 | `pdfcraft-<v>-windows-x64.msi`, `pdfcraft-<v>-windows-x64-portable.zip` | `windows-latest` |
| Windows 10+ x86 (32-bit) | `pdfcraft-<v>-windows-x86.msi`, `pdfcraft-<v>-windows-x86-portable.zip` | `windows-latest` |
| Windows 11 on ARM64 | `pdfcraft-<v>-windows-arm64.msi`, `pdfcraft-<v>-windows-arm64-portable.zip` | `windows-latest` (cross-compiled) |
| Linux x86_64 | `pdfcraft-<v>-linux-x86_64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04` |
| Linux aarch64 | `pdfcraft-<v>-linux-aarch64.{AppImage,deb,rpm,tar.gz}` | `ubuntu-22.04-arm` |
| FreeBSD 14 x86_64 | `pdfcraft-<v>-freebsd-x86_64.tar.gz` | FreeBSD VM on `ubuntu-latest` |
| Web | `pdfcraft-web-<v>.zip` (a static site; see [`packaging/web/README.md`](../packaging/web/README.md)) | `ubuntu-latest` |
The ARM64 Windows build is cross-compiled on the x64 runner, so signing and WiX work as for the
other Windows builds; `.github/workflows/windows-arm64.yml` installs and runs it on ARM64 hardware.
Every binary reports its version (`printcraft --version`, `printcraft-cli --version`, *Help ▸ About*).
The workflow sets `PRINTCRAFT_BUILD_SHA` and `PRINTCRAFT_BUILD_DATE` (`packaging/env.sh` fills them in
for local builds): the commit is recorded in the macOS `Info.plist` (`PrintCraftBuildCommit`) and the
Every binary reports its version (`pdfcraft --version`, `pdfcraft-cli --version`, *Help ▸ About*).
The workflow sets `PDFCRAFT_BUILD_SHA` and `PDFCRAFT_BUILD_DATE` (`packaging/env.sh` fills them in
for local builds): the commit is recorded in the macOS `Info.plist` (`PdfCraftBuildCommit`) and the
date in the AppStream metadata. The binaries don't embed the commit yet.
**Fonts:** every job checks out [craft-fonts](https://github.com/storytold/craft-fonts) at the commit
@@ -65,10 +65,10 @@ deliberately.
### macOS
`packaging/macos/package.sh` builds both architectures, joins them with `lipo`, and assembles
`PrintCraft.app` from `Info.plist.in` (bundle id `ai.storyteller.printcraft`, macOS 11+, PDF declared
as a document type with rank Alternate, so PrintCraft is offered under Open With without taking over
`PdfCraft.app` from `Info.plist.in` (bundle id `ai.storyteller.pdfcraft`, macOS 11+, PDF declared
as a document type with rank Alternate, so PdfCraft is offered under Open With without taking over
from Preview). Files opened from Finder arrive as Apple events, which
`apps/printcraft/src/apple_events.rs` receives.
`apps/pdfcraft/src/apple_events.rs` receives.
- **Signing** uses the hardened runtime and a secure timestamp, executable first, then the bundle.
`packaging/macos/import-cert.sh` puts the certificate in a temporary keychain, deleted at the end
@@ -76,7 +76,7 @@ from Preview). Files opened from Finder arrive as Apple events, which
- **Notarization:** the app is zipped and sent with `xcrun notarytool submit --wait`, the ticket is
stapled, and the result is checked with `codesign --verify`, `stapler validate` and `spctl`. The
app ships on a drag-to-Applications DMG, which is signed and notarized too.
- **CLI:** `printcraft-cli` is signed and notarized as a zip. A bare executable can't hold a stapled
- **CLI:** `pdfcraft-cli` is signed and notarized as a zip. A bare executable can't hold a stapled
ticket, so Gatekeeper looks it up online the first time a downloaded copy runs.
Without certificates (locally) the script signs ad-hoc and skips notarization:
@@ -91,9 +91,9 @@ packaging/macos/package.sh --arch aarch64 # quicker, host-only; --arch unive
neither the MSI nor the portable zip needs the Visual C++ redistributable.
- Before packaging, it reads both executables' PE headers: the machine type must match `-Arch`, and
`printcraft.exe` must be a GUI-subsystem program (no console window, #57) while `printcraft-cli.exe`
`pdfcraft.exe` must be a GUI-subsystem program (no console window, #57) while `pdfcraft-cli.exe`
stays a console program.
- `printcraft.wxs` (WiX v5) installs per machine into Program Files with a Start Menu shortcut and an
- `pdfcraft.wxs` (WiX v5) installs per machine into Program Files with a Start Menu shortcut and an
App Paths entry. The MSI version is the numeric `X.Y.Z` (MSI has no pre-release field), and
same-version upgrades are allowed so release candidates replace each other. Icon ids end in `.ico`
or `.exe` (Windows Installer requires it); packaging-lint checks this.
@@ -128,7 +128,7 @@ binaries; check the tarball against `SHA256SUMS.txt`.
### Web
`packaging/web/package.sh` runs `trunk build --release` in `apps/printcraft-web` and zips the site
`packaging/web/package.sh` runs `trunk build --release` in `apps/pdfcraft-web` and zips the site
with sample `_headers` and `.htaccess` files. Hosting (MIME types, compression, caching, iframes) is
covered in [`packaging/web/README.md`](../packaging/web/README.md).