Skip to content

Commit

Permalink
Set up build pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
hfhchan committed May 1, 2024
1 parent d214fa6 commit 9776a88
Show file tree
Hide file tree
Showing 5 changed files with 128 additions and 0 deletions.
60 changes: 60 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# This is a basic workflow to help you get started with Actions

name: Build font

# Controls when the workflow will run
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
push:
branches:
- main

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
font-builder:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v4

- name: Set env ZIP file name
id: zip-name
shell: bash
# Set the archive name to repo name + "-assets" e.g "MavenPro-assets"
run: echo "ZIP_NAME=$(echo '${{ github.repository }}' | awk -F '/' '{print $2}')-fonts" >> $GITHUB_ENV

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'

- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install gftools
- name: Build font
run: |
cd source
bash build.sh
- name: Archive artifacts
uses: actions/upload-artifact@v3
with:
name: ${{ env.ZIP_NAME }}
path: fonts

- name: Upload font
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: Upload compiled fonts
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# python virtual environment for installing gftools
fontenv

# auto generated file by gftools
source/build.ninja
source/.ninja_log
3 changes: 3 additions & 0 deletions source/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
rm fonts/*.otf
node clean-ufo.mjs
gftools builder source/config.yaml
55 changes: 55 additions & 0 deletions source/clean-ufo.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import { readdirSync, readFileSync, writeFileSync } from "node:fs";

const a = readdirSync("./source/CactusClassicalSerif-Regular.ufo", {
withFileTypes: true,
}).filter((o) => o.isFile());
const b = readdirSync("./source/CactusClassicalSerif-Regular.ufo/glyphs", {
withFileTypes: true,
}).filter((o) => o.isFile());

for (const file of a) {
const path = `${file.path}/${file.name}`;
let data = readFileSync(path, "utf-8");
if (data.charCodeAt(0) === 0xfeff) {
data = data.slice(1);
writeFileSync(path, data);
}
}

for (const file of b) {
const path = `${file.path}/${file.name}`;
let data = readFileSync(path, "utf-8");
if (data.charCodeAt(0) === 0xfeff) {
data = data.slice(1);
writeFileSync(path, data);
}
}

let fontinfo = readFileSync(
"./source/CactusClassicalSerif-Regular.ufo/fontinfo.plist",
"utf-8"
);

if (!fontinfo.includes("<key>encodingID</key>")) {
fontinfo = fontinfo.replace(
new RegExp(`<key>platformID</key>\\n\\s+<integer>3</integer>`),
"<key>platformID</key><integer>3</integer><key>encodingID</key><integer>10</integer>"
);
writeFileSync(
"./source/CactusClassicalSerif-Regular.ufo/fontinfo.plist",
fontinfo
);
}

let features = readFileSync(
"./source/CactusClassicalSerif-Regular.ufo/features.fea",
"utf-8"
);

if (features.includes("@\\BASE")) {
features = features.replace(/@\\BASE.*/s, "");
writeFileSync(
"./source/CactusClassicalSerif-Regular.ufo/features.fea",
features
);
}
4 changes: 4 additions & 0 deletions source/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
sources:
- CactusClassicalSerif-Regular.ufo
familyName: "Cactus Classical Serif"
removeOutlineOverlaps: false

0 comments on commit 9776a88

Please sign in to comment.