-
Notifications
You must be signed in to change notification settings - Fork 0
92 lines (89 loc) · 3.76 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
name: build docker image
on:
workflow_dispatch:
push:
branches:
- 'main'
tags:
- 'v*'
env:
LATEST_DEBIAN: 'bullseye'
DEFAULT_SIZE: 'slim'
jobs:
build_docker_image_and_push:
runs-on: ubuntu-latest
strategy:
matrix:
image: ['bullseye', 'buster']
size: ['', 'slim']
steps:
- name: Checkout source
uses: actions/checkout@230611dbd0eb52da1e1f4f7bc8bb0c3a339fc8b7
- name: Get short git hash
id: short_hash
run: echo "::set-output name=sha_short::$(git rev-parse --short HEAD)"
- name: Get version
id: get_version
run: echo "::set-output name=version::$(grep '^ARG VERSION=' Dockerfile | cut -d= -f2)"
- name: Construct base_image
id: get_base_image
env:
IMAGE: ${{ matrix.image }}
SIZE: ${{ matrix.size }}
run: |
echo "::set-output name=image::debian:${IMAGE}${SIZE:+-$SIZE}"
echo "::set-output name=tag::${IMAGE}${SIZE:+-$SIZE}"
echo "::set-output name=is_default::$([ "$IMAGE" = "$LATEST_DEBIAN" ] && [ "$SIZE" == "$DEFAULT_SIZE" ] && echo true || echo false)"
- name: Get docker metadata
id: get_metadata
uses: docker/metadata-action@f3c886e26b64d7e5ef5ff5f574efc88b317b8451
with:
images: willholtz/test-tag
flavor: latest=false
# latest
# base_image
# major
# major.minor
# major.minor.patch
# major-base_image
# major.minor-base_image
# major.minor.patch-base_image
# sha
# sha-base_image
tags: |
type=raw,value=latest,enable=${{ steps.get_base_image.outputs.is_default }}
type=raw,value=${{ steps.get_base_image.outputs.tag }}
type=semver,pattern={{major}},enable=${{ steps.get_base_image.outputs.is_default }},value=${{ steps.get_version.outputs.version }}
type=semver,pattern={{major}}.{{minor}},enable=${{ steps.get_base_image.outputs.is_default }},value=${{ steps.get_version.outputs.version }}
type=semver,pattern={{version}},enable=${{ steps.get_base_image.outputs.is_default }},value=${{ steps.get_version.outputs.version }}
type=semver,pattern={{major}}-${{ steps.get_base_image.outputs.tag}},value=${{ steps.get_version.outputs.version }}
type=semver,pattern={{major}}.{{minor}}-${{ steps.get_base_image.outputs.tag}},value=${{ steps.get_version.outputs.version }}
type=semver,pattern={{version}}-${{ steps.get_base_image.outputs.tag }},value=${{ steps.get_version.outputs.version }}
type=sha,prefix=git-,enable=${{ steps.get_base_image.outputs.is_default }}
type=sha,prefix=git-,suffix=-${{ steps.get_base_image.outputs.tag }}
- name: Setup docker buildx
uses: docker/setup-buildx-action@79abd3f86f79a9d68a23c75a09a9a85889262adf
- name: Login to DockerHub
uses: docker/login-action@17f28ab24d0d2832d5ff23a1409bbfc373ebcb96
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker images
id: docker_build
uses: docker/build-push-action@fe02965b4878556fce19e4f0aa608d7d09ed629b
with:
platforms: linux/amd64
push: true
build-args: |
BASE_IMAGE=${{ steps.get_base_image.outputs.image }}
tags: ${{ steps.get_metadata.outputs.tags }}
labels: ${{ steps.get_metadata.outputs.labels}}
- name: Output tag list
id: output_list_tags
run: echo "${{ steps.get_metadata.outputs.json }}"
- name: Output base_image
id: output_base_image
run: |
echo "${{ steps.get_base_image.outputs.image }}"
echo "${{ steps.get_base_image.outputs.tag }}"
echo "${{ steps.get_base_image.outputs.is_default }}"