chore(release): automatic release v1.45.0

This commit is contained in:
homarr-releases[bot]
2025-11-28 19:14:48 +00:00
committed by GitHub
57 changed files with 541 additions and 358 deletions

View File

@@ -33,6 +33,7 @@ body:
options:
# The below comment is used to insert a new version with on-release.yml
#NEXT_VERSION#
- 1.44.0
- 1.43.1
- 1.43.0
- 1.42.1

View File

@@ -15,6 +15,21 @@
matchUpdateTypes: ["minor", "patch", "pin", "digest"],
automerge: true,
},
{
// disallow automerge for onlyBuiltDependencies
matchPackageNames: [
"@tree-sitter-grammars/tree-sitter-yaml",
"bcrypt",
"better-sqlite3",
"cpu-features",
"esbuild",
"sharp",
"ssh2",
"tree-sitter",
"tree-sitter-json",
],
automerge: false,
},
],
updateInternalDeps: true,
rangeStrategy: "bump",

View File

@@ -1,4 +1,6 @@
name: "[Quality] Code Analysis"
permissions:
contents: read
on:
pull_request:

View File

@@ -1,4 +1,6 @@
name: "[Crowdin] Upload translations"
permissions:
contents: read
on:
workflow_dispatch:

View File

@@ -9,6 +9,8 @@ env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
CROWDIN_TOKEN: "${{ secrets.CROWDIN_UPDATE_CONTRIBUTORS_TOKEN }}"
permissions:
contents: read
jobs:
update-contributors:
runs-on: ubuntu-latest

1
.npmrc
View File

@@ -3,3 +3,4 @@
# @link https://docs.expo.dev/guides/monorepos/#common-issues
node-linker=hoisted
strict-peer-dependencies=false
engine-strict=true

View File

@@ -1,4 +1,4 @@
FROM node:24.11.0-alpine AS base
FROM node:24.11.1-alpine AS base
FROM base AS builder
RUN apk add --no-cache libc6-compat
@@ -55,7 +55,7 @@ COPY --from=builder /app/apps/nextjs/.next/standalone ./
COPY --from=builder /app/apps/nextjs/.next/static ./apps/nextjs/.next/static
COPY --from=builder /app/apps/nextjs/public ./apps/nextjs/public
COPY scripts/run.sh ./run.sh
COPY --chmod=777 scripts/entrypoint.sh ./entrypoint.sh
COPY --chmod=755 scripts/entrypoint.sh ./entrypoint.sh
COPY packages/redis/redis.conf /app/redis.conf
COPY nginx.conf /etc/nginx/templates/nginx.conf

View File

@@ -58,7 +58,7 @@
"@mantine/tiptap": "^8.3.8",
"@million/lint": "1.0.14",
"@tabler/icons-react": "^3.35.0",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-query": "^5.90.10",
"@tanstack/react-query-devtools": "^5.90.2",
"@tanstack/react-query-next-experimental": "^5.91.0",
"@trpc/client": "^11.7.1",
@@ -74,7 +74,7 @@
"dayjs": "^1.11.19",
"dotenv": "^17.2.3",
"flag-icons": "^7.5.0",
"glob": "^11.0.3",
"glob": "^12.0.0",
"isomorphic-dompurify": "^2.32.0",
"jotai": "^2.15.1",
"mantine-react-table": "2.0.0-beta.9",
@@ -85,7 +85,7 @@
"react-dom": "19.2.0",
"react-error-boundary": "^6.0.0",
"react-simple-code-editor": "^0.14.1",
"sass": "^1.94.0",
"sass": "^1.94.1",
"superjson": "2.2.5",
"swagger-ui-react": "^5.30.2",
"use-deep-compare-effect": "^1.8.1",
@@ -98,7 +98,7 @@
"@types/chroma-js": "3.1.2",
"@types/node": "^24.10.1",
"@types/prismjs": "^1.26.5",
"@types/react": "19.2.5",
"@types/react": "19.2.6",
"@types/react-dom": "19.2.3",
"@types/swagger-ui-react": "^5.18.0",
"concurrently": "^9.2.1",

View File

@@ -45,22 +45,24 @@
"@testcontainers/redis": "^11.8.1",
"@turbo/gen": "^2.6.1",
"@vitejs/plugin-react": "^5.1.1",
"@vitest/coverage-v8": "^4.0.9",
"@vitest/ui": "^4.0.9",
"@vitest/coverage-v8": "^4.0.10",
"@vitest/ui": "^4.0.10",
"conventional-changelog-conventionalcommits": "^9.1.0",
"cross-env": "^10.1.0",
"jsdom": "^27.2.0",
"json5": "^2.2.3",
"prettier": "^3.6.2",
"semantic-release": "^25.0.2",
"testcontainers": "^11.8.1",
"turbo": "^2.6.1",
"typescript": "^5.9.3",
"vite-tsconfig-paths": "^5.1.4",
"vitest": "^4.0.9"
"vitest": "^4.0.10"
},
"packageManager": "pnpm@10.22.0",
"engines": {
"node": ">=24.11.1"
"node": ">=24.11.1",
"pnpm": ">=10.22.0"
},
"pnpm": {
"onlyBuiltDependencies": [
@@ -81,14 +83,14 @@
"brace-expansion@>=2.0.0 <=2.0.1": ">=4.0.1",
"brace-expansion@>=1.0.0 <=1.1.11": ">=4.0.1",
"esbuild@<=0.24.2": ">=0.27.0",
"form-data@>=4.0.0 <4.0.4": ">=4.0.4",
"form-data@>=4.0.0 <4.0.4": ">=4.0.5",
"hono@<4.6.5": ">=4.10.6",
"linkifyjs@<4.3.2": ">=4.3.2",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.6",
"prismjs@<1.30.0": ">=1.30.0",
"proxmox-api>undici": "7.16.0",
"react-is": "^19.2.0",
"rollup@>=4.0.0 <4.22.4": ">=4.53.2",
"rollup@>=4.0.0 <4.22.4": ">=4.53.3",
"sha.js@<=2.4.11": ">=2.4.12",
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.1",
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.1",

View File

@@ -43,7 +43,7 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@kubernetes/client-node": "^1.4.0",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-query": "^5.90.10",
"@trpc/client": "^11.7.1",
"@trpc/react-query": "^11.7.1",
"@trpc/server": "^11.7.1",

View File

@@ -38,7 +38,7 @@
"react-dom": "19.2.0",
"undici": "7.16.0",
"zod": "^4.1.12",
"zod-validation-error": "^4.0.2"
"zod-validation-error": "^5.0.0"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",

View File

@@ -29,7 +29,7 @@
"@homarr/core": "workspace:^0.1.0",
"@homarr/cron-jobs": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@tanstack/react-query": "^5.90.9",
"@tanstack/react-query": "^5.90.10",
"@trpc/client": "^11.7.1",
"@trpc/server": "^11.7.1",
"@trpc/tanstack-react-query": "^11.7.1",
@@ -42,7 +42,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/node-cron": "^3.0.11",
"@types/react": "19.2.5",
"@types/react": "19.2.6",
"eslint": "^9.39.1",
"typescript": "^5.9.3"
}

View File

@@ -32,7 +32,7 @@
"@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/dockerode": "^3.3.46",
"@types/dockerode": "^3.3.47",
"eslint": "^9.39.1",
"typescript": "^5.9.3"
}

View File

@@ -8,3 +8,4 @@ export type { Docker };
export const containerStates = ["created", "running", "paused", "restarting", "exited", "removing", "dead"] as const;
export type ContainerState = (typeof containerStates)[number];
export * from "./labels";

View File

@@ -0,0 +1,4 @@
export const dockerLabels = {
// Label to hide a container from Homarrs docker integration
hide: "homarr.hide",
} as const;

View File

@@ -26,6 +26,7 @@
"@homarr/common": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/docker": "workspace:^0.1.0",
"@homarr/integrations": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0",
"@homarr/redis": "workspace:^0.1.0",

View File

@@ -3,9 +3,9 @@ import type { ContainerInfo, ContainerStats } from "dockerode";
import { db, like, or } from "@homarr/db";
import { icons } from "@homarr/db/schema";
import type { ContainerState } from "@homarr/docker";
import { dockerLabels, DockerSingleton } from "@homarr/docker";
import type { ContainerState } from "../../docker/src";
import { DockerSingleton } from "../../docker/src";
import { createCachedWidgetRequestHandler } from "./lib/cached-widget-request-handler";
export const dockerContainersRequestHandler = createCachedWidgetRequestHandler({
@@ -27,13 +27,11 @@ async function getContainersWithStatsAsync() {
const containers = await Promise.all(
dockerInstances.map(async ({ instance, host }) => {
const instanceContainers = await instance.listContainers({ all: true });
return instanceContainers.map((container) => ({
...container,
instance: host,
}));
return instanceContainers
.filter((container) => dockerLabels.hide in container.Labels === false)
.map((container) => ({ ...container, instance: host }));
}),
).then((res) => res.flat());
const likeQueries = containers.map((container) => like(icons.name, `%${extractImage(container)}%`));
const dbIcons =

View File

@@ -33,7 +33,7 @@
"deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.0.3",
"next-intl": "4.5.3",
"next-intl": "4.5.5",
"react": "19.2.0",
"react-dom": "19.2.0"
},

View File

@@ -2232,6 +2232,7 @@
"unknown": "",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "",
"available": "",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "未知",
"pending": "等待处理",
"processing": "处理中",
"requested": "",
"partiallyAvailable": "部分",
"available": "可用",
"blacklisted": "已列入黑名单",

View File

@@ -2232,6 +2232,7 @@
"unknown": "crwdns1314:0crwdne1314:0",
"pending": "crwdns1316:0crwdne1316:0",
"processing": "crwdns1318:0crwdne1318:0",
"requested": "crwdns3806:0crwdne3806:0",
"partiallyAvailable": "crwdns1320:0crwdne1320:0",
"available": "crwdns1322:0crwdne1322:0",
"blacklisted": "crwdns3468:0crwdne3468:0",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Neznámý",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Částečně dostupné",
"available": "K dispozici",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Ukendt",
"pending": "Afventende",
"processing": "Behandler",
"requested": "",
"partiallyAvailable": "Delvis",
"available": "Tilgængelig",
"blacklisted": "Blacklistet",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Unbekannt",
"pending": "Ausstehend",
"processing": "In Bearbeitung",
"requested": "",
"partiallyAvailable": "Teilweise",
"available": "Verfügbar",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Unbekannt",
"pending": "Ausstehend",
"processing": "In Bearbeitung",
"requested": "",
"partiallyAvailable": "Teilweise",
"available": "Verfügbar",
"blacklisted": "Gesperrt",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Άγνωστο",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Μερικώς",
"available": "Διαθέσιμο",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "",
"available": "",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Desconocido",
"pending": "Pendiente",
"processing": "Procesando",
"requested": "",
"partiallyAvailable": "Parcial",
"available": "Disponible",
"blacklisted": "Lista negra",

View File

@@ -2232,6 +2232,7 @@
"unknown": "",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "",
"available": "",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Inconnu",
"pending": "En attente",
"processing": "Traitement en cours",
"requested": "",
"partiallyAvailable": "Partiel",
"available": "Disponible",
"blacklisted": "Sur la liste noire",

View File

@@ -2232,6 +2232,7 @@
"unknown": "לא ידוע",
"pending": "בהמתנה",
"processing": "מעבד",
"requested": "",
"partiallyAvailable": "חלקי",
"available": "זמין",
"blacklisted": "ברשימה השחורה",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Nepoznato",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "",
"available": "",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Ismeretlen",
"pending": "",
"processing": "Feldolgozás",
"requested": "",
"partiallyAvailable": "Részleges",
"available": "Elérhető",
"blacklisted": "",

View File

@@ -730,7 +730,7 @@
"error": {
"common": {
"cause": {
"title": ""
"title": "Causa con più dettagli"
}
},
"unknown": {
@@ -738,7 +738,7 @@
"description": "Si è verificato un errore sconosciuto, apri la causa sottostante per vedere maggiori dettagli"
},
"parse": {
"title": "",
"title": "Errore di analisi",
"description": "La risposta non può essere analizzata. Si prega di verificare che l'URL stia puntando all'URL di base del servizio."
},
"authorization": {
@@ -959,8 +959,8 @@
"newLabel": "Nuovo ID token"
},
"realm": {
"label": "",
"newLabel": ""
"label": "Dominio",
"newLabel": "Nuovo dominio"
},
"personalAccessToken": {
"label": "Token d'Accesso Personale",
@@ -1053,7 +1053,7 @@
"backToOverview": "Torna alla panoramica",
"change": "Cambia",
"create": "Crea",
"createAnother": "",
"createAnother": "Crea e ricomincia",
"edit": "Modifica",
"import": "Importa",
"insert": "Inserisci",
@@ -1389,8 +1389,8 @@
}
},
"dnsHoleSummary": {
"name": "",
"description": "",
"name": "Riepilogo del filtraggio DNS",
"description": "Mostra il riepilogo del tuo filtro DNS",
"option": {
"layout": {
"label": "Layout",
@@ -1411,7 +1411,7 @@
}
},
"error": {
"internalServerError": "",
"internalServerError": "Impossibile recuperare il riepilogo del filtro DNS",
"integrationsDisconnected": "Nessun dato disponibile, tutte le integrazioni disconnesse"
},
"data": {
@@ -1423,7 +1423,7 @@
"domainsTooltip": "A causa di più integrazioni, Homarr non può calcolare il numero esatto di domini bloccati"
},
"dnsHoleControls": {
"name": "",
"name": "Controlli del filtro DNS",
"description": "Controlla PiHole o AdGuard dalla tua dashboard",
"option": {
"layout": {
@@ -1445,7 +1445,7 @@
}
},
"error": {
"internalServerError": ""
"internalServerError": "Impossibile controllare il DNS Hole"
},
"controls": {
"enableAll": "Abilita tutto",
@@ -1514,7 +1514,7 @@
"label": "Indirizzo del server"
},
"isBedrockServer": {
"label": ""
"label": "Server Bedrock"
}
},
"status": {
@@ -1625,7 +1625,7 @@
}
},
"error": {
"noUrl": "",
"noUrl": "Nessun URL iFrame fornito",
"unsupportedProtocol": "L'URL fornito sta usando un protocollo non supportato. Si prega di utilizzare uno di ({supportedProtocols})",
"noBrowerSupport": "Il tuo browser non supporta iframes. Aggiorna il tuo browser."
}
@@ -1664,7 +1664,7 @@
}
},
"stockPrice": {
"name": "",
"name": "Prezzo delle azioni",
"description": "Visualizza il prezzo attuale delle azioni di una società",
"option": {
"stock": {
@@ -1835,7 +1835,7 @@
"title": "Index manager",
"testAll": "Prova tutto",
"error": {
"internalServerError": ""
"internalServerError": "Impossibile recuperare lo stato degli indicizzatori"
}
},
"healthMonitoring": {
@@ -2020,7 +2020,7 @@
"name": "Nome",
"id": "Id",
"metadata": {
"title": "",
"title": "Statistiche per nerd",
"video": {
"title": "Video",
"resolution": "Risoluzione"
@@ -2034,7 +2034,7 @@
"title": "Transcodifica",
"container": "Container",
"resolution": "Risoluzione",
"target": ""
"target": "Codec di destinazione"
}
}
}
@@ -2098,7 +2098,7 @@
"detailsTitle": "Categorie (Informazioni aggiuntive)"
},
"downSpeed": {
"columnTitle": "",
"columnTitle": "Giù",
"detailsTitle": "Velocità Di Download"
},
"index": {
@@ -2112,22 +2112,22 @@
"columnTitle": "Integrazione"
},
"name": {
"columnTitle": ""
"columnTitle": "Nome del job"
},
"progress": {
"columnTitle": "Avanzamento",
"detailsTitle": ""
"detailsTitle": "Avanzamento del download"
},
"ratio": {
"columnTitle": "Rapporto",
"detailsTitle": "Rapporto torrent (ricevuti/inviati)"
},
"received": {
"columnTitle": "",
"columnTitle": "Totale fuori servizio",
"detailsTitle": "Totale scaricati"
},
"sent": {
"columnTitle": "",
"columnTitle": "Totale operativo",
"detailsTitle": "Totale Caricati"
},
"size": {
@@ -2136,7 +2136,7 @@
},
"state": {
"columnTitle": "Stato",
"detailsTitle": ""
"detailsTitle": "Stato job"
},
"time": {
"columnTitle": "Ora di fine",
@@ -2158,7 +2158,7 @@
"completed": "Completato",
"failed": "Non riuscito",
"processing": "In lavorazione",
"leeching": "",
"leeching": "Leeching",
"stalled": "In stallo",
"unknown": "Sconosciuto",
"seeding": "Seeding"
@@ -2205,7 +2205,7 @@
"label": "Mostra suggerimento descrizione"
},
"showType": {
"label": ""
"label": "Mostra il badge del tipo di media"
},
"showSource": {
"label": "Mostra sorgente integrazione"
@@ -2216,7 +2216,7 @@
}
},
"mediaRequests-requestList": {
"name": "",
"name": "Elenco Richieste Media",
"description": "Visualizza un elenco di tutte le richieste media dalla tua istanza Overseerr o Jellyseerr",
"option": {
"linksTargetNewTab": {
@@ -2232,9 +2232,10 @@
"unknown": "Sconosciuto",
"pending": "In sospeso",
"processing": "In lavorazione",
"requested": "Richiesto",
"partiallyAvailable": "Parziale",
"available": "Disponibile",
"blacklisted": "",
"blacklisted": "In blacklist",
"deleted": "Eliminato"
},
"status": {
@@ -2247,7 +2248,7 @@
"toBeDetermined": "TBD"
},
"mediaRequests-requestStats": {
"name": "",
"name": "Statistiche Richiesta Media",
"description": "Statistiche sulle richieste dei media",
"option": {},
"titles": {
@@ -2338,7 +2339,7 @@
"label": "Abilita RTL"
},
"textLinesClamp": {
"label": ""
"label": "Limita le righe della descrizione"
},
"maximumAmountPosts": {
"label": "Limite di post"
@@ -2353,11 +2354,11 @@
"description": "Visualizza un elenco della versione corrente dei repository dati con la versione regex specificata.",
"option": {
"newReleaseWithin": {
"label": "",
"label": "Nuova versione entro",
"description": "Esempio di utilizzo: 1w (1 settimana), 10M (10 mesi). Tipi di unità accettati h (ore), d (giorni), w (settimane), M (mesi), y (anni). Lasciare vuoto per non evidenziare le nuove versioni."
},
"staleReleaseWithin": {
"label": "",
"label": "Rilascio obsoleto entro",
"description": "Esempio di utilizzo: 1w (1 settimana), 10M (10 mesi). Tipi di unità accettati h (ore), d (giorni), w (settimane), M (mesi), y (anni). Lasciare vuoto per non evidenziare le release obsolete."
},
"showOnlyHighlighted": {
@@ -2702,7 +2703,7 @@
"label": "Titolo della pagina"
},
"metaTitle": {
"label": ""
"label": "Meta title"
},
"logoImageUrl": {
"label": "URL immagine del logo"
@@ -2948,7 +2949,7 @@
"label": "Numero di colonne"
},
"breakpoint": {
"label": "",
"label": "Breakpoint",
"description": "Il layout verrà utilizzato su tutti gli schermi più grandi di questo breakpoint fino al breakpoint più grande successivo."
}
}
@@ -3322,7 +3323,7 @@
"label": "Analytics"
},
"smartHomeEntityState": {
"label": ""
"label": "Stato dell'entità Smart Home"
},
"ping": {
"label": "Ping"
@@ -3337,10 +3338,10 @@
"label": "Scaricamenti"
},
"mediaRequestStats": {
"label": ""
"label": "Statistiche richieste media"
},
"mediaRequestList": {
"label": ""
"label": "Elenco richieste media"
},
"rssFeeds": {
"label": "Feeds RSS"
@@ -3349,10 +3350,10 @@
"label": "Gestione Indicizzatori"
},
"healthMonitoring": {
"label": ""
"label": "Monitoraggio integrità del sistema"
},
"dnsHole": {
"label": ""
"label": "Dati di filtraggio DNS"
},
"updateChecker": {
"label": "Controllo aggiornamenti"
@@ -3435,10 +3436,10 @@
},
"trigger": {
"success": {
"message": ""
"message": "Attività attivata con successo"
},
"error": {
"message": ""
"message": "Impossibile attivare l'attività"
}
},
"enable": {
@@ -3453,7 +3454,7 @@
},
"toggle": {
"error": {
"message": ""
"message": "Impossibile attivare lo stato dell'attività"
}
}
},
@@ -3517,12 +3518,12 @@
"action": "Azione"
},
"action": {
"toggleBoardEdit": "",
"toggleColorScheme": "",
"saveNotebook": "",
"toggleBoardEdit": "Attiva la modalità di modifica della board",
"toggleColorScheme": "Attiva tema chiaro/scuro",
"saveNotebook": "Salva notebook (solo nel widget notebook)",
"openSpotlight": "Apri ricerca"
},
"note": ""
"note": "Suggerimento: 'Mod' si riferisce sia al tasto Ctrl che al tasto ⌘ su macOS"
}
}
}
@@ -3534,7 +3535,7 @@
"updated": "Aggiornato {when}",
"search": "Cerca {count} container",
"selected": "{selectCount} di {totalCount} containers selezionati",
"footer": ""
"footer": "Totale container {count}"
},
"field": {
"name": {
@@ -3672,11 +3673,11 @@
"resources": {
"title": "Risorse",
"nodes": "Nodi",
"namespaces": "",
"namespaces": "Spazi dei nomi",
"ingresses": "Ingressi",
"services": "Servizi",
"pods": "Pods",
"configmaps": "",
"configmaps": "ConfigMaps",
"secrets": "Secrets",
"volumes": "Volumi"
}
@@ -3721,7 +3722,7 @@
}
},
"namespaces": {
"label": "",
"label": "Spazi dei nomi",
"field": {
"name": {
"label": "Nome"
@@ -3730,7 +3731,7 @@
"label": "Stato",
"option": {
"active": "Attivo",
"terminating": ""
"terminating": "Terminare"
}
},
"creationTimestamp": {
@@ -3738,7 +3739,7 @@
}
},
"table": {
"search": ""
"search": "Cerca {count} spazi dei nomi"
}
},
"ingresses": {
@@ -3761,7 +3762,7 @@
}
},
"table": {
"search": ""
"search": "Cerca {count} ingresses"
}
},
"services": {
@@ -3771,7 +3772,7 @@
"label": "Nome"
},
"namespace": {
"label": ""
"label": "Spazio del nome"
},
"type": {
"label": "Tipo"
@@ -3800,7 +3801,7 @@
"label": "Nome"
},
"namespace": {
"label": ""
"label": "Spazio del nome"
},
"image": {
"label": "Immagine"
@@ -3826,7 +3827,7 @@
"label": "Nome"
},
"namespace": {
"label": ""
"label": "spazio del nome"
},
"type": {
"label": "tipo"
@@ -3836,24 +3837,24 @@
}
},
"table": {
"search": ""
"search": "Cerca {count} segreti"
}
},
"configmaps": {
"label": "",
"label": "ConfigMaps",
"field": {
"name": {
"label": "Nome"
},
"namespace": {
"label": ""
"label": "namespace"
},
"creationTimestamp": {
"label": "Creato"
}
},
"table": {
"search": ""
"search": "Cerca {count} ConfigMaps"
}
},
"volumes": {
@@ -3863,7 +3864,7 @@
"label": "Nome"
},
"namespace": {
"label": ""
"label": "Namespace"
},
"accessModes": {
"label": "Modalità Di Accesso"
@@ -3872,7 +3873,7 @@
"label": "Spazio di archiviazione"
},
"storageClassName": {
"label": ""
"label": "Nome Classe Archivio"
},
"volumeMode": {
"label": "Modalità Volume"
@@ -3888,7 +3889,7 @@
}
},
"table": {
"search": ""
"search": "Cerca {count} volumi"
}
},
"error": {
@@ -3989,7 +3990,7 @@
"label": "Nodi"
},
"namespaces": {
"label": ""
"label": "Namespaces"
},
"ingresses": {
"label": "Ingressi"
@@ -4001,7 +4002,7 @@
"label": "pods"
},
"configmaps": {
"label": ""
"label": "ConfigMaps"
},
"secrets": {
"label": "Secrets"
@@ -4092,7 +4093,7 @@
"option": {
"colorScheme": {
"light": "Passa al tema chiaro",
"dark": "Passa alla modalità scura"
"dark": "Passa al tema scuro"
},
"language": {
"label": "Cambia lingua",

View File

@@ -2232,6 +2232,7 @@
"unknown": "不明",
"pending": "保留中",
"processing": "処理中",
"requested": "",
"partiallyAvailable": "一部",
"available": "利用可能",
"blacklisted": "ブラックリスト",

View File

@@ -2232,6 +2232,7 @@
"unknown": "알 수 없음",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "",
"available": "",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Nežinoma",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Dalis",
"available": "Galima",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Nezināms",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Daļējs",
"available": "Pieejams",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Onbekend",
"pending": "In afwachting",
"processing": "Verwerken",
"requested": "",
"partiallyAvailable": "Gedeeltelijk",
"available": "Beschikbaar",
"blacklisted": "Geblacklist",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Ukjent",
"pending": "Pågår",
"processing": "Prosesserer",
"requested": "",
"partiallyAvailable": "Delvis",
"available": "Tilgjengelig",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Nieznany",
"pending": "Oczekujący",
"processing": "Przetwarzanie",
"requested": "",
"partiallyAvailable": "Częściowy",
"available": "Dostępne",
"blacklisted": "Zablokowany",

View File

@@ -7,7 +7,7 @@
"description": "Para começar, por favor selecione como você deseja configurar sua instância Homarr.",
"action": {
"scratch": "Começar do zero",
"importOldmarr": "Importe de uma instância Homarr anterior a 1,0"
"importOldmarr": "Importe de uma instância Homarr anterior a 1.0"
}
},
"import": {
@@ -307,12 +307,12 @@
"name": "Nome",
"members": "Membros",
"homeBoard": {
"label": "",
"description": ""
"label": "Quadro inicial",
"description": "Somente quadros acessíveis ao grupo podem ser selecionados"
},
"mobileBoard": {
"label": "",
"description": ""
"label": "Quadro para celular",
"description": "Somente quadros acessíveis ao grupo podem ser selecionados"
}
},
"permission": {
@@ -320,8 +320,8 @@
"title": "Administrador",
"item": {
"admin": {
"label": "",
"description": ""
"label": "Administrador",
"description": "Membros com essa permissão têm acesso total a todos os recursos e configurações"
}
}
},
@@ -329,15 +329,15 @@
"title": "Aplicativos",
"item": {
"create": {
"label": "",
"description": ""
"label": "Criar aplicativo",
"description": "Permitir que membros criem aplicativos"
},
"use-all": {
"label": "",
"description": ""
"label": "Usar todas aplicações",
"description": "Permitir que os membros adicionem qualquer aplicativo aos seus quadros"
},
"modify-all": {
"label": "",
"label": "Modificar todos os aplicativos",
"description": ""
},
"full-all": {
@@ -410,7 +410,7 @@
"item": {
"view-logs": {
"label": "",
"description": ""
"description": "Permitir que os membros visualizem os registros"
}
}
},
@@ -419,7 +419,7 @@
"item": {
"create": {
"label": "",
"description": ""
"description": "Permitir que os membros criem mecanismos de busca"
},
"modify-all": {
"label": "",
@@ -547,19 +547,19 @@
"title": "Aplicativos",
"noResults": {
"title": "",
"action": ""
"action": "Crie seu primeiro aplicativo"
}
},
"create": {
"title": "",
"title": "Novo Aplicativo",
"notification": {
"success": {
"title": "",
"message": ""
"title": "Criado com sucesso",
"message": "O aplicativo foi criado com sucesso"
},
"error": {
"title": "",
"message": ""
"title": "Falha ao criar",
"message": "Não foi possível criar o aplicativo"
}
}
},
@@ -618,9 +618,9 @@
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
"title": "Criar aplicativo",
"description": "Criar um aplicativo",
"action": "Abrir criação de aplicativo"
},
"add": ""
}
@@ -649,14 +649,14 @@
"app": {
"option": {
"existing": {
"title": "",
"label": ""
"title": "Existente",
"label": "Selecione um aplicativo existente"
},
"new": {
"title": "",
"title": "Novo",
"url": {
"label": "",
"description": ""
"label": "URL da aplicação",
"description": "A URL do aplicativo será aberta quando acessada a partir do painel de controle"
}
}
}
@@ -712,8 +712,8 @@
"sectionTitle": ""
},
"createApp": {
"label": "",
"description": ""
"label": "Criar aplicativo",
"description": "Crie um aplicativo com o mesmo nome e ícone da integração. Deixe o campo de entrada abaixo vazio para criar o aplicativo com a URL de integração."
},
"appHref": {
"placeholder": ""
@@ -1973,8 +1973,8 @@
},
"app": {
"noData": "",
"description": "",
"quickCreate": ""
"description": "Clique <here></here> para criar um aplicativo",
"quickCreate": "Criar aplicativo em tempo real"
},
"error": {
"noIntegration": "",
@@ -2232,6 +2232,7 @@
"unknown": "Desconhecido",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Parcial",
"available": "Disponível",
"blacklisted": "",
@@ -2659,7 +2660,7 @@
},
"onlyImportApps": {
"label": "",
"description": ""
"description": "Só adiciona os aplicativos, o quadro precisa ser recriado manualmente"
}
},
"name": {
@@ -2692,8 +2693,8 @@
},
"quickCreateApp": {
"modal": {
"title": "",
"createAndUse": ""
"title": "Criar aplicativo em tempo real",
"createAndUse": "Criar e utilizar"
}
}
},
@@ -2911,7 +2912,7 @@
"title": "",
"description": "",
"link": "",
"notice": ""
"notice": "Para fazer esta página desaparecer, crie um quadro e defina-o como quadro inicial"
},
"notFound": {
"title": "",
@@ -4109,7 +4110,7 @@
"label": ""
},
"newApp": {
"label": ""
"label": "Criar aplicativo"
},
"newIntegration": {
"label": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Necunoscut",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Parțial",
"available": "Disponibil",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Неизвестно",
"pending": "В ожидании",
"processing": "Обработка",
"requested": "",
"partiallyAvailable": "Частично доступно",
"available": "Доступно",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Neznámy",
"pending": "Čakajúce",
"processing": "Spracovanie",
"requested": "",
"partiallyAvailable": "Čiastočný",
"available": "K dispozícii",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Neznano",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "",
"available": "",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Okänd",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Delmängd",
"available": "Tillgänglig",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Bilinmeyen",
"pending": "Bekleyen",
"processing": "İşlemde",
"requested": "",
"partiallyAvailable": "Kısmi",
"available": "Mevcut",
"blacklisted": "Engellenenler",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Невідомо",
"pending": "В очікуванні",
"processing": "В обробці",
"requested": "",
"partiallyAvailable": "Частково доступно",
"available": "Доступно",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "Không rõ",
"pending": "",
"processing": "",
"requested": "",
"partiallyAvailable": "Một phần",
"available": "Khả dụng",
"blacklisted": "",

View File

@@ -2232,6 +2232,7 @@
"unknown": "未知",
"pending": "等待處理中",
"processing": "處理中",
"requested": "",
"partiallyAvailable": "部分",
"available": "待定",
"blacklisted": "",

View File

@@ -1,7 +1,7 @@
"use client";
import { Box, Flex, Group, Text, Tooltip } from "@mantine/core";
import { IconUsersGroup } from "@tabler/icons-react";
import { IconCube, IconUsersGroup } from "@tabler/icons-react";
import { clientApi } from "@homarr/api/client";
import { formatNumber } from "@homarr/common";
@@ -44,13 +44,25 @@ export default function MinecraftServerStatusWidget({ options }: WidgetComponent
</Group>
{data.online && (
<>
{!options.isBedrockServer && (
<img
style={{ flex: 1, transform: "scale(0.8)", objectFit: "contain" }}
alt={`minecraft icon ${options.domain}`}
src={data.icon}
/>
)}
{!options.isBedrockServer &&
(data.icon ? (
<img
style={{ flex: 1, transform: "scale(0.8)", objectFit: "contain" }}
alt={`minecraft icon ${options.domain}`}
src={data.icon}
/>
) : (
<Box
style={{
flex: 1,
display: "flex",
alignItems: "center",
justifyContent: "center",
}}
>
<IconCube size="3rem" color="var(--mantine-color-gray-5)" />
</Box>
))}
<Group gap={5} c="gray.6" align="center">
<IconUsersGroup size="1rem" />
<Text size="md">

528
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,3 +2,5 @@ packages:
- apps/*
- packages/*
- tooling/*
minimumReleaseAge: 4320 # Only download deps if they are at least 3 days old (in minutes)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

23
test/renovate.spec.ts Normal file
View File

@@ -0,0 +1,23 @@
import fs from "fs/promises";
import { join } from "path";
import json5 from "json5";
import { describe, test } from "vitest";
describe("Renovate configuration tests", () => {
test("automerge should be disabled for onlyBuiltDependencies", async () => {
const packageJson = await import("../package.json");
const renovateConfig = await fs.readFile(join(__dirname, "../.github/renovate.json5"), "utf-8").then(json5.parse);
const onlyBuiltDependencies = packageJson.pnpm.onlyBuiltDependencies;
const automergeDisabledDeps = renovateConfig.packageRules
.filter((rule: any) => rule.automerge === false)
.flatMap((rule: any) => rule.matchPackageNames || []);
const missingDeps = onlyBuiltDependencies.filter((dep: string) => !automergeDisabledDeps.includes(dep));
if (missingDeps.length > 0) {
throw new Error(
`The following onlyBuiltDependencies are missing automerge disable rules in renovate.json5: ${missingDeps.join(", ")}`,
);
}
});
});