1
0
mirror of https://github.com/ryanoasis/nerd-fonts.git synced 2024-12-19 20:12:52 +02:00
nerd-fonts/.github/workflows/font-patcher.yml
Fini Jastrow 189bc8673f CI: Check file checksum and lowestRecPPEM on sample patched font
[why]
We 'manually' patch the font file after `fontforge` created it. This can
go wrong, for example we fail to create a correct new checksum.
Or we fail to patch the correct font property.

[how]
Also build `showttf` from the `fontforge` package and use it to extract
some font properties:
* Check the example patched font file checksum
* Compare the `lowestRecPPEM` of source to patched font file

[note]
`fontforge` set `lowestRecPPEM` always to 8 in generated fonts.
Hack has a value of 6.

Signed-off-by: Fini Jastrow <ulf.fini.jastrow@desy.de>
2022-08-20 18:29:13 +02:00

123 lines
5.2 KiB
YAML

name: "Font-Patcher"
on:
pull_request:
branches: [ master ]
paths:
- 'font-patcher'
- 'src/glyphs/**'
jobs:
tests:
name: font patcher tests
runs-on: ubuntu-latest
strategy:
matrix:
FontForgeRelease: [
{ name: "FontForge 20th Anniversary Edition", version: "20201107", archiveType: "tar.xz" },
{ name: "FontForge 2020 March Release", version: "20200314", archiveType: "tar.xz" },
# @TODO we need to build this FontForge version differently or just skip for now:
# { name: "Februrary 2015 (version after mimimum supported version)", version: "20150228", archiveType: "tar.gz" }
]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup core dependencies
run: |
sudo apt update -y -q
sudo apt install software-properties-common -y -q
sudo apt install python3-fontforge -y -q
- name: Install FontForge
run: |
sudo apt install libjpeg-dev libtiff5-dev libpng-dev libfreetype6-dev libgif-dev libgtk-3-dev libxml2-dev libpango1.0-dev libcairo2-dev libspiro-dev python3-dev ninja-build cmake build-essential gettext libuninameslist-dev -y -q
curl -Lv "https://github.com/fontforge/fontforge/releases/download/${{matrix.FontForgeRelease.version}}/fontforge-${{matrix.FontForgeRelease.version}}.${{matrix.FontForgeRelease.archiveType}}" \
--output "FontForge.${{matrix.FontForgeRelease.archiveType}}"
echo "what files we got::"
ls -al
tar -xf "FontForge.${{matrix.FontForgeRelease.archiveType}}"
cd "$GITHUB_WORKSPACE/fontforge-${{matrix.FontForgeRelease.version}}/"
sudo mkdir build
cd build
sudo cmake -GNinja ..
sudo ninja
sudo ninja install
- name: Compile showttf
run: |
cd "$GITHUB_WORKSPACE/fontforge-${{matrix.FontForgeRelease.version}}/contrib/fonttools"
mkdir build
cd build
cmake -Wno-dev -GNinja ..
ninja showttf
echo "SHOWTTF=$(realpath showttf)" >> $GITHUB_ENV
cd ../../..
- name: Setup additional dependencies
run: |
pip install fonttools --quiet
- name: Set the value for FontForge version check
run: |
echo "FONTFORGE_VERSION=$(fontforge --version 2>&1 | grep Version | awk '{print $NF}')" >> $GITHUB_ENV
- name: Verify FontForge version
run: |
[[ "${{ env.FONTFORGE_VERSION }}" == "${{matrix.FontForgeRelease.version}}" ]] && echo "FontForge version matches expected" || exit 1
- name: Patcher typical test run
run: |
mkdir -p $GITHUB_WORKSPACE/temp/
fontforge --script ./font-patcher src/unpatched-fonts/Hack/Regular/Hack-Regular.ttf \
--complete --quiet --no-progressbars --outputdir $GITHUB_WORKSPACE/temp/
- name: Check if patched font generated
run: |
[ -e "$GITHUB_WORKSPACE/temp/Hack Regular Nerd Font Complete.ttf" ] && echo "File exists" || exit 1
- name: Setup Spot check font information 1
run: |
echo FONT_INFO=$(fc-scan --format "%{family}:%{fullname}:%{style}\n" "$GITHUB_WORKSPACE/temp/Hack Regular Nerd Font Complete.ttf") >> $GITHUB_ENV
# TODO fix issues setting and getting fullname and style with GITHUB_ENV :(
- name: Setup Spot check font information 2
run: |
echo FONT_FAMILY=${{ env.FONT_INFO }} | awk -F':' '{print $1}' >> $GITHUB_ENV
- name: Spot check font information
run: |
echo "FONT_FAMILY was ${{ env.FONT_FAMILY }}"
[[ "${{ env.FONT_FAMILY }}" == "Hack Nerd Font" ]] && echo "Font Family matches expected" || exit 1
- name: Spot check font properties
run: |
${{ env.SHOWTTF }} -c "$GITHUB_WORKSPACE/temp/Hack Regular Nerd Font Complete.ttf" | grep 'File Checksum.*diff=0\s*$' && echo "TTF checksum ok" || exit 1
ORIG_MINPPEM=$(${{ env.SHOWTTF }} -c "src/unpatched-fonts/Hack/Regular/Hack-Regular.ttf" | grep 'lowestppem=' )
PATCH_MINPPEM=$(${{ env.SHOWTTF }} -c "$GITHUB_WORKSPACE/temp/Hack Regular Nerd Font Complete.ttf" | grep 'lowestppem=' )
echo "${ORIG_MINPPEM} == ${PATCH_MINPPEM}"
[[ ${ORIG_MINPPEM} == ${PATCH_MINPPEM} ]] && echo "lowestRecPPEM matches" || exit 1
- name: Patcher monospaced
run: |
mkdir -p $GITHUB_WORKSPACE/temp/
fontforge --script ./font-patcher src/unpatched-fonts/Hack/Regular/Hack-Regular.ttf \
--complete --mono --quiet --no-progressbars --outputdir $GITHUB_WORKSPACE/temp/
- name: Check if patched font generated
run: |
[ -e "$GITHUB_WORKSPACE/temp/Hack Regular Nerd Font Complete Mono.ttf" ] && echo "File exists" || exit 1
- name: Patcher OTF, Bold variant, and RFN compliance
run: |
mkdir -p $GITHUB_WORKSPACE/temp/
fontforge --script ./font-patcher src/unpatched-fonts/CascadiaCode/Bold/CascadiaCode-Bold.otf \
--complete --quiet --no-progressbars --outputdir $GITHUB_WORKSPACE/temp/
- name: Check if patched font generated
run: |
[ -e "$GITHUB_WORKSPACE/temp/Caskaydia Cove Bold Nerd Font Complete.otf" ] && echo "File exists" || exit 1