googlefonts / gftools

Misc tools for working with the Google Fonts library
Apache License 2.0
242 stars 71 forks source link

Inconsistently gftools-gen-stat and "compress" swap position in the build order #1015

Open aaronbell opened 1 month ago

aaronbell commented 1 month ago

A client running one of my builder scripts has been encountering an inconsistent issue where the "gftools-gen-stat" command and "compress" commands switch places in the build order. This causes a fail as the variable font has not been saved to the output location before builder tries to compress it to a webfont.

build.ninja:

# buildVariable: Build a variable font from a source file
rule buildVariable
  command = $
      /Users/aaronbell/Documents/CJK/venv/bin/python3.12 $
      -m gftools.builder.jobrunner fontmake --output-path $out -o variable $
      $fontmake_type $in $args $stamp
  description = buildVariable

# fix: Run gftools-fix
rule fix
  command = $
      /Users/aaronbell/Documents/CJK/venv/bin/python3.12 $
      -m gftools.builder.jobrunner gftools-fix-font -o $out $args $in $stamp
  description = fix

# buildStat: Build a STAT table from one or more source files
rule buildSTAT-operation
  command = gftools-gen-stat --out $tempdir $args -- $in && mv $finalfile $
      $out $stamp
rule buildSTAT-postprocess
  command = gftools-gen-stat --inplace $args -- $in $stamp

# compress: Compress to webfont
rule compress
  command = $
      /Users/aaronbell/Documents/CJK/venv/bin/python3.12 $
      -m gftools.builder.jobrunner fonttools ttLib.woff2 compress -o $out $
      $in $stamp
  description = compress
aaronbell commented 1 month ago
. venv/bin/activate; gftools builder sources/traditional/configFF.yaml; 
[1/34] instantiateUfo 
fontmake -i CJK FF Bold -o ufo -m merged_ufo/CJKFF.designspace --ufo-structure=json --output-dir merged_ufo/instance_ufos 
[2/34] instantiateUfo 
fontmake -i CJK FF Regular -o ufo -m merged_ufo/CJKFF.designspace --ufo-structure=json --output-dir merged_ufo/instance_ufos 
[3/34] instantiateUfo 
fontmake -i CJK FF Medium -o ufo -m merged_ufo/CJKFF.designspace --ufo-structure=json --output-dir merged_ufo/instance_ufos 
[4/34] instantiateUfo 
fontmake -i CJK FF Light -o ufo -m merged_ufo/CJKFF.designspace --ufo-structure=json --output-dir merged_ufo/instance_ufos 
[5/34] instantiateUfo 
fontmake -i CJK FF Black -o ufo -m merged_ufo/CJKFF.designspace --ufo-structure=json --output-dir merged_ufo/instance_ufos 
[6/34] buildVariable 
fontmake --output-path /var/folders/5p/x3cfp8q94wb3f6x9m4076sf40000gq/T/tmpfv6p2yep -o variable -m merged_ufo/CJKFF.designspace --filter ... --filter FlattenComponentsFilter --filter DecomposeTransformedComponentsFilter 
[7/34] fix 
gftools-fix-font -o ../../fonts/FF/traditional/variable/CJKFF[wght].ttf /var/folders/5p/x3cfp8q94wb3f6x9m4076sf40000gq/T/tmpfv6p2yep 
[8/34] compress 
FAILED: ../../fonts/FF/traditional/webfonts/CJKFF[wght].woff2  
/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/bin/python3.12 -m gftools.builder.jobrunner fonttools ttLib.woff2 compress -o '../../fonts/FF/traditional/webfonts/CJKFF[wght].woff2' '../../fonts/FF/traditional/variable/CJKFF[wght].ttf'  

Command failed: 
fonttools ttLib.woff2 compress -o ../../fonts/FF/traditional/webfonts/CJKFF[wght].woff2 ../../fonts/FF/traditional/variable/CJKFF[wght].ttf 

Processing ../../fonts/FF/traditional/variable/CJKFF[wght].ttf => ../../fonts/FF/traditional/webfonts/CJKFF[wght].woff2 
Traceback (most recent call last): 
  File "/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/bin/fonttools", line 8, in <module> 
    sys.exit(main()) 
             ^^^^^^ 
  File "/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/lib/python3.12/site-packages/fontTools/__main__.py", line 31, in main 
    runpy.run_module(mod, run_name="__main__") 
  File "<frozen runpy>", line 229, in run_module 
  File "<frozen runpy>", line 88, in _run_code 
  File "/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/lib/python3.12/site-packages/fontTools/ttLib/woff2.py", line 1683, in <module> 
    sys.exit(main()) 
             ^^^^^^ 
  File "/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/lib/python3.12/site-packages/fontTools/ttLib/woff2.py", line 1677, in main 
    subcommand(**options) 
  File "/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/lib/python3.12/site-packages/fontTools/ttLib/woff2.py", line 1516, in compress 
    font = TTFont(input_file, recalcBBoxes=False, recalcTimestamp=False) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "/Users/aaronbell/Documents/CJK-latin-update_20240802TestMakeFile2/venv/lib/python3.12/site-packages/fontTools/ttLib/ttFont.py", line 150, in __init__ 
    file = open(file, "rb") 
           ^^^^^^^^^^^^^^^^ 
FileNotFoundError: [Errno 2] No such file or directory: '../../fonts/FF/traditional/variable/CJKFF[wght].ttf' 

[9/34] gftools-gen-stat --inplace  -- '../../fonts/...4wb3f6x9m4076sf40000gq/T/tmpnib8ejj2.buildStatstamp 
Saving font to ../../fonts/FF/traditional/variable/CJKFF[wght].ttf