diff --git a/.github/labeler.yml b/.github/labeler.yml
index f4f706039a51f10863f86cce6feb314162bf8bf0..b410e6ef90b28ddf5d989f44e7024f941082aa5a 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -1,59 +1,93 @@
 ---
 "3. topic: babel":
-  - package/gluon-l3roamd/**
-  - package/gluon-mesh-babel/**
-  - package/gluon-mmfd/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/gluon-l3roamd/**
+    - package/gluon-mesh-babel/**
+    - package/gluon-mmfd/**
 "3. topic: batman-adv":
-  - docs/package/gluon-mesh-batman-adv*
-  - package/gluon-alfred/**
-  - package/gluon-client-bridge/**
-  - package/gluon-mesh-batman-adv/**
-  - package/libbatadv/**
+- changed-files:
+  - any-glob-to-any-file:
+    - docs/package/gluon-mesh-batman-adv*
+    - package/gluon-alfred/**
+    - package/gluon-client-bridge/**
+    - package/gluon-mesh-batman-adv/**
+    - package/libbatadv/**
 "3. topic: build":
-  - Makefile
-  - scripts/**
+  - changed-files:
+    - any-glob-to-any-file:
+      - Makefile
+      - scripts/**
 "3. topic: config-mode":
-  - docs/dev/web/config-mode.rst
-  - docs/package/gluon-config-mode-*
-  - package/gluon-config-mode-*/**
-  - package/gluon-web*/**
+- changed-files:
+  - any-glob-to-any-file:
+    - docs/dev/web/config-mode.rst
+    - docs/package/gluon-config-mode-*
+    - package/gluon-config-mode-*/**
+    - package/gluon-web*/**
 "3. topic: continous integration":
-  - .github/workflows/*
-  - contrib/actions/**
-  - contrib/ci/**
+- changed-files:
+  - any-glob-to-any-file:
+    - .github/workflows/*
+    - contrib/actions/**
+    - contrib/ci/**
 "3. topic: docs":
-  - docs/**
+- changed-files:
+  - any-glob-to-any-file:
+    - docs/**
 "3. topic: fastd":
-  - docs/features/fastd*
-  - package/gluon-mesh-vpn-fastd/**
+- changed-files:
+  - any-glob-to-any-file:
+    - docs/features/fastd*
+    - package/gluon-mesh-vpn-fastd/**
 "3. topic: firewall":
-  - package/**/*-firewall
-  - package/gluon-ebtables-*/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/**/*-firewall
+    - package/gluon-ebtables-*/**
 "3. topic: hardware":
-  - package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
-  - package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
-  - targets/*
+- changed-files:
+  - any-glob-to-any-file:
+    - package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+    - package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+    - targets/*
 "3. topic: multidomain":
-  - docs/features/multidomain*
-  - docs/multidomain-site-example/**
-  - package/gluon-config-mode-domain-select/**
-  - package/gluon-scheduled-domain-switch/**
+- changed-files:
+  - any-glob-to-any-file:
+    - docs/features/multidomain*
+    - docs/multidomain-site-example/**
+    - package/gluon-config-mode-domain-select/**
+    - package/gluon-scheduled-domain-switch/**
 "3. topic: package":
-  - package/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/**
 "3. topic: respondd":
-  - package/**/*respondd*
-  - package/gluon-respondd/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/**/*respondd*
+    - package/gluon-respondd/**
 "3. topic: status-page":
-  - package/gluon-status-page/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/gluon-status-page/**
 "3. topic: tests":
-  - tests/**
+- changed-files:
+  - any-glob-to-any-file:
+    - tests/**
 "3. topic: tunneldigger":
-  - package/gluon-mesh-vpn-tunneldigger/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/gluon-mesh-vpn-tunneldigger/**
 "3. topic: wireguard":
-  - package/gluon-mesh-vpn-wireguard/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/gluon-mesh-vpn-wireguard/**
 "3. topic: wireless":
-  - package/gluon-mesh-wireless-sae/**
-  - package/gluon-private-wifi/**
-  - package/gluon-web-private-wifi/**
-  - package/gluon-web-wifi-config/**
-  - package/gluon-wireless-encryption-wpa3/**
+- changed-files:
+  - any-glob-to-any-file:
+    - package/gluon-mesh-wireless-sae/**
+    - package/gluon-private-wifi/**
+    - package/gluon-web-private-wifi/**
+    - package/gluon-web-wifi-config/**
+    - package/gluon-wireless-encryption-wpa3/**
diff --git a/.github/workflows/build-container.yml b/.github/workflows/build-container.yml
index f07569446e9b885017d379abfffb96be739a1a51..2fa17bbc7fbeb71ae782f694cfdaee17847ea9d6 100644
--- a/.github/workflows/build-container.yml
+++ b/.github/workflows/build-container.yml
@@ -23,9 +23,9 @@ jobs:
       - name: Checkout repository
         uses: actions/checkout@v4
       - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
+        uses: docker/setup-qemu-action@v3
       - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2
+        uses: docker/setup-buildx-action@v3
       - name: Log in to the Container registry
         uses: docker/login-action@3d58c274f17dffee475a5520cbe67f0a882c4dbb
         if: ${{ github.repository_owner == 'freifunk-gluon' && github.event_name == 'push' }}
diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml
index 18aedf14a0ffce8632b102564d04c23469f89651..016193af8d4c2d721877922cb3db612e28561d32 100644
--- a/.github/workflows/build-docs.yml
+++ b/.github/workflows/build-docs.yml
@@ -23,7 +23,7 @@ jobs:
       - name: Build documentation
         run: make -C docs html
       - name: Archive build output
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: docs_output
           path: docs/_build/html
diff --git a/.github/workflows/build-gluon.yml b/.github/workflows/build-gluon.yml
index 40fe7f69b2718b2b580272f27ba3f07cce0f76cd..17e78d5c2a662ab19bd943ecd507abd59d2fb24d 100644
--- a/.github/workflows/build-gluon.yml
+++ b/.github/workflows/build-gluon.yml
@@ -28,7 +28,7 @@ jobs:
       - uses: actions/checkout@v4
 
       # Filter targets based on changed files
-      - uses: dorny/paths-filter@v2
+      - uses: dorny/paths-filter@v3
         id: filter
         with:
           filters: .github/filters.yml
@@ -56,13 +56,13 @@ jobs:
 
       - name: Archive build logs
         if: ${{ !cancelled() }}
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: ${{ matrix.target }}_logs
           path: openwrt/logs
 
       - name: Archive build output
-        uses: actions/upload-artifact@v3
+        uses: actions/upload-artifact@v4
         with:
           name: ${{ matrix.target }}_output
           path: output
diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml
index b3c920facd2d54635cb9f74f1813aa0cca6f64f3..4626ce1f94d88e0eeec7c75a7111e47ba9e00bb5 100644
--- a/.github/workflows/labels.yml
+++ b/.github/workflows/labels.yml
@@ -15,7 +15,7 @@ jobs:
     runs-on: ubuntu-22.04
     if: github.repository_owner == 'freifunk-gluon'
     steps:
-    - uses: actions/labeler@v4
+    - uses: actions/labeler@v5
       with:
         repo-token: ${{ secrets.GITHUB_TOKEN }}
         sync-labels: true