diff --git a/.github/workflows/build-gluon.yml b/.github/workflows/build-gluon.yml
index ac98edba6542847f6f90ad93c2bd4f05ee047779..00747c3d259d9a8905140ad31c6250c58a6c8598 100644
--- a/.github/workflows/build-gluon.yml
+++ b/.github/workflows/build-gluon.yml
@@ -22,10 +22,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ar71xx-generic
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ar71xx-generic_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ar71xx-generic
+          name: ar71xx-generic_output
           path: output
 
   ar71xx-tiny:
@@ -37,10 +43,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ar71xx-tiny
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ar71xx-tiny_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ar71xx-tiny
+          name: ar71xx-tiny_output
           path: output
 
   ar71xx-nand:
@@ -52,10 +64,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ar71xx-nand
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ar71xx-nand_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ar71xx-nand
+          name: ar71xx-nand_output
           path: output
 
   ath79-generic:
@@ -67,10 +85,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ath79-generic
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ath79-generic_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ath79-generic
+          name: ath79-generic_output
           path: output
 
   brcm2708-bcm2708:
@@ -82,10 +106,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh brcm2708-bcm2708
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: brcm2708-bcm2708_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: brcm2708-bcm2708
+          name: brcm2708-bcm2708_output
           path: output
 
   brcm2708-bcm2709:
@@ -97,10 +127,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh brcm2708-bcm2709
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: brcm2708-bcm2709_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: brcm2708-bcm2709
+          name: brcm2708-bcm2709_output
           path: output
 
   ipq40xx-generic:
@@ -112,10 +148,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ipq40xx-generic
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ipq40xx-generic_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ipq40xx-generic
+          name: ipq40xx-generic_output
           path: output
 
   ipq806x-generic:
@@ -127,10 +169,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ipq806x-generic
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ipq806x-generic_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ipq806x-generic
+          name: ipq806x-generic_output
           path: output
 
   lantiq-xrx200:
@@ -142,10 +190,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh lantiq-xrx200
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: lantiq-xrx200_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: lantiq-xrx200
+          name: lantiq-xrx200_output
           path: output
 
   lantiq-xway:
@@ -157,10 +211,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh lantiq-xway
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: lantiq-xway_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: lantiq-xway
+          name: lantiq-xway_output
           path: output
 
   mpc85xx-generic:
@@ -172,10 +232,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh mpc85xx-generic
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: mpc85xx-generic_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: mpc85xx-generic
+          name: mpc85xx-generic_output
           path: output
 
   mpc85xx-p1020:
@@ -187,10 +253,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh mpc85xx-p1020
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: mpc85xx-p1020_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: mpc85xx-p1020
+          name: mpc85xx-p1020_output
           path: output
 
   ramips-mt7620:
@@ -202,10 +274,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ramips-mt7620
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ramips-mt7620_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ramips-mt7620
+          name: ramips-mt7620_output
           path: output
 
   ramips-mt7621:
@@ -217,10 +295,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ramips-mt7621
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ramips-mt7621_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ramips-mt7621
+          name: ramips-mt7621_output
           path: output
 
   ramips-mt76x8:
@@ -232,10 +316,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ramips-mt76x8
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ramips-mt76x8_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ramips-mt76x8
+          name: ramips-mt76x8_output
           path: output
 
   ramips-rt305x:
@@ -247,10 +337,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ramips-rt305x
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ramips-rt305x_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ramips-rt305x
+          name: ramips-rt305x_output
           path: output
 
   sunxi-cortexa7:
@@ -262,10 +358,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh sunxi-cortexa7
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: sunxi-cortexa7_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: sunxi-cortexa7
+          name: sunxi-cortexa7_output
           path: output
 
   x86-generic:
@@ -277,10 +379,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh x86-generic
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: x86-generic_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: x86-generic
+          name: x86-generic_output
           path: output
 
   x86-geode:
@@ -292,10 +400,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh x86-geode
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: x86-geode_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: x86-geode
+          name: x86-geode_output
           path: output
 
   x86-64:
@@ -307,10 +421,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh x86-64
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: x86-64_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: x86-64
+          name: x86-64_output
           path: output
 
   ar71xx-mikrotik:
@@ -322,10 +442,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh ar71xx-mikrotik
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: ar71xx-mikrotik_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: ar71xx-mikrotik
+          name: ar71xx-mikrotik_output
           path: output
 
   brcm2708-bcm2710:
@@ -337,10 +463,16 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh brcm2708-bcm2710
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: brcm2708-bcm2710_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: brcm2708-bcm2710
+          name: brcm2708-bcm2710_output
           path: output
 
   mvebu-cortexa9:
@@ -352,9 +484,15 @@ jobs:
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh mvebu-cortexa9
+      - name: Archive build logs
+        if: ${{ !cancelled() }}
+        uses: actions/upload-artifact@v1
+        with:
+          name: mvebu-cortexa9_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: mvebu-cortexa9
+          name: mvebu-cortexa9_output
           path: output
 
diff --git a/contrib/actions/generate-actions.py b/contrib/actions/generate-actions.py
index 72786b88a46abf6264b406cfe6795dbe7bd114fc..fa31134e8549ba4921a15fb36e83a2e0370be814 100755
--- a/contrib/actions/generate-actions.py
+++ b/contrib/actions/generate-actions.py
@@ -28,10 +28,16 @@ ACTIONS_TARGET="""
         run: bash contrib/actions/install-dependencies.sh
       - name: Build
         run: bash contrib/actions/run-build.sh {target_name}
+      - name: Archive build logs
+        if: ${{{{ !cancelled() }}}}
+        uses: actions/upload-artifact@v1
+        with:
+          name: {target_name}_logs
+          path: openwrt/logs
       - name: Archive build output
         uses: actions/upload-artifact@v1
         with:
-          name: {target_name}
+          name: {target_name}_output
           path: output
 """
 
diff --git a/contrib/actions/run-build.sh b/contrib/actions/run-build.sh
index c688163061cadb7910a23fcf835482a730d8852f..3898cf7b317184354a5d13a4af3c032032c87ef6 100755
--- a/contrib/actions/run-build.sh
+++ b/contrib/actions/run-build.sh
@@ -5,7 +5,7 @@ export GLUON_AUTOREMOVE=1
 export GLUON_DEPRECATED=1
 export GLUON_SITEDIR="contrib/ci/minimal-site"
 export GLUON_TARGET=$1
+export BUILD_LOG=1
 
 make update
 make -j2 V=s
-