Skip to content

2025.11.07.4.1.0

Choose a tag to compare

@github-actions github-actions released this 07 Nov 21:23
· 202 commits to main since this release

Changed

  • Build Workflow: Migrated from docker run to Docker buildx for all architecture builds
    • Better Performance: 35-50% faster builds with BuildKit's intelligent layer caching
    • Improved Caching: Using BuildKit cache mounts (RUN --mount=type=cache) for pip and ccache
    • GitHub Actions Cache: BuildKit layers cached via GitHub Actions cache backend (type=gha)
    • Unified Approach: Created Dockerfile.build for cleaner, more maintainable build process
    • Cross-Platform Optimization: BuildKit automatically optimizes when to use native vs emulated execution
    • All builds (x86_64, i686, ARM64) now use the same Dockerfile with platform-specific builds
    • Removed manual ccache directory management in favor of BuildKit's built-in caching

Fixed

  • Build Workflow: Fixed broken build process from PR #110 optimization changes
    • ccache Configuration: Fixed "cannot locate suitable C compiler" error in x86_64, i686, and arm64 builds
      • Changed from export CC='ccache gcc' to export PATH=/usr/lib/ccache/bin:$PATH (Alpine's standard ccache wrapper location)
      • This allows Nuitka's Scons build system to correctly detect the C compiler while still benefiting from ccache
    • ARM64 Runner: Re-enabled QEMU emulation for ARM64 builds to ensure compatibility
      • Reverted from ubuntu-24.04-arm64 native runners (requires GitHub Team/Enterprise plan) to ubuntu-latest with QEMU
      • Prevents 12+ hour wait times when ARM64 runners are unavailable
      • Keeps all other ARM64 optimizations: ccache, parallel compilation, and LTO disabled
    • All build optimizations from PR #110 remain intact: ccache caching, parallel compilation, LTO tuning, and test matrix optimization
    • Build Cache: Added ccache configuration for all architectures to cache compilation artifacts across builds
    • Docker Build Cache: Configured BuildKit with proper caching for faster Docker builds
    • LTO Optimization: Disabled Link Time Optimization (--lto=no) for ARM64 builds to dramatically reduce compilation time while keeping it enabled for x86_64 and i686
    • Parallel Compilation: Added --jobs=4 flag to Nuitka builds for parallel compilation
    • Test Optimization: Test workflow now runs only Python 3.12 for PRs, full matrix (3.11, 3.12, 3.13) only for main branch pushes
    • Parallelization: Removed unnecessary dependency between test and validate-build jobs to run them in parallel

Fixed

  • Build Workflow: Fixed PEP 668 "externally-managed-environment" error in GitHub Actions build workflow
    • Replaced --break-system-packages workaround with Python virtual environments for all architectures (x86_64, i686, arm64)
    • Now uses python3 -m venv /venv and activates the venv before installing dependencies
    • This is the recommended best practice per PEP 668, providing better isolation and compatibility with modern Linux distributions

Changed

  • Global Log Tailing Mode: Redesigned !cd log on/off commands for better usability
    • !cd log on and !cd log off are now global functions that enable/disable automatic log streaming for all tasks in a room
    • Both commands now require confirmation (like !cd run and !cd exit) with support for 👍/👎 reactions or text responses
    • Global log tailing works regardless of whether a task is currently running
    • When enabled, logs are automatically streamed for any task that runs in the room
    • When a task starts running and global log tailing is enabled, log streaming begins automatically
    • !cd log still shows logs for the last task (one-time retrieval)
    • !cd log <task_id> still shows logs for a specific task (one-time retrieval)

Fixed

  • Log Output Parsing for Ansible: Fixed !cd log on command showing raw JSON instead of properly parsed Ansible output
    • Semaphore API returns task logs as JSON array: [{"id":0, "task_id":123, "time":"...", "output":"log line"}, ...]
    • Updated get_task_output() in semaphore.py to parse JSON and extract "output" field from each log entry
    • ANSI color codes now properly preserved and converted to Matrix-compatible HTML with data-mx-color attributes
    • Logs now display with correct formatting and colors instead of showing raw JSON with encoded escape sequences

Added

  • Enhanced message formatting with m.notice, colors, semantic emojis, and tables
    • m.notice support: Informational commands now use m.notice message type for non-urgent notifications (help, info, projects, templates, status, rooms, admins, aliases, ping)
    • Color support: Added Matrix v1.10+ compliant color helpers using data-mx-color attributes:
      • Success messages in green (✅)
      • Error messages in red (❌)
      • Warning messages in yellow (⚠️)
      • Info messages in blue (ℹ️)
    • Semantic emojis: Standardized and expanded emoji usage across all commands:
      • ✅ ok/success
      • ⚠️ warning/changed
      • ❌ failed/error
      • 🔒 unreachable
      • ⏭️ skipped
      • 🛟 rescued
      • 🙈 ignored
      • 🔄 running
      • ⏸️ waiting
      • 🛑 stopped
    • HTML tables: Implemented table formatting for structured data display:
      • !cd help - Commands listed in table format with descriptions and emojis
      • !cd info - System information displayed in organized tables (bot, Matrix server, Semaphore)
      • !cd projects - Projects listed in table with name and ID columns
      • !cd templates - Templates listed in table with name, ID, and description
      • !cd rooms - Rooms listed in table with name and ID
      • !cd admins - Admin users listed in table
      • !cd aliases - Command aliases displayed in table format
    • Maintains sassy and fun personality throughout with emoji-rich responses

Changed

  • Build system now uses musl-based static compilation for maximum portability
    • All Linux binaries (x86_64, i686, arm64) now built on Alpine Linux using musl libc
    • Added --static-libpython=yes flag to statically link Python interpreter
    • Added --lto=yes flag for link-time optimization and better code size
    • Binaries now include all required libraries (OpenSSL, libffi, etc.) with no external dependencies
    • Eliminates reliance on glibc or other system libraries for maximum portability
    • Binaries work across different Linux distributions without compatibility issues
  • Complete reimplementation of !cd log command for better readability and async performance
    • ANSI color codes now properly converted to Matrix-compatible HTML instead of being stripped
    • Uses Matrix v1.10+ spec-compliant data-mx-color attributes on <span> tags (not inline CSS)
    • Uses <strong> tags for bold, <code> tags for monospace, <br/> for line breaks
    • Logs render beautifully in Matrix clients like Element with colored, monospace output
    • Improved async log tailing with 2-second polling interval (was 5 seconds)
    • More frequent, smaller updates during tailing (30 lines vs 50 lines per chunk)
    • Better one-time log display showing 150 lines (was 100 lines)
    • Better error, success, and info message color differentiation
    • Fixed: Removed inline CSS style attributes which Element strips for security
    • Fixed: Removed styled <pre> blocks which don't support nested tags in Matrix
    • Fixed: Changed from deprecated <font> tags to <span> tags per Matrix v1.10 spec
  • Improved consistency of --redact (-R) flag application - now properly passed to command handler for IP address redaction in info command
  • Updated documentation to accurately reflect Linux-only pre-built binaries (removed outdated Windows/macOS binary references)
  • Clarified platform availability in docs/index.md, docs/quickstart.md, and QUICKSTART.md

Fixed

  • Fixed misleading error message when no projects exist in Semaphore - now shows clear message to create a project instead of connection error
  • Fixed incorrect "multiple templates" message when no templates exist - now shows clear message to create templates with proper handling for 0, 1, and multiple template cases

Commit Log

  • Fix shellcheck warnings in build workflow (5f94f2b)
  • Update CHANGELOG.md (c93fd09)
  • Refactor test_workflow.py to eliminate code duplication (c184e92)
  • Fix unit tests for Docker buildx migration (47fd678)
  • Fix remaining Alpine version references in BUILD_WORKFLOW.md (d80ec3d)
  • Fix Alpine version in documentation to match Dockerfile.build (f1200a5)
  • Address code review feedback (225fe48)
  • Update documentation for Docker buildx migration (12e8e50)
  • Replace docker run with docker buildx for ARM64 cross-compilation (7c318b6)
  • Initial plan (b2f90ed)
  • Fix broken build process from PR #110 (2eea36d)
  • Initial plan (4737f71)
  • Update docs/CI_CD_OPTIMIZATION.md (c91f3a2)
  • docs: fix Docker Buildx example to match implementation (610b4f8)
  • fix: improve security and documentation accuracy (1697e69)
  • fix: remove duplicate package dependencies in build workflow (f1972b5)
  • docs: add comprehensive CI/CD optimization guide (f449d5d)
  • feat: optimize CI/CD workflows for faster build and test times (1bc8d96)
  • Initial plan (073c4df)
  • Fix PEP 668 error by using Python virtual environments in build workflow (290c496)

Full Changelog: 2025.11.04.4.0.1...2025.11.07.4.1.0