From c86ed08b9831bd297d6ff09cb36a5b5f08630d39 Mon Sep 17 00:00:00 2001 From: Alisher Suyunov Date: Thu, 21 Nov 2024 03:29:39 +0500 Subject: [PATCH 1/6] Added translation into Uzbek (#1998) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added translation into Uzbek * Temporaly override translation_UZ.json with EN for reference * Temporaly override translation_UZ.json with EN for reference * UZ translation: fill text for messages from the original patch * UZ translation: fill text for menuGroups from the original patch * UZ translation: fill text for menuOptions from the original patch, part 1 * UZ translation: fill text for menuOptions from the original patch, part 2 * UZ translation: fill text from the original patch * adapting translation_UZ.json This should work 😊 --------- Co-authored-by: Ivan Zorin Co-authored-by: discip <53649486+discip@users.noreply.github.com> --- Translations/translation_UZ.json | 347 +++++++++++++++++++++++++++++++ 1 file changed, 347 insertions(+) create mode 100644 Translations/translation_UZ.json diff --git a/Translations/translation_UZ.json b/Translations/translation_UZ.json new file mode 100644 index 00000000..97f8b9d6 --- /dev/null +++ b/Translations/translation_UZ.json @@ -0,0 +1,347 @@ +{ + "languageCode": "UZ", + "languageLocalName": "O'zbek", + "tempUnitFahrenheit": false, + "messagesWarn": { + "CalibrationDone": { + "message": "Kalibrovka\nyakunlandi!" + }, + "ResetOKMessage": { + "message": "Sozlamalar\ntiklandi" + }, + "SettingsResetMessage": { + "message": "Ayrim sozlamalar\no'zgartirildi" + }, + "NoAccelerometerMessage": { + "message": "Akselerometr\ntopilmadi!" + }, + "NoPowerDeliveryMessage": { + "message": "USB-PD IC\ntopilmadi!" + }, + "LockingKeysString": { + "message": "QULFLANDI" + }, + "UnlockingKeysString": { + "message": "QULF OCHILDI" + }, + "WarningKeysLockedString": { + "message": "!QULFLANGAN!" + }, + "WarningThermalRunaway": { + "message": "Issiqlik\nqochishi" + }, + "WarningTipShorted": { + "message": "!Uchida qisqa tutashuv!" + }, + "SettingsCalibrationWarning": { + "message": "Qayta yuklashdan oldin, uchi va tutqich xona haroratida ekanligiga ishonch hosil qiling!" + }, + "CJCCalibrating": { + "message": "Kalibrovka\nqilinmoqda" + }, + "SettingsResetWarning": { + "message": "Sozlamalarni standart holatga qaytarishni istaysizmi?" + }, + "UVLOWarningString": { + "message": "DC PAST" + }, + "UndervoltageString": { + "message": "Past kuchlanish\n" + }, + "InputVoltageString": { + "message": "Kirish kuchlanishi: \n" + }, + "SleepingAdvancedString": { + "message": "Uyqu holati...\n" + }, + "SleepingTipAdvancedString": { + "message": "Uch: \n" + }, + "ProfilePreheatString": { + "message": "Qizdirish\n" + }, + "ProfileCooldownString": { + "message": "Sovutish\n" + }, + "DeviceFailedValidationWarning": { + "message": "Qurilmangiz soxta bo'lishi mumkin!" + }, + "TooHotToStartProfileWarning": { + "message": "Profilni boshlash uchun\njuda issiq" + } + }, + "characters": { + "SettingRightChar": "O", + "SettingLeftChar": "C", + "SettingAutoChar": "A", + "SettingSlowChar": "S", + "SettingMediumChar": "O", + "SettingFastChar": "T", + "SettingStartSolderingChar": "P", + "SettingStartSleepChar": "U", + "SettingStartSleepOffChar": "X", + "SettingLockBoostChar": "B", + "SettingLockFullChar": "T" + }, + "menuGroups": { + "PowerMenu": { + "displayText": "Quvvat\nsozlamalari", + "description": "" + }, + "SolderingMenu": { + "displayText": "Paylash\nsozlamalari", + "description": "" + }, + "PowerSavingMenu": { + "displayText": "Uyqu\nrejimi", + "description": "" + }, + "UIMenu": { + "displayText": "Foydalanuvchi\ninterfeysi", + "description": "" + }, + "AdvancedMenu": { + "displayText": "Kengaytirilgan\nsozlamalar", + "description": "" + } + }, + "menuValues": { + "USBPDModeDefault": { + "displayText": "Default\nMode" + }, + "USBPDModeNoDynamic": { + "displayText": "No\nDynamic" + }, + "USBPDModeSafe": { + "displayText": "Safe\nMode" + }, + "TipTypeAuto": { + "displayText": "Auto\nSense" + }, + "TipTypeT12Long": { + "displayText": "TS100\nLong" + }, + "TipTypeT12Short": { + "displayText": "Pine\nShort" + }, + "TipTypeT12PTS": { + "displayText": "PTS\n200" + }, + "TipTypeTS80": { + "displayText": "TS80\n" + }, + "TipTypeJBCC210": { + "displayText": "JBC\nC210" + } + }, + "menuOptions": { + "DCInCutoff": { + "displayText": "Quvvat\nmanbai", + "description": "Batareya haddan tashqari zaryadsizlanishini oldini olish uchun kuchlanish chegarasini o'rnatish (DC 10V) (S=3.3V har bir yacheyka uchun, quvvat PWR chegarasini o'chirish)" + }, + "MinVolCell": { + "displayText": "Minimal\nkuchlanish", + "description": "Batareya yacheyka uchun minimal ruxsat etilgan kuchlanish (3S: 3 - 3.7V | 4-6S: 2.4 - 3.7V)" + }, + "QCMaxVoltage": { + "displayText": "QC\nvoltage", + "description": "Max QC voltage the iron should negotiate for" + }, + "PDNegTimeout": { + "displayText": "PD\ntimeout", + "description": "PD negotiation timeout in 100ms steps for compatibility with some QC chargers" + }, + "USBPDMode": { + "displayText": "PD\nMode", + "description": "No Dynamic disables EPR & PPS, Safe mode does not use padding resistance" + }, + "BoostTemperature": { + "displayText": "Kuchaytirish\nharorati", + "description": "\"Boost mode\" rejimida uch harorati" + }, + "AutoStart": { + "displayText": "Boshlash\nholati", + "description": "P=paylash temperaturasigacha qizdirish | U=qo'zg'atilmagunicha uyqu rejimida ushlash | X=qo'zg'atilmagunicha qizdirilmagan holda ushlash" + }, + "TempChangeShortStep": { + "displayText": "Tugmaning qisqa\nbosilishi", + "description": "Qisqa bosilgandagi harorat o'zgarishi-oshirish" + }, + "TempChangeLongStep": { + "displayText": "Tugmaning uzoqroq\nbosilishi", + "description": "Uzoqroq bosilgandagi harorat o'zgarishi-oshirish" + }, + "LockingMode": { + "displayText": "Tugmalarni qulflashni\nfaollashtirish", + "description": "Qulflash uchun paylash davomida ikkala tugmani bosib turing (B=faqat boost mode uchun | T=to'liq qulflash)" + }, + "ProfilePhases": { + "displayText": "Profil\nbosqichlari", + "description": "Profil rejimlarida bosqichlar soni" + }, + "ProfilePreheatTemp": { + "displayText": "Dastlabgi\nHarorat", + "description": "Profil rejimida dastlab ushbu haroratga qizdirish" + }, + "ProfilePreheatSpeed": { + "displayText": "Qizdirish\nTezligi", + "description": "Ushbu tezlikda qizdirish (1 sekundda shuncha daraja)" + }, + "ProfilePhase1Temp": { + "displayText": "1-faza\nHarorati", + "description": "Bu fazaning oxirida mo'ljallangan harorat" + }, + "ProfilePhase1Duration": { + "displayText": "1-faza\nDavomiyligi", + "description": "Ushbu fazaning davomiyligi (sekund)" + }, + "ProfilePhase2Temp": { + "displayText": "2-faza\nHarorati", + "description": "" + }, + "ProfilePhase2Duration": { + "displayText": "2-faza\nDavomiyligi", + "description": "" + }, + "ProfilePhase3Temp": { + "displayText": "3-faza\nHarorati", + "description": "" + }, + "ProfilePhase3Duration": { + "displayText": "3-faza\nDavomiyligi", + "description": "" + }, + "ProfilePhase4Temp": { + "displayText": "4-faza\nHarorati", + "description": "" + }, + "ProfilePhase4Duration": { + "displayText": "4-faza\nDavomiyligi", + "description": "" + }, + "ProfilePhase5Temp": { + "displayText": "5-faza\nHarorati", + "description": "" + }, + "ProfilePhase5Duration": { + "displayText": "5-faza\nDavomiyligi", + "description": "" + }, + "ProfileCooldownSpeed": { + "displayText": "Sovutish\ntezligi", + "description": "Profil rejimi oxirida bu tezlikda sovutish (1 sekundda shuncha daraja)" + }, + "MotionSensitivity": { + "displayText": "Harakat\nsezgirligi", + "description": "1=quyi sezgirlik | ... | 9=eng yuqori sezgirlik" + }, + "SleepTemperature": { + "displayText": "Uyqu\nharorati", + "description": "\"Uyqu holati\"dagi uch harorati" + }, + "SleepTimeout": { + "displayText": "Uyquga ketish\nvaqti", + "description": "\"Uyqu holati\" boshlanishidan oldingi interval sleep mode (s=sekund | m=minut)" + }, + "ShutdownTimeout": { + "displayText": "O'chish\nvaqti", + "description": "Temirni o'chirishdan oldingi interval (m=minut)" + }, + "HallEffSensitivity": { + "displayText": "Hall sensori\nsezgirligi", + "description": "Magnitlarga nisbatan sezgirlik darajasi (1=quyi sezgirlik | ... | 9=eng yuqori sezgirlik)" + }, + "HallEffSleepTimeout": { + "displayText": "HallSensor\nSleepTime", + "description": "Interval before \"sleep mode\" starts when hall effect is above threshold" + }, + "TemperatureUnit": { + "displayText": "Harorat o'lchov\nbirligi", + "description": "C=°Selsiy | F=°Fahrenheit" + }, + "DisplayRotation": { + "displayText": "Ekran\nyo'nalishi", + "description": "O=o'ng qo'l | C=chap qo'l | A=avtomatik" + }, + "CooldownBlink": { + "displayText": "Sovutish\nindikatori", + "description": "Uchi qizigan bo'sh turgan holatida harorat o'lchovini yangilab turish" + }, + "ScrollingSpeed": { + "displayText": "Matn aylanish\ntezligi", + "description": "Matn aylanish tezligini sozlash (S=sekin | T=tez)" + }, + "ReverseButtonTempChange": { + "displayText": "(+) va (-) tugmalarni\nalmashtirish", + "description": "Harorat o'zgarishi uchun tugmachalarni vazifasini almashish" + }, + "AnimSpeed": { + "displayText": "Anim.\ntezligi", + "description": "Menyudagi ikonka animatsiyalari tezligini sozlash (S=sekin | O=o'rtacha | T=tez)" + }, + "AnimLoop": { + "displayText": "Anim.\nqaytarilishi", + "description": "Bosh menyudagi ikonka anim. qaytarilishi" + }, + "Brightness": { + "displayText": "Ekran\nyorqinligi", + "description": "OLED ekran yorqinligini sozlash" + }, + "ColourInversion": { + "displayText": "Ranglarni\ninvert qilish", + "description": "OLED ekran ranglarini teskari qilish" + }, + "LOGOTime": { + "displayText": "Yuklanish logosi\ndavomiyligi", + "description": "Yuklanish logosi davomiyligini o'rnatish (s=sekund)" + }, + "AdvancedIdle": { + "displayText": "Batafsil\nbo'sh turgandagi ekran", + "description": "B'sh turgandagi ekranda kichik shriftda batafsil ma’lumotni ko'rsatish" + }, + "AdvancedSoldering": { + "displayText": "Batafsil\npayvandlash ekrani", + "description": "Payvandlash ekrani uchun kichik shrift bilan batafsil ma’lumotni ko'rsatish" + }, + "BluetoothLE": { + "displayText": "Bluetooth\n", + "description": "Faollashtirish BLE" + }, + "PowerLimit": { + "displayText": "Quvvat\nchegarasi", + "description": "Temir foydalanishi mumkin bo'lgan o'rtacha maksimal quvvat (W=watt)" + }, + "CalibrateCJC": { + "displayText": "Keyingi yuklashda\nCJC kalibrovkasi", + "description": "Keyingi yuklashda Sovuq Tugun Kompensatsiyasini (CJC) kalibrlash (Delta T < 5°C bo'lsa, talab qilinmaydi)" + }, + "VoltageCalibration": { + "displayText": "Kirish kuchlanishini\nkalibrlash", + "description": "VIN kalibrovkasini boshlash (chiqish uchun uzoq bosib turing)" + }, + "PowerPulsePower": { + "displayText": "Quvvat\npulsi", + "description": "Uxlashdan saqlash pulsining quvvat intensivligi (W=watt)" + }, + "PowerPulseWait": { + "displayText": "Quvvat pulsi\nkechikishi", + "description": "Uxlashdan saqlash pulsi boshlanishigacha bo'lgan kechikish (x 2.5 soniya)" + }, + "PowerPulseDuration": { + "displayText": "Quvvat pulsi\ndavomiyligi", + "description": "Uxlashdan saqlash pulsi davomiyligi (x 250ms)" + }, + "SettingsReset": { + "displayText": "Sozlamalarni\nqayta tiklash", + "description": "Barcha sozlamalarni odatiy holatga qaytarish" + }, + "LanguageSwitch": { + "displayText": "Til:\n UZ O'zbek tili", + "description": "" + }, + "SolderingTipType": { + "displayText": "Soldering\nTip Type", + "description": "Select the tip type fitted" + } + } +} From 0187f9f1bf91c4bdd4730612ad025c4dfee93cb4 Mon Sep 17 00:00:00 2001 From: discip <53649486+discip@users.noreply.github.com> Date: Thu, 21 Nov 2024 10:15:30 +0100 Subject: [PATCH 2/6] follow up on #1998 (#2002) --- source/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Makefile b/source/Makefile index 4ff5bec1..a1192aba 100644 --- a/source/Makefile +++ b/source/Makefile @@ -20,7 +20,7 @@ HEXFILE_DIR=Hexfile OUTPUT_DIR_BASE=Objects OUTPUT_DIR=Objects/$(model) -ALL_LANGUAGES=BG CS DA DE EN ES FI FR HR HU IT JA_JP LT NL NL_BE NB PL PT RU SK SL SR_CYRL SR_LATN SV TR UK VI YUE_HK ZH_CN ZH_TW +ALL_LANGUAGES=BG CS DA DE EN ES FI FR HR HU IT JA_JP LT NL NL_BE NB PL PT RU SK SL SR_CYRL SR_LATN SV TR UK UZ VI YUE_HK ZH_CN ZH_TW LANGUAGE_GROUP_CJK_LANGS=EN JA_JP YUE_HK ZH_TW ZH_CN LANGUAGE_GROUP_CJK_NAME=Chinese+Japanese From 26c50d7962a1dc33254b90fd46c2cf53383b59b8 Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Thu, 21 Nov 2024 12:16:02 +0300 Subject: [PATCH 3/6] Check the presence of changelog for the latest stable release in History.md (#1999) * Documentation/History.md: update version format according to git tag for easiest automation * Add test check for changelog of the latest stable version * Add git config permissions routine to test docs via push.yml * scripts/deploy.sh fixes * making shellcheck happy due to false negative in deploy.sh * push.yml: fetch tags for test docs * push.yml: set fetch depth trying to get tags * deploy.sh printf debugging * deploy.sh: remove printf debugging * push.yml: rename step from check_readme to check_docs to reflect its function --- .github/workflows/push.yml | 11 ++++-- Documentation/History.md | 78 +++++++++++++++++++------------------- Makefile | 6 +-- scripts/deploy.sh | 59 +++++++++++++++++++++++----- 4 files changed, 100 insertions(+), 54 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index e21305a4..d4c5f9a3 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -208,7 +208,7 @@ jobs: exclude: "./.git/*" # Optional. check_all_files_with_shebangs: "false" # Optional. - check_readme: + check_docs: runs-on: ubuntu-22.04 container: image: alpine:3.19 @@ -220,6 +220,11 @@ jobs: - uses: actions/checkout@v4 with: submodules: true + fetch-tags: true + fetch-depth: 0 - - name: Check autogenerated Documentation/README.md - run: /bin/sh ./scripts/deploy.sh docs_readme + - name: Git ownership exception + run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory "$GITHUB_WORKSPACE" + + - name: Check and verify documentation + run: /bin/sh ./scripts/deploy.sh docs diff --git a/Documentation/History.md b/Documentation/History.md index 1cb5744d..11d69c57 100644 --- a/Documentation/History.md +++ b/Documentation/History.md @@ -1,7 +1,7 @@ # Version Changes -## V2.22 +## v2.22 ### New Hardware Support @@ -45,7 +45,7 @@ Assets have been made for rendering this at full size, but the code is not compl - Lots of tooling and code cleanups -## V2.21 +## v2.21 ### Features & changes @@ -64,7 +64,7 @@ Alternatively you can use Spagett1's PineFlash tool that should provide a GUI in For a small number of V2 Pinecil devices there appears to be an interference issue between the Bluetooth Low Energy and some devices; more information here. If this occurs to you, please let us know in the issue and rollback to 2.20 for now. -## V2.20 +## v2.20 - First "full" release for PinecilV2 - Loots of documentation updates @@ -73,7 +73,7 @@ For a small number of V2 Pinecil devices there appears to be an interference iss - Cold Junction Calibration was reworked and now occurs _at next boot_ to make it easier to perform when the device is cold -## V2.19 +## v2.19 - Bug-fix Infinite Boot Logo - Shutdown settings for MHP30 @@ -84,7 +84,7 @@ For a small number of V2 Pinecil devices there appears to be an interference iss - Improved documents, added features table -## V2.18 +## v2.18 - Support for animated bootup logo's - Bootup logo's moved to their own IronOS-Meta repo @@ -94,7 +94,7 @@ For a small number of V2 Pinecil devices there appears to be an interference iss - Better Instructions/documents -## V2.17 +## v2.17 ### Features & changes @@ -122,7 +122,7 @@ For a small number of V2 Pinecil devices there appears to be an interference iss - -> Release has been updated to build `e065be3` after one bug with the BMA223 was found. -## V2.16 +## v2.16 - Overhaul of the Timer+ADC setup with help from @sandmanRO - Overhaul of the PID with help from @sandmanRO @@ -140,7 +140,7 @@ For a small number of V2 Pinecil devices there appears to be an interference iss - Romanian language added -## V2.15 +## v2.15 ### Features & changes @@ -165,7 +165,7 @@ Programs the same as any one Miniware unit using drag and drop. The flood doors are now open for feature requests for this unit :) -## V2.14 +## v2.14 - Fixing auto rotation bug in the LIS accelerometer in the TS80/TS80P - Adds support for two new accelerometers @@ -183,7 +183,7 @@ The flood doors are now open for feature requests for this unit :) - clang-format spec setup #801 -## V2.13 +## v2.13 - First _official_ Pinecil release - All of the wire for Pinecil releases added @@ -201,7 +201,7 @@ The flood doors are now open for feature requests for this unit :) - Rework of all of the temperature curves for better accuracy -## V2.12 +## v2.12 - Only released as pre-release - [TS80P] Improvements to the PD negotiation to handle a few more adapters cleanly @@ -210,21 +210,21 @@ The flood doors are now open for feature requests for this unit :) - Removing the very old single line menu style. -## V2.11 +## v2.11 - First TS80P support - Added in a USB-PD driver stack for the FUSB302 - Fixed some graphical glitches -## V2.10 +## v2.10 - GUI polish (animations and scroll bars) - Power pulse to keep power supplies alive - Adjustable tip response gain -## V2.09 +## v2.09 - Adjustable steps in temperature adjustment - Git hash now in build string @@ -232,19 +232,19 @@ The flood doors are now open for feature requests for this unit :) - Some minor QC3 improvements -## V2.08 +## v2.08 - Fixes auto start in sleep mode - Power limiters -## V2.07 +## v2.07 - QC fixes - Cosmetic fixes for leading 0's -## V2.06 +## v2.06 - Warning on settings reset - Temp temp re-write @@ -253,32 +253,32 @@ The flood doors are now open for feature requests for this unit :) - Menu timeouts -## V2.05 +## v2.05 - Language updates -## V2.04 +## v2.04 - GUI updates -## V2.03 +## v2.03 - Support for new accelerometers -## V2.02 +## v2.02 - Adds small font -## V2.01 +## v2.01 - Newer settings menu -## V2.00 +## v2.00 - Complete re-write of the low layer system to use the STM32 HAL for easier development - This allowed easier setup for the new ADC auto measuring system @@ -289,7 +289,7 @@ The flood doors are now open for feature requests for this unit :) - Added smaller font for said screen views -## V1.17 +## v1.17 - Added blinking cooldown display - Allowed smaller sleep timeout values @@ -297,72 +297,72 @@ The flood doors are now open for feature requests for this unit :) - Automatic startup option -## V1.16 +## v1.16 - Added automatic rotation support - Added power display graph -## V1.15 +## v1.15 - Added support for a custom bootup logo to be programmed via the DFU bootloader -## V1.14 +## v1.14 - Changed input voltage cutoff to be based on cell count rather than voltage -## V1.13 +## v1.13 - Swapped buttons for menu to prevent accidentally changing first menu item - Added auto key repeat -## V1.12 +## v1.12 - Increases sensitivity options to be 1\*9 with 0 off state - Fixes issue where going from COOL \*> soldering can leave screen off -## V1.11 +## v1.11 - Boost mode - Change sensitivity options to be 1\*8 -## V1.10 +## v1.10 - Adds help text to settings - Improves settings for the display update rate -## V1.09 +## v1.09 - Adds display modes, for slowing down or simplifying the display -## V1.08 +## v1.08 - Fix settings menu not showing flip display -## V1.07 +## v1.07 - Adds shutdown time to automatically shutdown the iron after inactivity -## V1.06 +## v1.06 - Changes H and C when the iron is heating to the minidso chevron like images -## V1.05 +## v1.05 - Adds ability to calibrate the input voltage measurement -## V1.04 +## v1.04 - Increased accuracy of the temperature control - Improved PID response slightly @@ -370,14 +370,14 @@ The flood doors are now open for feature requests for this unit :) - Nicer idle screen -## V1.03 +## v1.03 - Improved Button handling - Ability to set motion sensitivity - DC voltmeter page shows input voltage -## V1.02 +## v1.02 - Adds hold both buttons on IDLE to access the therometer mode - Changes the exit soldering mode to be holding both buttons (Like original firmware) diff --git a/Makefile b/Makefile index 08c65515..6eb3f543 100644 --- a/Makefile +++ b/Makefile @@ -144,12 +144,12 @@ docs: $(MKDOCS_YML) Documentation/* Documentation/Flashing/* Documentation/im docs-deploy: $(MKDOCS_YML) Documentation/* Documentation/Flashing/* Documentation/images/* $(MKDOCS) gh-deploy -f $(MKDOCS_YML) -d ../site -# routine check for autogenerated Documentation/README.md +# routine check to verify documentation test-md: @echo "" - @echo "---- Checking REAMDE.md... ----" + @echo "---- Checking documentation... ----" @echo "" - @/bin/sh ./scripts/deploy.sh docs_readme + @/bin/sh ./scripts/deploy.sh docs # shell style & linter check (github CI version of shellcheck is more recent than alpine one so the latter may not catch some policies) test-sh: diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 3f654266..90e48a48 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -19,7 +19,9 @@ usage() echo -e "\tbuild - compile builds of IronOS inside docker container for supported hardware" echo -e "\tclean - delete created docker image for IronOS & its build cache objects\n" echo "CMD (helper routines):" + echo -e "\tdocs - high level target to run docs_readme and docs_history (see below)\n" echo -e "\tdocs_readme - generate & OVERWRITE(!) README.md inside Documentation/ based on nav section from mkdocs.yml if it changed\n" + echo -e "\tdocs_history - check if History.md has the changelog for the latest stable release\n" echo -e "\tcheck_style_file SRC - run code style checks based on clang-format & custom parsers for source code file SRC\n" echo -e "\tcheck_style_log - run clang-format using source/Makefile and generate gcc-compatible error log in source/check-style.log\n" echo -e "STORAGE NOTICE: for \"shell\" and \"build\" commands extra files will be downloaded so make sure that you have ~5GB of free space.\n" @@ -71,6 +73,23 @@ EOF return "${ret}" } +# Documentation/History.md automagical changelog routine +docs_history() +{ + md="Documentation/History.md" + ver_md="$(sed -ne 's/^## //1p' "${md}" | head -1)" + echo "Latest changelog: ${ver_md}" + ver_git="$(git tag -l | sort | grep -e "^v" | grep -v "rc" | tail -1)" + echo "Latest release tag: ${ver_git}" + ret=0 + if [ "${ver_md}" != "${ver_git}" ]; then + ret=1 + echo "It seems there is no changelog information for ${ver_git} in ${md} yet." + echo "Please, update changelog information in ${md}." + fi; + return "${ret}" +} + # Helper function to check code style using clang-format & grep/sed custom parsers: # - basic logic moved from source/Makefile : `check-style` target for better maintainance since a lot of sh script involved; # - output goes in gcc-like error compatible format for IDEs/editors. @@ -126,27 +145,42 @@ docker_file="-f ${root_dir}/${docker_conf}" # (compose sub-command must be included, i.e. DOCKER_BIN="/usr/local/bin/docker compose" ./deploy.sh) if [ -z "${DOCKER_BIN}" ]; then - docker_bin="" + docker_app="" else - docker_bin="${DOCKER_BIN}" + docker_app="${DOCKER_BIN}" fi; # detect availability of docker docker_compose="$(command -v docker-compose)" -if [ -n "${docker_compose}" ] && [ -z "${docker_bin}" ]; then - docker_bin="${docker_compose}" +if [ -n "${docker_compose}" ] && [ -z "${docker_app}" ]; then + docker_app="${docker_compose}" fi; docker_tool="$(command -v docker)" -if [ -n "${docker_tool}" ] && [ -z "${docker_bin}" ]; then - docker_bin="${docker_tool} compose" +if [ -n "${docker_tool}" ] && [ -z "${docker_app}" ]; then + docker_app="${docker_tool} compose" fi; # give function argument a name cmd="${1}" +# meta target to verify markdown documents + +if [ "docs" = "${cmd}" ]; then + docs_readme + readme="${?}" + docs_history + hist="${?}" + if [ "${readme}" -eq 0 ] && [ "${hist}" -eq 0 ]; then + ret=0 + else + ret=1 + fi; + exit ${ret} +fi; + # if only README.md for Documentation update is required then run it & exit if [ "docs_readme" = "${cmd}" ]; then @@ -154,6 +188,13 @@ if [ "docs_readme" = "${cmd}" ]; then exit "${?}" fi; +# if only History.md for Documentation update is required then run it & exit + +if [ "docs_history" = "${cmd}" ]; then + docs_history + exit "${?}" +fi; + if [ "check_style_file" = "${cmd}" ]; then check_style_file "${2}" exit "${?}" @@ -166,7 +207,7 @@ fi; # if docker is not presented in any way show warning & exit -if [ -z "${docker_bin}" ]; then +if [ -z "${docker_app}" ]; then echo "ERROR: Can't find docker-compose nor docker tool. Please, install docker and try again." exit 1 fi; @@ -194,6 +235,6 @@ if [ "${cmd}" = "shell" ]; then echo -e "\t* type \"exit\" to end the session when done;" fi; echo -e "\t* type \"${0} clean\" to delete created container (but not cached data)" -echo -e "\n====>>>> ${docker_bin} ${docker_file} ${docker_cmd}\n" -eval "${docker_bin} ${docker_file} ${docker_cmd}" +echo -e "\n====>>>> ${docker_app} ${docker_file} ${docker_cmd}\n" +eval "${docker_app} ${docker_file} ${docker_cmd}" exit "${?}" From 9794e028b67f879c7c604902515c3949ce4a3353 Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Thu, 21 Nov 2024 23:15:47 +0300 Subject: [PATCH 4/6] source/Makefile: enable builds for supported but missing languages (#2005) --- source/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Makefile b/source/Makefile index a1192aba..e7dd44c3 100644 --- a/source/Makefile +++ b/source/Makefile @@ -20,7 +20,7 @@ HEXFILE_DIR=Hexfile OUTPUT_DIR_BASE=Objects OUTPUT_DIR=Objects/$(model) -ALL_LANGUAGES=BG CS DA DE EN ES FI FR HR HU IT JA_JP LT NL NL_BE NB PL PT RU SK SL SR_CYRL SR_LATN SV TR UK UZ VI YUE_HK ZH_CN ZH_TW +ALL_LANGUAGES=BE BG CS DA DE EL EN ES ET FI FR HR HU IT JA_JP LT NB NL_BE NL PL PT RO RU SK SL SR_CYRL SR_LATN SV TR UK UZ VI YUE_HK ZH_CN ZH_TW LANGUAGE_GROUP_CJK_LANGS=EN JA_JP YUE_HK ZH_TW ZH_CN LANGUAGE_GROUP_CJK_NAME=Chinese+Japanese From c607e73739ea655602999d593d836a00f1ee0f6c Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Mon, 25 Nov 2024 12:00:59 +0300 Subject: [PATCH 5/6] Langs check (#2006) * source/Makefile: add temp change for demo * scripts/deploy.sh: add test check for languages * scripts/deploy.sh: shellcheck sanitization * source/Makefile: revert changes for the demo --- scripts/deploy.sh | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 90e48a48..de5844f5 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -90,6 +90,22 @@ docs_history() return "${ret}" } +# source/Makefile:ALL_LANGUAGES & Translations/*.json automagical routine +build_langs() +{ + mk="../source/Makefile" + cd Translations/ || exit 1 + langs="$(echo "$(find ./*.json | sed -ne 's,^\./translation_,,; s,\.json$,,; /[A-Z]/p' ; sed -ne 's/^ALL_LANGUAGES=//p;' "${mk}")" | sed 's, ,\n,g; s,\r,,g' | sort | uniq -u)" + ret=0 + if [ -n "${langs}" ]; then + ret=1 + echo "It seems there is mismatch between supported languages and enabled builds." + echo "Please, check files in Translations/ and ALL_LANGUAGES variable in source/Makefile for:" + echo "${langs}" + fi; + return "${ret}" +} + # Helper function to check code style using clang-format & grep/sed custom parsers: # - basic logic moved from source/Makefile : `check-style` target for better maintainance since a lot of sh script involved; # - output goes in gcc-like error compatible format for IDEs/editors. @@ -173,7 +189,9 @@ if [ "docs" = "${cmd}" ]; then readme="${?}" docs_history hist="${?}" - if [ "${readme}" -eq 0 ] && [ "${hist}" -eq 0 ]; then + build_langs + langs="${?}" + if [ "${readme}" -eq 0 ] && [ "${hist}" -eq 0 ] && [ "${langs}" -eq 0 ]; then ret=0 else ret=1 @@ -195,6 +213,11 @@ if [ "docs_history" = "${cmd}" ]; then exit "${?}" fi; +if [ "build_langs" = "${cmd}" ]; then + build_langs + exit "${?}" +fi; + if [ "check_style_file" = "${cmd}" ]; then check_style_file "${2}" exit "${?}" From d16d6eca42c278d90dabdb34a44c16d7337cda56 Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Thu, 28 Nov 2024 21:27:31 +0300 Subject: [PATCH 6/6] Manage Belorussian langauge as part of cyrillic multilang builds --- .github/workflows/push.yml | 2 +- Documentation/Development.md | 2 +- Makefile | 2 +- source/Makefile | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index d4c5f9a3..a8145070 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -95,7 +95,7 @@ jobs: run: echo "GITHUB_CI_PR_SHA=${{github.event.pull_request.head.sha}}" >> "${GITHUB_ENV}" - name: Build ${{ matrix.model }} - run: make -C source/ -j$(nproc) model="${{ matrix.model }}" firmware-multi_compressed_European firmware-multi_compressed_Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese + run: make -C source/ -j$(nproc) model="${{ matrix.model }}" firmware-multi_compressed_European firmware-multi_compressed_Belorussian+Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese - name: Copy license files run: cp LICENSE scripts/LICENSE_RELEASE.md source/Hexfile/ diff --git a/Documentation/Development.md b/Documentation/Development.md index ef47bcaa..9e39209f 100644 --- a/Documentation/Development.md +++ b/Documentation/Development.md @@ -74,7 +74,7 @@ make -j$(nproc) model=Pinecil firmware-multi_European To build a Cyrillic compressed multi-language firmware for the Pinecil with as many simultaneous jobs as there are logical processors on macOS: ``` -make -j$(sysctl -n hw.logicalcpu) model=Pinecil firmware-multi_compressed_Bulgarian+Russian+Serbian+Ukrainian +make -j$(sysctl -n hw.logicalcpu) model=Pinecil firmware-multi_compressed_Belorussian+Bulgarian+Russian+Serbian+Ukrainian ``` To build a custom multi-language firmware including English and Simplified Chinese for the TS80: diff --git a/Makefile b/Makefile index 6eb3f543..20453f4c 100644 --- a/Makefile +++ b/Makefile @@ -199,7 +199,7 @@ build-all: # target to build multilang supported builds for Pinecil & PinecilV2 build-multilang: @for modelml in $(MODELS_ML); do \ - $(MAKE) -C source/ -j2 model=$${modelml} firmware-multi_compressed_European firmware-multi_compressed_Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese ; \ + $(MAKE) -C source/ -j2 model=$${modelml} firmware-multi_compressed_European firmware-multi_compressed_Belorussian+Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese ; \ mkdir -p $(OUT_DIR)/$${modelml}_multi-lang ; \ cp $(OUT_HEX)/$${modelml}_multi_*.bin $(OUT_DIR)/$${modelml}_multi-lang ; \ cp $(OUT_HEX)/$${modelml}_multi_*.hex $(OUT_DIR)/$${modelml}_multi-lang ; \ diff --git a/source/Makefile b/source/Makefile index e7dd44c3..5b84ca92 100644 --- a/source/Makefile +++ b/source/Makefile @@ -31,8 +31,8 @@ LANGUAGE_GROUP_CUSTOM_LANGS=$(custom_multi_langs) LANGUAGE_GROUP_CUSTOM_NAME=Custom endif -LANGUAGE_GROUP_CYRILLIC_LANGS=EN BG RU SR_CYRL SR_LATN UK -LANGUAGE_GROUP_CYRILLIC_NAME=Bulgarian+Russian+Serbian+Ukrainian +LANGUAGE_GROUP_CYRILLIC_LANGS=EN BE BG RU SR_CYRL SR_LATN UK +LANGUAGE_GROUP_CYRILLIC_NAME=Belorussian+Bulgarian+Russian+Serbian+Ukrainian LANGUAGE_GROUP_EUR_LANGS=EN $(filter-out $(LANGUAGE_GROUP_CJK_LANGS) $(LANGUAGE_GROUP_CYRILLIC_LANGS),$(ALL_LANGUAGES)) LANGUAGE_GROUP_EUR_NAME=European