From 98414716d94acbfb03376c5604fbb6807f35c05f Mon Sep 17 00:00:00 2001
From: CrazyMax <crazy-max@users.noreply.github.com>
Date: Sun, 25 Oct 2020 03:21:46 +0100
Subject: [PATCH] Add workflows

---
 .github/ghaction-docker-meta.png | Bin 0 -> 6616 bytes
 .github/labels.yml               |  77 +++++++++++++++++++++++++++++
 .github/workflows/ci.yml         |  82 +++++++++++++++++++++++++++++++
 .github/workflows/labels.yml     |  20 ++++++++
 .github/workflows/test.yml       |  53 ++++++++++++++++++++
 Dockerfile                       |   1 +
 README.md                        |   6 ++-
 action.yml                       |   4 +-
 dist/index.js                    |   9 ++--
 src/main.ts                      |   9 ++--
 10 files changed, 250 insertions(+), 11 deletions(-)
 create mode 100644 .github/ghaction-docker-meta.png
 create mode 100644 .github/labels.yml
 create mode 100644 .github/workflows/ci.yml
 create mode 100644 .github/workflows/labels.yml
 create mode 100644 .github/workflows/test.yml

diff --git a/.github/ghaction-docker-meta.png b/.github/ghaction-docker-meta.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c33855386741d64d2368610e599686c1860d0ab
GIT binary patch
literal 6616
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
W!~LvWNSFWoLe^B(QNiA~3jQC1oZ({t

literal 0
HcmV?d00001

diff --git a/.github/labels.yml b/.github/labels.yml
new file mode 100644
index 0000000..3444025
--- /dev/null
+++ b/.github/labels.yml
@@ -0,0 +1,77 @@
+## more info https://github.com/crazy-max/ghaction-github-labeler
+- # automerge
+  name: ":bell: automerge"
+  color: "8f4fbc"
+  description: ""
+- # bot
+  name: ":robot: bot"
+  color: "69cde9"
+  description: ""
+- # bug
+  name: ":bug: bug"
+  color: "b60205"
+  description: ""
+- # dependencies
+  name: ":game_die: dependencies"
+  color: "0366d6"
+  description: ""
+- # documentation
+  name: ":memo: documentation"
+  color: "c5def5"
+  description: ""
+- # duplicate
+  name: ":busts_in_silhouette: duplicate"
+  color: "cccccc"
+  description: ""
+- # enhancement
+  name: ":sparkles: enhancement"
+  color: "0054ca"
+  description: ""
+- # feature request
+  name: ":bulb: feature request"
+  color: "0e8a16"
+  description: ""
+- # feedback
+  name: ":mega: feedback"
+  color: "03a9f4"
+  description: ""
+- # future maybe
+  name: ":rocket: future maybe"
+  color: "fef2c0"
+  description: ""
+- # good first issue
+  name: ":hatching_chick: good first issue"
+  color: "7057ff"
+  description: ""
+- # help wanted
+  name: ":pray: help wanted"
+  color: "4caf50"
+  description: ""
+- # hold
+  name: ":hand: hold"
+  color: "24292f"
+  description: ""
+- # invalid
+  name: ":no_entry_sign: invalid"
+  color: "e6e6e6"
+  description: ""
+- # maybe bug
+  name: ":interrobang: maybe bug"
+  color: "ff5722"
+  description: ""
+- # needs more info
+  name: ":thinking: needs more info"
+  color: "795548"
+  description: ""
+- # question
+  name: ":question: question"
+  color: "3f51b5"
+  description: ""
+- # upstream
+  name: ":eyes: upstream"
+  color: "fbca04"
+  description: ""
+- # wontfix
+  name: ":coffin: wontfix"
+  color: "ffffff"
+  description: ""
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..98696a7
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,82 @@
+name: ci
+
+on:
+  schedule:
+    - cron: '0 10 * * 0' # everyday sunday at 10am
+  push:
+    branches:
+      - '**'
+    tags:
+      - 'v*.*.*'
+  pull_request:
+
+env:
+  DOCKER_IMAGE: localhost:5000/name/app
+
+jobs:
+  multi-images:
+    runs-on: ubuntu-latest
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2.3.3
+      -
+        name: Docker meta
+        id: docker_meta
+        uses: ./
+        with:
+          images: |
+            ${{ env.DOCKER_IMAGE }}
+            ghcr.io/name/app
+          tag-sha: true
+
+  docker-push:
+    runs-on: ubuntu-latest
+    services:
+      registry:
+        image: registry:2
+        ports:
+          - 5000:5000
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2.3.3
+      -
+        name: Docker meta
+        id: docker_meta
+        uses: ./
+        with:
+          images: |
+            ${{ env.DOCKER_IMAGE }}
+          tag-sha: true
+      -
+        name: Set up QEMU
+        uses: docker/setup-qemu-action@v1
+      -
+        name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v1
+        with:
+          driver-opts: network=host
+      -
+        name: Build and push to local registry
+        uses: docker/build-push-action@v2
+        with:
+          context: ./test
+          file: ./test/Dockerfile
+          platforms: linux/amd64,linux/arm64,linux/386
+          push: true
+          tags: ${{ steps.docker_meta.outputs.tags }}
+          labels: ${{ steps.docker_meta.outputs.labels }}
+      -
+        name: Inspect image
+        run: |
+          docker pull ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }}
+          docker image inspect ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }}
+      -
+        name: Check manifest
+        run: |
+          docker buildx imagetools inspect ${{ env.DOCKER_IMAGE }}:${{ steps.docker_meta.outputs.version }}
+      -
+        name: Dump context
+        if: always()
+        uses: crazy-max/ghaction-dump-context@v1
diff --git a/.github/workflows/labels.yml b/.github/workflows/labels.yml
new file mode 100644
index 0000000..08d5675
--- /dev/null
+++ b/.github/workflows/labels.yml
@@ -0,0 +1,20 @@
+name: labels
+
+on:
+  push:
+    branches:
+      - 'master'
+    paths:
+      - '.github/labels.yml'
+      - '.github/workflows/labels.yml'
+
+jobs:
+  labeler:
+    runs-on: ubuntu-latest
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2.3.3
+      -
+        name: Run Labeler
+        uses: crazy-max/ghaction-github-labeler@v3.1.0
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..1fd782c
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,53 @@
+name: test
+
+on:
+  push:
+    branches:
+      - 'master'
+      - 'releases/v*'
+    paths-ignore:
+      - '**.md'
+  pull_request:
+    paths-ignore:
+      - '**.md'
+
+jobs:
+  test-containerized:
+    runs-on: ubuntu-latest
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2.3.3
+      -
+        name: Validate
+        run: docker buildx bake validate
+      -
+        name: Test
+        run: docker buildx bake test
+
+  test:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        os:
+          - ubuntu-latest
+          - macOS-latest
+          - windows-latest
+    steps:
+      -
+        name: Checkout
+        uses: actions/checkout@v2.3.3
+      -
+        name: Install
+        run: yarn install
+      -
+        name: Test
+        run: yarn run test
+      -
+        name: Upload coverage
+        uses: codecov/codecov-action@v1.0.13
+        if: success()
+        with:
+          token: ${{ secrets.CODECOV_TOKEN }}
+          file: ./coverage/clover.xml
diff --git a/Dockerfile b/Dockerfile
index 49a7366..6998ab8 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -20,6 +20,7 @@ FROM base AS build
 RUN yarn build
 
 FROM deps AS test
+COPY . .
 RUN yarn run test
 
 FROM base AS run-format
diff --git a/README.md b/README.md
index 2a9afcf..70c59d1 100644
--- a/README.md
+++ b/README.md
@@ -12,6 +12,8 @@ GitHub Action to extract metadata (tags, labels) for Docker. This action is part
 
 If you are interested, [check out](https://git.io/Je09Y) my other :octocat: GitHub Actions!
 
+![Screenshot](.github/ghaction-docker-meta.png)
+
 ___
 
 * [Features](#features)
@@ -25,7 +27,7 @@ ___
 
 ## Features
 
-* Docker tags generated through GitHub action event and Git metadata
+* Docker tags generated from GitHub action event and Git metadata
 * [OCI Image Format Specification](https://github.com/opencontainers/image-spec/blob/master/annotations.md) used to generate Docker labels
 
 ## Usage
@@ -104,7 +106,7 @@ Following inputs can be used as `step.with` keys
 |---------------------|----------|------------------------------------|
 | `images`            | List/CSV | List of Docker images to use as base name for tags |
 | `tag-sha`           | Bool     | Add git short SHA as Docker tag (default `false`) |
-| `tag-edge`          | String   | Branch that will be tagged as edge (default `${{ repo.default_branch }}` |
+| `tag-edge`          | String   | Branch that will be tagged as edge (default `repo.default_branch`) |
 | `sep-tags`          | String   | Separator to use for tags output (default `\n`) |
 | `sep-labels`        | String   | Separator to use for labels output (default `\n`) |
 
diff --git a/action.yml b/action.yml
index 6712b4e..f802c94 100644
--- a/action.yml
+++ b/action.yml
@@ -15,15 +15,13 @@ inputs:
     default: 'false'
     required: false
   tag-edge:
-    description: 'Branch that will be tagged as edge (default ${{ repo.default_branch }})'
+    description: 'Branch that will be tagged as edge (default repo.default_branch)'
     required: false
   sep-tags:
     description: 'Separator to use for tags output (default \n)'
-    default: '\n'
     required: false
   sep-labels:
     description: 'Separator to use for labels output (default \n)'
-    default: '\n'
     required: false
   github-token:
     description: 'GitHub Token as provided by secrets'
diff --git a/dist/index.js b/dist/index.js
index e9945f1..44ff56a 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -115,7 +115,6 @@ function run() {
             const context = github.context();
             const repo = yield github.repo(inputs.githubToken);
             core.startGroup(`Context info`);
-            core.info(`repo: ${context.repo}`);
             core.info(`eventName: ${context.eventName}`);
             core.info(`sha: ${context.sha}`);
             core.info(`ref: ${context.ref}`);
@@ -133,12 +132,16 @@ function run() {
             core.setOutput('version', version);
             const tags = meta.tags();
             core.startGroup(`Docker tags`);
-            core.info(JSON.stringify(tags));
+            for (let tag of tags) {
+                core.info(tag);
+            }
             core.endGroup();
             core.setOutput('tags', tags.join(inputs.sepTags));
             const labels = meta.labels();
             core.startGroup(`Docker labels`);
-            core.info(JSON.stringify(labels));
+            for (let label of labels) {
+                core.info(label);
+            }
             core.endGroup();
             core.setOutput('labels', labels.join(inputs.sepTags));
         }
diff --git a/src/main.ts b/src/main.ts
index ff73bcf..052f891 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -15,7 +15,6 @@ async function run() {
     const context: Context = github.context();
     const repo: ReposGetResponseData = await github.repo(inputs.githubToken);
     core.startGroup(`Context info`);
-    core.info(`repo: ${context.repo}`);
     core.info(`eventName: ${context.eventName}`);
     core.info(`sha: ${context.sha}`);
     core.info(`ref: ${context.ref}`);
@@ -36,13 +35,17 @@ async function run() {
 
     const tags: Array<string> = meta.tags();
     core.startGroup(`Docker tags`);
-    core.info(JSON.stringify(tags));
+    for (let tag of tags) {
+      core.info(tag);
+    }
     core.endGroup();
     core.setOutput('tags', tags.join(inputs.sepTags));
 
     const labels: Array<string> = meta.labels();
     core.startGroup(`Docker labels`);
-    core.info(JSON.stringify(labels));
+    for (let label of labels) {
+      core.info(label);
+    }
     core.endGroup();
     core.setOutput('labels', labels.join(inputs.sepTags));
   } catch (error) {