refactor: build scripts (#186)

* refactor: build scripts

* ci: remove matrix
This commit is contained in:
nullishamy
2024-05-19 20:48:13 +01:00
committed by GitHub
parent d8a7720c1d
commit 9625cc3eb1
7 changed files with 98 additions and 111 deletions

View File

@@ -6,9 +6,6 @@ on:
- "v*"
jobs:
release:
strategy:
matrix:
flavor: [mocha, macchiato, latte, frappe]
runs-on: ubuntu-latest
steps:
- name: Checkout
@@ -24,7 +21,11 @@ jobs:
- name: Install colloid specific dependencies
run: sudo apt update && sudo apt install -y sassc inkscape optipng
- name: Generate themes
run: python ./build.py ${{ matrix.flavor }} -a all --zip -d $PWD/releases
run: |
python ./build.py mocha -a all --zip -d $PWD/releases &&
python ./build.py macchiato -a all --zip -d $PWD/releases &&
python ./build.py frappe -a all --zip -d $PWD/releases &&
python ./build.py latte -a all --zip -d $PWD/releases
- name: Add zips to release
uses: softprops/action-gh-release@v2
with:

116
build.py
View File

@@ -2,7 +2,7 @@
import os, re, shutil, subprocess, argparse, glob, logging, zipfile
from dataclasses import dataclass
from typing import Literal, List
from typing import Any, Literal, List
from catppuccin import PALETTE
from catppuccin.models import Flavor, Color
@@ -30,6 +30,20 @@ class Tweaks:
return ",".join(self.tweaks)
@dataclass
class Suffix:
true_value: str
test: Any # callback function
false_value: str = ""
IS_DARK = Suffix(true_value="-Dark", test=lambda ctx: ctx.flavor.dark)
IS_LIGHT = Suffix(true_value="-Light", test=lambda ctx: not ctx.flavor.dark)
IS_WINDOW_NORMAL = Suffix(true_value="-Normal", test=lambda ctx: ctx.tweaks.has('normal'))
DARK_LIGHT = Suffix(
true_value="-Dark", false_value="-Light", test=lambda ctx: ctx.flavor.dark
)
@dataclass
class BuildContext:
build_root: str
@@ -46,26 +60,15 @@ class BuildContext:
def build_id(self) -> str:
return f"{self.theme_name}-{self.flavor.identifier}-{self.accent.identifier}-{self.size}+{self.tweaks.id() or 'default'}"
def apply_suffix(self, suffix: Suffix) -> str:
if suffix.test(self):
return suffix.true_value
else:
return suffix.false_value
def build(ctx: BuildContext):
dark_suffix = ""
light_suffix = ""
window_suffix = ""
scheme_suffix = "-Catppuccin"
if ctx.tweaks.has("normal"):
window_suffix = "-Normal"
if ctx.flavor == "latte":
light_suffix = "-Light"
suffix = "-Light"
if ctx.flavor != "":
dark_suffix = "-Dark"
suffix = "-Dark"
output_dir = ctx.output_dir()
# [[ -d "${THEME_DIR}" ]] && rm -rf "${THEME_DIR}"
logger.info(f"Building into '{output_dir}'...")
apply_tweaks(ctx)
@@ -81,7 +84,7 @@ def build(ctx: BuildContext):
file.write("[X-GNOME-Metatheme]\n")
file.write(f"GtkTheme={ctx.build_id()}\n")
file.write(f"MetacityTheme={ctx.build_id()}\n")
file.write(f"IconTheme=Tela-circle{dark_suffix}\n")
file.write(f"IconTheme=Tela-circle{ctx.apply_suffix(IS_DARK)}\n")
file.write(f"CursorTheme={ctx.flavor.name}-cursors\n")
file.write("ButtonLayout=close,minimize,maximize:menu\n")
@@ -94,7 +97,7 @@ def build(ctx: BuildContext):
[
"sassc",
*SASSC_OPT,
f"{SRC_DIR}/main/gnome-shell/gnome-shell{suffix}.scss",
f"{SRC_DIR}/main/gnome-shell/gnome-shell{ctx.apply_suffix(DARK_LIGHT)}.scss",
f"{output_dir}/gnome-shell/gnome-shell.css",
]
)
@@ -104,7 +107,7 @@ def build(ctx: BuildContext):
[
"sassc",
*SASSC_OPT,
f"{SRC_DIR}/main/gtk-3.0/gtk{suffix}.scss",
f"{SRC_DIR}/main/gtk-3.0/gtk{ctx.apply_suffix(DARK_LIGHT)}.scss",
f"{output_dir}/gtk-3.0/gtk.css",
]
)
@@ -123,7 +126,7 @@ def build(ctx: BuildContext):
[
"sassc",
*SASSC_OPT,
f"{SRC_DIR}/main/gtk-4.0/gtk{suffix}.scss",
f"{SRC_DIR}/main/gtk-4.0/gtk{ctx.apply_suffix(DARK_LIGHT)}.scss",
f"{output_dir}/gtk-4.0/gtk.css",
]
)
@@ -142,14 +145,14 @@ def build(ctx: BuildContext):
[
"sassc",
*SASSC_OPT,
f"{SRC_DIR}/main/cinnamon/cinnamon{suffix}.scss",
f"{SRC_DIR}/main/cinnamon/cinnamon{ctx.apply_suffix(DARK_LIGHT)}.scss",
f"{output_dir}/cinnamon/cinnamon.css",
]
)
os.makedirs(f"{output_dir}/metacity-1", exist_ok=True)
shutil.copyfile(
f"{SRC_DIR}/main/metacity-1/metacity-theme-3{window_suffix}.xml",
f"{SRC_DIR}/main/metacity-1/metacity-theme-3{ctx.apply_suffix(IS_WINDOW_NORMAL)}.xml",
f"{output_dir}/metacity-1/metacity-theme-3.xml",
)
# FIXME: Symlinks aren't working as intended
@@ -165,20 +168,20 @@ def build(ctx: BuildContext):
os.makedirs(f"{output_dir}/xfwm4", exist_ok=True)
shutil.copyfile(
f"{SRC_DIR}/main/xfwm4/themerc{light_suffix}",
f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}",
f"{output_dir}/xfwm4/themerc",
)
os.makedirs(f"{output_dir}-hdpi/xfwm4", exist_ok=True)
shutil.copyfile(
f"{SRC_DIR}/main/xfwm4/themerc{light_suffix}",
f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}",
f"{output_dir}-hdpi/xfwm4/themerc",
)
subst_text(f"{output_dir}-hdpi/xfwm4/themerc", "button_offset=6", "button_offset=9")
os.makedirs(f"{output_dir}-xhdpi/xfwm4", exist_ok=True)
shutil.copyfile(
f"{SRC_DIR}/main/xfwm4/themerc{light_suffix or ''}",
f"{SRC_DIR}/main/xfwm4/themerc{ctx.apply_suffix(IS_LIGHT)}",
f"{output_dir}-xhdpi/xfwm4/themerc",
)
subst_text(
@@ -187,11 +190,11 @@ def build(ctx: BuildContext):
if not ctx.flavor.dark:
shutil.copytree(
f"{SRC_DIR}/main/plank/theme-Light{scheme_suffix}/", f"{output_dir}/plank"
f"{SRC_DIR}/main/plank/theme-Light-Catppuccin/", f"{output_dir}/plank"
)
else:
shutil.copytree(
f"{SRC_DIR}/main/plank/theme-Dark{scheme_suffix}/", f"{output_dir}/plank"
f"{SRC_DIR}/main/plank/theme-Dark-Catppuccin/", f"{output_dir}/plank"
)
@@ -285,31 +288,13 @@ def apply_tweaks(ctx: BuildContext):
def make_assets(ctx: BuildContext):
color_suffix = ""
if not ctx.flavor.dark:
color_suffix = "-Light"
else:
color_suffix = "-Dark"
dark_suffix = ""
if ctx.flavor.dark:
dark_suffix = "-Dark"
light_suffix = ""
if not ctx.flavor.dark:
light_suffix = "-Light"
window_suffix = ""
if ctx.tweaks.has("normal"):
window_suffix = "-Normal"
output_dir = ctx.output_dir()
os.makedirs(f"{output_dir}/cinnamon/assets", exist_ok=True)
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/theme/*.svg"):
shutil.copy(file, f"{output_dir}/cinnamon/assets")
shutil.copy(
f"{SRC_DIR}/assets/cinnamon/thumbnail{color_suffix}.svg",
f"{SRC_DIR}/assets/cinnamon/thumbnail{ctx.apply_suffix(DARK_LIGHT)}.svg",
f"{output_dir}/cinnamon/thumbnail.png",
)
@@ -328,11 +313,11 @@ def make_assets(ctx: BuildContext):
dirs_exist_ok=True,
)
shutil.copyfile(
f"{SRC_DIR}/assets/gtk/thumbnail{dark_suffix}.svg",
f"{SRC_DIR}/assets/gtk/thumbnail{ctx.apply_suffix(IS_DARK)}.svg",
f"{output_dir}/gtk-3.0/thumbnail.png",
)
shutil.copyfile(
f"{SRC_DIR}/assets/gtk/thumbnail{dark_suffix}.svg",
f"{SRC_DIR}/assets/gtk/thumbnail{ctx.apply_suffix(IS_DARK)}.svg",
f"{output_dir}/gtk-4.0/thumbnail.png",
)
@@ -388,23 +373,23 @@ def make_assets(ctx: BuildContext):
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/common-assets/*.svg"):
shutil.copy(file, f"{output_dir}/cinnamon/assets")
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/assets-{dark_suffix}/*.svg"):
for file in glob.glob(f"{SRC_DIR}/assets/cinnamon/assets{ctx.apply_suffix(IS_DARK)}/*.svg"):
shutil.copy(file, f"{output_dir}/cinnamon/assets")
for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/common-assets/*.svg"):
shutil.copy(file, f"{output_dir}/gnome-shell/assets")
for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/assets-{dark_suffix}/*.svg"):
for file in glob.glob(f"{SRC_DIR}/assets/gnome-shell/assets{ctx.apply_suffix(IS_DARK)}/*.svg"):
shutil.copy(file, f"{output_dir}/gnome-shell/assets")
for file in glob.glob(f"{SRC_DIR}/assets/gtk/symbolics/*.svg"):
shutil.copy(file, f"{output_dir}/gtk-3.0/assets")
shutil.copy(file, f"{output_dir}/gtk-4.0/assets")
for file in glob.glob(f"{SRC_DIR}/assets/metacity-1/assets-{window_suffix}/*.svg"):
for file in glob.glob(f"{SRC_DIR}/assets/metacity-1/assets{ctx.apply_suffix(IS_WINDOW_NORMAL)}/*.svg"):
shutil.copy(file, f"{output_dir}/metacity-1/assets")
shutil.copy(
f"{SRC_DIR}/assets/metacity-1/thumbnail{dark_suffix}.png",
f"{SRC_DIR}/assets/metacity-1/thumbnail{ctx.apply_suffix(IS_DARK)}.png",
f"{output_dir}/metacity-1/thumbnail.png",
)
@@ -412,13 +397,13 @@ def make_assets(ctx: BuildContext):
# {src_dir}/assets/xfwm4/assets{light_suffix}-Catppuccin/
# where assets-Light-Catppuccin will have latte
# nad assets-Catppuccin will have mocha or something
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{light_suffix}/*.png"):
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}/*.png"):
shutil.copy(file, f"{output_dir}/xfwm4")
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{light_suffix}-hdpi/*.png"):
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}-hdpi/*.png"):
shutil.copy(file, f"{output_dir}-hdpi/xfwm4")
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{light_suffix}-xhdpi/*.png"):
for file in glob.glob(f"{SRC_DIR}/assets/xfwm4/assets{ctx.apply_suffix(IS_LIGHT)}-xhdpi/*.png"):
shutil.copy(file, f"{output_dir}-xhdpi/xfwm4")
@@ -556,7 +541,7 @@ def parse_args():
"sapphire",
"blue",
"lavender",
"all"
"all",
],
help="Accent of the theme.",
)
@@ -599,6 +584,7 @@ def parse_args():
return parser.parse_args()
def main():
args = parse_args()
if args.patch:
@@ -622,16 +608,16 @@ def main():
"lavender",
]
if args.accent == 'all':
if args.accent == "all":
for accent in accents:
accent = getattr(palette.colors, accent)
tweaks = Tweaks(tweaks=args.tweaks)
if args.zip:
output_format = 'zip'
output_format = "zip"
else:
output_format = 'dir'
output_format = "dir"
ctx = BuildContext(
build_root=args.dest,
@@ -640,7 +626,7 @@ def main():
accent=accent,
size=args.size,
tweaks=tweaks,
output_format=output_format
output_format=output_format,
)
tweaks_temp()
@@ -652,9 +638,9 @@ def main():
tweaks = Tweaks(tweaks=args.tweaks)
if args.zip:
output_format = 'zip'
output_format = "zip"
else:
output_format = 'dir'
output_format = "dir"
ctx = BuildContext(
build_root=args.dest,
@@ -663,7 +649,7 @@ def main():
accent=accent,
size=args.size,
tweaks=tweaks,
output_format=output_format
output_format=output_format,
)
logger.info("Building temp tweaks file")

View File

@@ -16,35 +16,35 @@ index 00000000..8a905942
+
+// Red
+$red-light: #{{ palette.red.hex }};
+$red-dark: #{{ palette.red | mod(lightness=30) | get(key="hex") }};
+$red-dark: #{{ palette.red.hex }};
+
+// Pink
+$pink-light: #{{ palette.pink.hex }};
+$pink-dark: #{{ palette.pink | mod(lightness=30) | get(key="hex") }};
+$pink-dark: #{{ palette.pink.hex }};
+
+// Purple
+$purple-light: #{{ palette.mauve.hex }};
+$purple-dark: #{{ palette.mauve | mod(lightness=30) | get(key="hex") }};
+$purple-dark: #{{ palette.mauve.hex }};
+
+// Blue
+$blue-light: #{{ palette.blue.hex }};
+$blue-dark: #{{ palette.blue | mod(lightness=30) | get(key="hex") }};
+$blue-dark: #{{ palette.blue.hex }};
+
+// Teal
+$teal-light: #{{ palette.teal.hex }};
+$teal-dark: #{{ palette.teal | mod(lightness=30) | get(key="hex") }};
+$teal-dark: #{{ palette.teal.hex }};
+
+// Green
+$green-light: #{{ palette.green.hex }};
+$green-dark: #{{ palette.green | mod(lightness=30) | get(key="hex") }};
+$green-dark: #{{ palette.green.hex }};
+
+// Yellow
+$yellow-light: #{{ palette.yellow.hex }};
+$yellow-dark: #{{ palette.yellow | mod(lightness=30) | get(key="hex") }};
+$yellow-dark: #{{ palette.yellow.hex }};
+
+// Orange
+$orange-light: #{{ palette.peach.hex }};
+$orange-dark: #{{ palette.peach | mod(lightness=30) | get(key="hex") }};
+$orange-dark: #{{ palette.peach.hex }};
+
+// Grey
+$grey-050: #{{ palette.text.hex }};

View File

@@ -8,35 +8,35 @@ index 00000000..8a905942
+
+// Red
+$red-light: #e78284;
+$red-dark: #81191b;
+$red-dark: #e78284;
+
+// Pink
+$pink-light: #f4b8e4;
+$pink-dark: #851567;
+$pink-dark: #f4b8e4;
+
+// Purple
+$purple-light: #ca9ee6;
+$purple-dark: #58207a;
+$purple-dark: #ca9ee6;
+
+// Blue
+$blue-light: #8caaee;
+$blue-dark: #143686;
+$blue-dark: #8caaee;
+
+// Teal
+$teal-light: #81c8be;
+$teal-dark: #2f6b63;
+$teal-dark: #81c8be;
+
+// Green
+$green-light: #a6d189;
+$green-dark: #466f2b;
+$green-dark: #a6d189;
+
+// Yellow
+$yellow-light: #e5c890;
+$yellow-dark: #7d5d1d;
+$yellow-dark: #e5c890;
+
+// Orange
+$orange-light: #ef9f76;
+$orange-dark: #8a3910;
+$orange-dark: #ef9f76;
+
+// Grey
+$grey-050: #c6d0f5;

View File

@@ -8,35 +8,35 @@ index 00000000..8a905942
+
+// Red
+$red-light: #d20f39;
+$red-dark: #900a27;
+$red-dark: #d20f39;
+
+// Pink
+$pink-light: #ea76cb;
+$pink-dark: #851567;
+$pink-dark: #ea76cb;
+
+// Purple
+$purple-light: #8839ef;
+$purple-dark: #440b8f;
+$purple-dark: #8839ef;
+
+// Blue
+$blue-light: #1e66f5;
+$blue-dark: #073693;
+$blue-dark: #1e66f5;
+
+// Teal
+$teal-light: #179299;
+$teal-dark: #148086;
+$teal-dark: #179299;
+
+// Green
+$green-light: #40a02b;
+$green-dark: #317921;
+$green-dark: #40a02b;
+
+// Yellow
+$yellow-light: #df8e1d;
+$yellow-dark: #885712;
+$yellow-dark: #df8e1d;
+
+// Orange
+$orange-light: #fe640b;
+$orange-dark: #993901;
+$orange-dark: #fe640b;
+
+// Grey
+$grey-050: #4c4f69;

View File

@@ -8,35 +8,35 @@ index 00000000..8a905942
+
+// Red
+$red-light: #ed8796;
+$red-dark: #861425;
+$red-dark: #ed8796;
+
+// Pink
+$pink-light: #f5bde6;
+$pink-dark: #861467;
+$pink-dark: #f5bde6;
+
+// Purple
+$purple-light: #c6a0f6;
+$purple-dark: #470d8d;
+$purple-dark: #c6a0f6;
+
+// Blue
+$blue-light: #8aadf4;
+$blue-dark: #0d388d;
+$blue-dark: #8aadf4;
+
+// Teal
+$teal-light: #8bd5ca;
+$teal-dark: #297166;
+$teal-dark: #8bd5ca;
+
+// Green
+$green-light: #a6da95;
+$green-dark: #3a7228;
+$green-dark: #a6da95;
+
+// Yellow
+$yellow-light: #eed49f;
+$yellow-dark: #835f17;
+$yellow-dark: #eed49f;
+
+// Orange
+$orange-light: #f5a97f;
+$orange-dark: #8f390b;
+$orange-dark: #f5a97f;
+
+// Grey
+$grey-050: #cad3f5;

View File

@@ -8,35 +8,35 @@ index 00000000..8a905942
+
+// Red
+$red-light: #f38ba8;
+$red-dark: #8c0e32;
+$red-dark: #f38ba8;
+
+// Pink
+$pink-light: #f5c2e7;
+$pink-dark: #841667;
+$pink-dark: #f5c2e7;
+
+// Purple
+$purple-light: #cba6f7;
+$purple-dark: #470d8d;
+$purple-dark: #cba6f7;
+
+// Blue
+$blue-light: #89b4fa;
+$blue-dark: #063d94;
+$blue-dark: #89b4fa;
+
+// Teal
+$teal-light: #94e2d5;
+$teal-dark: #21796a;
+$teal-dark: #94e2d5;
+
+// Green
+$green-light: #a6e3a1;
+$green-dark: #2a7723;
+$green-dark: #a6e3a1;
+
+// Yellow
+$yellow-light: #f9e2af;
+$yellow-dark: #8f650b;
+$yellow-dark: #f9e2af;
+
+// Orange
+$orange-light: #fab387;
+$orange-dark: #943c06;
+$orange-dark: #fab387;
+
+// Grey
+$grey-050: #cdd6f4;