feat: optimize JSON sync with 1 API call + raw URLs

- Replace GitHub API calls (390+) with 1 API call + raw URL downloads
- Create GitHubJsonService for efficient JSON file syncing
- Reduce API rate limiting issues by 99.7%
- Add automatic page reload after successful sync
- Update tests to use new service
- Maintain same functionality with better performance

Performance improvement:
- Before: 390+ GitHub API calls (1 per JSON file)
- After: 1 GitHub API call + 389 raw URL downloads
- Raw URLs have no rate limits, making sync much more reliable
This commit is contained in:
Michel Roegl-Brunner
2025-09-15 14:30:07 +02:00
parent 92b2c0d5fc
commit 82dc4643de
392 changed files with 3323 additions and 1381 deletions

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -1,35 +1,35 @@
{
"name": "Actual Budget",
"slug": "actualbudget",
"categories": [
23
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5006,
"documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
"website": "https://actualbudget.org/",
"config_path": "/opt/actualbudget-data/config.json",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/actual-budget.webp",
"description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
"install_methods": [
{
"type": "default",
"script": "ct/actualbudget.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}
"name": "Actual Budget",
"slug": "actualbudget",
"categories": [
23
],
"date_created": "2025-05-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5006,
"documentation": "https://github.com/community-scripts/ProxmoxVE/discussions/807",
"website": "https://actualbudget.org/",
"config_path": "/opt/actualbudget-data/config.json",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/actual-budget.webp",
"description": "Actual Budget is a super fast and privacy-focused app for managing your finances. At its heart is the well proven and much loved Envelope Budgeting methodology.",
"install_methods": [
{
"type": "default",
"script": "ct/actualbudget.sh",
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -49,4 +49,4 @@
"type": "info"
}
]
}
}

View File

@@ -45,4 +45,4 @@
"type": "warning"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -1,51 +1,51 @@
{
"name": "AdGuard Home",
"slug": "adguard",
"categories": [
5
],
"date_created": "2024-04-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started",
"website": "https://adguard.com/en/adguard-home/overview.html",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/adguard-home.webp",
"config_path": "/opt/AdGuardHome/AdGuardHome.yaml",
"description": "AdGuard Home is an open-source, self-hosted network-wide ad blocker. It blocks advertisements, trackers, phishing and malware websites, and provides protection against online threats. AdGuard Home is a DNS-based solution, which means it blocks ads and malicious content at the network level, before it even reaches your device. It runs on your home network and can be easily configured and managed through a web-based interface. It provides detailed statistics and logs, allowing you to see which websites are being blocked, and why. AdGuard Home is designed to be fast, lightweight, and easy to use, making it an ideal solution for home users who want to block ads, protect their privacy, and improve the speed and security of their online experience.",
"install_methods": [
{
"type": "default",
"script": "ct/adguard.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
},
{
"type": "alpine",
"script": "ct/alpine-adguard.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {
"username": null,
"password": null
"name": "AdGuard Home",
"slug": "adguard",
"categories": [
5
],
"date_created": "2024-04-28",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 3000,
"documentation": "https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started",
"website": "https://adguard.com/en/adguard-home/overview.html",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/adguard-home.webp",
"config_path": "/opt/AdGuardHome/AdGuardHome.yaml",
"description": "AdGuard Home is an open-source, self-hosted network-wide ad blocker. It blocks advertisements, trackers, phishing and malware websites, and provides protection against online threats. AdGuard Home is a DNS-based solution, which means it blocks ads and malicious content at the network level, before it even reaches your device. It runs on your home network and can be easily configured and managed through a web-based interface. It provides detailed statistics and logs, allowing you to see which websites are being blocked, and why. AdGuard Home is designed to be fast, lightweight, and easy to use, making it an ideal solution for home users who want to block ads, protect their privacy, and improve the speed and security of their online experience.",
"install_methods": [
{
"type": "default",
"script": "ct/adguard.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 2,
"os": "debian",
"version": "12"
}
},
"notes": [
{
"text": "Adguard Home can be updated via the user interface.",
"type": "info"
}
]
}
{
"type": "alpine",
"script": "ct/alpine-adguard.sh",
"resources": {
"cpu": 1,
"ram": 256,
"hdd": 1,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Adguard Home can be updated via the user interface.",
"type": "info"
}
]
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -43,4 +43,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -0,0 +1,35 @@
{
"name": "Redlib",
"slug": "alpine-redlib",
"categories": [
10
],
"date_created": "2025-08-25",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 5252,
"documentation": "https://github.com/redlib-org/redlib/blob/main/README.md",
"website": "https://github.com/redlib-org/redlib",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/redlib.webp",
"config_path": "/opt/redlib/redlib.conf",
"description": "An alternative private front-end to Reddit. Redlib hopes to provide an easier way to browse Reddit, without the ads, trackers, and bloat.",
"install_methods": [
{
"type": "default",
"script": "ct/alpine-redlib.sh",
"resources": {
"cpu": 1,
"ram": 512,
"hdd": 1,
"os": "alpine",
"version": "3.22"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": []
}

View File

@@ -48,4 +48,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": "guacadmin"
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": "helper-scripts.com"
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -6,7 +6,7 @@
],
"date_created": "2024-05-02",
"type": "ct",
"updateable": false,
"updateable": true,
"privileged": false,
"interface_port": 13378,
"documentation": "https://www.audiobookshelf.org/guides/",
@@ -21,7 +21,7 @@
"resources": {
"cpu": 2,
"ram": 2048,
"hdd": 4,
"hdd": 5,
"os": "debian",
"version": "12"
}
@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": "admin123"
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"text": "`cat ~/.ssh/id_ed25519.pub` to view ssh public key. This key is used to authenticate with sftp targets. You can add this key on the sftp server."
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -48,4 +48,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -45,4 +45,4 @@
"type": "info"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "warning"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warn"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -39,4 +39,4 @@
"type": "warning"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": "admin"
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -33,4 +33,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -40,9 +40,9 @@
"text": "After installation, checkout: ´https://github.com/community-scripts/ProxmoxVE/discussions/836´ for useful Debian commands",
"type": "info"
},
{
{
"text": "If you use Cloud-init, checkout after installation: ´https://github.com/community-scripts/ProxmoxVE/discussions/272´",
"type": "info"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": "deluge"
},
"notes": []
}
}

View File

@@ -42,4 +42,4 @@
"type": "info"
}
]
}
}

View File

@@ -56,4 +56,4 @@
"type": "warning"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": "helper-scripts"
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -1,40 +1,40 @@
{
"name": "Duplicati",
"slug": "duplicati",
"categories": [
7
],
"date_created": "2025-02-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8200,
"documentation": "https://docs.duplicati.com/",
"website": "https://duplicati.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/duplicati.webp",
"config_path": "",
"description": "Duplicati is a free, open-source backup solution that offers zero-trust, fully encrypted backups for your data.",
"install_methods": [
{
"type": "default",
"script": "ct/duplicati.sh",
"resources": {
"cpu": 1,
"ram": 1048,
"hdd": 10,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Admin password and database encryption key: `cat ~/duplicati.creds`",
"type": "info"
}
]
}
"name": "Duplicati",
"slug": "duplicati",
"categories": [
7
],
"date_created": "2025-02-06",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 8200,
"documentation": "https://docs.duplicati.com/",
"website": "https://duplicati.com/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/duplicati.webp",
"config_path": "",
"description": "Duplicati is a free, open-source backup solution that offers zero-trust, fully encrypted backups for your data.",
"install_methods": [
{
"type": "default",
"script": "ct/duplicati.sh",
"resources": {
"cpu": 1,
"ram": 1048,
"hdd": 10,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "Admin password and database encryption key: `cat ~/duplicati.creds`",
"type": "info"
}
]
}

View File

@@ -41,4 +41,4 @@
"text": "Synapse-Admin is running on port 5173"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -21,7 +21,7 @@
"resources": {
"cpu": 2,
"ram": 1024,
"hdd": 4,
"hdd": 10,
"os": "debian",
"version": "12"
}
@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -1,40 +1,40 @@
{
"name": "evcc",
"slug": "evcc",
"categories": [
16
],
"date_created": "2024-10-15",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7070,
"documentation": "https://evcc.io/#devices",
"website": "https://evcc.io/en/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/evcc.webp",
"config_path": "",
"description": "EVCC is an open-source tool that manages EV charging, prioritizing solar energy use to reduce costs and optimize charging times. It supports various EVs and chargers, adjusting power automatically based on real-time data.",
"install_methods": [
{
"type": "default",
"script": "ct/evcc.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell",
"type": "info"
}
]
}
"name": "evcc",
"slug": "evcc",
"categories": [
16
],
"date_created": "2024-10-15",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": 7070,
"documentation": "https://evcc.io/#devices",
"website": "https://evcc.io/en/",
"logo": "https://cdn.jsdelivr.net/gh/selfhst/icons/webp/evcc.webp",
"config_path": "",
"description": "EVCC is an open-source tool that manages EV charging, prioritizing solar energy use to reduce costs and optimize charging times. It supports various EVs and chargers, adjusting power automatically based on real-time data.",
"install_methods": [
{
"type": "default",
"script": "ct/evcc.sh",
"resources": {
"cpu": 1,
"ram": 1024,
"hdd": 4,
"os": "debian",
"version": "12"
}
}
],
"default_credentials": {
"username": null,
"password": null
},
"notes": [
{
"text": "To configure evcc, type `cd /etc` followed by `evcc configure` in the evcc LXC shell",
"type": "info"
}
]
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -32,4 +32,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -44,4 +44,4 @@
"password": "helper-scripts.com"
},
"notes": []
}
}

View File

@@ -49,4 +49,4 @@
"type": "warning"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -37,4 +37,4 @@
"type": "warning"
}
]
}
}

View File

@@ -38,4 +38,4 @@
"type": "info"
}
]
}
}

View File

@@ -43,4 +43,4 @@
"password": null
},
"notes": []
}
}

View File

@@ -37,4 +37,4 @@
"type": "info"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

View File

@@ -41,4 +41,4 @@
"type": "info"
}
]
}
}

Some files were not shown because too many files have changed in this diff Show More