Browse Source

CI: create Docker container containing compiled tools

Currently each Kernel compilation takes about 30 minutes of which 20
minutes are used to compile our tools. While the toolchain is downloaded
and instantly ready the tools are missing.

This commit starts uploading a Docker container including compiled tools
which are ready to use. It is automatically updated whenever any tools
are changed.

Signed-off-by: Paul Spooren <[email protected]>
Co-Developed-by: Christian Marangi <[email protected]>
Signed-off-by: Christian Marangi <[email protected]>
Paul Spooren 3 years ago
parent
commit
25b65f548d
2 changed files with 67 additions and 0 deletions
  1. 3 0
      .github/workflows/Dockerfile.tools
  2. 64 0
      .github/workflows/tools.yml

+ 3 - 0
.github/workflows/Dockerfile.tools

@@ -0,0 +1,3 @@
+FROM registry.gitlab.com/openwrt/buildbot/buildworker-3.4.1
+
+COPY --chown=buildbot:buildbot tools.tar /tools.tar

+ 64 - 0
.github/workflows/tools.yml

@@ -5,12 +5,17 @@ on:
     paths:
     paths:
       - 'tools/**'
       - 'tools/**'
       - '.github/workflows/tools.yml'
       - '.github/workflows/tools.yml'
+  push:
+    paths:
+      - 'tools/**'
+      - '.github/workflows/tools.yml'
 
 
 permissions:
 permissions:
   contents: read
   contents: read
 
 
 jobs:
 jobs:
   build-macos-latest:
   build-macos-latest:
+    if: github.event_name != 'push'
     runs-on: macos-latest
     runs-on: macos-latest
 
 
     steps:
     steps:
@@ -105,6 +110,15 @@ jobs:
         run: |
         run: |
           chown -R buildbot:buildbot openwrt
           chown -R buildbot:buildbot openwrt
 
 
+      - name: Set AUTOREMOVE config for tools container
+        if: github.event_name == 'push'
+        shell: su buildbot -c "sh -e {0}"
+        working-directory: openwrt
+        run: |
+          touch .config
+          echo CONFIG_DEVEL=y >> .config
+          echo CONFIG_AUTOREMOVE=y >> .config
+
       - name: Make prereq
       - name: Make prereq
         shell: su buildbot -c "sh -e {0}"
         shell: su buildbot -c "sh -e {0}"
         working-directory: openwrt
         working-directory: openwrt
@@ -128,3 +142,53 @@ jobs:
         with:
         with:
           name: linux-buildbot-config
           name: linux-buildbot-config
           path: openwrt/.config
           path: openwrt/.config
+
+      - name: Archive prebuilt tools
+        if: github.event_name == 'push'
+        shell: su buildbot -c "sh -e {0}"
+        working-directory: openwrt
+        run: tar --mtime=now -cf tools.tar staging_dir/host build_dir/host dl
+
+      - name: Upload prebuilt tools
+        if: github.event_name == 'push'
+        uses: actions/upload-artifact@v2
+        with:
+          name: linux-buildbot-prebuilt-tools
+          path: openwrt/tools.tar
+          retention-days: 1
+
+  push-tools-container:
+    needs: build-linux-buildbot
+    runs-on: ubuntu-latest
+    if: github.event_name == 'push'
+
+    permissions:
+      contents: read
+      packages: write
+
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+        with:
+          path: 'openwrt'
+
+      - name: Download prebuilt tools from build job
+        uses: actions/download-artifact@v2
+        with:
+          name: linux-buildbot-prebuilt-tools
+          path: openwrt
+
+      - name: Login to GitHub Container Registry
+        uses: docker/login-action@v2
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Build and push
+        uses: docker/build-push-action@v3
+        with:
+          context: openwrt
+          push: true
+          tags: ghcr.io/${{ github.repository_owner }}/tools:latest
+          file: openwrt/.github/workflows/Dockerfile.tools