Finalize the packaging script

This commit is contained in:
Belleve Invis 2020-05-02 02:11:30 -07:00
parent 1ac1fc5437
commit 13d4896ee2
3 changed files with 37 additions and 111 deletions

View file

@ -287,90 +287,8 @@ shape = 7
menu = 5
css = "normal"
###################################################################################################
# Export plans
# This mapping affects the process of creating ZIP archives only
[exportPlans]
# Standard set
01-iosevka = "iosevka"
02-iosevka-fixed = "iosevka-fixed"
03-iosevka-term = "iosevka-term"
04-iosevka-slab = "iosevka-slab"
05-iosevka-fixed-slab = "iosevka-fixed-slab"
06-iosevka-term-slab = "iosevka-term-slab"
07-iosevka-curly = "iosevka-curly"
08-iosevka-fixed-curly = "iosevka-fixed-curly"
09-iosevka-term-curly = "iosevka-term-curly"
10-iosevka-curly-slab = "iosevka-curly-slab"
11-iosevka-fixed-curly-slab = "iosevka-fixed-curly-slab"
12-iosevka-term-curly-slab = "iosevka-term-curly-slab"
# Style set variants
iosevka-ss01 = "iosevka-ss01"
iosevka-fixed-ss01 = "iosevka-fixed-ss01"
iosevka-term-ss01 = "iosevka-term-ss01"
iosevka-ss02 = "iosevka-ss02"
iosevka-fixed-ss02 = "iosevka-fixed-ss02"
iosevka-term-ss02 = "iosevka-term-ss02"
iosevka-ss03 = "iosevka-ss03"
iosevka-fixed-ss03 = "iosevka-fixed-ss03"
iosevka-term-ss03 = "iosevka-term-ss03"
iosevka-ss04 = "iosevka-ss04"
iosevka-fixed-ss04 = "iosevka-fixed-ss04"
iosevka-term-ss04 = "iosevka-term-ss04"
iosevka-ss05 = "iosevka-ss05"
iosevka-fixed-ss05 = "iosevka-fixed-ss05"
iosevka-term-ss05 = "iosevka-term-ss05"
iosevka-ss06 = "iosevka-ss06"
iosevka-fixed-ss06 = "iosevka-fixed-ss06"
iosevka-term-ss06 = "iosevka-term-ss06"
iosevka-ss07 = "iosevka-ss07"
iosevka-fixed-ss07 = "iosevka-fixed-ss07"
iosevka-term-ss07 = "iosevka-term-ss07"
iosevka-ss08 = "iosevka-ss08"
iosevka-fixed-ss08 = "iosevka-fixed-ss08"
iosevka-term-ss08 = "iosevka-term-ss08"
iosevka-ss09 = "iosevka-ss09"
iosevka-fixed-ss09 = "iosevka-fixed-ss09"
iosevka-term-ss09 = "iosevka-term-ss09"
iosevka-ss10 = "iosevka-ss10"
iosevka-fixed-ss10 = "iosevka-fixed-ss10"
iosevka-term-ss10 = "iosevka-term-ss10"
iosevka-ss11 = "iosevka-ss11"
iosevka-fixed-ss11 = "iosevka-fixed-ss11"
iosevka-term-ss11 = "iosevka-term-ss11"
iosevka-ss12 = "iosevka-ss12"
iosevka-fixed-ss12 = "iosevka-fixed-ss12"
iosevka-term-ss12 = "iosevka-term-ss12"
iosevka-ss13 = "iosevka-ss13"
iosevka-fixed-ss13 = "iosevka-fixed-ss13"
iosevka-term-ss13 = "iosevka-term-ss13"
iosevka-ss14 = "iosevka-ss14"
iosevka-fixed-ss14 = "iosevka-fixed-ss14"
iosevka-term-ss14 = "iosevka-term-ss14"
# Experimental variants
iosevka-aile = "iosevka-aile"
iosevka-etoile = "iosevka-etoile"
iosevka-sparkle = "iosevka-sparkle"
###################################################################################################
# TTC collection plans
# Collect plans
[collectPlans.iosevka]
from = [
"iosevka",

View file

@ -100,43 +100,45 @@ const PackageShapes = {
const PackageSpacings = {
// spacingDesc, ligation, spacingNameSuffix
"": ["Default", true, ""],
fixed: ["Fixed", false, "Fixed"],
term: ["Terminal", true, "Term"]
term: ["Terminal", true, "Term"],
fixed: ["Fixed", false, "Fixed"]
};
async function GeneratePackageList(out) {
let nr = 1;
out.log(`### Packages`);
out.log(`| Package | Description |\n| --- | --- |`);
out.log(`| Package | ${[...Object.entries(PackageSpacings)].map(x => x[1][0]).join(" | ")} |`);
out.log(`| --- | ${[...Object.entries(PackageSpacings)].map(x => "---").join(" | ")} |`);
for (let shape in PackageShapes) {
const [shapeDesc, shapeNameSuffix, , count, nospace] = PackageShapes[shape];
let line = "";
const familyName = buildName("\u00a0", "Iosevka", shapeNameSuffix);
const fileName = buildName("-", "pkg", "iosevka", shape, Version);
const downloadLink = `https://github.com/be5invis/Iosevka/releases/download/v${Version}/${fileName}.zip`;
const desc = `_${shapeDesc}_`;
line += `|**[${familyName}](${downloadLink})**<br/>${desc}|`;
for (let spacing in PackageSpacings) {
if (nospace && spacing) continue;
if (nospace) {
line += " ———— |";
continue;
}
const [spacingDesc, ligation, spacingNameSuffix] = PackageSpacings[spacing];
const fileName = buildName(
"-",
count ? pad(nr, 2, "0") : "",
"iosevka",
spacing,
shape,
Version
);
const familyName = buildName(" ", "Iosevka", spacingNameSuffix, shapeNameSuffix);
const desc = nospace
? `_${shapeDesc}_`
: `**Shape**: _${shapeDesc}_; **Spacing**: _${spacingDesc}_ <br/>` +
`**Ligation**: ${flag(ligation)}`;
if (count) nr++;
out.log(`| \`${fileName}\`<br/>**Menu Name**: \`${familyName}\` | ${desc} |`);
const fileName = buildName("-", "ttf", "iosevka", spacing, shape, Version);
const familyName = buildName("\u00a0", "Iosevka", spacingNameSuffix, shapeNameSuffix);
const downloadLink = `https://github.com/be5invis/Iosevka/releases/download/v${Version}/${fileName}.zip`;
const desc =
noBreak(`**Spacing**: _${spacingDesc}_<br/>`) +
noBreak(`**Ligatures**: _${flag(ligation)}_`);
line += `**[${familyName}](${downloadLink})**<br/>${desc}|`;
}
out.log(line);
}
out.log();
}
function pad(s, n, p) {
s = "" + s;
while (s.length < n) s = p + s;
return s;
function noBreak(s) {
return s.replace(/ /g, "\u00a0");
}
function buildName(j, ...parts) {

View file

@ -26,6 +26,9 @@ const webfontFormats = [
["ttf", "truetype"]
];
const SINGLE_GROUP_EXPORT_PREFIX = `ttf`;
const COLLECTION_EXPORT_PREFIX = `pkg`;
const BUILD_PLANS = path.relative(__dirname, path.resolve(__dirname, "./build-plans.toml"));
const PRIVATE_BUILD_PLANS = path.relative(
__dirname,
@ -95,8 +98,12 @@ const BuildPlans = computed("metadata:build-plans", async target => {
return rp.buildPlans;
});
const ExportPlans = computed("metadata:export-plans", async target => {
const [rp] = await target.need(RawPlans);
return rp.exportPlans;
const [rp] = await target.need(RawCollectPlans);
let result = {};
for (const collection in rp) {
for (const s of rp[collection].from) result[s] = s;
}
return result;
});
const RawCollectPlans = computed("metadata:raw-collect-plans", async target => {
const [rp] = await target.need(RawPlans);
@ -500,7 +507,7 @@ const CollectionExport = task.group("collection-export", async (target, gr) => {
for (const g of sourceGroups) await cp(`${DIST}/${g}`, `${DIST}/export/${gr}`);
});
const CollectionArchiveFile = file.make(
(gr, version) => `${ARCHIVE_DIR}/ttc-${gr}-${version}.zip`,
(gr, version) => `${ARCHIVE_DIR}/${COLLECTION_EXPORT_PREFIX}-${gr}-${version}.zip`,
async (target, out, gr) => {
await target.need(de`${out.dir}`, CollectionExport(gr));
await rm(out.full);
@ -519,9 +526,8 @@ const CollectionArchive = task.group(`collection-archive`, async (target, cid) =
// Single-group export
const GroupArchiveFile = file.make(
(gid, version) => `${ARCHIVE_DIR}/${gid}-${version}.zip`,
(gid, version) => `${ARCHIVE_DIR}/${SINGLE_GROUP_EXPORT_PREFIX}-${gid}-${version}.zip`,
async (target, { dir, full }, gid, version) => {
// Note: this target does NOT depend on the font files.
const [exportPlans] = await target.need(ExportPlans, de`${dir}`);
await target.need(GroupContents(exportPlans[gid]));
await cd(`${DIST}/${exportPlans[gid]}`).run(