mirror of
https://github.com/ryanoasis/nerd-fonts.git
synced 2024-12-19 20:12:52 +02:00
189bc8673f
[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>
123 lines
5.2 KiB
YAML
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
|