From 5f6cd6b99d91548110fc4d91d096c9be980b5665 Mon Sep 17 00:00:00 2001
From: CrazyMax <crazy-max@users.noreply.github.com>
Date: Fri, 23 Oct 2020 22:51:59 +0200
Subject: [PATCH] Update troubleshooting notes

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
---
 TROUBLESHOOTING.md       | 112 ++++++++++++++++++++++++++++++++++++++-
 __tests__/buildx.test.ts |   8 +--
 2 files changed, 115 insertions(+), 5 deletions(-)

diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md
index f2c5df0..36a2a63 100644
--- a/TROUBLESHOOTING.md
+++ b/TROUBLESHOOTING.md
@@ -1,6 +1,114 @@
 # Troubleshooting
 
-## Errors on pushing to registry
+* [`auto-push is currently not implemented for docker driver`](#auto-push-is-currently-not-implemented-for-docker-driver)
+* [Cannot push to a registry](#cannot-push-to-a-registry)
+
+## `auto-push is currently not implemented for docker driver`
+
+If you're using the default builder (which uses the docker driver) without using our `setup-buildx-action`, you may
+encounter this error message if you try to push your image:
+
+```
+Run docker/build-push-action@v2
+📣 Buildx version: 0.4.2
+🏃 Starting build...
+/usr/bin/docker buildx build --tag localhost:5000/name/app:latest --iidfile /tmp/docker-build-push-eYl8PB/iidfile --file ./test/Dockerfile --push ./test
+auto-push is currently not implemented for docker driver
+Error: buildx call failed with: auto-push is currently not implemented for docker driver
+```
+
+While waiting for an implementation to be done on buildx/buildkit, you have the following possibilities
+to solve this atm:
+
+### With `docker-container` driver and `setup-buildx`
+
+> Recommended solution
+
+```yaml
+jobs:
+  build:
+    -
+      name: Checkout
+      uses: actions/checkout@v2
+    -
+      name: Set up Docker Buildx
+      uses: docker/setup-buildx-action@v1
+    -
+      name: Login
+      uses: docker/login-action@v1
+      with:
+        registry: ${{ env.REGISTRY }}
+        username: ${{ env.USER }}
+        password: ${{ secrets.PASSWORD }}
+    -
+      name: Build and push
+      uses: docker/build-push-action@v2
+      with:
+        context: .
+        tags: ${{ env.REGISTRY }}/myapp:latest
+        push: true
+```
+
+### With `docker` driver
+
+```yaml
+jobs:
+  build:
+    -
+      name: Checkout
+      uses: actions/checkout@v2
+    -
+      name: Login
+      uses: docker/login-action@v1
+      with:
+        registry: ${{ env.REGISTRY }}
+        username: ${{ env.USER }}
+        password: ${{ secrets.PASSWORD }}
+    -
+      name: Build
+      uses: docker/build-push-action@v2
+      with:
+        context: .
+        tags: ${{ env.REGISTRY }}/myapp:latest
+        load: true
+    -
+      name: Push
+      run: docker push ${{ env.REGISTRY }}/myapp:latest
+```
+
+### With `docker` driver and `setup-buildx`
+
+```yaml
+jobs:
+  build:
+    -
+      name: Checkout
+      uses: actions/checkout@v2
+    -
+      name: Set up Docker Buildx
+      uses: docker/setup-buildx-action@v1
+      with:
+        driver: docker
+    -
+      name: Login
+      uses: docker/login-action@v1
+      with:
+        registry: ${{ env.REGISTRY }}
+        username: ${{ env.USER }}
+        password: ${{ secrets.PASSWORD }}
+    -
+      name: Build
+      uses: docker/build-push-action@v2
+      with:
+        context: .
+        tags: ${{ env.REGISTRY }}/myapp:latest
+        load: true
+    -
+      name: Push
+      run: docker push ${{ env.REGISTRY }}/myapp:latest
+```
+
+## Cannot push to a registry
 
 While pushing to a registry, you may encounter these kinds of issues:
 
@@ -38,7 +146,7 @@ jobs:
   containerd:
     runs-on: ubuntu-latest
     steps:
-       -
+      -
         name: Checkout
         uses: actions/checkout@v2
       -
diff --git a/__tests__/buildx.test.ts b/__tests__/buildx.test.ts
index 9f04124..8141ec1 100644
--- a/__tests__/buildx.test.ts
+++ b/__tests__/buildx.test.ts
@@ -117,9 +117,11 @@ describe('parseVersion', () => {
 });
 
 describe('getSecret', () => {
-  it('writes correct secret content', async () => {
-    const key = 'MY_KEY';
-    const secret = 'c3RyaW5nLXdpdGgtZXF1YWxzCg==';
+  test.each([
+    ['A_SECRET', 'abcdef0123456789'],
+    ['GIT_AUTH_TOKEN', 'abcdefghijklmno=0123456789'],
+    ['MY_KEY', 'c3RyaW5nLXdpdGgtZXF1YWxzCg==']
+  ])('given %p key and %p secret', async (key, secret) => {
     const secretArgs = await buildx.getSecret(`${key}=${secret}`);
     console.log(`secretArgs: ${secretArgs}`);
     expect(secretArgs).toEqual(`id=${key},src=${tmpNameSync}`);