bitcoin-services-home/build.py
2025-12-24 10:22:13 +01:00

96 lines
2.9 KiB
Python
Executable file

#!/usr/bin/env python3
"""
Simple build script for static site generation.
Replaces template variables with values from config/services.json
"""
import json
import os
from datetime import datetime
from pathlib import Path
# Paths
BASE_DIR = Path(__file__).parent
TEMPLATE_DIR = BASE_DIR / "src"
CONFIG_FILE = BASE_DIR / "config" / "services.json"
OUTPUT_DIR = BASE_DIR / "dist"
def load_config():
"""Load configuration from JSON file"""
with open(CONFIG_FILE, 'r') as f:
return json.load(f)
def generate_services_html(services):
"""Generate HTML for services list"""
html = ""
for service in services:
# Handle URLs that may or may not have protocol
url = service['url']
if not url.startswith(('http://', 'https://')):
href = f"https://{url}"
else:
href = url
# Display URL without protocol for cleaner look
url = url.replace('https://', '').replace('http://', '')
html += f"""
<div class="service-card">
<div class="service-name">{service['name']}</div>
<div class="service-description">{service['description']}</div>
<div class="service-info">
<strong>URL:</strong> <a href="{href}" class="service-link" target="_blank">{url}</a>
</div>
</div>
"""
return html.strip()
def build_site():
"""Main build function"""
# Load config
config = load_config()
# Read template
template_path = TEMPLATE_DIR / "index.html.template"
with open(template_path, 'r') as f:
template = f.read()
# Generate services HTML
services_html = generate_services_html(config['services'])
# Prepare replacements
replacements = {
'{{SITE_TITLE}}': config['site']['title'],
'{{SITE_SUBTITLE}}': config['site']['subtitle'],
'{{SITE_DESCRIPTION}}': config['site']['description'],
'{{SERVICES_LIST}}': services_html,
'{{FOOTER_TEXT}}': config['footer']['text'],
'{{BUILD_TIMESTAMP}}': datetime.now().strftime('%Y-%m-%d %H:%M:%S UTC')
}
# Replace variables
output = template
for placeholder, value in replacements.items():
output = output.replace(placeholder, value)
# Create output directory
OUTPUT_DIR.mkdir(exist_ok=True)
# Write output
output_path = OUTPUT_DIR / "index.html"
with open(output_path, 'w') as f:
f.write(output)
# Copy CSS file
css_source = TEMPLATE_DIR / "styles.css"
css_dest = OUTPUT_DIR / "styles.css"
if css_source.exists():
with open(css_source, 'r') as src, open(css_dest, 'w') as dst:
dst.write(src.read())
print(f"✓ Site built successfully!")
print(f"✓ Output: {output_path}")
print(f"✓ CSS copied to: {css_dest}")
if __name__ == "__main__":
build_site()