mirror of
https://github.com/storytold/filmcraft.git
synced 2026-10-24 01:58:19 -06:00
Fonts: pin craft-fonts bfcbf71; CRAFT_FONTS_REQUIRED fails without CRAFT_FONTS_DIR (#2646)
* Fonts: pin craft-fonts bfcbf71; CRAFT_FONTS_REQUIRED fails without CRAFT_FONTS_DIR craft-fonts main adds Noto Sans CJK SC, Noto Sans Arabic, Noto Sans Thai and Noto Sans Georgian. FilmCraft registers every CRAFT_FONTS entry, so releases pick them up with the pin bump. ATTRIBUTION.md and NOTICE list them. With CRAFT_FONTS_REQUIRED set, crates/text/build.rs errors when CRAFT_FONTS_DIR is unset or empty, not only when it is not a checkout. Refs storytold/craft-libs#197 * Fonts: only CRAFT_FONTS_REQUIRED=1 enables required mode * text: the CRAFT_FONTS_REQUIRED message says unset or empty
This commit is contained in:
@@ -30,6 +30,6 @@ jobs:
|
|||||||
# Intentionally tracked at @main (not SHA-pinned) so org-wide CI improvements, security fixes, and build optimizations propagate without PR churn across all craftapp repos.
|
# Intentionally tracked at @main (not SHA-pinned) so org-wide CI improvements, security fixes, and build optimizations propagate without PR churn across all craftapp repos.
|
||||||
uses: storytold/craft-common-actions/.github/workflows/freebsd.yml@main
|
uses: storytold/craft-common-actions/.github/workflows/freebsd.yml@main
|
||||||
with:
|
with:
|
||||||
craft-fonts-ref: abb83316d96aa59c1cf64784289e378fe9fa5695
|
craft-fonts-ref: bfcbf714e45a3ea8e98f88ab2b7971372a576414
|
||||||
skip-tests: true
|
skip-tests: true
|
||||||
run-package-check: true
|
run-package-check: true
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
app-name: filmcraft
|
app-name: filmcraft
|
||||||
app-title: FilmCraft
|
app-title: FilmCraft
|
||||||
craft-fonts-ref: abb83316d96aa59c1cf64784289e378fe9fa5695
|
craft-fonts-ref: bfcbf714e45a3ea8e98f88ab2b7971372a576414
|
||||||
version: ${{ inputs.version }}
|
version: ${{ inputs.version }}
|
||||||
secrets:
|
secrets:
|
||||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||||
|
|||||||
@@ -130,6 +130,10 @@ carry each font's licence as `OFL-<family>.txt`.
|
|||||||
| BIZ UDPGothic Regular, Bold (Morisawa) | Japanese UI text; Japanese fallback for sans titles (the web build embeds only Regular) | OFL-1.1 |
|
| BIZ UDPGothic Regular, Bold (Morisawa) | Japanese UI text; Japanese fallback for sans titles (the web build embeds only Regular) | OFL-1.1 |
|
||||||
| Shippori Mincho Regular (FONTDASU) | Japanese fallback for serif titles (native builds) | OFL-1.1 |
|
| Shippori Mincho Regular (FONTDASU) | Japanese fallback for serif titles (native builds) | OFL-1.1 |
|
||||||
| BIZ UDMincho Regular (Morisawa) | Japanese fallback for serif titles (native builds) | OFL-1.1 |
|
| BIZ UDMincho Regular (Morisawa) | Japanese fallback for serif titles (native builds) | OFL-1.1 |
|
||||||
|
| Noto Sans CJK SC Regular (Google, Adobe) | Chinese UI text and media names; Chinese fallback for titles (native builds) | OFL-1.1 |
|
||||||
|
| Noto Sans Arabic Regular (Google) | Arabic UI text; Arabic fallback for titles (native builds) | OFL-1.1 |
|
||||||
|
| Noto Sans Thai Regular (Google) | Thai fallback for titles (native builds) | OFL-1.1 |
|
||||||
|
| Noto Sans Georgian Regular (Google) | Georgian fallback for titles (native builds) | OFL-1.1 |
|
||||||
|
|
||||||
## First-party brand marks
|
## First-party brand marks
|
||||||
|
|
||||||
|
|||||||
@@ -17,5 +17,5 @@ Noto Serif font (assets/fonts/NotoSerif-Regular.ttf) — OFL-1.1. See assets/fon
|
|||||||
JetBrains Mono font (assets/fonts/JetBrainsMono-Regular.ttf) — OFL-1.1. See assets/fonts/OFL-JetBrainsMono.txt.
|
JetBrains Mono font (assets/fonts/JetBrainsMono-Regular.ttf) — OFL-1.1. See assets/fonts/OFL-JetBrainsMono.txt.
|
||||||
Builds made with craft-fonts (CRAFT_FONTS_DIR; all official releases) also embed the fonts listed in
|
Builds made with craft-fonts (CRAFT_FONTS_DIR; all official releases) also embed the fonts listed in
|
||||||
https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md (BIZ UDPGothic, Shippori Mincho,
|
https://github.com/storytold/craft-fonts/blob/main/ATTRIBUTION.md (BIZ UDPGothic, Shippori Mincho,
|
||||||
BIZ UDMincho) — OFL-1.1. Their licence texts ship with the packages as OFL-<family>.txt.
|
BIZ UDMincho, Noto Sans CJK SC, Noto Sans Arabic, Noto Sans Thai, Noto Sans Georgian) — OFL-1.1. Their licence texts ship with the packages as OFL-<family>.txt.
|
||||||
Public-domain film and NASA frames and CC0 music shown in README screenshots (docs/images/) — public domain / CC0-1.0. See ATTRIBUTION.md.
|
Public-domain film and NASA frames and CC0 music shown in README screenshots (docs/images/) — public domain / CC0-1.0. See ATTRIBUTION.md.
|
||||||
|
|||||||
+10
-6
@@ -5,7 +5,8 @@
|
|||||||
//! `crates/text`) this embeds every font listed in its
|
//! `crates/text`) this embeds every font listed in its
|
||||||
//! `fonts/manifest.txt` as [`CRAFT_FONTS`](crate::fonts::CRAFT_FONTS); unset, `CRAFT_FONTS` is
|
//! `fonts/manifest.txt` as [`CRAFT_FONTS`](crate::fonts::CRAFT_FONTS); unset, `CRAFT_FONTS` is
|
||||||
//! empty and nothing else changes. A `CRAFT_FONTS_DIR` that is not a checkout is a warning, or an
|
//! empty and nothing else changes. A `CRAFT_FONTS_DIR` that is not a checkout is a warning, or an
|
||||||
//! error with `CRAFT_FONTS_REQUIRED=1` (release builds).
|
//! error with `CRAFT_FONTS_REQUIRED=1` (release builds), which also makes an unset or empty
|
||||||
|
//! `CRAFT_FONTS_DIR` an error.
|
||||||
//!
|
//!
|
||||||
//! Native builds embed every font. The web (wasm32) build embeds only the UI font (BIZ UDPGothic
|
//! Native builds embed every font. The web (wasm32) build embeds only the UI font (BIZ UDPGothic
|
||||||
//! Regular, ~4.5 MB) to stay under the web size budget (Cloudflare serves files up to 25 MiB).
|
//! Regular, ~4.5 MB) to stay under the web size budget (Cloudflare serves files up to 25 MiB).
|
||||||
@@ -18,15 +19,18 @@ fn main() {
|
|||||||
println!("cargo::rerun-if-changed=build.rs");
|
println!("cargo::rerun-if-changed=build.rs");
|
||||||
println!("cargo::rerun-if-env-changed=CRAFT_FONTS_DIR");
|
println!("cargo::rerun-if-env-changed=CRAFT_FONTS_DIR");
|
||||||
println!("cargo::rerun-if-env-changed=CRAFT_FONTS_REQUIRED");
|
println!("cargo::rerun-if-env-changed=CRAFT_FONTS_REQUIRED");
|
||||||
|
let required = std::env::var_os("CRAFT_FONTS_REQUIRED").is_some_and(|v| v == "1");
|
||||||
let mut src = String::from("pub static CRAFT_FONTS: &[CraftFont] = &[\n");
|
let mut src = String::from("pub static CRAFT_FONTS: &[CraftFont] = &[\n");
|
||||||
if let Some(dir) = std::env::var_os("CRAFT_FONTS_DIR").map(PathBuf::from) {
|
match std::env::var_os("CRAFT_FONTS_DIR").filter(|d| !d.is_empty()).map(PathBuf::from) {
|
||||||
match craft_fonts(&dir) {
|
Some(dir) => match craft_fonts(&dir) {
|
||||||
Ok(entries) => src.push_str(&entries),
|
Ok(entries) => src.push_str(&entries),
|
||||||
Err(e) if std::env::var_os("CRAFT_FONTS_REQUIRED").is_some() => {
|
Err(e) if required => println!("cargo::error=CRAFT_FONTS_DIR={}: {e}", dir.display()),
|
||||||
println!("cargo::error=CRAFT_FONTS_DIR={}: {e}", dir.display());
|
|
||||||
}
|
|
||||||
Err(e) => println!("cargo::warning=building without craft-fonts: CRAFT_FONTS_DIR={}: {e}", dir.display()),
|
Err(e) => println!("cargo::warning=building without craft-fonts: CRAFT_FONTS_DIR={}: {e}", dir.display()),
|
||||||
|
},
|
||||||
|
None if required => {
|
||||||
|
println!("cargo::error=CRAFT_FONTS_REQUIRED=1 but CRAFT_FONTS_DIR is unset or empty: point it at a craft-fonts checkout (absolute path)");
|
||||||
}
|
}
|
||||||
|
None => {}
|
||||||
}
|
}
|
||||||
src.push_str("];\n");
|
src.push_str("];\n");
|
||||||
let out = PathBuf::from(std::env::var_os("OUT_DIR").unwrap_or_default()).join("craft_fonts.rs");
|
let out = PathBuf::from(std::env::var_os("OUT_DIR").unwrap_or_default()).join("craft_fonts.rs");
|
||||||
|
|||||||
@@ -89,7 +89,8 @@ Regular, to keep the wasm small). The Japanese ones become the last fallback of
|
|||||||
(`crates/ui-egui/src/theme.rs`, BIZ UDPGothic first) and fallback faces in the text engine (Gothic
|
(`crates/ui-egui/src/theme.rs`, BIZ UDPGothic first) and fallback faces in the text engine (Gothic
|
||||||
for sans text, Mincho for serif text). Without `CRAFT_FONTS_DIR`, `CRAFT_FONTS` is empty and
|
for sans text, Mincho for serif text). Without `CRAFT_FONTS_DIR`, `CRAFT_FONTS` is empty and
|
||||||
FilmCraft uses its bundled and system fonts. A `CRAFT_FONTS_DIR` that is not a checkout is a build
|
FilmCraft uses its bundled and system fonts. A `CRAFT_FONTS_DIR` that is not a checkout is a build
|
||||||
warning, or an error with `CRAFT_FONTS_REQUIRED=1` (release builds set both). Tests on these fonts'
|
warning, or an error with `CRAFT_FONTS_REQUIRED=1` (release builds set both). With
|
||||||
|
`CRAFT_FONTS_REQUIRED=1`, a build without `CRAFT_FONTS_DIR` is an error too. Tests on these fonts'
|
||||||
glyphs skip when it is empty; when you touch fonts, run the gates both with and without it.
|
glyphs skip when it is empty; when you touch fonts, run the gates both with and without it.
|
||||||
|
|
||||||
Chinese media names and track labels use the `Hans` / `Hant` craft-fonts faces after the Japanese
|
Chinese media names and track labels use the `Hans` / `Hant` craft-fonts faces after the Japanese
|
||||||
|
|||||||
+2
-2
@@ -59,8 +59,8 @@ signing jobs are refused, and the draft-release job, which needs them, is skippe
|
|||||||
`filmcraft --version` and `filmcraft-cli --version` print the version from `Cargo.toml`.
|
`filmcraft --version` and `filmcraft-cli --version` print the version from `Cargo.toml`.
|
||||||
|
|
||||||
**Fonts.** Every build job checks out [craft-fonts](https://github.com/storytold/craft-fonts) at a
|
**Fonts.** Every build job checks out [craft-fonts](https://github.com/storytold/craft-fonts) at a
|
||||||
pinned commit (the `ref:` of its craft-fonts checkout step, marked `# bump deliberately`) and builds
|
pinned commit (`craft-fonts-ref` in `.github/workflows/release.yml` and `freebsd.yml`) and builds
|
||||||
with `CRAFT_FONTS_DIR` and `CRAFT_FONTS_REQUIRED=1`, so releases embed its Japanese fonts and fail
|
with `CRAFT_FONTS_DIR` and `CRAFT_FONTS_REQUIRED=1`, so releases embed its fonts and fail
|
||||||
rather than ship without them (the web build embeds only the UI font, to stay small). The packages
|
rather than ship without them (the web build embeds only the UI font, to stay small). The packages
|
||||||
carry each embedded font's licence (`copy_font_licences` in `packaging/env.sh`). Bump the pins
|
carry each embedded font's licence (`copy_font_licences` in `packaging/env.sh`). Bump the pins
|
||||||
deliberately, in every job at once.
|
deliberately, in every job at once.
|
||||||
|
|||||||
Reference in New Issue
Block a user