From 50b18aa19d3518a0eab5c012bfae30cd71e01cc3 Mon Sep 17 00:00:00 2001
From: Michael Kriese <michael.kriese@visualon.de>
Date: Thu, 26 Mar 2020 06:59:57 +0100
Subject: [PATCH] chore(ci): refactor workflow (#5779)

---
 .github/workflows/{test.yml => build.yml} | 71 +++++++++++++++++++++--
 .github/workflows/dockerimages.yml        | 50 ----------------
 .github/workflows/release-docker.sh       |  5 +-
 .github/workflows/release.yml             | 14 +++--
 docker/bake.hcl                           |  4 +-
 readme.md                                 |  1 +
 6 files changed, 77 insertions(+), 68 deletions(-)
 rename .github/workflows/{test.yml => build.yml} (75%)
 delete mode 100644 .github/workflows/dockerimages.yml

diff --git a/.github/workflows/test.yml b/.github/workflows/build.yml
similarity index 75%
rename from .github/workflows/test.yml
rename to .github/workflows/build.yml
index faa244eecd..4a1983601e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/build.yml
@@ -1,4 +1,4 @@
-name: Test CI
+name: build
 
 on:
   push:
@@ -10,10 +10,28 @@ on:
 
 env:
   CI: true
+  DOCKER_REPO: renovate/renovate
+  YARN_CACHE_KEY: v1
+  BUILDX_VERSION: v0.3.1
+  # https://github.com/chalk/supports-color/issues/106
+  FORCE_COLOR: true
 
 jobs:
+  cleanup:
+    runs-on: ubuntu-latest
+    timeout-minutes: 5
+
+    steps:
+      - name: github-cleanup
+        uses: renovatebot/gh-action@v0
+        continue-on-error: true
+        with:
+          command: github-cleanup
+          token: ${{ secrets.GH_TOKEN }}
+          dry-run: ${{github.ref == 'refs/heads/master'}}
+
   test:
-    name: test
+    needs: [cleanup]
     runs-on: ${{ matrix.os }}
 
     # tests shouldn't need more than 15 min
@@ -75,9 +93,9 @@ jobs:
         uses: actions/cache@v1
         with:
           path: ${{ steps.init.outputs.yarn_cache }}
-          key: v1-${{ runner.os }}-yarn_cache-${{ hashFiles('**/yarn.lock') }}
+          key: ${{ env.YARN_CACHE_KEY }}-${{ runner.os }}-yarn_cache-${{ hashFiles('**/yarn.lock') }}
           restore-keys: |
-            v1-${{ runner.os }}-yarn_cache-
+            ${{ env.YARN_CACHE_KEY }}-${{ runner.os }}-yarn_cache-
 
       - name: Cache node_modules
         uses: actions/cache@v1
@@ -172,9 +190,9 @@ jobs:
         uses: actions/cache@v1
         with:
           path: ${{ steps.init.outputs.yarn_cache }}
-          key: v1-${{ runner.os }}-yarn_cache-${{ hashFiles('**/yarn.lock') }}
+          key: ${{ env.YARN_CACHE_KEY }}-${{ runner.os }}-yarn_cache-${{ hashFiles('**/yarn.lock') }}
           restore-keys: |
-            v1-${{ runner.os }}-yarn_cache-
+            ${{ env.YARN_CACHE_KEY }}-${{ runner.os }}-yarn_cache-
 
       - name: Cache node_modules
         uses: actions/cache@v1
@@ -200,3 +218,44 @@ jobs:
 
       - name: Type check
         run: yarn type-check
+
+  test-docker:
+    needs: cleanup
+    runs-on: ubuntu-latest
+
+    timeout-minutes: 15
+
+    steps:
+      - name: Set up Docker Buildx ${{ env.BUILDX_VERSION }}
+        uses: crazy-max/ghaction-docker-buildx@v1
+        with:
+          version: ${{ env.BUILDX_VERSION }}
+
+      - uses: actions/checkout@v2
+
+      - name: Build the Docker images
+        run: |
+          docker buildx bake \
+            --file docker/bake.hcl \
+            --set settings.output=type=docker \
+            default
+
+      - name: Test the Docker images
+        run: |
+          docker run --rm -t ${DOCKER_REPO} --version
+          docker run --rm -t ${DOCKER_REPO}:slim --version
+
+      - name: Image history latest
+        run: docker history ${DOCKER_REPO}
+      - name: Image history slim
+        run: docker history ${DOCKER_REPO}:slim
+
+      - name: Images size
+        run: docker image ls | grep ${DOCKER_REPO}
+
+  release:
+    needs: [lint, test, test-docker]
+    runs-on: ubuntu-latest
+    timeout-minutes: 5
+    steps:
+      - run: echo "Release"
diff --git a/.github/workflows/dockerimages.yml b/.github/workflows/dockerimages.yml
deleted file mode 100644
index 769b26a0ac..0000000000
--- a/.github/workflows/dockerimages.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-name: Docker Images CI
-
-on:
-  push:
-    branches:
-      - master
-      - 'renovate/**'
-
-  pull_request:
-
-env:
-  PLATFORM: linux/amd64
-  DOCKER_CACHE_TAG: _cache
-  DOCKER_REPO: renovate/renovate
-
-jobs:
-  build:
-    name: Build image
-    runs-on: ubuntu-latest
-
-    timeout-minutes: 20
-
-    steps:
-      - name: Set up Docker Buildx
-        id: buildx
-        uses: crazy-max/ghaction-docker-buildx@v1
-        with:
-          version: v0.3.1
-
-      - uses: actions/checkout@v2
-
-      - name: Build the Docker images
-        run: |
-          docker buildx bake \
-            --file docker/bake.hcl \
-            --set settings.output=type=docker \
-            default
-
-      - name: Test the Docker images
-        run: |
-          docker run --rm -t ${DOCKER_REPO} --version
-          docker run --rm -t ${DOCKER_REPO}:slim --version
-
-      - name: Image history latest
-        run: docker history ${DOCKER_REPO}
-      - name: Image history slim
-        run: docker history ${DOCKER_REPO}:slim
-
-      - name: Images size
-        run: docker image ls | grep ${DOCKER_REPO}
diff --git a/.github/workflows/release-docker.sh b/.github/workflows/release-docker.sh
index 37a6a0add4..6b8896e152 100755
--- a/.github/workflows/release-docker.sh
+++ b/.github/workflows/release-docker.sh
@@ -16,11 +16,8 @@ fi
 # build final images
 docker buildx bake \
   --file docker/bake.hcl \
-  --set settings.args.SHA=${SHA}} \
   --set settings.labels.org.opencontainers.image.version=${VERSION} \
-  --set settings.labels.org.opencontainers.image.revision=${SHA} \
-  --set latest.cache-to=renovate/renovate:_cache-latest \
-  --set slim.cache-to=renovate/renovate:_cache-slim \
+  --set settings.labels.org.opencontainers.image.revision=${GIT_HASH} \
   --set settings.output=type=docker \
   default
 
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index be5ba1a614..9d5c564817 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -7,9 +7,11 @@ on:
 
 env:
   PLATFORM: linux/amd64
-  DOCKER_CACHE_TAG: _cache
   DOCKER_REPO: renovate/renovate
   SKIP_JAVA_TESTS: true
+  BUILDX_VERSION: v0.3.1
+  # https://github.com/chalk/supports-color/issues/106
+  FORCE_COLOR: true
 
 jobs:
   semantic-release:
@@ -76,11 +78,11 @@ jobs:
       - name: Unit tests
         run: yarn jest --maxWorkers=2 --ci --coverageReporters=text-summary
 
-      - name: Set up Docker Buildx
+      - name: Set up Docker Buildx ${{ env.BUILDX_VERSION }}
         id: buildx
         uses: crazy-max/ghaction-docker-buildx@v1
         with:
-          version: v0.3.1
+          version: ${{ env.BUILDX_VERSION }}
 
       - name: Docker registry login
         run: echo "${{ secrets.DOCKER_RENOVATERELEASE_TOKEN }}" | docker login -u renovaterelease --password-stdin
@@ -90,8 +92,8 @@ jobs:
         run: |
           docker buildx bake \
             --file docker/bake.hcl \
-            --set latest.cache-to=renovate/renovate:_cache-latest \
-            --set slim.cache-to=renovate/renovate:_cache-slim \
+            --set latest.cache-to=type=registry,ref=renovate/docker-build-cache:renovate-latest,mode=max \
+            --set slim.cache-to=type=registry,ref=renovate/docker-build-cache:renovate-slim,mode=max \
             default
 
       - name: semantic-release
@@ -99,6 +101,6 @@ jobs:
           echo '//registry.yarnpkg.com/:_authToken=${NPM_TOKEN}' > ~/.npmrc
           yarn semantic-release
         env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
           NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
           SHA: ${{github.sha}}
diff --git a/docker/bake.hcl b/docker/bake.hcl
index 91e047e95c..4c8b6ee5c7 100644
--- a/docker/bake.hcl
+++ b/docker/bake.hcl
@@ -10,11 +10,11 @@ target "slim" {
   inherits = ["settings"]
   tags = ["renovate/renovate:slim"]
   args = { "IMAGE" = "slim" }
-  cache-from = ["renovate/renovate:_cache-slim"]
+  cache-from = ["renovate/docker-build-cache:renovate-slim", "renovate/renovate:_cache-slim"]
 }
 
 target "latest" {
   inherits = ["settings"]
   tags = ["renovate/renovate"]
-  cache-from = ["renovate/renovate:_cache-latest"]
+  cache-from = ["renovate/docker-build-cache:renovate-latest", "renovate/renovate:_cache-latest"]
 }
diff --git a/readme.md b/readme.md
index 4c26ef8084..36523f6aff 100644
--- a/readme.md
+++ b/readme.md
@@ -7,6 +7,7 @@ Automated dependency updates. Multi-platform and multi-language.
 [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://raw.githubusercontent.com/renovatebot/renovate/master/license)
 [![codecov](https://codecov.io/gh/renovatebot/renovate/branch/master/graph/badge.svg)](https://codecov.io/gh/renovatebot/renovate)
 [![Renovate enabled](https://img.shields.io/badge/renovate-enabled-brightgreen.svg)](https://renovatebot.com/)
+[![Build status](https://github.com/renovatebot/renovate/workflows/build/badge.svg)](https://github.com/renovatebot/renovate/actions)
 
 ## Why Use Renovate?
 
-- 
GitLab