22 Commits

Author SHA1 Message Date
Gitea Actions
d4bb502bf1 Update manifest version to 3.1.4 [▶️] 2026-01-09 16:11:23 +00:00
479f1ebc90 Update public/index.html
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 10m18s
2026-01-09 16:06:27 +00:00
Gitea Actions
e6c587cd23 Update manifest version to 3.1.3 [▶️] 2026-01-09 16:03:54 +00:00
f2b7535be9 Upload files to "public"
Some checks failed
Build, Push, Publish / Build & Release (push) Has been cancelled
2026-01-09 16:03:43 +00:00
Gitea Actions
9ce17ad9bb Sync README from template [▶️] 2026-01-09 15:35:19 +00:00
Gitea Actions
4e280796b9 Update manifest version to 3.1.2 [▶️] 2026-01-09 14:51:04 +00:00
a54f52b04e Update README.md
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 10m50s
2026-01-09 14:46:04 +00:00
Gitea Actions
40fe720d3f Update manifest version to 3.1.1 [▶️] 2026-01-09 14:42:53 +00:00
65639a2f04 Update public/index.html
Some checks failed
Build, Push, Publish / Build & Release (push) Has been cancelled
2026-01-09 14:42:41 +00:00
Gitea Actions
f74d9038b7 Sync README from template [▶️] 2026-01-01 04:01:51 +00:00
Gitea Actions
14acaf3c62 Sync README from template [▶️] 2025-12-28 04:02:51 +00:00
Gitea Actions
d475f88ab9 Update manifest version to 3.1.0 [▶️] 2025-12-22 05:32:22 +00:00
465c0c11e9 fix release build, add readme update for some repo
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 10m6s
2025-12-22 01:43:50 -03:00
Gitea Actions
cf860814c5 Sync README from template [▶️] 2025-12-22 04:02:04 +00:00
Gitea Actions
633ce7c550 Update manifest version to 3.0.5 [▶️] 2025-12-22 03:00:21 +00:00
e458f278b1 Merge branch 'main' of https://git.icc.gg/ivancarlos/devicetester
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 10m9s
2025-12-21 23:33:49 -03:00
efb940fc8c update actions 2025-12-21 23:33:45 -03:00
Gitea Actions
053427d46d Update manifest version to 3.0.4 [▶️] 2025-12-14 03:47:51 +00:00
8094287f97 remove Pro title
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 10m3s
2025-12-14 03:47:39 +00:00
Gitea Actions
1b99769918 Update manifest version to 3.0.3 [▶️] 2025-12-13 19:47:03 +00:00
bd39dd2b3f Update public/index.html
All checks were successful
Build, Push, Publish / Build & Release (push) Successful in 9m58s
2025-12-13 19:46:51 +00:00
Gitea Actions
45fb07bc8b Update manifest version to 3.0.2 [▶️] 2025-12-13 19:28:02 +00:00
6 changed files with 110 additions and 54 deletions

View File

@@ -5,9 +5,6 @@ on:
branches: branches:
- main - main
workflow_dispatch: workflow_dispatch:
schedule:
- cron: '28 5 * * *'
# workflow_run support in Gitea can be tricky, keeping it but might need adjustment
workflow_run: workflow_run:
workflows: ["Sync Repo"] workflows: ["Sync Repo"]
types: types:
@@ -265,6 +262,11 @@ jobs:
git commit -m "Update manifest version to ${{ steps.version.outputs.VERSION }} [▶️]" || echo "Nothing to commit" git commit -m "Update manifest version to ${{ steps.version.outputs.VERSION }} [▶️]" || echo "Nothing to commit"
git push origin main git push origin main
- name: 🛠 Install zip
if: steps.check_commits.outputs.commit_count != '0'
run: |
apt-get update && apt-get install -y zip
- name: 📦 Create ZIP package (excluding certain files) - name: 📦 Create ZIP package (excluding certain files)
if: steps.check_commits.outputs.commit_count != '0' if: steps.check_commits.outputs.commit_count != '0'
run: | run: |
@@ -319,11 +321,10 @@ jobs:
ZIP_NAME="${{ steps.version.outputs.ZIP_NAME }}" ZIP_NAME="${{ steps.version.outputs.ZIP_NAME }}"
FILE_PATH="./$ZIP_NAME" FILE_PATH="./$ZIP_NAME"
curl -s -X POST "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets" \ curl --fail -s -X POST "${{ gitea.api_url }}/repos/${{ gitea.repository }}/releases/$RELEASE_ID/assets?name=$ZIP_NAME" \
-H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-H "Content-Type: application/zip" \ -H "Content-Type: application/zip" \
--data-binary @"$FILE_PATH" \ --data-binary @"$FILE_PATH"
-o /dev/null
# ----- Docker steps ----- # ----- Docker steps -----
- name: Clone Upstream Code (if needed) - name: Clone Upstream Code (if needed)

View File

@@ -0,0 +1,59 @@
name: Update README
permissions:
contents: write
on:
workflow_dispatch:
schedule:
- cron: "0 4 * * *" # Every day at 4 AM UTC
jobs:
update-readme:
runs-on: ubuntu-latest
container:
image: catthehacker/ubuntu:act-latest
env:
SOURCE_REPO: ivancarlos/.gitea
SOURCE_BRANCH: main
steps:
- name: Checkout current repository
uses: actions/checkout@v4
- name: Checkout source README template
uses: actions/checkout@v4
with:
repository: ${{ env.SOURCE_REPO }}
ref: ${{ env.SOURCE_BRANCH }}
token: ${{ secrets.CR_PAT }}
path: source_readme
- name: Update README.md (footer only)
run: |
set -e
# --- Extract footer block from source (everything from <!-- footer --> onward) ---
FOOTER=$(awk '/<!-- footer -->/{flag=1}flag' source_readme/README.md)
# --- Replace everything after <!-- footer --> with FOOTER ---
awk -v footer="$FOOTER" '
/<!-- footer -->/ {
print footer
found=1
exit
}
{ print }
' README.md > README.tmp && mv README.tmp README.md
- name: Remove source_readme from git index
run: rm -rf source_readme
- name: Commit and push changes
run: |
git config user.name "Gitea Actions"
git config user.email "actions@git.icc.gg"
git add README.md
git commit -m "Sync README from template [▶️]" || echo "Nothing to commit"
git push origin ${{ github.ref_name }}

View File

@@ -1,24 +1,25 @@
# Device Tester # Device Tester
A simple and useful webcam, microphone and audio output tester. A simple and useful webcam, microphone and audio output tester.
<!-- buttons -->
[![Stars](https://img.shields.io/github/stars/ivancarlosti/devicetester?label=⭐%20Stars&color=gold&style=flat)](https://github.com/ivancarlosti/devicetester/stargazers)
[![Watchers](https://img.shields.io/github/watchers/ivancarlosti/devicetester?label=Watchers&style=flat&color=red)](https://github.com/sponsors/ivancarlosti)
[![Forks](https://img.shields.io/github/forks/ivancarlosti/devicetester?label=Forks&style=flat&color=ff69b4)](https://github.com/sponsors/ivancarlosti)
[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/ivancarlosti/devicetester?label=Activity)](https://github.com/ivancarlosti/devicetester/pulse)
[![GitHub Issues](https://img.shields.io/github/issues/ivancarlosti/devicetester?label=Issues&color=orange)](https://github.com/ivancarlosti/devicetester/issues)
[![License](https://img.shields.io/github/license/ivancarlosti/devicetester?label=License)](LICENSE)
[![GitHub last commit](https://img.shields.io/github/last-commit/ivancarlosti/devicetester?label=Last%20Commit)](https://github.com/ivancarlosti/devicetester/commits)
[![Security](https://img.shields.io/badge/Security-View%20Here-purple)](https://github.com/ivancarlosti/devicetester/security)
[![Code of Conduct](https://img.shields.io/badge/Code%20of%20Conduct-2.1-4baaaa)](https://github.com/ivancarlosti/devicetester?tab=coc-ov-file)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/ivancarlosti?label=GitHub%20Sponsors&color=ffc0cb)][sponsor]
<!-- endbuttons -->
## Notes ## Notes
1. Project inspired in multiple device complex testers across the web. 1. Project inspired in multiple device complex testers across the web.
2. The music used on test is royalty free and generated by AI. 2. The music used on test is royalty free and generated by AI.
3. The page was co-created by AI. 3. The page was co-created by AI.
## Docker Compose suggestion
```
name: devicetester
services:
devicetester:
image: git.icc.gg/ivancarlos/devicetester:latest
container_name: devicetester
restart: unless-stopped
ports:
- "3987:80"
```
<!-- footer --> <!-- footer -->
--- ---
@@ -26,20 +27,10 @@ A simple and useful webcam, microphone and audio output tester.
* For personal support and queries, please submit a new issue to have it addressed. * For personal support and queries, please submit a new issue to have it addressed.
* For commercial related questions, please [**contact me**][ivancarlos] for consulting costs. * For commercial related questions, please [**contact me**][ivancarlos] for consulting costs.
## 🩷 Project support | 🩷 Project support |
| If you found this project helpful, consider |
| :---: | | :---: |
[**buying me a coffee**][buymeacoffee], [**donate by paypal**][paypal], [**sponsor this project**][sponsor] or just [**leave a star**](../..)⭐ If you found this project helpful, consider [**buying me a coffee**][buymeacoffee]
|Thanks for your support, it is much appreciated!| |Thanks for your support, it is much appreciated!|
[cc]: https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/adding-a-code-of-conduct-to-your-project [ivancarlos]: https://ivancarlos.me
[contributing]: https://docs.github.com/en/articles/setting-guidelines-for-repository-contributors
[security]: https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository
[support]: https://docs.github.com/en/articles/adding-support-resources-to-your-project
[it]: https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser
[prt]: https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/creating-a-pull-request-template-for-your-repository
[funding]: https://docs.github.com/en/articles/displaying-a-sponsor-button-in-your-repository
[ivancarlos]: https://ivancarlos.it
[buymeacoffee]: https://www.buymeacoffee.com/ivancarlos [buymeacoffee]: https://www.buymeacoffee.com/ivancarlos
[paypal]: https://icc.gg/donate
[sponsor]: https://github.com/sponsors/ivancarlosti

View File

@@ -1,4 +1,4 @@
{ {
"version": "3.0.1", "version": "3.1.4",
"author": "Ivan Carlos" "author": "Ivan Carlos"
} }

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -3,7 +3,7 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<title>Device Tester Pro</title> <title>Device Tester</title>
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
@@ -51,6 +51,14 @@
margin-bottom: 30px; margin-bottom: 30px;
} }
#ipv4, #ipv6 {
word-break: break-all;
overflow-wrap: anywhere;
display: inline-block;
max-width: 100%;
vertical-align: top;
}
/* Shared styles for header buttons */ /* Shared styles for header buttons */
.theme-toggle, .theme-toggle,
.icon-btn { .icon-btn {
@@ -124,11 +132,6 @@
border-radius: 12px; border-radius: 12px;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
border: 1px solid var(--border-color); border: 1px solid var(--border-color);
transition: transform 0.2s;
}
.test-card:hover {
transform: translateY(-2px);
} }
h2 { h2 {
@@ -273,7 +276,7 @@
<div class="container"> <div class="container">
<header> <header>
<div class="header-top"> <div class="header-top">
<h1 data-i18n="app_title">Device Tester Pro</h1> <h1 data-i18n="app_title">Device Tester</h1>
<div class="header-controls"> <div class="header-controls">
<button class="icon-btn" onclick="changeLanguage('en')" id="btn-en" aria-label="English"><img <button class="icon-btn" onclick="changeLanguage('en')" id="btn-en" aria-label="English"><img
src="https://flagcdn.com/24x18/us.png" alt="US" width="24" height="18"></button> src="https://flagcdn.com/24x18/us.png" alt="US" width="24" height="18"></button>
@@ -290,9 +293,11 @@
<!-- Network --> <!-- Network -->
<div class="test-card"> <div class="test-card">
<h2 data-i18n="network_title">📡 Network & Browser</h2> <h2 data-i18n="network_title">📡 Network & Browser</h2>
<p>IPv4: <strong id="ipv4">...</strong> <span class="status-text" id="geo-ipv4"></span></p> <p>IPv4: <strong id="ipv4">...</strong><br>
<span class="status-text" id="geo-ipv4"></span></p>
<p class="status-text" id="isp-label-ipv4"></p> <p class="status-text" id="isp-label-ipv4"></p>
<p>IPv6: <strong id="ipv6">...</strong> <span class="status-text" id="geo-ipv6"></span></p> <p>IPv6: <strong id="ipv6">...</strong><br>
<span class="status-text" id="geo-ipv6"></span></p>
<p class="status-text" id="isp-label-ipv6"></p> <p class="status-text" id="isp-label-ipv6"></p>
<label data-i18n="user_agent_label">User Agent:</label> <label data-i18n="user_agent_label">User Agent:</label>
<textarea id="user-agent" rows="2" readonly></textarea> <textarea id="user-agent" rows="2" readonly></textarea>
@@ -381,7 +386,7 @@
// i18n Dictionary // i18n Dictionary
const dictionary = { const dictionary = {
en: { en: {
app_title: "Device Tester Pro", app_title: "Device Tester",
theme_toggle: "🌓 Theme", theme_toggle: "🌓 Theme",
network_title: "📡 Network & Browser", network_title: "📡 Network & Browser",
user_agent_label: "User Agent:", user_agent_label: "User Agent:",