Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

chore(release): automatic release v1.8.0 #2451

Merged
merged 41 commits into from
Feb 28, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
9d54e93
chore(deps): update dependency @types/node to ^22.13.5 (#2394)
homarr-renovate[bot] Feb 21, 2025
fb467ac
feat: add app ping url (#2380)
manuel-rw Feb 21, 2025
675ed5b
chore(deps): update dependency eslint to ^9.21.0 (#2395)
homarr-renovate[bot] Feb 21, 2025
ee1ed0d
chore(lang): updated translations from crowdin
homarr-crowdin[bot] Feb 22, 2025
86e778d
fix(deps): update dependency prettier to ^3.5.2 (#2399)
homarr-renovate[bot] Feb 22, 2025
c132a07
Merge branch 'main' into dev
Meierschlumpf Feb 22, 2025
4f09363
chore(lang): updated translations from crowdin
homarr-crowdin[bot] Feb 23, 2025
5dc5d9e
fix: omv invalid temperature when not available (#2322)
manuel-rw Feb 23, 2025
c5107b2
fix: update checker logs incorrectly (#2402)
Meierschlumpf Feb 23, 2025
2085b5e
fix: await params for board metadata (#2406)
Meierschlumpf Feb 23, 2025
7761dc2
feat(boards): add responsive layout system (#2271)
Meierschlumpf Feb 23, 2025
9c892ea
ci: add arm64 docker build (#2383)
Meierschlumpf Feb 23, 2025
ef9289d
chore(docs): update docs-sitemap
Meierschlumpf Feb 23, 2025
508f9af
fix(boards): add scrollarea to board-select (#2409)
Meierschlumpf Feb 24, 2025
593c50b
fix(deps): update dependency typescript-eslint to ^8.25.0 (#2413)
homarr-renovate[bot] Feb 24, 2025
46070fa
chore(deps): update vitest monorepo to ^3.0.7 (#2414)
homarr-renovate[bot] Feb 24, 2025
8355bb5
chore(lang): updated translations from crowdin
homarr-crowdin[bot] Feb 25, 2025
2f3d297
chore(deps): update dependency @types/dockerode to ^3.3.35 (#2415)
homarr-renovate[bot] Feb 25, 2025
a9a37af
fix(deps): update dependency sass to ^1.85.1 (#2418)
homarr-renovate[bot] Feb 25, 2025
fda3aff
chore(deps): update pnpm to v10.5.0 (#2421)
homarr-renovate[bot] Feb 25, 2025
874414f
fix(deps): update turbo monorepo to ^2.4.3 (#2422)
homarr-renovate[bot] Feb 25, 2025
a6f9199
fix(deps): update turbo monorepo to ^2.4.4 (#2424)
homarr-renovate[bot] Feb 25, 2025
3b830ae
fix(deps): update dependency drizzle-kit to ^0.30.5 (#2423)
homarr-renovate[bot] Feb 25, 2025
faf7322
fix(deps): update dependency drizzle-orm to ^0.40.0 (#2425)
homarr-renovate[bot] Feb 25, 2025
0f2fc05
chore(deps): update pnpm to v10.5.1 (#2426)
homarr-renovate[bot] Feb 26, 2025
c2d6e2e
fix(deps): update dependency eslint-config-prettier to ^10.0.2 (#2427)
homarr-renovate[bot] Feb 26, 2025
d6939e4
fix(deps): update nextjs monorepo to ^15.2.0 (#2428)
homarr-renovate[bot] Feb 26, 2025
2b40233
chore(lang): updated translations from crowdin
homarr-crowdin[bot] Feb 27, 2025
46ff689
chore(deps): update pnpm to v10.5.2 (#2431)
homarr-renovate[bot] Feb 27, 2025
b2cc97e
fix(deps): update dependency @auth/drizzle-adapter to ^1.8.0 (#2435)
homarr-renovate[bot] Feb 27, 2025
8c1308c
fix(deps): update dependency @auth/core to ^0.38.0 (#2434)
homarr-renovate[bot] Feb 27, 2025
add9170
fix(deps): update dependency swagger-ui-react to ^5.20.0 (#2436)
homarr-renovate[bot] Feb 27, 2025
fdd91f5
fix(deps): downgrade to next 15.1.7 cause of turbopack crash with 15.…
Meierschlumpf Feb 27, 2025
50367eb
fix: chinese traditional locale (#2440)
manuel-rw Feb 27, 2025
4483dc8
fix(deps): update tanstack-query monorepo to ^5.66.10 (#2443)
homarr-renovate[bot] Feb 28, 2025
11d2972
chore(deps): update dependency proxmox-api>undici to v7.4.0 (#2444)
homarr-renovate[bot] Feb 28, 2025
06ba0f0
fix(deps): update dependency undici to v7.4.0 (#2445)
homarr-renovate[bot] Feb 28, 2025
d8e7dfa
chore(deps): update dependency prettier-plugin-packagejson to ^2.5.9 …
homarr-renovate[bot] Feb 28, 2025
5537f95
fix(deps): update tanstack-query monorepo to ^5.66.11 (#2447)
homarr-renovate[bot] Feb 28, 2025
a88c1ba
fix(deps): update dependency eslint-plugin-react-hooks to ^5.2.0 (#2449)
homarr-renovate[bot] Feb 28, 2025
14da672
chore(deps): update dependency typescript to ^5.8.2 (#2450)
homarr-renovate[bot] Feb 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
matchPackagePatterns: ["^@homarr/"],
enabled: false,
},
// Disable Dockerode updates see https://github.com/apocas/dockerode/issues/787
// 15.2.0 crashes with turbopack error (panic)
{
matchPackagePatterns: ["^dockerode$"],
matchPackagePatterns: ["^next$", "^@next/eslint-plugin-next$"],
enabled: false,
},
{
Expand Down
121 changes: 93 additions & 28 deletions .github/workflows/deployment-docker-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,14 @@ on:
description: Send notifications

permissions:
contents: write
packages: write
contents: write # Required to update package.json version
packages: write # Required for pushing to GHCR

env:
SKIP_ENV_VALIDATION: true
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
GHCR_REPO: ghcr.io/${{ github.repository }}
TURBO_TELEMETRY_DISABLED: 1

concurrency:
Expand Down Expand Up @@ -102,59 +103,123 @@ jobs:
git pull origin dev
git rebase ${{ github.ref_name }}
git push origin dev
deploy:
name: Deploy docker image
build-amd64:
name: Build docker image for amd64
needs: release
runs-on: ubuntu-latest
env:
NEXT_VERSION: ${{ needs.release.outputs.version }}
DEPLOY_LATEST: ${{ github.ref_name == 'main' }}
DEPLOY_BETA: ${{ github.ref_name == 'beta' }}
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.release.outputs.git_ref }}
- name: Discord notification
if: ${{ github.events.inputs.send-notifications != false }}
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
args: "Deployment of an image for version '${{env.NEXT_VERSION}}' has been triggered: [run ${{ github.run_number }}](<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>)"
images: "${{ env.GHCR_REPO }}"

- name: Log in to the Container registry
uses: docker/#-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
context: .
network: host
platforms: linux/amd64
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,"name=${{ env.GHCR_REPO }}",push-by-digest=true,name-canonical=true,push=true
env:
SKIP_ENV_VALIDATION: true

build-arm64:
name: Build docker image for arm64
needs: release
runs-on: ubuntu-24.04-arm
outputs:
digest: ${{ steps.build.outputs.digest }}
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.release.outputs.git_ref }}

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: "${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}"
tags: |
${{ env.DEPLOY_LATEST == 'true' && 'type=raw,value=latest' || null }}
${{ env.DEPLOY_BETA == 'true' && 'type=raw,value=beta' || null }}
type=raw,value=${{ env.NEXT_VERSION }}
- name: Build and push
id: buildPushAction
images: "${{ env.GHCR_REPO }}"

- name: Log in to the Container registry
uses: docker/#-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
network: host
platforms: linux/arm64
labels: ${{ steps.meta.outputs.labels }}
outputs: type=image,"name=${{ env.GHCR_REPO }}",push-by-digest=true,name-canonical=true,push=true
env:
SKIP_ENV_VALIDATION: true

publish:
name: Complete deployment and notify
needs: [release, build-amd64, build-arm64]
runs-on: ubuntu-latest
env:
NEXT_VERSION: ${{ needs.release.outputs.version }}
DEPLOY_LATEST: ${{ github.ref_name == 'main' }}
DEPLOY_BETA: ${{ github.ref_name == 'beta' }}
steps:
- name: Log in to the Container registry
uses: docker/#-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Publish beta
if: env.DEPLOY_BETA == 'true'
run: |
docker buildx imagetools create -t ${{ env.GHCR_REPO }}:beta \
${{ env.GHCR_REPO }}@${{ needs.build-amd64.outputs.digest }} \
${{ env.GHCR_REPO }}@${{ needs.build-arm64.outputs.digest }}

- name: Publish latest
if: env.DEPLOY_LATEST == 'true'
run: |
docker buildx imagetools create -t ${{ env.GHCR_REPO }}:latest \
${{ env.GHCR_REPO }}@${{ needs.build-amd64.outputs.digest }} \
${{ env.GHCR_REPO }}@${{ needs.build-arm64.outputs.digest }}

- name: Publish version
run: |
docker buildx imagetools create -t ${{ env.GHCR_REPO }}:${{ env.NEXT_VERSION }} \
${{ env.GHCR_REPO }}@${{ needs.build-amd64.outputs.digest }} \
${{ env.GHCR_REPO }}@${{ needs.build-arm64.outputs.digest }}

- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: "Deployment of image has completed for branch ${{ github.ref_name }}. Image ID is '${{ steps.buildPushAction.outputs.imageid }}'."
args: "Successfully deployed images for branch **${{ github.ref_name }}**. Tagged as **${{env.NEXT_VERSION}}**."
13 changes: 13 additions & 0 deletions .run/typecheck.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="typecheck" type="js.build_tools.npm">
<package-json value="$PROJECT_DIR$/package.json" />
<command value="run" />
<scripts>
<script value="typecheck" />
</scripts>
<node-interpreter value="project" />
<package-manager value="pnpm" />
<envs />
<method v="2" />
</configuration>
</component>
18 changes: 9 additions & 9 deletions apps/nextjs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@
"@mantine/tiptap": "^7.17.0",
"@million/lint": "1.0.14",
"@tabler/icons-react": "^3.30.0",
"@tanstack/react-query": "^5.66.9",
"@tanstack/react-query-devtools": "^5.66.9",
"@tanstack/react-query-next-experimental": "^5.66.9",
"@tanstack/react-query": "^5.66.11",
"@tanstack/react-query-devtools": "^5.66.11",
"@tanstack/react-query-next-experimental": "^5.66.11",
"@trpc/client": "next",
"@trpc/next": "next",
"@trpc/react-query": "next",
Expand All @@ -81,9 +81,9 @@
"react-dom": "19.0.0",
"react-error-boundary": "^5.0.0",
"react-simple-code-editor": "^0.14.1",
"sass": "^1.85.0",
"sass": "^1.85.1",
"superjson": "2.2.2",
"swagger-ui-react": "^5.19.0",
"swagger-ui-react": "^5.20.0",
"use-deep-compare-effect": "^1.8.1",
"zod": "^3.24.2"
},
Expand All @@ -92,15 +92,15 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/chroma-js": "3.1.1",
"@types/node": "^22.13.4",
"@types/node": "^22.13.5",
"@types/prismjs": "^1.26.5",
"@types/react": "19.0.10",
"@types/react-dom": "19.0.4",
"@types/swagger-ui-react": "^5.18.0",
"concurrently": "^9.1.2",
"eslint": "^9.20.1",
"eslint": "^9.21.0",
"node-loader": "^2.1.0",
"prettier": "^3.5.1",
"typescript": "^5.7.3"
"prettier": "^3.5.2",
"typescript": "^5.8.2"
}
}
8 changes: 5 additions & 3 deletions apps/nextjs/src/app/[locale]/boards/(content)/_client.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Box, LoadingOverlay, Stack } from "@mantine/core";

import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import { useRequiredBoard } from "@homarr/boards/context";
import { useCurrentLayout, useRequiredBoard } from "@homarr/boards/context";

import { BoardCategorySection } from "~/components/board/sections/category-section";
import { BoardEmptySection } from "~/components/board/sections/empty-section";
Expand Down Expand Up @@ -43,6 +43,7 @@ export const useUpdateBoard = () => {

export const ClientBoard = () => {
const board = useRequiredBoard();
const currentLayoutId = useCurrentLayout();
const isReady = useIsBoardReady();

const fullWidthSortedSections = board.sections
Expand All @@ -63,9 +64,10 @@ export const ClientBoard = () => {
<Stack ref={ref} h="100%" style={{ visibility: isReady ? "visible" : "hidden" }}>
{fullWidthSortedSections.map((section) =>
section.kind === "empty" ? (
<BoardEmptySection key={section.id} section={section} />
// Unique keys per layout to always reinitialize the gridstack
<BoardEmptySection key={`${currentLayoutId}-${section.id}`} section={section} />
) : (
<BoardCategorySection key={section.id} section={section} />
<BoardCategorySection key={`${currentLayoutId}-${section.id}`} section={section} />
),
)}
</Stack>
Expand Down
8 changes: 4 additions & 4 deletions apps/nextjs/src/app/[locale]/boards/(content)/_creator.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { getI18n } from "@homarr/translation/server";
import { createMetaTitle } from "~/metadata";
import { createBoardLayout } from "../_layout-creator";
import type { Board } from "../_types";
import { ClientBoard } from "./_client";
import { DynamicClientBoard } from "./_dynamic-client";
import { BoardContentHeaderActions } from "./_header-actions";

export type Params = Record<string, unknown>;
Expand All @@ -37,13 +37,13 @@ export const createBoardContentPage = <TParams extends Record<string, unknown>>(

return (
<IntegrationProvider integrations={integrations}>
<ClientBoard />
<DynamicClientBoard />
</IntegrationProvider>
);
},
generateMetadataAsync: async ({ params }: { params: TParams }): Promise<Metadata> => {
generateMetadataAsync: async ({ params }: { params: Promise<TParams> }): Promise<Metadata> => {
try {
const board = await getInitialBoard(params);
const board = await getInitialBoard(await params);
const t = await getI18n();

return {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use client";

import dynamic from "next/dynamic";

export const DynamicClientBoard = dynamic(() => import("./_client").then((mod) => mod.ClientBoard), {
ssr: false,
});
24 changes: 13 additions & 11 deletions apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { MouseEvent } from "react";
import { useCallback, useEffect } from "react";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { Group, Menu } from "@mantine/core";
import { Group, Menu, ScrollArea } from "@mantine/core";
import { useHotkeys } from "@mantine/hooks";
import {
IconBox,
Expand Down Expand Up @@ -168,16 +168,18 @@ const SelectBoardsMenu = () => {
</HeaderButton>
</Menu.Target>
<Menu.Dropdown style={{ transform: "translate(-7px, 0)" }}>
{boards.map((board) => (
<Menu.Item
key={board.id}
component={Link}
href={`/boards/${board.name}`}
leftSection={<IconLayoutBoard size={20} />}
>
{board.name}
</Menu.Item>
))}
<ScrollArea.Autosize mah={300}>
{boards.map((board) => (
<Menu.Item
key={board.id}
component={Link}
href={`/boards/${board.name}`}
leftSection={<IconLayoutBoard size={20} />}
>
{board.name}
</Menu.Item>
))}
</ScrollArea.Autosize>
</Menu.Dropdown>
</Menu>
);
Expand Down
Loading
Loading