Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
e4296c3
Add the Weft brief and the approved sketch 0.1
claude Oct 26, 2026
9abed59
Add the Weft generator for phase 1
claude Oct 26, 2026
7f1b57b
Add tests for the generator
claude Oct 26, 2026
0aee6e3
Build static fonts and check them with Fontspector
claude Oct 26, 2026
2d0715d
Add the phase 1 proof and the sketch comparison
claude Oct 26, 2026
6a882a5
Add the CI workflow
claude Oct 26, 2026
d2608ff
Set the licences and update the status
claude Oct 26, 2026
75fb01f
Add stand-in fonts for the site
claude Oct 26, 2026
3edf65e
Add the site build script
claude Oct 26, 2026
22505ea
Add the site pages, styles and scripts
claude Oct 26, 2026
c8ecc71
Add the workflow that deploys the site to Pages
claude Oct 26, 2026
2028aee
Move the Weft files into weft/
claude Oct 26, 2026
97588ac
Add the upstream Plus Jakarta Sans sources
claude Oct 26, 2026
18cbcb8
Rename the family and set the line metrics
claude Oct 26, 2026
340c8f2
Make the Lurus and Lancip alternates the default forms
claude Oct 26, 2026
797db5d
Add the build, checks, proofs, tests and CI for Sans
claude Oct 26, 2026
6b49537
Add the machine-made Sans 0.1 fonts and proofs
claude Oct 26, 2026
084fba5
Add the Sans licence, credits, status and release notes
claude Oct 26, 2026
9bee093
Build Weft from stroke pieces that interpolate
claude Oct 26, 2026
1ace146
Add the readability gate, proof sheets and the 0.1 CI
claude Oct 26, 2026
c5741fb
Add the Weft 0.1 fonts and proofs
claude Oct 26, 2026
0a92283
Write the Weft 0.1 notes
claude Oct 26, 2026
d271b5e
Merge sans/v0.1 into release/v0.1
claude Oct 26, 2026
4c43c99
Merge site/specimen into release/v0.1
claude Oct 26, 2026
ad0c5eb
Set the Sans line ascender to 906, the same as Weft 0.1
claude Oct 26, 2026
dc028e4
Build Sans again with the 906 ascender and track fonts/ without -f
claude Oct 26, 2026
8061e40
Build the site from the committed fonts only
claude Oct 26, 2026
a839c4b
Make the straight forms the only Sans defaults
claude Oct 26, 2026
5c62709
Use a fixed SOURCE_DATE_EPOCH for the Sans build
claude Oct 26, 2026
060e381
Add the root files and the release workflow for 0.1
claude Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 122 additions & 0 deletions .github/scripts/package_release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
#!/usr/bin/env bash
# Make the release files for one family or for the site.
# Usage: .github/scripts/package_release.sh weft|sans|site VERSION OUT_DIR
# VERSION is the version from the tag, for example 0.1.0.
# OUT_DIR receives the zip file and the single files to attach.
# Run from the repository root, after the build and the checks.
# For weft, OUT_DIR/readability.json must exist already (the release
# workflow writes it with weft/tools/readability.py --gate).
set -euo pipefail

fam="${1:?family: weft, sans or site}"
version="${2:?version, for example 0.1.0}"
out="${3:?output folder}"
mkdir -p "$out"
out="$(cd "$out" && pwd)"
# Release notes per minor version: 0.1.0 and 0.1.1 use RELEASE-NOTES-0.1.md.
notes_version="${version%.*}"
stage="$(mktemp -d)"
trap 'rm -rf "$stage"' EXIT

need() {
for f in "$@"; do
if [ ! -s "$f" ]; then
echo "error: $f is missing or empty." >&2
exit 1
fi
done
}

# Zip with fixed file times and a sorted file list, so the zip is the
# same for the same input files.
make_zip() {
local dir="$1" zip="$2"
(cd "$dir" && find . -exec touch -h -d "@${SOURCE_DATE_EPOCH:-1792972800}" {} + \
&& find . -type f | LC_ALL=C sort | sed 's|^\./||' | zip -X -q -@ "$zip")
}

case "$fam" in
weft)
name="machine-made-weft-${version}"
need "fonts/weft/variable/MachineMadeWeft[FRAG,wght].ttf" \
"fonts/weft/webfonts/MachineMadeWeft[FRAG,wght].woff2" \
"fonts/weft/webfonts/MachineMadeWeft-Regular.woff2" \
"fonts/weft/webfonts/MachineMadeWeft-Bold.woff2" \
weft/OFL.txt "weft/RELEASE-NOTES-${notes_version}.md" "$out/readability.json"
mkdir -p "$stage/$name"
cp -r fonts/weft/variable fonts/weft/ttf fonts/weft/otf fonts/weft/webfonts "$stage/$name/"
cp weft/OFL.txt "$stage/$name/OFL.txt"
cp "weft/RELEASE-NOTES-${notes_version}.md" "$stage/$name/RELEASE-NOTES.md"
cp "$out/readability.json" "$stage/$name/readability.json"
{
echo "# machine-made Weft ${version}"
echo
echo "A grid-built monospace made by code. Axes: wght 100 to 900, FRAG 0 to 100."
echo
echo "- variable/: the variable font (TTF)"
echo "- ttf/, otf/: nine static weights at FRAG 0"
echo "- webfonts/: WOFF2 for the web (variable, Regular, Bold)"
echo "- readability.json: the OCR readability report of this release"
echo "- RELEASE-NOTES.md: what is in this release"
echo
echo "Licence: SIL Open Font License 1.1, Reserved Font Name \"machine-made\" (OFL.txt)."
echo "Source: https://github.com/machine-made/type"
echo "Specimen: https://machine-made.github.io/type/weft/"
} > "$stage/$name/README.md"
make_zip "$stage" "$out/$name.zip"
cp "fonts/weft/webfonts/MachineMadeWeft[FRAG,wght].woff2" \
fonts/weft/webfonts/MachineMadeWeft-Regular.woff2 \
fonts/weft/webfonts/MachineMadeWeft-Bold.woff2 \
"fonts/weft/variable/MachineMadeWeft[FRAG,wght].ttf" "$out/"
;;
sans)
name="machine-made-sans-${version}"
need "fonts/sans/variable/MachineMadeSans[wght].ttf" \
"fonts/sans/variable/MachineMadeSans-Italic[wght].ttf" \
"fonts/sans/webfonts/MachineMadeSans[wght].woff2" \
"fonts/sans/webfonts/MachineMadeSans-Italic[wght].woff2" \
sans/OFL.txt "sans/RELEASE-NOTES-${notes_version}.md"
mkdir -p "$stage/$name"
cp -r fonts/sans/variable fonts/sans/ttf fonts/sans/otf fonts/sans/webfonts "$stage/$name/"
cp sans/OFL.txt "$stage/$name/OFL.txt"
# The release notes link to a proof image in the repository. In the zip
# the link has no target, so point it to GitHub.
sed 's|(\.\./proofs/|(https://github.com/machine-made/type/blob/main/proofs/|g' \
"sans/RELEASE-NOTES-${notes_version}.md" > "$stage/$name/RELEASE-NOTES.md"
{
echo "# machine-made Sans ${version}"
echo
echo "A reading sans, upright and italic, wght 200 to 800."
echo "machine-made Sans is based on Plus Jakarta Sans by Gumpita Rahayu, Tokotype."
echo
echo "- variable/: the two variable fonts (TTF)"
echo "- ttf/, otf/: seven static weights per style"
echo "- webfonts/: WOFF2 of the variable fonts"
echo "- RELEASE-NOTES.md: what is in this release"
echo
echo "Licence: SIL Open Font License 1.1, Reserved Font Name \"machine-made\" (OFL.txt)."
echo "Source: https://github.com/machine-made/type"
echo "Specimen: https://machine-made.github.io/type/sans/"
} > "$stage/$name/README.md"
make_zip "$stage" "$out/$name.zip"
cp "fonts/sans/webfonts/MachineMadeSans[wght].woff2" \
"fonts/sans/webfonts/MachineMadeSans-Italic[wght].woff2" \
"fonts/sans/variable/MachineMadeSans[wght].ttf" \
"fonts/sans/variable/MachineMadeSans-Italic[wght].ttf" "$out/"
;;
site)
name="machine-made-type-site-${version}"
need site/_site/index.html site/_site/data/readability.json
mkdir -p "$stage/$name"
cp -r site/_site/. "$stage/$name/"
make_zip "$stage" "$out/$name.zip"
;;
*)
echo "error: unknown family $fam (use weft, sans or site)." >&2
exit 1
;;
esac

(cd "$out" && sha256sum -- * | LC_ALL=C sort -k2 > "$stage/SHA256SUMS" && mv "$stage/SHA256SUMS" SHA256SUMS)
echo "Release files in $out:"
ls -l "$out"
27 changes: 27 additions & 0 deletions .github/scripts/site-release-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# machine-made type site 0.1.0

The specimen and download site for machine-made Weft 0.1 and
machine-made Sans 0.1. Live at <https://machine-made.github.io/type/>.

This release attaches the built site as a zip file. The live site is
deployed from `main` by the `site` workflow; this zip is a copy of the
same build for the tag.

## What is on the site

- Home: the two families, with links to the releases.
- Weft: a playground with the `wght` and `FRAG` axes, FRAG rows from
clean to broken, the glyph map, look-alike pairs and the OCR
readability table from `proofs/weft/readability.json`.
- Sans: specimen, weight waterfall (upright and italic), the default
straight forms and the sharp forms (ss02) as a switch, and the swirl
set.
- Download: install steps and `@font-face` CSS for both families.

The site serves the committed WOFF2 files of the 0.1 fonts. It has no
analytics, no cookies and no third-party scripts.

## Licence

Site code: Apache-2.0. Fonts: SIL Open Font License 1.1, Reserved Font
Name "machine-made". See `LICENSING.md` in the repository.
Loading