Problem
When CI processes multiple library submodules, some can fail while others succeed. Exiting immediately on the first fatal error prevented the translations repo from being finalized with partial progress, and ad-hoc per-workflow summary blocks gave an incomplete picture of successes, skips, and failures. The start-local job also re-read every libs/ submodule from .gitmodules instead of limiting work to submodules that actually succeeded in sync-mirrors.
Acceptance Criteria
Implementation Notes
- Add
record_submodule_fatal, print_submodule_processing_summary, and submodule_names_to_json / parse_submodule_names_json in lib.sh; track SUBMODULE_FATAL and OPEN_PR_SKIP in translation state.
- Replace inline summary echo blocks in workflows with
print_submodule_processing_summary; defer exit 1 until after finalize using a merged exit_rc.
- Call
set_git_bot_config before git operations in translation.sh and add_create_tag_workflow; guard env.sh org/repo parsing when GITHUB_REPOSITORY is unset (tests).
References
.github/workflows/add-submodules.yml
.github/workflows/assets/env.sh
.github/workflows/assets/lib.sh
.github/workflows/assets/translation.sh
.github/workflows/start-translation.yml
tests/helpers/common.bash
tests/test_lib.bats
Problem
When CI processes multiple library submodules, some can fail while others succeed. Exiting immediately on the first fatal error prevented the translations repo from being finalized with partial progress, and ad-hoc per-workflow summary blocks gave an incomplete picture of successes, skips, and failures. The
start-localjob also re-read everylibs/submodule from.gitmodulesinstead of limiting work to submodules that actually succeeded insync-mirrors.Acceptance Criteria
sync-mirrorsemitsupdated_submodulesas JSON;start-localruns underalways()and processes only that list.start-local) Weblate trigger failures.Implementation Notes
record_submodule_fatal,print_submodule_processing_summary, andsubmodule_names_to_json/parse_submodule_names_jsoninlib.sh; trackSUBMODULE_FATALandOPEN_PR_SKIPin translation state.print_submodule_processing_summary; deferexit 1until after finalize using a mergedexit_rc.set_git_bot_configbefore git operations intranslation.shandadd_create_tag_workflow; guardenv.shorg/repo parsing whenGITHUB_REPOSITORYis unset (tests).References
.github/workflows/add-submodules.yml.github/workflows/assets/env.sh.github/workflows/assets/lib.sh.github/workflows/assets/translation.sh.github/workflows/start-translation.ymltests/helpers/common.bashtests/test_lib.bats