From 1f8ddca284d408db8cefb6177e04380419e503a1 Mon Sep 17 00:00:00 2001 From: Peter Dave Hello Date: Sat, 12 Apr 2025 20:48:22 +0800 Subject: [PATCH 1/7] Add a basic zh_TW Traditional Chinese locale (#2135) --- lang/zh_TW/auth.php | 20 +++++++++ lang/zh_TW/pagination.php | 19 ++++++++ lang/zh_TW/passwords.php | 20 +++++++++ lang/zh_TW/validation.php | 91 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+) create mode 100644 lang/zh_TW/auth.php create mode 100644 lang/zh_TW/pagination.php create mode 100644 lang/zh_TW/passwords.php create mode 100644 lang/zh_TW/validation.php diff --git a/lang/zh_TW/auth.php b/lang/zh_TW/auth.php new file mode 100644 index 000000000..74b841287 --- /dev/null +++ b/lang/zh_TW/auth.php @@ -0,0 +1,20 @@ + '您輸入的帳號密碼與系統記錄不符。', + 'password' => '您輸入的密碼不正確。', + 'throttle' => '登入嘗試次數太多,請於 :seconds 秒後再試。', + +]; diff --git a/lang/zh_TW/pagination.php b/lang/zh_TW/pagination.php new file mode 100644 index 000000000..cca0a8930 --- /dev/null +++ b/lang/zh_TW/pagination.php @@ -0,0 +1,19 @@ + '« 上一頁', + 'next' => '下一頁 »', + +]; diff --git a/lang/zh_TW/passwords.php b/lang/zh_TW/passwords.php new file mode 100644 index 000000000..f3e0935c9 --- /dev/null +++ b/lang/zh_TW/passwords.php @@ -0,0 +1,20 @@ + '您的密碼已成功重設!', + 'sent' => '我們已將密碼重設連結寄送至您的電子郵件信箱!', + 'password' => '密碼必須至少包含六個字元,且與確認密碼相符。', + +]; diff --git a/lang/zh_TW/validation.php b/lang/zh_TW/validation.php new file mode 100644 index 000000000..2f4c46f4c --- /dev/null +++ b/lang/zh_TW/validation.php @@ -0,0 +1,91 @@ + [ + 'attribute-name' => [ + + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [ + 'address' => '地址', + 'age' => '年齡', + 'body' => '內文', + 'cell' => '行動電話', + 'city' => '縣市', + 'country' => '國家', + 'date' => '日期', + 'day' => '日', + 'excerpt' => '摘要', + 'first_name' => '名字', + 'gender' => '性別', + 'marital_status' => '婚姻狀態', + 'profession' => '職業', + 'nationality' => '國籍', + 'hour' => '時', + 'last_name' => '姓氏', + 'message' => '訊息內容', + 'minute' => '分', + 'mobile' => '行動電話', + 'month' => '月', + 'name' => '名稱', + 'zipcode' => '郵遞區號', + 'company_name' => '公司名稱', + 'neighborhood' => '鄰里', + 'number' => '號碼', + 'password' => '密碼', + 'phone' => '電話號碼', + 'second' => '秒', + 'sex' => '性別', + 'state' => '縣市', + 'street' => '街道', + 'subject' => '主旨', + 'text' => '文字', + 'time' => '時間', + 'title' => '標題', + 'username' => '使用者帳號', + 'year' => '年', + 'description' => '說明', + 'password_confirmation' => '確認密碼', + 'current_password' => '目前密碼', + 'complement' => '補充說明', + 'modality' => '模式', + 'category' => '類別', + 'blood_type' => '血型', + 'birth_date' => '出生日期', + ], +]; From 111067d7e3738ae211d57de22a55d95178e66f7b Mon Sep 17 00:00:00 2001 From: selbiselbi <8750276+selbiselbi@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:15:20 +0200 Subject: [PATCH 2/7] Added basic french translation (#2137) --- lang/fr_FR/auth.php | 20 ++++ lang/fr_FR/pagination.php | 19 ++++ lang/fr_FR/passwords.php | 23 ++++ lang/fr_FR/validation.php | 230 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 292 insertions(+) create mode 100644 lang/fr_FR/auth.php create mode 100644 lang/fr_FR/pagination.php create mode 100644 lang/fr_FR/passwords.php create mode 100644 lang/fr_FR/validation.php diff --git a/lang/fr_FR/auth.php b/lang/fr_FR/auth.php new file mode 100644 index 000000000..4cc78b5cf --- /dev/null +++ b/lang/fr_FR/auth.php @@ -0,0 +1,20 @@ + 'Ces crédentials ne correspondent pas à nos archives.', + 'password' => 'Le mot de passe fourni est incorrect.', + 'throttle' => 'Trop de tentatives de connexion échouées. Veuillez réessayer dans :seconds secondes.', + +]; diff --git a/lang/fr_FR/pagination.php b/lang/fr_FR/pagination.php new file mode 100644 index 000000000..8eff37464 --- /dev/null +++ b/lang/fr_FR/pagination.php @@ -0,0 +1,19 @@ + '« Précédent', + 'next' => 'Suivant »', + +]; diff --git a/lang/fr_FR/passwords.php b/lang/fr_FR/passwords.php new file mode 100644 index 000000000..738d1ef54 --- /dev/null +++ b/lang/fr_FR/passwords.php @@ -0,0 +1,23 @@ + 'Votre mot de passe a été réinitialisé!', + 'sent' => 'Nous vous avons envoyé un email contenant votre lien de réinitialisation !', + 'password' => 'Le mot de passe et le mot de passe de confirmation doivent contenir au moins 6 caractères.', + 'throttled' => 'Veuillez attendre avant de réessayer.', + 'token' => 'Le jeton de réinitialisation du mot de passe n\'est pas valide.', + 'user' => 'Aucun email trouvé pour cette adresse.', + +]; diff --git a/lang/fr_FR/validation.php b/lang/fr_FR/validation.php new file mode 100644 index 000000000..e829c1004 --- /dev/null +++ b/lang/fr_FR/validation.php @@ -0,0 +1,230 @@ + 'Le champ :attribute doit être valide.', + 'accepted_if' => 'Le champ :attribute doit être accepté lorsque :other est :value.', + 'active_url' => 'Le champ :attribute doit être une URL valide.', + 'after' => 'Le champ :attribute doit être une date postérieure à :date.', + 'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale à :date.', + 'alpha' => 'Le champ :attribute ne doit contenir que des lettres.', + 'alpha_dash' => 'Le champ :attribute ne doit contenir que des lettres, des chiffres, des tirets ou underscore.', + 'alpha_num' => 'Le champ :attribute ne doit contenir que des lettres et des chiffres.', + 'array' => 'Le champ :attribute doit être un tableau.', + 'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques ou des symboles ascii.', + 'before' => 'Le champ :attribute doit être une date antérieure à :date.', + 'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale à :date.', + 'between' => [ + 'array' => 'Le champ :attribute doit contenir entre :min et :max elements.', + 'file' => 'Le champ :attribute doit être compris entre :min et :max kilo-octets.', + 'numeric' => 'Le champ :attribute doit être comprise entre :min et :max.', + 'string' => 'Le champ :attribute doit contenir entre :min et :max caractères.', + ], + 'boolean' => 'Le champ :attribute doit être vrai ou faux.', + 'can' => 'Le champ :attribute contient une valeur non autorisée.', + 'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.', + 'current_password' => 'Le mot de passe est incorrect.', + 'date' => 'Le champ :attribute doit être une date valide.', + 'date_equals' => 'Le champ :attribute doit être une date égale à :date.', + 'date_format' => 'Le champ :attribute doit correspondre au format :format.', + 'decimal' => 'Le champ :attribute doit avoir :decimal chiffres décimaux.', + 'declined' => 'Le champ :attribute doit être refusé.', + 'declined_if' => 'Le champ :attribute doit être rejeté lorsque :other est :value.', + 'different' => 'Le champ :attribute et :other doivent être différents.', + 'digits' => 'Le champ :attribute doit être composé de :digits chiffres.', + 'digits_between' => 'Le champ :attribute doit être compris entre :min et :max.', + 'dimensions' => 'Le champ :attribute taille de la photo non valide.', + 'distinct' => 'Le champ :attribute a une valeur dupliquée.', + 'doesnt_end_with' => 'Le champ :attribute ne doit pas se terminer par l\'un des éléments suivants: :values.', + 'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer par l\'un des éléments suivants: :values.', + 'email' => 'Le champ :attribute doit être une adresse email valide.', + 'ends_with' => 'Le champ :attribute doit se terminer par l\'un des éléments suivants: :values.', + 'enum' => ':attribute séléctionné non valide.', + 'exists' => ':attribute existe déjà.', + 'file' => 'Le champ :attribute doit être un fichier.', + 'filled' => 'Le champ :attribute doit contenir une valeur.', + 'gt' => [ + 'array' => 'Le champ :attribute doit contenir plus de :value éléments.', + 'file' => 'Le champ :attribute doit être supérieur à :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être supérieur à :value.', + 'string' => 'Le champ :attribute doit faire plus de :value caractères.', + ], + 'gte' => [ + 'array' => 'Le champ :attribute doit contenir au moins :value éléments.', + 'file' => 'Le champ :attribute doit être supérieur ou égal à :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être supérieur ou égal à :value.', + 'string' => 'Le champ :attribute doit être supérieur ou égal à :value caractères.', + ], + 'image' => 'Le champ :attribute doit être une photo.', + 'in' => ':attribute séléctionné non valide.', + 'in_array' => 'Le champ :attribute doit être contenant dans :other.', + 'integer' => 'Le champ :attribute doit être un nombre entier.', + 'ip' => 'Le champ :attribute doit être une adresse IP valide.', + 'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.', + 'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.', + 'json' => 'Le champ :attribute doit être une string JSON valide.', + 'lowercase' => 'Le champ :attribute doit être en minuscule.', + 'lt' => [ + 'array' => 'Le champ :attribute doit contenir moins de :value elements.', + 'file' => 'Le champ :attribute doit être inférieur à :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être inférieur à :value.', + 'string' => 'Le champ :attribute doit faire moins de :value caractères.', + ], + 'lte' => [ + 'array' => 'Le champ :attribute ne doit pas comporter plus de :value éléments.', + 'file' => 'Le champ :attribute doit être inférieur ou égal à :value kilo-octets.', + 'numeric' => 'Le champ :attribute doit être inférieur ou égal à :value.', + 'string' => 'Le champ :attribute doit être inférieur ou égal à :value caractères.', + ], + 'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.', + 'max' => [ + 'array' => 'Le champ :attribute ne doit pas comporter plus de :max éléments.', + 'file' => 'Le champ :attribute ne doit pas être supérieur à :max kilo-octets.', + 'numeric' => 'Le champ :attribute ne doit pas être supérieur à :max.', + 'string' => 'Le champ :attribute non ne doit pas faire plus de :max caractères.', + ], + 'max_digits' => 'Le champ :attribute ne peut avoir plus de :max chiffres.', + 'mimes' => 'Le champ :attribute doit être un fichier de type: :values.', + 'mimetypes' => 'Le champ :attribute doit être un fichier de type: :values.', + 'min' => [ + 'array' => 'Le champ :attribute doit contenir au moins :min éléments.', + 'file' => 'Le champ :attribute doit être au minimum de :min kilo-octets.', + 'numeric' => 'Le champ :attribute doit être au moins :min.', + 'string' => 'Le champ :attribute deve contenir au moins :min caractères.', + ], + 'min_digits' => 'Le champ :attribute doit avoir au moins :min chiffres.', + 'missing' => 'Le champ :attribute doit être manquant.', + 'missing_if' => 'Le champ :attribute doit être absent lorsque :other est :value.', + 'missing_unless' => 'Le champ :attribute doit être manquant, sauf si :other est :value.', + 'missing_with' => 'Le champ :attribute doit être absent lorsque :values est présent.', + 'missing_with_all' => 'Le champ :attribute doit être manquant lorsque :values sont présentes.', + 'multiple_of' => 'Le champ :attribute doit être un multiple de :value.', + 'not_in' => ':attribute séléctionné non valide.', + 'not_regex' => 'Le format du champ :attribute est invalide.', + 'numeric' => 'Le champ :attribute doit être numérique.', + 'password' => [ + 'letters' => 'Le champ :attribute doit cotenir au moins une lettre.', + 'mixed' => 'Le champ :attribute doit conteniur au moins un caractère minuscule et un caractère majuscule.', + 'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.', + 'symbols' => 'Le champ :attribute doit contenir au moins un symbole spécial.', + 'uncompromised' => 'L\':attribute est apparu dans une fuite de données. Veuillez choisir un autre :attribut', + ], + 'present' => 'Le champ :attribute doit être présent.', + 'prohibited' => 'Le champ :attribute est interdit', + 'prohibited_if' => 'Le champ :attribute est interdit quand :other est :value.', + 'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other ne figure dans :values.', + 'prohibits' => 'Le champ :attribute interdit à :other d\'être présent.', + 'regex' => 'Le format du champ :attribute est invalide.', + 'required' => 'Le champ :attribute est obligatoire.', + 'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour: :values.', + 'required_if' => 'Le champ :attribute est obligatoire quand :other est :value.', + 'required_if_accepted' => 'Le champ :attribute est nécessaire lorsque :other est accepté.', + 'required_unless' => 'Le champ :attribute est obligatoire, sauf si :other figure dans :values.', + 'required_with' => 'Le champ :attribute est obligatoire lorsque :values est présent.', + 'required_with_all' => 'Le champ :attribute est obligatoire lorsque :values est présent.', + 'required_without' => 'Le champ :attribute est requis lorsque :values n\'est pas présent', + 'required_without_all' => 'Le champ :attribute est nécessaire lorsqu\'aucune des valeurs :values n\'est présente.', + 'same' => 'Le champ :attribute ne doit pas être identique à :other', + 'size' => [ + 'array' => 'Le champ :attribute doit contenir des :size éléments.', + 'file' => 'Le champ :attribute doit être :size kilo-octets.', + 'numeric' => 'Le champ :attribute doit être :size.', + 'string' => 'Le champ :attribute doit faire :size caractères.', + ], + 'starts_with' => 'Le champ :attribute doit commencer avec: :values.', + 'string' => 'Le champ :attribute doit être une chaine de caractères.', + 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', + 'unique' => 'Il :attribute doit être unqieu.', + 'uploaded' => 'Il :attribute n\'a pas pu être téléchargé.', + 'uppercase' => 'Le champ :attribute doit être en majuscule.', + 'url' => 'Le champ :attribute doit être une URL valide.', + 'ulid' => 'Le champ :attribute doit être un ULID valide.', + 'uuid' => 'Le champ :attribute doit être un UUID valide.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [ + 'address' => 'adresse', + 'age' => 'age', + 'body' => 'contenu', + 'cell' => 'cellule', + 'city' => 'ville', + 'country' => 'pays', + 'date' => 'date', + 'day' => 'jour', + 'excerpt' => 'résumé', + 'first_name' => 'prénom', + 'gender' => 'sexe', + 'marital_status' => 'situation familliale', + 'profession' => 'profession', + 'nationality' => 'nationalité', + 'hour' => 'heure', + 'last_name' => 'nom de famille', + 'message' => 'message', + 'minute' => 'minute', + 'mobile' => 'mobile', + 'month' => 'mois', + 'name' => 'nom', + 'zipcode' => 'code postal', + 'company_name' => 'entreprise', + 'neighborhood' => 'quartier', + 'number' => 'numéro', + 'password' => 'mot de passe', + 'phone' => 'téléphone', + 'second' => 'seconde', + 'sex' => 'sexe', + 'state' => 'région', + 'street' => 'rue', + 'subject' => 'sujet', + 'text' => 'texte', + 'time' => 'temps', + 'title' => 'titre', + 'username' => 'login', + 'year' => 'année', + 'description' => 'description', + 'password_confirmation' => 'confirmation du mot de passe', + 'current_password' => 'mot de passe actuel', + 'complement' => 'complément', + 'modality' => 'modalité', + 'category' => 'catégorie', + 'blood_type' => 'groupe sanguin', + 'birth_date' => 'date de naissance', + ], +]; From aac6a69c683c0edded70279bc49d63243fb83f84 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Mon, 14 Apr 2025 14:51:01 +0200 Subject: [PATCH 3/7] [QoL] Add issue and request templates (#2140) Co-authored-by: Alex Justesen --- .github/DISCUSSION_TEMPLATE/general.yml | 16 ++++ .github/DISCUSSION_TEMPLATE/ideas.yml | 21 +++++ .github/DISCUSSION_TEMPLATE/q-a.yml | 35 ++++++++ .github/ISSUE_TEMPLATE/BUG_REPORT_FORM.yml | 81 +++++++++++++++++++ .../ISSUE_TEMPLATE/FEATURE_REQUEST_FORM.yml | 40 +++++++++ .github/ISSUE_TEMPLATE/bug_report.md | 36 --------- .github/ISSUE_TEMPLATE/config.yml | 8 ++ .github/ISSUE_TEMPLATE/feature_request.md | 17 ---- 8 files changed, 201 insertions(+), 53 deletions(-) create mode 100644 .github/DISCUSSION_TEMPLATE/general.yml create mode 100644 .github/DISCUSSION_TEMPLATE/ideas.yml create mode 100644 .github/DISCUSSION_TEMPLATE/q-a.yml create mode 100644 .github/ISSUE_TEMPLATE/BUG_REPORT_FORM.yml create mode 100644 .github/ISSUE_TEMPLATE/FEATURE_REQUEST_FORM.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/DISCUSSION_TEMPLATE/general.yml b/.github/DISCUSSION_TEMPLATE/general.yml new file mode 100644 index 000000000..c1af502a6 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/general.yml @@ -0,0 +1,16 @@ +body: + - type: checkboxes + attributes: + label: Checklist + description: Following the guidelines can make you more likely to get responses. + options: + - label: >- + I have read and accepted the + [contributing guidelines](https://github.com/alexjustesen/speedtest-tracker/blob/main/CONTRIBUTING.md). + required: true + - type: textarea + attributes: + label: Description + description: Please describe in detail what you want to share. + validations: + required: true diff --git a/.github/DISCUSSION_TEMPLATE/ideas.yml b/.github/DISCUSSION_TEMPLATE/ideas.yml new file mode 100644 index 000000000..951c5f54c --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/ideas.yml @@ -0,0 +1,21 @@ +body: + - type: dropdown + id: idea-section + attributes: + label: "Which part of the application does your idea belong to?" + description: "Select the section of the application that your idea pertains to." + options: + - "Charts" + - "Notifications" + - "Speedtest" + - "WebGui" + default: 0 + validations: + required: true + - type: textarea + attributes: + label: Description + description: Please describe in detail what you want to share. + validations: + required: true + diff --git a/.github/DISCUSSION_TEMPLATE/q-a.yml b/.github/DISCUSSION_TEMPLATE/q-a.yml new file mode 100644 index 000000000..030635e80 --- /dev/null +++ b/.github/DISCUSSION_TEMPLATE/q-a.yml @@ -0,0 +1,35 @@ +body: + - type: checkboxes + attributes: + label: Checklist + description: | + Before opening an Q&A make sure you've checked the resources below first, any Q&A that could have been solved by reading the docs or existing issues will be closed. + options: + - label: I have read the [docs](https://docs.speedtest-tracker.dev/help/faqs). + required: true + - label: I have searched open and closed issues. + required: true + - type: dropdown + id: deployment-environment + attributes: + label: Deployment Environment + description: How did you deploy the application? + options: + - Docker Compose + - Docker Run + - Bare Metal + default: 0 + validations: + required: true + - type: textarea + attributes: + label: Description + description: Please describe your qeustion in detail. + validations: + required: true + + - type: textarea + attributes: + label: Anything else? + description: | + Links? References? Or logs? Anything that will give us more context about the issue you are encountering! diff --git a/.github/ISSUE_TEMPLATE/BUG_REPORT_FORM.yml b/.github/ISSUE_TEMPLATE/BUG_REPORT_FORM.yml new file mode 100644 index 000000000..8ec76f3b6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/BUG_REPORT_FORM.yml @@ -0,0 +1,81 @@ +name: Bug Report +description: Use this template to report a bug or issue. +title: "[Bug]: " +labels: ["bug", "unverified"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! You should only use this form for issues, to request a change or feature use the [feature request form](https://github.com/alexjustesen/speedtest-tracker). + - type: checkboxes + attributes: + label: Pre-work + description: | + Before opening an issue make sure you've checked the resources below first, any issues that could have been solved by reading the docs or existing issues will be closed. + options: + - label: I have read the [docs](https://docs.speedtest-tracker.dev). + required: true + - label: I have searched open and closed issues. + required: true + - label: I agree to follow this project's [Code of Conduct](). + required: true + - type: textarea + id: description + attributes: + label: Description + description: Explain the issue you experienced, please be clear and concise. + placeholder: I went to the coffee pot and it was empty. + validations: + required: true + - type: textarea + id: expected-behavior + attributes: + label: Expected Behavior + description: In a perfect world, what should have happened? + placeholder: When I got to the coffee pot, it should have been full. + validations: + required: true + - type: textarea + id: steps-to-reproduce + attributes: + label: Steps to Reproduce + description: Describe how to reproduce the issue in repeatable steps. + placeholder: | + 1. Go to the coffee pot. + 2. Make more coffee. + 3. Pour it into a cup. + validations: + required: true + - type: dropdown + id: deployment-environment + attributes: + label: Deployment Environment + description: How did you deploy the application? + options: + - Docker Compose + - Docker Run + - Bare Metal + default: 0 + validations: + required: true + - type: textarea + id: application-information + attributes: + label: Application Information + description: To generate application information run `php artisan about --json` from the application's path. This will be automatically formatted into code, so no need for backticks. + render: json + validations: + required: true + - type: input + id: browsers + attributes: + label: What browser(s) are you seeing the problem on? + placeholder: Chrome, Firefox, Safari, etc. + validations: + required: true + - type: textarea + id: logs + attributes: + label: Logs + description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_FORM.yml b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_FORM.yml new file mode 100644 index 000000000..e311293ef --- /dev/null +++ b/.github/ISSUE_TEMPLATE/FEATURE_REQUEST_FORM.yml @@ -0,0 +1,40 @@ +name: Feature Request +description: Use this template for requesting a new feature or change. +title: "[Feature]: " +labels: ["feature", "needs-review"] +body: + - type: markdown + attributes: + value: | + You should only use this form to request a change or new feature, to report a bug or issue use the [bug report form](https://github.com/alexjustesen/speedtest-tracker). + - type: checkboxes + attributes: + label: Pre-work + options: + - label: I have searched open and closed feature request to make sure this or similar feature request does not already exist. + required: true + - label: I have reviewed the [milestones](https://github.com/alexjustesen/speedtest-tracker/milestones) to ensure that this feature request, or a similar one, has not already been proposed. + required: true + - label: I agree to follow this project's [Code of Conduct](). + required: true + - type: dropdown + id: idea-section + attributes: + label: Which part of the application does your feature belong to? + description: Select the section of the application that your feature pertains to. + options: + - Charts + - Notifications + - Speedtest + - WebGui + default: 0 + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: Describe the solution or feature you'd like, you should also mention if this solves a problem. + placeholder: Be sure to keep it clear and concise. + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index c5dfdf6dc..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -name: Bug report -about: Create a bug report to help me improve something -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Environment (please complete the following information):** - - OS: [e.g. Ubuntu] -- Architecture: [e.g. arm64, amd64] - - Browser [e.g. chrome, safari] - - Version [e.g. v1] - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Logs** -If applicable, check the logs for any error that might of occurred. - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..678cea79e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: GitHub Community Support + url: https://github.com/orgs/community/discussions + about: Please ask and answer questions here. + - name: GitHub Security Bug Bounty + url: https://bounty.github.com/ + about: Please report security vulnerabilities here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index df81be2be..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Additional context** -Add any other context or screenshots about the feature request here. From c1f75094084a11666572ebb3abde83d1c1711e35 Mon Sep 17 00:00:00 2001 From: Sven van Ginkel Date: Mon, 14 Apr 2025 21:58:09 +0200 Subject: [PATCH 4/7] [QoL] Add bot for stale issues (#2141) Co-authored-by: Alex Justesen --- .github/workflows/stale_issues.yml | 45 ++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 .github/workflows/stale_issues.yml diff --git a/.github/workflows/stale_issues.yml b/.github/workflows/stale_issues.yml new file mode 100644 index 000000000..4289db4df --- /dev/null +++ b/.github/workflows/stale_issues.yml @@ -0,0 +1,45 @@ +name: Close Stale Issues + +on: + # Runs daily at 10:00 AM UTC + schedule: + - cron: '0 10 * * *' + # Runs at issue comment + issue_comment: + types: [created] + + # Allow manual trigger + workflow_dispatch: + +jobs: + manage-stale-issues: + runs-on: ubuntu-24.04 + + steps: + - name: Close Stale Issues + uses: actions/stale@v9 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # Issue-specific configuration + stale-issue-message: > + 👋 This issue has been automatically marked as stale due to inactivity. + If this issue is still relevant, please comment to keep it open. + Without activity, it will be closed in 7 days. + + close-issue-message: > + 🔒 This issue has been automatically closed due to prolonged inactivity. + Feel free to reopen if the issue is still valid. + + # More nuanced staleness criteria + days-before-issue-stale: 7 # Mark as stale after 7 days of inactivity + days-before-issue-close: 7 # Close 7 days after being marked stale + + # More specific labeling + stale-issue-label: 'no-issue-activity' + close-issue-label: 'closed-no-issue-activity' + + # Refined issue selection, Only issues with both bug and question label + only-issue-labels: 'bug, question' + +# Issues will be closed as "Not Planned" by default. From 8e0f558868a05c2bdc0cc1723ffc2ed079b224ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 16:00:29 -0400 Subject: [PATCH 5/7] Bump vite from 6.2.5 to 6.2.6 (#2134) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Alex Justesen --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2257c17a5..a7e3f6825 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "laravel-vite-plugin": "^1.0.0", "postcss": "^8.4.29", "tailwindcss": "^3.4.0", - "vite": "^6.2.5" + "vite": "^6.2.6" } }, "node_modules/@alloc/quick-lru": { @@ -2657,9 +2657,9 @@ "license": "MIT" }, "node_modules/vite": { - "version": "6.2.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", - "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", + "version": "6.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", + "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index a3d2fc8e3..b1a8c29ab 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "laravel-vite-plugin": "^1.0.0", "postcss": "^8.4.29", "tailwindcss": "^3.4.0", - "vite": "^6.2.5", + "vite": "^6.2.6", "concurrently": "^9.0.1" } } From fb9b6d19378de334fa4930bd0b949d4c55b89358 Mon Sep 17 00:00:00 2001 From: Alex Justesen Date: Tue, 15 Apr 2025 17:17:36 -0400 Subject: [PATCH 6/7] Laravel 12.9.0 Shift (#2143) Co-authored-by: Shift --- composer.json | 6 ++--- composer.lock | 63 ++++++++++++++++++++++++++------------------------- 2 files changed, 35 insertions(+), 34 deletions(-) diff --git a/composer.json b/composer.json index 7a768f351..04ed75f1e 100644 --- a/composer.json +++ b/composer.json @@ -23,16 +23,16 @@ "geerlingguy/ping": "^1.2.1", "influxdata/influxdb-client-php": "^3.7", "laravel-notification-channels/telegram": "^6.0", - "laravel/framework": "^12.8.1", + "laravel/framework": "^12.9", "laravel/prompts": "^0.3.5", "laravel/sanctum": "^4.0.8", - "livewire/livewire": "^3.6.2", + "livewire/livewire": "^3.6.3", "lorisleiva/laravel-actions": "^2.9", "maennchen/zipstream-php": "^2.4", "secondnetwork/blade-tabler-icons": "^3.31.0", "spatie/laravel-json-api-paginate": "^1.16.3", "spatie/laravel-query-builder": "^6.3.1", - "spatie/laravel-settings": "^3.4.2", + "spatie/laravel-settings": "^3.4.4", "spatie/laravel-webhook-server": "^3.8.3", "timokoerber/laravel-one-time-operations": "^1.4.5", "zircote/swagger-php": "^5.0.7" diff --git a/composer.lock b/composer.lock index 9cfb9a221..c0089ad96 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0d2d6c0f5da6f5098680f555b444d8a6", + "content-hash": "6bb9f709553e91633d907dbc2bb29eb6", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -2411,16 +2411,16 @@ }, { "name": "laravel/framework", - "version": "v12.8.1", + "version": "v12.9.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "d1ea3566f6e0cad34834c6d18db0bf995438eb87" + "reference": "d413f9e297b62238c6c633c082f8f45a888e31b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/d1ea3566f6e0cad34834c6d18db0bf995438eb87", - "reference": "d1ea3566f6e0cad34834c6d18db0bf995438eb87", + "url": "https://api.github.com/repos/laravel/framework/zipball/d413f9e297b62238c6c633c082f8f45a888e31b6", + "reference": "d413f9e297b62238c6c633c082f8f45a888e31b6", "shasum": "" }, "require": { @@ -2529,7 +2529,7 @@ "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", "orchestra/testbench-core": "^10.0.0", - "pda/pheanstalk": "^5.0.6", + "pda/pheanstalk": "^5.0.6|^7.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^10.5.35|^11.5.3|^12.0.1", @@ -2622,7 +2622,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-04-08T19:58:59+00:00" + "time": "2025-04-15T15:36:35+00:00" }, { "name": "laravel/prompts", @@ -3452,16 +3452,16 @@ }, { "name": "livewire/livewire", - "version": "v3.6.2", + "version": "v3.6.3", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "8f8914731f5eb43b6bb145d87c8d5a9edfc89313" + "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/8f8914731f5eb43b6bb145d87c8d5a9edfc89313", - "reference": "8f8914731f5eb43b6bb145d87c8d5a9edfc89313", + "url": "https://api.github.com/repos/livewire/livewire/zipball/56aa1bb63a46e06181c56fa64717a7287e19115e", + "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e", "shasum": "" }, "require": { @@ -3516,7 +3516,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.6.2" + "source": "https://github.com/livewire/livewire/tree/v3.6.3" }, "funding": [ { @@ -3524,7 +3524,7 @@ "type": "github" } ], - "time": "2025-03-12T20:24:15+00:00" + "time": "2025-04-12T22:26:52+00:00" }, { "name": "lorisleiva/laravel-actions", @@ -6030,16 +6030,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.92.0", + "version": "1.92.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "dd46cd0ed74015db28822d88ad2e667f4496a6f6" + "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/dd46cd0ed74015db28822d88ad2e667f4496a6f6", - "reference": "dd46cd0ed74015db28822d88ad2e667f4496a6f6", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d20b1969f836d210459b78683d85c9cd5c5f508c", + "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c", "shasum": "" }, "require": { @@ -6050,6 +6050,7 @@ "mockery/mockery": "^1.5", "orchestra/testbench": "^7.7|^8.0|^9.0|^10.0", "pestphp/pest": "^1.23|^2.1|^3.1", + "phpunit/php-code-coverage": "^9.0|^10.0|^11.0", "phpunit/phpunit": "^9.5.24|^10.5|^11.5", "spatie/pest-plugin-test-time": "^1.1|^2.2" }, @@ -6078,7 +6079,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.0" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.4" }, "funding": [ { @@ -6086,7 +6087,7 @@ "type": "github" } ], - "time": "2025-03-27T08:34:10+00:00" + "time": "2025-04-11T15:27:14+00:00" }, { "name": "spatie/laravel-query-builder", @@ -6163,16 +6164,16 @@ }, { "name": "spatie/laravel-settings", - "version": "3.4.2", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-settings.git", - "reference": "f817f2eaf48fda76dcdecf4e7a1ab6ebc98984be" + "reference": "fd0eb5a832131b56cd98834b93be3425ee28e333" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-settings/zipball/f817f2eaf48fda76dcdecf4e7a1ab6ebc98984be", - "reference": "f817f2eaf48fda76dcdecf4e7a1ab6ebc98984be", + "url": "https://api.github.com/repos/spatie/laravel-settings/zipball/fd0eb5a832131b56cd98834b93be3425ee28e333", + "reference": "fd0eb5a832131b56cd98834b93be3425ee28e333", "shasum": "" }, "require": { @@ -6232,7 +6233,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-settings/issues", - "source": "https://github.com/spatie/laravel-settings/tree/3.4.2" + "source": "https://github.com/spatie/laravel-settings/tree/3.4.4" }, "funding": [ { @@ -6244,7 +6245,7 @@ "type": "github" } ], - "time": "2025-02-14T14:40:11+00:00" + "time": "2025-04-11T11:35:56+00:00" }, { "name": "spatie/laravel-webhook-server", @@ -10741,16 +10742,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.1", + "version": "5.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", "shasum": "" }, "require": { @@ -10799,9 +10800,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" }, - "time": "2024-12-07T09:39:29+00:00" + "time": "2025-04-13T19:20:35+00:00" }, { "name": "phpunit/php-code-coverage", From 4d326ace70b1713f9ab713f6a25824b9c423fb20 Mon Sep 17 00:00:00 2001 From: Alex Justesen Date: Tue, 15 Apr 2025 17:21:39 -0400 Subject: [PATCH 7/7] Release v1.4.1 (#2144) --- config/speedtest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/speedtest.php b/config/speedtest.php index 6cb49b417..349dd52a3 100644 --- a/config/speedtest.php +++ b/config/speedtest.php @@ -4,9 +4,9 @@ return [ - 'build_date' => Carbon::parse('2025-04-10'), + 'build_date' => Carbon::parse('2025-04-15'), - 'build_version' => 'v1.4.0', + 'build_version' => 'v1.4.1', /** * General settings.