diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a95d1fcc7..a099245d8 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,6 +13,13 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} +# Pin the Docker build-volume name so CI's bind-backed "mx-build" volume +# (created per-job below) is the one the Makefile actually mounts. Without +# this the Makefile computes a CURDIR-hashed name (for worktree isolation) +# that doesn't match the pre-created volume. +env: + DOCKER_VOLUME: mx-build + jobs: linux-gen: name: Linux (generator gates) diff --git a/Makefile b/Makefile index f97324315..158286bc6 100644 --- a/Makefile +++ b/Makefile @@ -39,8 +39,9 @@ DOCKER_CACHE := --cache-from type=gha --cache-to type=gha,mode=max endif # Docker SDK image + build volume. Incremental state persists across runs. +# Volume name includes a path hash so parallel worktrees get isolated caches. DOCKER_IMAGE := mx-sdk -DOCKER_VOLUME := mx-build +DOCKER_VOLUME ?= mx-build-$(shell printf '%s' '$(CURDIR)' | md5sum 2>/dev/null | cut -c1-8 || printf '%s' '$(CURDIR)' | md5 -q | cut -c1-8) DOCKER_STAMP := $(BUILD_ROOT)/.docker-image-stamp # Prevent root-owned files on Linux. diff --git a/src/private/mx/impl/DirectionReader.cpp b/src/private/mx/impl/DirectionReader.cpp index ebf04df26..c94f71beb 100644 --- a/src/private/mx/impl/DirectionReader.cpp +++ b/src/private/mx/impl/DirectionReader.cpp @@ -416,7 +416,11 @@ void DirectionReader::parseWords(const core::DirectionType &directionType) api::WordsData outWords; outWords.text = wordEl.value(); outWords.positionData = getPositionData(wordEl); - outWords.colorData = getColor(wordEl); + outWords.isColorSpecified = wordEl.color().has_value(); + if (outWords.isColorSpecified) + { + outWords.colorData = getColor(wordEl); + } outWords.fontData = getFontData(wordEl); if (wordEl.enclosure().has_value()) {