Skip to content

Commit

Permalink
提供构建命令行工具
Browse files Browse the repository at this point in the history
  • Loading branch information
TakWolf committed Jul 16, 2024
1 parent 810ff17 commit f907190
Show file tree
Hide file tree
Showing 7 changed files with 114 additions and 62 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
python -m pip install pip --upgrade
python -m pip install -r requirements.txt
- name: Build
run: python -m tools.build_www
run: python -m tools.cli --cleanup --font-formats woff2 --html
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifact
Expand Down
8 changes: 7 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ jobs:
release:
permissions:
contents: write
strategy:
matrix:
font-size: [10, 12, 16]
width-mode: [monospaced, proportional]
font-format: [otf, woff2, ttf, bdf, pcf, otc, ttc]
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Checkout
Expand All @@ -21,7 +27,7 @@ jobs:
python -m pip install pip --upgrade
python -m pip install -r requirements.txt
- name: Build
run: python -m tools.build
run: python -m tools.cli --cleanup --font-sizes ${{ matrix.font-size }} --width-modes ${{ matrix.width-mode }} --font-formats ${{ matrix.font-format }} --release
- name: Release
uses: softprops/action-gh-release@v2
with:
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ brew install font-ark-pixel-16px-proportional
- [Beautiful Soup](https://www.crummy.com/software/BeautifulSoup/)
- [Jinja](https://github.com/pallets/jinja)
- [Loguru](https://github.com/Delgan/loguru)
- [Cyclopts](https://github.com/BrianPugh/cyclopts)

## 字形依赖

Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ pillow==10.4.0
beautifulsoup4==4.12.3
Jinja2==3.1.4
loguru==0.7.2
cyclopts==2.9.3
41 changes: 6 additions & 35 deletions tools/build.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,12 @@
import itertools
import shutil

from tools import configs
from tools.configs import path_define
from tools.configs.font import FontConfig
from tools.services import publish_service, info_service, template_service, image_service
from tools.services.font_service import DesignContext
from tools import cli


def main():
if path_define.build_dir.exists():
shutil.rmtree(path_define.build_dir)

font_configs = {}
design_contexts = {}

for font_size in configs.font_sizes:
font_config = FontConfig.load(font_size)
font_configs[font_size] = font_config
design_context = DesignContext.load(font_config)
design_contexts[font_size] = design_context
for width_mode in configs.width_modes:
for font_format in itertools.chain(configs.font_formats, configs.font_collection_formats):
design_context.make_fonts(width_mode, font_format)
publish_service.make_release_zip(font_size, width_mode, font_format)
info_service.make_font_info(design_context, width_mode)
template_service.make_alphabet_html(design_context, width_mode)
template_service.make_demo_html(design_context)
image_service.make_preview_image(font_config)
template_service.make_index_html(font_configs)
template_service.make_playground_html(font_configs)
image_service.make_readme_banner(design_contexts)
image_service.make_github_banner(design_contexts)
image_service.make_itch_io_banner(design_contexts)
image_service.make_itch_io_background(design_contexts)
image_service.make_itch_io_cover(font_configs)
image_service.make_afdian_cover(font_configs)
cli.main(
cleanup=True,
release=True,
all_attachments=True,
)


if __name__ == '__main__':
Expand Down
25 changes: 0 additions & 25 deletions tools/build_www.py

This file was deleted.

98 changes: 98 additions & 0 deletions tools/cli.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import shutil

from cyclopts import App
from loguru import logger

from tools import configs
from tools.configs import FontSize, WidthMode, FontFormat, FontCollectionFormat, path_define
from tools.configs.font import FontConfig
from tools.services import publish_service, info_service, template_service, image_service
from tools.services.font_service import DesignContext

app = App(version=configs.version)


@app.default
def main(
cleanup: bool = False,
font_sizes: list[FontSize] | None = None,
width_modes: list[WidthMode] | None = None,
font_formats: list[FontFormat | FontCollectionFormat] | None = None,
release: bool = False,
all_attachments: bool = False,
font_info: bool = False,
html: bool = False,
image: bool = False,
):
if font_sizes is None:
font_sizes = configs.font_sizes
if width_modes is None:
width_modes = configs.width_modes
if font_formats is None:
font_formats = configs.font_formats + configs.font_collection_formats
if all_attachments:
font_info = True
html = True
image = True

print()
print(f'cleanup = {cleanup}')
print(f'font_sizes = {repr(font_sizes)}')
print(f'width_modes = {repr(width_modes)}')
print(f'font_formats = {repr(font_formats)}')
print(f'release = {release}')
print(f'font_info = {font_info}')
print(f'html = {html}')
print(f'image = {image}')
print()

if cleanup and path_define.build_dir.exists():
shutil.rmtree(path_define.build_dir)
logger.info("Delete dir: '{}'", path_define.build_dir)

font_configs = {}
design_contexts = {}
for font_size in font_sizes:
font_config = FontConfig.load(font_size)
font_configs[font_size] = font_config
design_context = DesignContext.load(font_config)
design_contexts[font_size] = design_context
for width_mode in width_modes:
for font_format in font_formats:
design_context.make_fonts(width_mode, font_format)
if release:
publish_service.make_release_zip(font_size, width_mode, font_format)

all_font_configs = set(font_sizes) == set(configs.font_sizes)

if font_info:
for font_size in font_sizes:
design_context = design_contexts[font_size]
for width_mode in width_modes:
info_service.make_font_info(design_context, width_mode)

if html:
for font_size in font_sizes:
design_context = design_contexts[font_size]
for width_mode in width_modes:
template_service.make_alphabet_html(design_context, width_mode)
template_service.make_demo_html(design_context)
if all_font_configs:
template_service.make_index_html(font_configs)
template_service.make_playground_html(font_configs)

if image:
for font_size in font_sizes:
font_config = font_configs[font_size]
image_service.make_preview_image(font_config)
if all_font_configs:
image_service.make_readme_banner(design_contexts)
image_service.make_github_banner(design_contexts)
image_service.make_itch_io_banner(design_contexts)
image_service.make_itch_io_background(design_contexts)
image_service.make_itch_io_cover(font_configs)
image_service.make_afdian_cover(font_configs)


if __name__ == '__main__':
app()

0 comments on commit f907190

Please sign in to comment.