)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Antraxmin \u003cantraxmin@naver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-09-17 22:21:27 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add ansible play for weblate client configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new Ansible playbook to configure the Weblate client."},{"line_number":10,"context_line":"This patch will replace the previously used Zanata client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"46d406f0_108838a9","line":7,"range":{"start_line":7,"start_character":1,"end_line":7,"end_character":6},"updated":"2025-09-18 12:00:05.000000000","message":"drop this to make the patch mergeable","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"528923764213c98e0afc8fbc2123a27fb514f5c1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Antraxmin \u003cantraxmin@naver.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2025-09-17 22:21:27 +0900"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add ansible play for weblate client configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new Ansible playbook to configure the Weblate client."},{"line_number":10,"context_line":"This patch will replace the previously used Zanata client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"730432da_54051360","line":7,"range":{"start_line":7,"start_character":1,"end_line":7,"end_character":6},"in_reply_to":"46d406f0_108838a9","updated":"2025-09-18 12:58:50.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add ansible play for weblate client configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new Ansible playbook to configure the Weblate client."},{"line_number":10,"context_line":"This patch will replace the previously used Zanata client"},{"line_number":11,"context_line":"configuration."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"8652516b_9026cef1","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":28},"updated":"2025-09-18 12:00:05.000000000","message":"role?","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"528923764213c98e0afc8fbc2123a27fb514f5c1","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[WIP] Add ansible play for weblate client configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new Ansible playbook to configure the Weblate client."},{"line_number":10,"context_line":"This patch will replace the previously used Zanata client"},{"line_number":11,"context_line":"configuration."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"386f9856_37b6fe10","line":9,"range":{"start_line":9,"start_character":20,"end_line":9,"end_character":28},"in_reply_to":"8652516b_9026cef1","updated":"2025-09-18 12:58:50.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":7,"context_line":"[WIP] Add ansible play for weblate client configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new Ansible playbook to configure the Weblate client."},{"line_number":10,"context_line":"This patch will replace the previously used Zanata client"},{"line_number":11,"context_line":"configuration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-authored-by: Ian Y. Choi \u003cianyrchoi@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"915ab043_5190f311","line":10,"range":{"start_line":10,"start_character":5,"end_line":10,"end_character":10},"updated":"2025-09-18 12:00:05.000000000","message":"role","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"528923764213c98e0afc8fbc2123a27fb514f5c1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"[WIP] Add ansible play for weblate client configuration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a new Ansible playbook to configure the Weblate client."},{"line_number":10,"context_line":"This patch will replace the previously used Zanata client"},{"line_number":11,"context_line":"configuration."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-authored-by: Ian Y. Choi \u003cianyrchoi@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"fc984aec_7592edc1","line":10,"range":{"start_line":10,"start_character":5,"end_line":10,"end_character":10},"in_reply_to":"915ab043_5190f311","updated":"2025-09-18 12:58:50.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"ea13cb5bfd6818de670363998bfd41f4c28c19be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"78121986_769fca65","updated":"2025-09-27 14:28:40.000000000","message":"@antraxmin@naver.com\n\nIt would be better to save the weblate token used by curl in the .curlrc file from tasks/main.yaml, and then have the shell script use the .curlrc file.","commit_id":"a23d6f259b82cbd0721907d49759e1efa9bf4ff2"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"02cd4e8cda5f28e25dbc5f9935fdf75cdd62cd16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"7ed0fad4_2efe4b52","updated":"2025-10-17 11:48:31.000000000","message":"lgtm, thx for the updates","commit_id":"5a4fa3934196e4e94d211fcb1adab74334955cf0"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"ed46f00710bd9717e2fbbe4fd94ad229373142b9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"ed9f366d_41402c59","updated":"2025-12-30 21:39:38.000000000","message":"@ppiyakk2@printf.kr This is my trial result - https://paste.openstack.org/show/b408rEAKAprjDiyUtcF7/\n\nWould you share in details how you did test with the scripts?\nI am not sure how to best test the scripts well but [1] is how I could manually test in my local environment last year. If someone knows how to test the roles effectively, please do share.\n\n[1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/message/3WGRRYGARHOQK2J4E242KSTES76PZ3B7/","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"081a871e94d676ca4d512bdd2cf999a3d8e58c36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"0e74d070_19ef9bec","updated":"2025-12-29 22:29:17.000000000","message":"Appreciate the feedback from clarkb and others.\nTo move forward, I would like to divide the feedback into two parts: #1/ i18n script completeness, and #2/ zuul job definition parts.\n\nFor #1, @ppiyakk2@printf.kr As we discussed via the #openstack-i18n IRC channel, I suggest continuing the discussion and refinement within the I18n SIG community. The scripts need to be fully reviewed and validated there before proceeding further, especially considering the current quality level. It would be great if we can demonstrate that the two scripts (`upstream-*` and `propose-*`) work properly with Weblate, similar to how they currently work with Zanata. For example, we should be able to confirm this through successful log outputs such as:\n\n- https://zuul.opendev.org/t/openstack/builds?job_name\u003dupstream-translation-update\n- https://zuul.opendev.org/t/openstack/builds?job_name\u003dpropose-translation-update\n\nOnce #1 is well discussed and confirmed within the I18n SIG, I believe we can more effectively consider #2 (the Zuul job definition aspect) and move this patch toward merging with broader consensus.","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"805ad25c730ce40239ddad4c5d7f594a9f1e7f71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"211f083a_8e64e138","updated":"2026-02-04 09:49:10.000000000","message":"I will first develop and review the scripts included in this patch in the i18n repository, and then create a new patch in openstack-zuul-jobs.\n\nI will abandon this patch.\nThank you all for the reviews.","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"}],"roles/prepare-weblate-client/README.rst":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"591b5df0b74d45c249f94d1d218c4fe991c598d6","unresolved":true,"context_lines":[{"line_number":1,"context_line":"Prepare weblate client use"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":".. note:: This role is only available for Debian based platforms"},{"line_number":4,"context_line":"          currently."}],"source_content_type":"text/x-rst","patch_set":3,"id":"2501eaa4_88174dde","line":4,"range":{"start_line":2,"start_character":0,"end_line":4,"end_character":20},"updated":"2025-07-08 21:37:57.000000000","message":"@seongsoocho: I don\u0027t think it is needed. Do you think it is still needed?","commit_id":"356671fdbf1e592765f6ca38f47d26ba7c515c94"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":1,"context_line":"Prepare weblate client use"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":".. note:: This role is only available for Debian based platforms"},{"line_number":4,"context_line":"          currently."}],"source_content_type":"text/x-rst","patch_set":3,"id":"a80ba3f2_34806325","line":4,"range":{"start_line":2,"start_character":0,"end_line":4,"end_character":20},"in_reply_to":"2501eaa4_88174dde","updated":"2025-09-18 12:00:05.000000000","message":"looks to me like instead the script expects to be executed with some environment variables getting set","commit_id":"356671fdbf1e592765f6ca38f47d26ba7c515c94"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"528923764213c98e0afc8fbc2123a27fb514f5c1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Prepare weblate client use"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":".. note:: This role is only available for Debian based platforms"},{"line_number":4,"context_line":"          currently."}],"source_content_type":"text/x-rst","patch_set":3,"id":"5cc736c4_dea7fbe8","line":4,"range":{"start_line":2,"start_character":0,"end_line":4,"end_character":20},"in_reply_to":"a80ba3f2_34806325","updated":"2025-09-18 12:58:50.000000000","message":"Done","commit_id":"356671fdbf1e592765f6ca38f47d26ba7c515c94"}],"roles/prepare-weblate-client/files/propose_translation_update_weblate.sh":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        return"},{"line_number":65,"context_line":"    fi"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    local languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":68,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":69,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") | "},{"line_number":70,"context_line":"               .language.code\u0027 2\u003e/dev/null)"}],"source_content_type":"text/x-sh","patch_set":11,"id":"6f3d5fcf_a9e70cb5","line":67,"updated":"2025-09-18 12:00:05.000000000","message":"IMO it is better to split complex initialiations from the `local` declaration, you also may want to set `pipefail`.","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return"},{"line_number":65,"context_line":"    fi"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    local languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":68,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":69,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") | "},{"line_number":70,"context_line":"               .language.code\u0027 2\u003e/dev/null)"}],"source_content_type":"text/x-sh","patch_set":11,"id":"c4ec0d5c_38cda25f","line":67,"in_reply_to":"6f3d5fcf_a9e70cb5","updated":"2025-09-24 15:06:08.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        return"},{"line_number":65,"context_line":"    fi"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    local languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":68,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":69,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") | "},{"line_number":70,"context_line":"               .language.code\u0027 2\u003e/dev/null)"}],"source_content_type":"text/x-sh","patch_set":11,"id":"751c9c7e_692611dd","line":67,"in_reply_to":"6f3d5fcf_a9e70cb5","updated":"2025-10-14 13:15:54.000000000","message":"Thanks for the feedback, I didn\u0027t think of that part. I separated the initialization part from the local declaration and added the pipefail option setting.","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    local languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":68,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":69,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") | "},{"line_number":70,"context_line":"               .language.code\u0027 2\u003e/dev/null)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if [[ -z \"$languages\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"e7c483cd_e7f13290","line":69,"updated":"2025-09-18 12:00:05.000000000","message":"nit: the trailing space doesn\u0027t look nice and also isn\u0027t needed afaict? there\u0027s enough leading space on the next line","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    local languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":68,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":69,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") | "},{"line_number":70,"context_line":"               .language.code\u0027 2\u003e/dev/null)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if [[ -z \"$languages\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"178e16ee_fdb45820","line":69,"in_reply_to":"e7c483cd_e7f13290","updated":"2025-10-14 13:15:54.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    local languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":68,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":69,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") | "},{"line_number":70,"context_line":"               .language.code\u0027 2\u003e/dev/null)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if [[ -z \"$languages\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"6399d855_0cf0de91","line":69,"in_reply_to":"e7c483cd_e7f13290","updated":"2025-09-24 15:06:08.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":73,"context_line":"        return"},{"line_number":74,"context_line":"    fi"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    for lang in $languages; do"},{"line_number":77,"context_line":"        local temp_file\u003d\"$TEMP_DIR/${component}_${lang}.po\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if download_translation \"$project\" \"$component\" \"$lang\" \\"}],"source_content_type":"text/x-sh","patch_set":11,"id":"b239962e_ab349872","line":76,"updated":"2025-09-18 12:00:05.000000000","message":"add `local lang` in front of this?","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return"},{"line_number":74,"context_line":"    fi"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    for lang in $languages; do"},{"line_number":77,"context_line":"        local temp_file\u003d\"$TEMP_DIR/${component}_${lang}.po\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if download_translation \"$project\" \"$component\" \"$lang\" \\"}],"source_content_type":"text/x-sh","patch_set":11,"id":"71a54b4f_d0c3434b","line":76,"in_reply_to":"b239962e_ab349872","updated":"2025-09-24 15:06:08.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        return"},{"line_number":74,"context_line":"    fi"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    for lang in $languages; do"},{"line_number":77,"context_line":"        local temp_file\u003d\"$TEMP_DIR/${component}_${lang}.po\""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if download_translation \"$project\" \"$component\" \"$lang\" \\"}],"source_content_type":"text/x-sh","patch_set":11,"id":"1f696b99_b55dcf63","line":76,"in_reply_to":"b239962e_ab349872","updated":"2025-10-14 13:15:54.000000000","message":"I improved this. added local lang.","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":108,"context_line":"setup_git"},{"line_number":109,"context_line":"setup_review \"$branch\""},{"line_number":110,"context_line":"filter_commits"},{"line_number":111,"context_line":"send_patch \"$branch\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"bf06f24f_8b62119d","line":111,"updated":"2025-09-18 12:00:05.000000000","message":"please add a newline at the end of the file. same for all other files","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":false,"context_lines":[{"line_number":108,"context_line":"setup_git"},{"line_number":109,"context_line":"setup_review \"$branch\""},{"line_number":110,"context_line":"filter_commits"},{"line_number":111,"context_line":"send_patch \"$branch\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"67bb5d61_4898ceda","line":111,"in_reply_to":"bf06f24f_8b62119d","updated":"2025-09-24 15:06:08.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":108,"context_line":"setup_git"},{"line_number":109,"context_line":"setup_review \"$branch\""},{"line_number":110,"context_line":"filter_commits"},{"line_number":111,"context_line":"send_patch \"$branch\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"c616fb85_5caa414b","line":111,"in_reply_to":"bf06f24f_8b62119d","updated":"2025-10-14 13:15:54.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":true,"context_lines":[{"line_number":24,"context_line":": ${WEBLATE_TOKEN:?ERROR: WEBLATE_TOKEN is not set.}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"TEMP_DIR\u003d\"/tmp/weblate_$$\""},{"line_number":27,"context_line":"mkdir -p \"$TEMP_DIR\""},{"line_number":28,"context_line":"trap \u0027rm -rf \"$TEMP_DIR\"\u0027 INT TERM EXIT"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"get_filename() {"}],"source_content_type":"text/x-sh","patch_set":13,"id":"7515fc32_8dff37e8","line":27,"updated":"2025-09-24 15:06:08.000000000","message":"Nit, you can use mktemp to do this for you which I think may avoid collisions slightly better. That said its unlikely we would have collisions due to single use nodes.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":24,"context_line":": ${WEBLATE_TOKEN:?ERROR: WEBLATE_TOKEN is not set.}"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"TEMP_DIR\u003d\"/tmp/weblate_$$\""},{"line_number":27,"context_line":"mkdir -p \"$TEMP_DIR\""},{"line_number":28,"context_line":"trap \u0027rm -rf \"$TEMP_DIR\"\u0027 INT TERM EXIT"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"get_filename() {"}],"source_content_type":"text/x-sh","patch_set":13,"id":"7986b6ba_0f502fbc","line":27,"in_reply_to":"7515fc32_8dff37e8","updated":"2025-10-14 13:15:54.000000000","message":"Done","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":true,"context_lines":[{"line_number":50,"context_line":"    local language\u003d$3"},{"line_number":51,"context_line":"    local output_file\u003d$4"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":54,"context_line":"        \"$WEBLATE_URL/api/translations/$project/$component/$language/file/\" \\"},{"line_number":55,"context_line":"        -o \"$output_file\""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"e083c1d0_dbcde2da","line":53,"updated":"2025-09-24 15:06:08.000000000","message":"Currently we don\u0027t `set -x`; however, that might be something that gets added in the future to aid debugging. If we do that then our token can potentially be logged in the job. It might be worth considering if we should use something like a curlrc file to set the token header value and avoid having it on the command line for this reason.\n\nI don\u0027t think this is urgent. More of a suggestion for how to avoid this problem as we move forward.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    local language\u003d$3"},{"line_number":51,"context_line":"    local output_file\u003d$4"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":54,"context_line":"        \"$WEBLATE_URL/api/translations/$project/$component/$language/file/\" \\"},{"line_number":55,"context_line":"        -o \"$output_file\""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"74625147_3d90cd1e","line":53,"in_reply_to":"e083c1d0_dbcde2da","updated":"2025-10-14 13:15:54.000000000","message":"Thank you for your good feedback. As you said, this part is not urgent, but I decided it was better to consider it for the future. So, I tried to improve it by using the curlc file so that it is not included in the command line.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":true,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    local languages"},{"line_number":69,"context_line":"    set +e"},{"line_number":70,"context_line":"    languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":71,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":72,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") |"},{"line_number":73,"context_line":"               .language.code\u0027 2\u003e/dev/null)"}],"source_content_type":"text/x-sh","patch_set":13,"id":"6eeaa398_2c0f9a8e","line":70,"updated":"2025-09-24 15:06:08.000000000","message":"See note above about potentially using a curlrc to set the token header value.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    local languages"},{"line_number":69,"context_line":"    set +e"},{"line_number":70,"context_line":"    languages\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":71,"context_line":"        \"$WEBLATE_URL/api/components/$project/$component/translations/\" | \\"},{"line_number":72,"context_line":"        jq -r \u0027.results[] | select(.language.code !\u003d \"en\") |"},{"line_number":73,"context_line":"               .language.code\u0027 2\u003e/dev/null)"}],"source_content_type":"text/x-sh","patch_set":13,"id":"3dfa397b_58cc444d","line":70,"in_reply_to":"6eeaa398_2c0f9a8e","updated":"2025-10-14 13:15:54.000000000","message":"Similarly, I improved this area as well.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":true,"context_lines":[{"line_number":97,"context_line":"    fi"},{"line_number":98,"context_line":"}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"components\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":101,"context_line":"    \"$WEBLATE_URL/api/projects/$project/components/\" | \\"},{"line_number":102,"context_line":"    jq -r \u0027.results[].slug\u0027 2\u003e/dev/null)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"d89d7281_cf68aec2","line":100,"updated":"2025-09-24 15:06:08.000000000","message":"See above about the token.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dc497d91ad369fdd2db12ad663059bfd3a399433","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    fi"},{"line_number":98,"context_line":"}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"components\u003d$(curl -s -H \"Authorization: Token $WEBLATE_TOKEN\" \\"},{"line_number":101,"context_line":"    \"$WEBLATE_URL/api/projects/$project/components/\" | \\"},{"line_number":102,"context_line":"    jq -r \u0027.results[].slug\u0027 2\u003e/dev/null)"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-sh","patch_set":13,"id":"231b487c_fce606c3","line":100,"in_reply_to":"d89d7281_cf68aec2","updated":"2025-10-14 13:15:54.000000000","message":"Done","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6ec9ad02b5e479b5d7614407aab6caa053fffda5","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    if [ -d \"$project/locale\" ]; then"},{"line_number":92,"context_line":"        find \"$project/locale\" -name \"*.po\" -exec git add {} +"},{"line_number":93,"context_line":"        find \"$project/locale\" -name \"*.pot\" -exec git add {} +"},{"line_number":94,"context_line":"    fi"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":21,"id":"d7b5d515_af6a40cd","line":93,"updated":"2025-10-28 22:37:11.000000000","message":"It looks like the prior portion of this function is updating .po files. I\u0027m not sure what updates the .pot file. Do we need an explicit step for that to ensure the .pot file is getting updated compared to the code?","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"081a871e94d676ca4d512bdd2cf999a3d8e58c36","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    if [ -d \"$project/locale\" ]; then"},{"line_number":92,"context_line":"        find \"$project/locale\" -name \"*.po\" -exec git add {} +"},{"line_number":93,"context_line":"        find \"$project/locale\" -name \"*.pot\" -exec git add {} +"},{"line_number":94,"context_line":"    fi"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":21,"id":"b0fde6a8_adabd2d7","line":93,"in_reply_to":"26489d6a_bae637d9","updated":"2025-12-29 22:29:17.000000000","message":"I agree with clarkb. Please remove L93. pot files should not be staged.","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"2e8198ae519e76aeb11397c41283a1aa9739d84a","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    if [ -d \"$project/locale\" ]; then"},{"line_number":92,"context_line":"        find \"$project/locale\" -name \"*.po\" -exec git add {} +"},{"line_number":93,"context_line":"        find \"$project/locale\" -name \"*.pot\" -exec git add {} +"},{"line_number":94,"context_line":"    fi"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":21,"id":"26489d6a_bae637d9","line":93,"in_reply_to":"4a6f5bef_8ea37b0c","updated":"2025-12-03 15:47:04.000000000","message":"I think we should keep this process in alignment with the old zanata process at least for now (I\u0027m not sure what those jobs do but I think we should match here). Then afterwards we can work on refactoring as necessary.\n\nThat said: The upstream-translation-update-weblate periodic job pushes extracted messages from our code base to weblate. propose-translation-update-weblate should take the translations from weblate and push them to the git repo via gerrit. I suppose it is possible to do this without ever committing the .pot file into git itself, but I think we should track that data too for completeness. Given that I think this job which pushes back to gerrit/git should extract the pot messages and push them as well?","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":37971,"name":"Chaemin Lim","display_name":"antraxmin","email":"antraxmin@naver.com","username":"antraxmin"},"change_message_id":"dcf07b7b096455d5cfeccd3dbd4f72ae09e0e8df","unresolved":true,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    if [ -d \"$project/locale\" ]; then"},{"line_number":92,"context_line":"        find \"$project/locale\" -name \"*.po\" -exec git add {} +"},{"line_number":93,"context_line":"        find \"$project/locale\" -name \"*.pot\" -exec git add {} +"},{"line_number":94,"context_line":"    fi"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-sh","patch_set":21,"id":"4a6f5bef_8ea37b0c","line":93,"in_reply_to":"d7b5d515_af6a40cd","updated":"2025-11-01 04:36:59.000000000","message":"Thanks for the feedback.  \nCurrently this script also stages `.pot` files, but since `.pot` updates are generated by a separate periodic job (e.g. `upstream-translation-update-weblate`) that runs message extraction, I’m thinking this should handle `.po` files only here.\n\nI’m planning to remove the `git add *.pot` line and add a short comment clarifying that `.pot` files are managed separately — does that approach sound good to you?  \nIf so, I’ll update the patch accordingly.","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"}],"roles/prepare-weblate-client/files/upstream_translation_update_weblate.sh":[{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"ea13cb5bfd6818de670363998bfd41f4c28c19be","unresolved":true,"context_lines":[{"line_number":36,"context_line":"  # Separate response body/code"},{"line_number":37,"context_line":"  local tmp resp_code"},{"line_number":38,"context_line":"  tmp\u003d\"$(mktemp)\""},{"line_number":39,"context_line":"  resp_code\u003d$(curl \"${CURL_OPTS[@]}\" -w \"%{http_code}\" -H \"$AUTH_HEADER\" \\"},{"line_number":40,"context_line":"               \"$url\" -o \"$tmp\" || true)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  # If response is not 200 (component does not exist) → skip (exit 0)"}],"source_content_type":"text/x-sh","patch_set":16,"id":"c4f5de7d_d8aa93f5","line":39,"updated":"2025-09-27 14:28:40.000000000","message":"There are no definition of CURL_OPTS","commit_id":"a23d6f259b82cbd0721907d49759e1efa9bf4ff2"},{"author":{"_account_id":38225,"name":"KIM KWANG IL","display_name":"kwangil","email":"rhkddlf7911@naver.com","username":"kwangil"},"change_message_id":"4bd3f4e48347808b4a02266a42ba3c0ffd7b6496","unresolved":false,"context_lines":[{"line_number":36,"context_line":"  # Separate response body/code"},{"line_number":37,"context_line":"  local tmp resp_code"},{"line_number":38,"context_line":"  tmp\u003d\"$(mktemp)\""},{"line_number":39,"context_line":"  resp_code\u003d$(curl \"${CURL_OPTS[@]}\" -w \"%{http_code}\" -H \"$AUTH_HEADER\" \\"},{"line_number":40,"context_line":"               \"$url\" -o \"$tmp\" || true)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"  # If response is not 200 (component does not exist) → skip (exit 0)"}],"source_content_type":"text/x-sh","patch_set":16,"id":"de278dd5_388f9799","line":39,"in_reply_to":"c4f5de7d_d8aa93f5","updated":"2025-10-14 11:01:52.000000000","message":"I’ve reviewed your feedback and made the updates. Thank you!","commit_id":"a23d6f259b82cbd0721907d49759e1efa9bf4ff2"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"ea13cb5bfd6818de670363998bfd41f4c28c19be","unresolved":true,"context_lines":[{"line_number":150,"context_line":"mv .translation-source translation-source"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"# --- ensure msgen (GNU gettext) installed automatically ---"},{"line_number":153,"context_line":"if ! command -v msgen \u003e/dev/null 2\u003e\u00261; then"},{"line_number":154,"context_line":"  echo \"[info] \u0027msgen\u0027 not found. Installing \u0027gettext\u0027...\""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"  if command -v apt-get \u003e/dev/null 2\u003e\u00261; then"}],"source_content_type":"text/x-sh","patch_set":16,"id":"37bf0705_26a68433","line":153,"updated":"2025-09-27 14:28:40.000000000","message":"gettext package already installed from roles/prepare-weblate-client/tasks/main.yaml. \n\nSo, you should delete this code.","commit_id":"a23d6f259b82cbd0721907d49759e1efa9bf4ff2"},{"author":{"_account_id":38225,"name":"KIM KWANG IL","display_name":"kwangil","email":"rhkddlf7911@naver.com","username":"kwangil"},"change_message_id":"4bd3f4e48347808b4a02266a42ba3c0ffd7b6496","unresolved":false,"context_lines":[{"line_number":150,"context_line":"mv .translation-source translation-source"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"# --- ensure msgen (GNU gettext) installed automatically ---"},{"line_number":153,"context_line":"if ! command -v msgen \u003e/dev/null 2\u003e\u00261; then"},{"line_number":154,"context_line":"  echo \"[info] \u0027msgen\u0027 not found. Installing \u0027gettext\u0027...\""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"  if command -v apt-get \u003e/dev/null 2\u003e\u00261; then"}],"source_content_type":"text/x-sh","patch_set":16,"id":"b7f53ed3_b9f49628","line":153,"in_reply_to":"37bf0705_26a68433","updated":"2025-10-14 11:01:52.000000000","message":"I’ve reviewed your feedback and made the updates. Thank you!","commit_id":"a23d6f259b82cbd0721907d49759e1efa9bf4ff2"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6ec9ad02b5e479b5d7614407aab6caa053fffda5","unresolved":true,"context_lines":[{"line_number":21,"context_line":"WEBLATE_BRANCH\u003d${BRANCHNAME//\\//-}"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"SCRIPTSDIR\u003d\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" \u0026\u0026 pwd )\""},{"line_number":24,"context_line":"source \"$SCRIPTSDIR/common_translation_update.sh\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# checks weblate env"},{"line_number":27,"context_line":": \"${WEBLATE_URL:?Set WEBLATE_URL}\""}],"source_content_type":"text/x-sh","patch_set":21,"id":"3a38bb7e_3711e0ca","line":24,"updated":"2025-10-28 22:37:11.000000000","message":"Currently the role doesn\u0027t include this common_translation_update.sh file. Since we source it here we may need to include it in the set of scripts that are copied.","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"081a871e94d676ca4d512bdd2cf999a3d8e58c36","unresolved":true,"context_lines":[{"line_number":21,"context_line":"WEBLATE_BRANCH\u003d${BRANCHNAME//\\//-}"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"SCRIPTSDIR\u003d\"$( cd \"$( dirname \"${BASH_SOURCE[0]}\" )\" \u0026\u0026 pwd )\""},{"line_number":24,"context_line":"source \"$SCRIPTSDIR/common_translation_update.sh\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# checks weblate env"},{"line_number":27,"context_line":": \"${WEBLATE_URL:?Set WEBLATE_URL}\""}],"source_content_type":"text/x-sh","patch_set":21,"id":"a778e9b7_49e84c0e","line":24,"in_reply_to":"3a38bb7e_3711e0ca","updated":"2025-12-29 22:29:17.000000000","message":"I agree that common_translation_update.sh file needs to be included.","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"}],"roles/prepare-weblate-client/tasks/main.yaml":[{"author":{"_account_id":14482,"name":"Ian Y. Choi","email":"ianyrchoi@gmail.com","username":"ianychoi"},"change_message_id":"591b5df0b74d45c249f94d1d218c4fe991c598d6","unresolved":true,"context_lines":[{"line_number":8,"context_line":"  become: yes"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"- name: Install weblate client from pip"},{"line_number":11,"context_line":"  pip:"},{"line_number":12,"context_line":"    name: wlc"},{"line_number":13,"context_line":"    state: present"},{"line_number":14,"context_line":"    executable: pip3"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- name: Ensure weblate config dir"},{"line_number":17,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"d715a885_59dc3a75","line":14,"range":{"start_line":11,"start_character":0,"end_line":14,"end_character":20},"updated":"2025-07-08 21:37:57.000000000","message":"Not sure how to specify wlc version through requirements (e.g., upper-constraints).","commit_id":"bb5abdf89bacd1b939e029a153ea52e8a2b9f854"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"89ba1177c5546d5a6c9756ebfd0655b6deab2a27","unresolved":true,"context_lines":[{"line_number":8,"context_line":"  become: yes"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"- name: Install weblate client from pip"},{"line_number":11,"context_line":"  pip:"},{"line_number":12,"context_line":"    name: wlc"},{"line_number":13,"context_line":"    state: present"},{"line_number":14,"context_line":"    executable: pip3"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- name: Ensure weblate config dir"},{"line_number":17,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"b4d0aa9d_78c44f15","line":14,"range":{"start_line":11,"start_character":0,"end_line":14,"end_character":20},"in_reply_to":"23847a5d_c7ede6c6","updated":"2025-09-18 12:53:09.000000000","message":"Since this is only needed when running the Zuul job, I’d prefer to specify the version directly in this YAML.","commit_id":"bb5abdf89bacd1b939e029a153ea52e8a2b9f854"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"5871597c543ad376bf8c7a124a94d2f18e9aead0","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  become: yes"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"- name: Install weblate client from pip"},{"line_number":11,"context_line":"  pip:"},{"line_number":12,"context_line":"    name: wlc"},{"line_number":13,"context_line":"    state: present"},{"line_number":14,"context_line":"    executable: pip3"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- name: Ensure weblate config dir"},{"line_number":17,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"0d07e926_1d8b78dc","line":14,"range":{"start_line":11,"start_character":0,"end_line":14,"end_character":20},"in_reply_to":"b4d0aa9d_78c44f15","updated":"2025-09-20 15:51:40.000000000","message":"Done","commit_id":"bb5abdf89bacd1b939e029a153ea52e8a2b9f854"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":8,"context_line":"  become: yes"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"- name: Install weblate client from pip"},{"line_number":11,"context_line":"  pip:"},{"line_number":12,"context_line":"    name: wlc"},{"line_number":13,"context_line":"    state: present"},{"line_number":14,"context_line":"    executable: pip3"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- name: Ensure weblate config dir"},{"line_number":17,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"23847a5d_c7ede6c6","line":14,"range":{"start_line":11,"start_character":0,"end_line":14,"end_character":20},"in_reply_to":"d715a885_59dc3a75","updated":"2025-09-18 12:00:05.000000000","message":"do we need to cap this via global-requirements? otherwise you could also specify a version via a variable that defaults to a known-working version.\n\nI also think that user-space installs don\u0027t work well anymore for current distros, so better switch to creating a virtual environment","commit_id":"bb5abdf89bacd1b939e029a153ea52e8a2b9f854"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"5de9fa4a592e51a297656a149ff4db40ba075b56","unresolved":true,"context_lines":[{"line_number":27,"context_line":"  copy:"},{"line_number":28,"context_line":"    dest: \u0027{{ ansible_user_dir }}/scripts/\u0027"},{"line_number":29,"context_line":"    src: \u0027{{ item }}\u0027"},{"line_number":30,"context_line":"    mode: 0755"},{"line_number":31,"context_line":"  with_items:"},{"line_number":32,"context_line":"    - weblate_utils.py"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"72fce217_9c837ddf","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":14},"updated":"2025-09-18 12:00:05.000000000","message":"```suggestion\n    mode: \"0755\"\n```\nsee also the linter failure","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"528923764213c98e0afc8fbc2123a27fb514f5c1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"  copy:"},{"line_number":28,"context_line":"    dest: \u0027{{ ansible_user_dir }}/scripts/\u0027"},{"line_number":29,"context_line":"    src: \u0027{{ item }}\u0027"},{"line_number":30,"context_line":"    mode: 0755"},{"line_number":31,"context_line":"  with_items:"},{"line_number":32,"context_line":"    - weblate_utils.py"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"d5be89bd_ec8ee759","line":30,"range":{"start_line":30,"start_character":10,"end_line":30,"end_character":14},"in_reply_to":"72fce217_9c837ddf","updated":"2025-09-18 12:58:50.000000000","message":"Done","commit_id":"99f740f0687e1f8b218f7efa24bbd4383b04a565"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"135ed57147a5cc1c5cb86e527c67256e7ac64801","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    src: \u0027{{ item }}\u0027"},{"line_number":30,"context_line":"    mode: \"0755\""},{"line_number":31,"context_line":"  with_items:"},{"line_number":32,"context_line":"    - weblate_utils.py"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"a6d8c46a_49ca441a","line":32,"updated":"2025-09-24 15:06:08.000000000","message":"Where is this file being used? It doesn\u0027t look like the shell script calls into it?","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"7de5ca1fc5d81ee0d02157fe7c12f01bd9f8ff0a","unresolved":true,"context_lines":[{"line_number":29,"context_line":"    src: \u0027{{ item }}\u0027"},{"line_number":30,"context_line":"    mode: \"0755\""},{"line_number":31,"context_line":"  with_items:"},{"line_number":32,"context_line":"    - weblate_utils.py"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"fd27e495_91b05958","line":32,"in_reply_to":"a6d8c46a_49ca441a","updated":"2025-09-24 15:28:13.000000000","message":"This file is not being used immediately. The Weblate CLI provided via PyPI has fairly limited functionality, so for now we are relying on curl to interact with the Weblate API. Eventually, we plan to move all of this logic into Python code.\n\nThe weblate_utils.py module is intended to serve as a utility for calling the Weblate API from within a Zuul job, and that’s the purpose for which we created it.","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":23279,"name":"Seongsoo Cho","display_name":"Seongsoo Cho","email":"ppiyakk2@printf.kr","username":"seongsoo.cho"},"change_message_id":"02d91a493912e81c8614bfe055d069040a28dd0c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    src: \u0027{{ item }}\u0027"},{"line_number":30,"context_line":"    mode: \"0755\""},{"line_number":31,"context_line":"  with_items:"},{"line_number":32,"context_line":"    - weblate_utils.py"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"3a80f9c0_2d2950a5","line":32,"in_reply_to":"fd27e495_91b05958","updated":"2025-10-14 17:03:33.000000000","message":"Done","commit_id":"8c4c0abde2d9c48f197668535527ca99122fe6ce"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6ec9ad02b5e479b5d7614407aab6caa053fffda5","unresolved":true,"context_lines":[{"line_number":11,"context_line":"  pip:"},{"line_number":12,"context_line":"    name: wlc\u003d\u003d1.15"},{"line_number":13,"context_line":"    state: present"},{"line_number":14,"context_line":"    executable: pip3"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"- name: Ensure weblate config dir"},{"line_number":17,"context_line":"  file:"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"3804555b_2acd9330","line":14,"updated":"2025-10-28 22:37:11.000000000","message":"Do we need to install this into a virtualenv now that pip won\u0027t install globally by default? Or maybe this goes into the special user specific venv?","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6ec9ad02b5e479b5d7614407aab6caa053fffda5","unresolved":true,"context_lines":[{"line_number":21,"context_line":"- name: Write out weblate config"},{"line_number":22,"context_line":"  template:"},{"line_number":23,"context_line":"    src: weblate.ini"},{"line_number":24,"context_line":"    dest: ~/.config/weblate"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"- name: Create curlrc for weblate API access"},{"line_number":27,"context_line":"  copy:"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"21014f90_0d41d5a5","line":24,"updated":"2025-10-28 22:37:11.000000000","message":"I suspect (but am not certain) that template tasks may record the data that is copied. Should we set this task as no_log: true to avoid leaking the secret key?\n\nSeparately it looks like the bash scripts use the .curlrc to supply credentials ans the python script uses this weblate.ini file. It isn\u0027t clear to me if we need both of these tools? it looks like the curl stuff in the shell script may cover the tasks needed to sync repos with weblate?","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6ec9ad02b5e479b5d7614407aab6caa053fffda5","unresolved":true,"context_lines":[{"line_number":27,"context_line":"  copy:"},{"line_number":28,"context_line":"    content: \u0027header: \"Authorization: Token {{ weblate_api_credentials.key }}\"\u0027"},{"line_number":29,"context_line":"    dest: ~/.curlrc"},{"line_number":30,"context_line":"    mode: \"0600\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- name: Copy translation scripts to the script dir on the node"},{"line_number":33,"context_line":"  copy:"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"85e63a4c_98fa4047","line":30,"updated":"2025-10-28 22:37:11.000000000","message":"I suspect (but am not certain) that copy tasks may record the data that is copied. Should we set this task as no_log: true to avoid leaking the secret key?","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"6ec9ad02b5e479b5d7614407aab6caa053fffda5","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    src: \u0027{{ item }}\u0027"},{"line_number":36,"context_line":"    mode: \"0755\""},{"line_number":37,"context_line":"  with_items:"},{"line_number":38,"context_line":"    - weblate_utils.py"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"0752df2c_3037b172","line":38,"updated":"2025-10-28 22:37:11.000000000","message":"Should we copy the two shell scripts in the files/ dir of this role as well?","commit_id":"b9dac8fed0326423358baf0a78b7ac80fc4f28ff"}]}
