From 6f934650a0dcd1432033a4e88886fc778f87a349 Mon Sep 17 00:00:00 2001 From: Compot Developer Date: Wed, 14 Oct 2026 14:18:01 +0000 Subject: [PATCH 1/3] ci: device reports get the fixed title "User test report" The form pre-fills it, and a workflow sets it on every issue labelled device-report, so a title typed by the reporter is replaced. --- .github/ISSUE_TEMPLATE/device_report.yml | 2 +- .github/workflows/device-report-title.yml | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/device-report-title.yml diff --git a/.github/ISSUE_TEMPLATE/device_report.yml b/.github/ISSUE_TEMPLATE/device_report.yml index e03793cd..894c3d5f 100644 --- a/.github/ISSUE_TEMPLATE/device_report.yml +++ b/.github/ISSUE_TEMPLATE/device_report.yml @@ -1,6 +1,6 @@ name: Device report description: Report how OpenIPC Decoder works on your phone, tablet, TV, set-top box or car device -title: "[Device]: " +title: "User test report" labels: ["device-report"] body: - type: markdown diff --git a/.github/workflows/device-report-title.yml b/.github/workflows/device-report-title.yml new file mode 100644 index 00000000..920ce0c6 --- /dev/null +++ b/.github/workflows/device-report-title.yml @@ -0,0 +1,22 @@ +name: Device report title + +# Device reports get one fixed title, set here rather than asked from the reporter: the form +# only pre-fills it and people replaced it with anything from a model to a problem (#120, #159) +on: + issues: + types: [opened, edited, labeled] + +permissions: + issues: write + +jobs: + title: + if: contains(github.event.issue.labels.*.name, 'device-report') && github.event.issue.title != 'User test report' + runs-on: ubuntu-latest + steps: + - name: Set the title + env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} + NUMBER: ${{ github.event.issue.number }} + run: gh issue edit "$NUMBER" --repo "$REPO" --title "User test report" From 74b3e58f04c5f0b6e52d8a2b025dc0b793ed7bde Mon Sep 17 00:00:00 2001 From: Compot Developer Date: Wed, 14 Oct 2026 14:29:10 +0000 Subject: [PATCH 2/3] docs: issue forms in English / Chinese / Russian Field labels and the short options of both forms, the device report title and the intro text in three languages, so reporters understand the form and write in their own language without a translator. Longer field descriptions stay in English. --- .github/ISSUE_TEMPLATE/camera_report.yml | 78 ++++++++++++----------- .github/ISSUE_TEMPLATE/device_report.yml | 62 +++++++++--------- .github/workflows/device-report-title.yml | 5 +- 3 files changed, 77 insertions(+), 68 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/camera_report.yml b/.github/ISSUE_TEMPLATE/camera_report.yml index 09f4006a..7c3d59a6 100644 --- a/.github/ISSUE_TEMPLATE/camera_report.yml +++ b/.github/ISSUE_TEMPLATE/camera_report.yml @@ -1,4 +1,4 @@ -name: Camera report +name: "Camera report / 摄像机报告 / Отчёт о камере" description: Report how OpenIPC Decoder plays a camera (IP camera, NVR channel, encoder, RTSP server) title: "[Camera]: " labels: ["camera-report"] @@ -8,12 +8,16 @@ body: value: | Thanks for testing! Camera reports help other users and show which streams need work. **Remove the password from the URL** (write `user:***`) and do not post public IP addresses. - The app version and build hash are shown in the menu next to **Exit**, for example `v2.00, 1dda076`. + The app version and build hash are shown in the menu next to **Exit**, for example `v2.02, d6b50d1`. + + 感谢测试!可以用中文填写。**请从 URL 中删除密码**(写成 `user:***`),不要公开 IP 地址。 + + Спасибо за тестирование! Можно писать по-русски. **Уберите пароль из URL** (`user:***`) и не публикуйте внешние IP-адреса. - type: input id: manufacturer attributes: - label: Manufacturer + label: "Manufacturer / 厂商 / Производитель" placeholder: "Hikvision, Dahua, XM (Xiongmai), OpenIPC board, ..." validations: required: true @@ -21,7 +25,7 @@ body: - type: input id: model attributes: - label: Model + label: "Model / 型号 / Модель" description: Model as printed on the label or shown in the camera's web interface placeholder: "DS-2CD1023G0-I, IPC-HFW1230S, SSC335 board, ..." validations: @@ -30,38 +34,38 @@ body: - type: dropdown id: firmware_kind attributes: - label: Firmware + label: "Firmware / 固件 / Прошивка" options: - OpenIPC (Majestic) - OpenIPC (other streamer) - Stock / vendor firmware - - Other + - "Other / 其他 / Другое" validations: required: true - type: input id: firmware_version attributes: - label: Firmware version (optional) + label: "Firmware version (optional) / 固件版本(可选) / Версия прошивки (необязательно)" description: "OpenIPC: `cat /etc/os-release` or the web interface; vendor firmware: version and date" placeholder: "OpenIPC 2.6.10.12 lite / V5.5.0 build 180206" - type: input id: soc attributes: - label: Processor / SoC (optional) + label: "Processor, SoC (optional) / 处理器、芯片(可选) / Процессор, SoC (необязательно)" placeholder: "SigmaStar SSC335, HiSilicon Hi3516EV300, Goke GK7205V300, Ingenic T31, ..." - type: input id: sensor attributes: - label: Image sensor (optional) + label: "Image sensor (optional) / 图像传感器(可选) / Сенсор (необязательно)" placeholder: "SC2336, IMX307, GC2053, ..." - type: input id: url attributes: - label: RTSP URL + label: "RTSP URL / RTSP 地址 / RTSP URL" description: The URL that works in the app, with the password replaced by `***`. The path matters most (`/stream=0`, `/Streaming/Channels/101`, `/cam/realmonitor?channel=1&subtype=0`, ...) placeholder: "rtsp://admin:***@192.168.1.10:554/stream=0" validations: @@ -70,7 +74,7 @@ body: - type: textarea id: other_urls attributes: - label: Other streams (optional) + label: "Other streams (optional) / 其他码流(可选) / Другие потоки (необязательно)" description: Substream, MJPEG or other paths of the same camera, one per line placeholder: | rtsp://admin:***@192.168.1.10:554/stream=1 — substream 704x576 @@ -79,39 +83,39 @@ body: - type: dropdown id: video_codec attributes: - label: Video codec + label: "Video codec / 视频编码 / Видеокодек" multiple: true options: - H.264 - H.265 - MJPEG - - Other + - "Other / 其他 / Другое" validations: required: true - type: input id: video_format attributes: - label: Resolution, frame rate, bitrate (optional) + label: "Resolution, frame rate, bitrate (optional) / 分辨率、帧率、码率(可选) / Разрешение, частота кадров, битрейт (необязательно)" placeholder: "1920x1080, 25 fps, 4 Mbit/s, key frame every 1 s" - type: dropdown id: audio_codec attributes: - label: Audio codec + label: "Audio codec / 音频编码 / Аудиокодек" options: - - No audio + - "No audio / 无音频 / Без звука" - AAC - Opus - G.711 (PCMU / PCMA) - L16 / PCM - G.726 - - Other / unknown + - "Other, unknown / 其他、未知 / Другое, неизвестно" - type: checkboxes id: transports attributes: - label: Transports that work + label: "Transports that work / 可用的传输方式 / Работающие транспорты" description: Menu → slot URL dialog (single view) → TCP / UDP / Auto / Multicast; "UDP push" = the camera sends RTP to a `udp://` slot or the U cell options: - label: TCP @@ -123,26 +127,26 @@ body: - type: dropdown id: auth attributes: - label: Authentication + label: "Authentication / 认证 / Аутентификация" options: - - None + - "None / 无 / Нет" - Basic - Digest - Credentials in the URL path (e.g. user=…_password=…) - - Unknown + - "Unknown / 未知 / Неизвестно" - type: checkboxes id: limits attributes: - label: Camera limits + label: "Camera limits / 摄像机限制 / Ограничения камеры" options: - - label: Accepts only one RTSP client at a time - - label: Needs a reconnect after the camera reboots (the app does not recover by itself) + - label: "Accepts only one RTSP client at a time / 同时只接受一个 RTSP 客户端 / Принимает только одного RTSP-клиента" + - label: "Needs a reconnect after the camera reboots / 摄像机重启后需要手动重连 / После перезагрузки камеры нужно переподключение" - type: input id: app_device attributes: - label: App version and device + label: "App version and device / 应用版本和设备 / Версия приложения и устройство" description: App version from the menu, and the device it ran on placeholder: "v2.00, 1dda076 on AG-216 (Android 10)" validations: @@ -151,34 +155,34 @@ body: - type: dropdown id: result attributes: - label: Overall result + label: "Overall result / 总体结果 / Общий результат" options: - - Works - - Works with issues - - Does not work + - "Works / 正常 / Работает" + - "Works with issues / 可用但有问题 / Работает с проблемами" + - "Does not work / 不能用 / Не работает" validations: required: true - type: checkboxes id: works attributes: - label: What works + label: "What works / 哪些功能正常 / Что работает" options: - - label: Picture in single view - - label: Picture in multi-view - - label: Audio - - label: WebUI - - label: Debug page shows the stream (http://:8085/) + - label: "Picture in single view / 单画面图像 / Картинка в одиночном виде" + - label: "Picture in multi-view / 多画面图像 / Картинка в мультивью" + - label: "Audio / 音频 / Звук" + - label: "WebUI" + - label: "Debug page shows the stream (http://:8085/) / 调试页面显示码流 / Отладочная страница показывает поток" - type: textarea id: comment attributes: - label: Comment (optional) + label: "Comment (optional) / 备注(可选) / Комментарий (необязательно)" description: Anything that did not work or looked wrong, settings you had to change on the camera, delay, picture artefacts, ... - type: textarea id: logs attributes: - label: Log (optional) + label: "Log (optional) / 日志(可选) / Лог (необязательно)" description: "With USB/network debugging enabled: `adb logcat -d -s OpenIPCDecoder`, or `http://:8085/log`. Check that no password is in it." render: text diff --git a/.github/ISSUE_TEMPLATE/device_report.yml b/.github/ISSUE_TEMPLATE/device_report.yml index 894c3d5f..60f4e9f7 100644 --- a/.github/ISSUE_TEMPLATE/device_report.yml +++ b/.github/ISSUE_TEMPLATE/device_report.yml @@ -1,32 +1,36 @@ -name: Device report +name: "Device report / 设备报告 / Отчёт об устройстве" description: Report how OpenIPC Decoder works on your phone, tablet, TV, set-top box or car device -title: "User test report" +title: "User test report / 用户测试报告 / Отчёт о тестировании от пользователя" labels: ["device-report"] body: - type: markdown attributes: value: | Thanks for testing! Reports are collected into the **Verified devices** table in the README. - The app version and build hash are shown in the menu next to **Exit**, for example `v2.00, a9ac8df`. + The app version and build hash are shown in the menu next to **Exit**, for example `v2.02, d6b50d1`. + + 感谢测试!可以用中文填写。应用版本和构建哈希显示在菜单中 **Exit** 旁边。 + + Спасибо за тестирование! Можно писать по-русски. Версия приложения и хэш сборки — в меню рядом с **Exit**. - type: dropdown id: device_type attributes: - label: Device type + label: "Device type / 设备类型 / Тип устройства" options: - - Phone - - Tablet - - TV - - Set-top box - - Car device / mirror - - Other + - "Phone / 手机 / Телефон" + - "Tablet / 平板 / Планшет" + - "TV / 电视 / Телевизор" + - "Set-top box / 机顶盒 / ТВ-приставка" + - "Car device, mirror / 车载设备、后视镜 / Автомобильное устройство, зеркало" + - "Other / 其他 / Другое" validations: required: true - type: input id: model attributes: - label: Manufacturer and model + label: "Manufacturer and model / 厂商和型号 / Производитель и модель" placeholder: "Samsung Galaxy A51 (SM-A515F)" validations: required: true @@ -34,7 +38,7 @@ body: - type: input id: android attributes: - label: Android version / firmware + label: "Android version, firmware / Android 版本、固件 / Версия Android, прошивка" description: Android version, plus the vendor firmware if it is not stock (ColorOS, SlimBOXtv, ...) placeholder: "Android 13 / One UI 5.1" validations: @@ -43,14 +47,14 @@ body: - type: input id: soc attributes: - label: SoC and kernel version + label: "SoC and kernel version / 芯片和内核版本 / SoC и версия ядра" description: Settings → About → Kernel version. SoC if known (Amlogic S905X3, Allwinner H313, ...) placeholder: "Exynos 9611, kernel 4.14.113" - type: input id: app_version attributes: - label: App version + label: "App version / 应用版本 / Версия приложения" description: Shown in the menu next to Exit placeholder: "v2.00, a9ac8df" validations: @@ -59,43 +63,43 @@ body: - type: dropdown id: result attributes: - label: Overall result + label: "Overall result / 总体结果 / Общий результат" options: - - Works - - Works with issues - - Does not work + - "Works / 正常 / Работает" + - "Works with issues / 可用但有问题 / Работает с проблемами" + - "Does not work / 不能用 / Не работает" validations: required: true - type: checkboxes id: works attributes: - label: What works + label: "What works / 哪些功能正常 / Что работает" options: - - label: H.264 video - - label: H.265 video - - label: Audio - - label: Quad mode - - label: Remote control / D-pad - - label: WebUI - - label: Screenshot (long press) + - label: "H.264 video / H.264 视频 / Видео H.264" + - label: "H.265 video / H.265 视频 / Видео H.265" + - label: "Audio / 音频 / Звук" + - label: "Multi-view / 多画面 / Мультивью" + - label: "Remote control, D-pad / 遥控器、方向键 / Пульт, D-pad" + - label: "WebUI" + - label: "Screenshot (long press) / 截图(长按) / Скриншот (долгое нажатие)" - type: textarea id: stream attributes: - label: Camera and stream + label: "Camera and stream / 摄像机和码流 / Камера и поток" description: Camera firmware (OpenIPC or other), resolution, FPS, bitrate, audio codec placeholder: "OpenIPC on gk7205v300, H.265 1920x1080@25, 2 Mbps, AAC 16 kHz" - type: textarea id: notes attributes: - label: Problems and notes + label: "Problems and notes / 问题和备注 / Проблемы и заметки" description: What did not work or looked wrong (cropped picture, no sound, delay, crash, ...) - type: textarea id: logs attributes: - label: Log (optional) + label: "Log (optional) / 日志(可选) / Лог (необязательно)" description: "With USB/network debugging enabled: `adb logcat -d -s OpenIPCDecoder`" render: text diff --git a/.github/workflows/device-report-title.yml b/.github/workflows/device-report-title.yml index 920ce0c6..ba5e95d3 100644 --- a/.github/workflows/device-report-title.yml +++ b/.github/workflows/device-report-title.yml @@ -11,7 +11,7 @@ permissions: jobs: title: - if: contains(github.event.issue.labels.*.name, 'device-report') && github.event.issue.title != 'User test report' + if: contains(github.event.issue.labels.*.name, 'device-report') && github.event.issue.title != 'User test report / 用户测试报告 / Отчёт о тестировании от пользователя' runs-on: ubuntu-latest steps: - name: Set the title @@ -19,4 +19,5 @@ jobs: GH_TOKEN: ${{ github.token }} REPO: ${{ github.repository }} NUMBER: ${{ github.event.issue.number }} - run: gh issue edit "$NUMBER" --repo "$REPO" --title "User test report" + TITLE: User test report / 用户测试报告 / Отчёт о тестировании от пользователя + run: gh issue edit "$NUMBER" --repo "$REPO" --title "$TITLE" From 3d09d4a0f8d2d00fd71c3637150064ea577389d2 Mon Sep 17 00:00:00 2001 From: Compot Developer Date: Wed, 14 Oct 2026 14:33:21 +0000 Subject: [PATCH 3/3] docs: issue forms ask only for the app version, not the build hash --- .github/ISSUE_TEMPLATE/camera_report.yml | 4 ++-- .github/ISSUE_TEMPLATE/device_report.yml | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/camera_report.yml b/.github/ISSUE_TEMPLATE/camera_report.yml index 7c3d59a6..0ea62dfc 100644 --- a/.github/ISSUE_TEMPLATE/camera_report.yml +++ b/.github/ISSUE_TEMPLATE/camera_report.yml @@ -8,7 +8,7 @@ body: value: | Thanks for testing! Camera reports help other users and show which streams need work. **Remove the password from the URL** (write `user:***`) and do not post public IP addresses. - The app version and build hash are shown in the menu next to **Exit**, for example `v2.02, d6b50d1`. + The app version is shown in the menu next to **Exit**, for example `v2.02`. 感谢测试!可以用中文填写。**请从 URL 中删除密码**(写成 `user:***`),不要公开 IP 地址。 @@ -148,7 +148,7 @@ body: attributes: label: "App version and device / 应用版本和设备 / Версия приложения и устройство" description: App version from the menu, and the device it ran on - placeholder: "v2.00, 1dda076 on AG-216 (Android 10)" + placeholder: "v2.02 on AG-216 (Android 10)" validations: required: true diff --git a/.github/ISSUE_TEMPLATE/device_report.yml b/.github/ISSUE_TEMPLATE/device_report.yml index 60f4e9f7..f50ea383 100644 --- a/.github/ISSUE_TEMPLATE/device_report.yml +++ b/.github/ISSUE_TEMPLATE/device_report.yml @@ -7,11 +7,11 @@ body: attributes: value: | Thanks for testing! Reports are collected into the **Verified devices** table in the README. - The app version and build hash are shown in the menu next to **Exit**, for example `v2.02, d6b50d1`. + The app version is shown in the menu next to **Exit**, for example `v2.02`. - 感谢测试!可以用中文填写。应用版本和构建哈希显示在菜单中 **Exit** 旁边。 + 感谢测试!可以用中文填写。应用版本显示在菜单中 **Exit** 旁边。 - Спасибо за тестирование! Можно писать по-русски. Версия приложения и хэш сборки — в меню рядом с **Exit**. + Спасибо за тестирование! Можно писать по-русски. Версия приложения — в меню рядом с **Exit**. - type: dropdown id: device_type @@ -56,7 +56,7 @@ body: attributes: label: "App version / 应用版本 / Версия приложения" description: Shown in the menu next to Exit - placeholder: "v2.00, a9ac8df" + placeholder: "v2.02" validations: required: true