diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index a841c7b76..68271247d 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -17,9 +17,9 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: crowdin action - uses: crowdin/github-action@v2 + uses: crowdin/github-action@7ca9c452bfe9197d3bb7fa83a4d7e2b0c9ae835d # v2 with: upload_translations: false download_translations: true diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 72ee1c58b..db7ab9cb7 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -17,44 +17,12 @@ env: IMAGE_NAME: ${{ github.repository }} jobs: - pre-commit: - name: Linting Checks - runs-on: ubuntu-22.04 - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - name: Install python - uses: actions/setup-python@v6 - with: - python-version: 3.x - - - name: Check files - uses: pre-commit/action@v3.0.1 - - - name: Install pnpm - uses: pnpm/action-setup@v5 - with: - version: 10 - run_install: false - - - name: Setup Node.js - uses: actions/setup-node@v6 - with: - node-version: 24 - cache: 'pnpm' - - - name: Install dependencies - run: pnpm install - - - name: Lint frontend - run: pnpm run lint build: name: Docker Build & Push if: github.repository == 'gethomepage/homepage' runs-on: ubuntu-22.04 - needs: [ pre-commit ] permissions: contents: read packages: write @@ -62,11 +30,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v6 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Extract Docker metadata id: meta - uses: docker/metadata-action@v6 + uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # v6 with: images: | ${{ env.IMAGE_NAME }} @@ -84,7 +52,7 @@ jobs: latest=auto - name: Next.js build cache - uses: actions/cache@v5 + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5 with: path: .next/cache key: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}-${{ hashFiles('**/*.js', '**/*.jsx') }} @@ -92,13 +60,13 @@ jobs: nextjs-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }} - name: Install pnpm - uses: pnpm/action-setup@v5 + uses: pnpm/action-setup@a8198c4bff370c8506180b035930dea56dbd5288 # v5 with: version: 10 run_install: false - name: Setup Node.js - uses: actions/setup-node@v6 + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 with: node-version: 24 cache: 'pnpm' @@ -115,7 +83,7 @@ jobs: - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' - uses: docker/login-action@v4 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4 with: registry: ghcr.io username: ${{ github.actor }} @@ -123,20 +91,20 @@ jobs: - name: Login to Docker Hub if: github.event_name != 'pull_request' - uses: docker/login-action@v4 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Setup QEMU - uses: docker/setup-qemu-action@v4.0.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0 - name: Setup Docker buildx - uses: docker/setup-buildx-action@v4 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4 - name: Build and push Docker image id: build-and-push - uses: docker/build-push-action@v7 + uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7 with: context: . push: ${{ github.event_name != 'pull_request' }} diff --git a/.github/workflows/docs-publish.yml b/.github/workflows/docs-publish.yml index f221b33bc..99ec06365 100644 --- a/.github/workflows/docs-publish.yml +++ b/.github/workflows/docs-publish.yml @@ -14,32 +14,18 @@ permissions: id-token: write jobs: - pre-commit: - name: Linting Checks - runs-on: ubuntu-22.04 - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - name: Install python - uses: actions/setup-python@v6 - with: - python-version: 3.x - - name: Check files - uses: pre-commit/action@v3.0.1 test: name: Test Build Docs if: github.repository == 'gethomepage/homepage' && github.event_name == 'pull_request' runs-on: ubuntu-latest - needs: - - pre-commit steps: - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 with: python-version-file: ".python-version" - name: Install uv - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@94527f2e458b27549849d47d273a16bec83a01e9 # v7 - run: sudo apt-get install pngquant - name: Test Docs Build run: uv run --frozen zensical build --clean @@ -50,21 +36,19 @@ jobs: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} - needs: - - pre-commit steps: - - uses: actions/configure-pages@v5 - - uses: actions/checkout@v6 - - uses: actions/setup-python@v6 + - uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 with: python-version-file: ".python-version" - name: Install uv - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@94527f2e458b27549849d47d273a16bec83a01e9 # v7 - run: sudo apt-get install pngquant - name: Build Docs run: uv run --frozen zensical build --clean - - uses: actions/upload-pages-artifact@v4 + - uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4 with: path: site - - uses: actions/deploy-pages@v4 + - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 id: deployment diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..10e2628e1 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,41 @@ +name: Lint + +on: + pull_request: + push: + workflow_dispatch: + merge_group: + +jobs: + lint: + name: Linting Checks + runs-on: ubuntu-22.04 + steps: + - name: Checkout repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + - name: Install python + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6 + with: + python-version: 3.x + + - name: Check files + uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 + + - name: Install pnpm + uses: pnpm/action-setup@a8198c4bff370c8506180b035930dea56dbd5288 # v5 + with: + version: 10 + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 + with: + node-version: 24 + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + - name: Lint frontend + run: pnpm run lint diff --git a/.github/workflows/pr-quality.yml b/.github/workflows/pr-quality.yml index a0cc6e497..e662a51b7 100644 --- a/.github/workflows/pr-quality.yml +++ b/.github/workflows/pr-quality.yml @@ -13,6 +13,6 @@ jobs: anti-slop: runs-on: ubuntu-latest steps: - - uses: peakoss/anti-slop@v0 + - uses: peakoss/anti-slop@a5a4b2440c9de6f65b64f0718a0136a1fdb04f6f # v0 with: max-failures: 4 diff --git a/.github/workflows/reaction-comments.yml b/.github/workflows/reaction-comments.yml index 2f59dd346..f0f73b516 100644 --- a/.github/workflows/reaction-comments.yml +++ b/.github/workflows/reaction-comments.yml @@ -15,4 +15,4 @@ jobs: action: runs-on: ubuntu-latest steps: - - uses: dessant/reaction-comments@v4 + - uses: dessant/reaction-comments@e86d247c12bd5c043eec379a1a4453f20cadf913 # v4 diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 4d003233f..50e51415e 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -26,14 +26,14 @@ jobs: runs-on: ubuntu-latest steps: - if: github.event_name == 'workflow_dispatch' && github.event.inputs.version != '' - uses: release-drafter/release-drafter@v7 + uses: release-drafter/release-drafter@a6acf82562eee06318b77ab8cb0b11ed81c677a7 # v7 with: config-name: release-drafter.yml version: ${{ github.event.inputs.version }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: github.event_name != 'workflow_dispatch' || github.event.inputs.version == '' - uses: release-drafter/release-drafter@v7 + uses: release-drafter/release-drafter@a6acf82562eee06318b77ab8cb0b11ed81c677a7 # v7 with: config-name: release-drafter.yml env: diff --git a/.github/workflows/repo-maintenance.yml b/.github/workflows/repo-maintenance.yml index c1466ea8a..8b4435034 100644 --- a/.github/workflows/repo-maintenance.yml +++ b/.github/workflows/repo-maintenance.yml @@ -18,7 +18,7 @@ jobs: name: 'Stale' runs-on: ubuntu-latest steps: - - uses: actions/stale@v10 + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10 with: days-before-stale: 7 days-before-close: 14 @@ -32,7 +32,7 @@ jobs: name: 'Lock Old Threads' runs-on: ubuntu-latest steps: - - uses: dessant/lock-threads@v6 + - uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6 with: issue-inactive-days: '30' pr-inactive-days: '30' @@ -57,7 +57,7 @@ jobs: name: 'Close Answered Discussions' runs-on: ubuntu-latest steps: - - uses: actions/github-script@v8 + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: | function sleep(ms) { @@ -113,7 +113,7 @@ jobs: name: 'Close Outdated Discussions' runs-on: ubuntu-latest steps: - - uses: actions/github-script@v8 + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: | function sleep(ms) { @@ -204,7 +204,7 @@ jobs: name: 'Close Unsupported Feature Requests' runs-on: ubuntu-latest steps: - - uses: actions/github-script@v8 + - uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 with: script: | function sleep(ms) { diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 07b0cb7a7..153359bd9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,13 +13,13 @@ jobs: matrix: shard: [1, 2, 3, 4] steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - uses: pnpm/action-setup@v5 + - uses: pnpm/action-setup@a8198c4bff370c8506180b035930dea56dbd5288 # v5 with: version: 9 - - uses: actions/setup-node@v6 + - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6 with: node-version: 20 cache: pnpm @@ -28,7 +28,7 @@ jobs: # Run Vitest directly so `--shard` is parsed as an option - run: pnpm -s exec vitest run --coverage --shard ${{ matrix.shard }}/4 --pool forks - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@v5 + uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage/lcov.info diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12eba6264..4c7bc87aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1593,11 +1593,11 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.13: + resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.0.3: + resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -5162,12 +5162,12 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - brace-expansion@1.1.12: + brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.0.3: dependencies: balanced-match: 1.0.2 @@ -6598,11 +6598,11 @@ snapshots: minimatch@3.1.2: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.13 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimist@1.2.8: {} diff --git a/public/locales/cs/common.json b/public/locales/cs/common.json index b4f7b2b62..a89c2bd38 100644 --- a/public/locales/cs/common.json +++ b/public/locales/cs/common.json @@ -39,7 +39,7 @@ "placeholder": "Hledat…" }, "resources": { - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "mem": "Využití paměti", "total": "Celkem", "free": "Volné", @@ -67,15 +67,15 @@ "empty_data": "Stav podsystému neznámý" }, "unifi_drive": { - "healthy": "Healthy", - "degraded": "Degraded", - "no_data": "No storage data available" + "healthy": "Zdravý", + "degraded": "Degradováno", + "no_data": "Nejsou k dispozici žádná data úložiště" }, "docker": { "rx": "RX", "tx": "TX", "mem": "Využití paměti", - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "running": "Běží", "offline": "Offline", "error": "Chyba", @@ -237,7 +237,7 @@ "seed": "Seedované" }, "qnap": { - "cpuUsage": "Zatížení procesoru", + "cpuUsage": "Využití procesoru", "memUsage": "Využití paměti", "systemTempC": "Teplota systému", "poolUsage": "Využití fondu", @@ -450,12 +450,12 @@ }, "proxmox": { "mem": "Využití paměti", - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "lxc": "LXC", "vms": "Virtuální Stroje" }, "glances": { - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "load": "Zatížení", "wait": "Čekejte prosím", "temp": "TEPLOTA", @@ -640,7 +640,7 @@ "no_devices": "Žádná přijatá data zařízení" }, "mikrotik": { - "cpuLoad": "Zatížení procesoru", + "cpuLoad": "Využití procesoru", "memoryUsed": "Využití paměti", "uptime": "Doba provozu", "numberOfLeases": "Pronájmy" @@ -691,7 +691,7 @@ "proxmoxbackupserver": { "datastore_usage": "Datové úložiště", "failed_tasks_24h": "Neúspěšné úlohy 24h", - "cpu_usage": "Zatížení procesoru", + "cpu_usage": "Využití procesoru", "memory_usage": "Využití paměti" }, "immich": { @@ -755,7 +755,7 @@ "alertstriggered": "Spuštěné výstrahy" }, "nextcloud": { - "cpuload": "Zatížení procesoru", + "cpuload": "Využití procesoru", "memoryusage": "Využití paměti", "freespace": "Volný prostor", "activeusers": "Aktivní uživatelé", @@ -878,7 +878,7 @@ }, "openwrt": { "uptime": "Doba provozu", - "cpuLoad": "Prům. zatížení procesoru (5m)", + "cpuLoad": "Prům. využití procesoru (5m)", "up": "Běží", "down": "Výpadek", "bytesTx": "Přeneseno", @@ -1042,7 +1042,7 @@ "pending": "Čekající", "status": "Stav", "updated": "Aktualizováno", - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "memory": "Využití paměti", "disk": "Disk", "network": "Síť" @@ -1138,7 +1138,7 @@ "NO_DATA_DISKS": "Žádné datové disky", "notifications": "Upozornění", "status": "Stav", - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "memoryUsed": "Využití paměti", "memoryAvailable": "Volná paměť", "arrayUsed": "Využito pole", @@ -1169,7 +1169,7 @@ "dockhand": { "running": "Běží", "stopped": "Zastaveno", - "cpu": "Zatížení procesoru", + "cpu": "Využití procesoru", "memory": "Využití paměti", "images": "Obrazy", "volumes": "Úložiště", diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 27d4a73c7..db7def44b 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -67,9 +67,9 @@ "empty_data": "Subsystem-Status unbekannt" }, "unifi_drive": { - "healthy": "Healthy", - "degraded": "Degraded", - "no_data": "No storage data available" + "healthy": "Gesund", + "degraded": "Beeinträchtigt", + "no_data": "Keine Speicherdaten verfügbar" }, "docker": { "rx": "RX", @@ -299,8 +299,8 @@ "approved": "Bestätigt", "available": "Verfügbar", "completed": "Abgeschlossen", - "processing": "Processing", - "issues": "Open Issues" + "processing": "Wird verarbeitet", + "issues": "Offene Probleme" }, "netalertx": { "total": "Total", @@ -620,7 +620,7 @@ }, "pangolin": { "orgs": "Orgs", - "sites": "Sites", + "sites": "Seiten", "resources": "Ressourcen", "targets": "Ziele", "traffic": "Traffic", @@ -724,7 +724,7 @@ "volumeAvailable": "Verfügbar" }, "dispatcharr": { - "channels": "Channels", + "channels": "Kanäle", "streams": "Streams" }, "mylar": { @@ -818,8 +818,8 @@ "booklore": { "libraries": "Bibliotheken", "books": "Bücher", - "reading": "Reading", - "finished": "Finished" + "reading": "Am Lesen", + "finished": "Fertig" }, "jdownloader": { "downloadCount": "Warteschlange", @@ -1160,11 +1160,11 @@ "artists": "Künstler" }, "arcane": { - "containers": "Containers", + "containers": "Container", "images": "Images", - "image_updates": "Image Updates", - "images_unused": "Unused", - "environment_required": "Environment ID Required" + "image_updates": "Image-Updates", + "images_unused": "Ungenutzt", + "environment_required": "Umgebungs-ID erforderlich" }, "dockhand": { "running": "Wird ausgeführt", @@ -1182,8 +1182,8 @@ }, "sparkyfitness": { "eaten": "", - "burned": "Burned", - "remaining": "Remaining", - "steps": "Steps" + "burned": "Verbrannt", + "remaining": "Verbleibend", + "steps": "Schritte" } } diff --git a/src/widgets/flood/proxy.js b/src/widgets/flood/proxy.js index 730ca5ed6..172acdaf4 100644 --- a/src/widgets/flood/proxy.js +++ b/src/widgets/flood/proxy.js @@ -12,7 +12,7 @@ async function login(widget) { const loginParams = { method: "POST", headers: { "Content-Type": "application/json" }, - body: null, + body: "{}", }; if (widget.username && widget.password) { diff --git a/src/widgets/flood/proxy.test.js b/src/widgets/flood/proxy.test.js index a3b9564bb..a0eb59c5a 100644 --- a/src/widgets/flood/proxy.test.js +++ b/src/widgets/flood/proxy.test.js @@ -45,7 +45,7 @@ describe("widgets/flood/proxy", () => { expect(httpProxy).toHaveBeenCalledTimes(3); expect(httpProxy.mock.calls[0][0].toString()).toBe("http://flood/api/stats"); expect(httpProxy.mock.calls[1][0]).toBe("http://flood/api/auth/authenticate"); - expect(httpProxy.mock.calls[1][1].body).toBeNull(); + expect(httpProxy.mock.calls[1][1].body).toBe("{}"); expect(httpProxy.mock.calls[2][0].toString()).toBe("http://flood/api/stats"); expect(res.statusCode).toBe(200); expect(res.body).toEqual(Buffer.from("data"));