š Google Fonts has become too big to be maintained as a simple community repository. The platform is now an API distributing and serving more than a thousand fonts families, and GF has started to see itself as a proper open-source foundry.
This means several things:
gftools packager
) and generating QA proofs (gftools qa
).google/fonts
repo, the font actually still travels through different servers before appearing on the API. It has often happened that fonts have never got into production ā because they have been forgotten in the sandbox server or somewhere else.This workflow described below was designed so that GF do not lose products during the validation process, to facilitate the validation process, and to keep people updated about the status of different projects. It requires active maintenance and regular updates from team members.
It seemed also important to keep the whole status of the repository in one place, mostly to avoid copy-pasting PR links all the time.Ā GF, therefore, chose a complete Github-based workflow, making extensive use of the issue tracker, the milestones feature, the project boards, and the continuous integration system.
This guide will help team members to understand the validation process of a font family and the actions required from them to help that process.
ā https://google.github.io/fonts/ is a page updated weekly that reports on activity in the google/fonts repo.
</div>
Table of content
Issues from the google/fonts
repository are used to define the Google Fonts production pipeline for team members, and for users to report bugs or suggest new submission ideas.
Since google/fonts
only hosts binaries, and since we want these files to be in sync with the ones in the upstream repositories, onboarders manage the sources and builds from the upstream repo. This link between what happens upstream and what is reported downstream is made through the issues.
Example: https://github.com/google/fonts/issues/3730
The issues should follow these rules:
Milestones are used to have an overview of the upcoming year, and to divide the workload into reasonable charges.
To make a change to the google/fonts
repo, onboarders submit a Pull Request which is then reviewed by a team member. According to the result of this review, the PR is merged or not.
Example: https://github.com/google/fonts/pull/4320
PRs should follow these rules:
PRs and issues are monitored in separate Github project boards.
Each onboarder contracted by GF has a personal project board
They manage their own workload / issue list.
There are only issues in an onboarderās board.
Since PR and issues are linked, it is then easy for an onboarder to check the status of his PR. So no need to add PRs in oneās personal project board.
PRs are added to the Traffic Jam project.
There are only PRs in this project board, as it is meant to monitor the status of the PRās content from submission to publication, knowing that its content is supposed to be pushed to 3 different servers: the developer sandbox, the sandbox, and finally the production Google Font API.
Always add labels to items you want to track.
The combination of labels and project boards allow us to track progress, write the push lists, and build stats using different scripts. Therefore the labels and Traffic Jam board should not change name without also changing the gftools gen-push-lists script.
The labels are extremely important in this workflow. They help communication between users, reviewers and onboarders. Scripts and issue templates are also linked to specific label names to generate reports and statistics, and so names should not change without updating the scripts.
I
Primary: Issue and PR [grey]
New font
, Font upgrade
, Designer profile
, Description/Metadata/OFL
, Font bug
, Request
, Axis Registry
, API/Website/Platform
, Tools/workflow/repo
, Knowledge
II
Secondary:
prioritisation for new fonts [light green]: 1. Commissioned
, 2. Accepted
, 3. Submission
primary script [dark green]: CJK
, Indic
, Arabic
, Icon
ā you can create new label if the script is not there
III
Additional: to specify the type of upgrade [light orange]
Expand glyphset
, Expand styles
, Improve rendering
, Small Fix
, VF Replacement
Status labels are having meaningful colours:
YELLOW | Process can continue to next step
ORANGE | Process in progress
BLUE | Process pending until more information
RED |Ā Process is on hold, fixes required before proceeding
BLACK |Ā Process is blocked and should begin again
Labels also have meaningful prefixes:
-
Submissions: (Issues and PRs)
Ready for review
, In progress
, Upstream is working on it
.
ā-
Result of review: (Issues and PRs)
Usually for font bugs
Bad rendering
, Glyphset Issues
, Needs design work
, Requires axis registration
Usually after reviewing repo/PR:
Needs Meta/Desc/License changes
, Needs upstream resolution
, Regression
, Missing sources
, Has RFN
Needs more info:
Needs confirmation
, Needs Daveās opinion
ā--
Servers status: (Only merged PRs)
Lists:
to sandbox
, to production
Servers:
In sandbox
, Live
Problem after merging:
Blocked
, API Tofu
The google/fonts
repo is linked to a dev-sandbox
. A few hours after a change to the repo (once a PR gets merged for example), this change is reflected on that server.
ā These servers act like steps in a pipeline: the change must be uploaded into the dev-sandbox
before it can be be pushed in the sandbox
. Similarly, a change canāt be pushed to production
(live server) if it hasnāt been pushed to sandbox
first.
Once a week, the lists of changes to push to sandbox
and to production
are generated with the script gftools gen-push-lists: it updates the to_sandbox.txt and to_production.txt files that instruct the engineers team which changes they should push to the different servers.
ā When the changes are added to these lists, we can move the PRs into the corresponding columns (In Sandbox list
, In Production list
).
ā The script uses the labels to categorise correctly the changes in the list files.
When the changes are pushed, they get reviewed again. If validated in sandbox
, they can be pushed to production
.
ā The status label can be changed to to production
.
ā The push to sandbox and production are staggered biweekly, so each week should happen at least on push to one of the server
ā When the changes are pushed to production, the label can be changed to Live
Title: Add My New Font
labels: New font
, Submission
Need's Dave opinion
to check with Dave Crossland (Program manager) if the font is worth being onboarded.Need's Dave opinion
and adds the label Accepted
. He adds the issue to a convenient milestone, and during a quarterly meeting where milestones are assessed, he will assign the issue to an onboarder and it gets added to their project board.In progress
. While doing QA on the font, they notice some design issues that need to be addressed by the designer. They add the label Needs upstream resolution
to the issue to notify that this project is on hold until the issues are resolved by the designer.google/fonts
by making a Pull Request.
They add the PR into the Traffic Jam
project.
They add at least 2 labels to the PR: a category (new
, upgrade
, designer
ā¦) and a status (in progress
, ready for review
ā¦).
Needs confirmation
.Needs upstream resolution
.Ready for review
. Now we go back to the same process as before, but this time the reviewer approves the PR and merge it.Just merged / in transit
of the Traffic Jam
project. A few hours later, the new font will appear in the dev-sandbox
, and if it looks good, the label to sandbox
can be added to signify that this font can be pushed to sandbox.The onboarderās job is done. The font still needs to get through the servers validation process described above, and if everything goes smoothly, the font should be live on Google Fonts after few weeks.
</div>