-
Notifications
You must be signed in to change notification settings - Fork 0
144 lines (125 loc) Β· 5.02 KB
/
build-docker.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
name: Build and Push Docker Image
on:
push:
branches:
- main
tags:
- '*.*.*'
pull_request:
branches:
- main
workflow_dispatch:
inputs:
version:
description: 'Version to build and deploy'
required: false
env:
REPO: 'artifact.aerospike.io/ecosystem-container-dev-local'
JFROG_CLI_BUILD_NAME: 'asvec'
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
with:
platforms: all
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Install JFrog CLI
uses: jfrog/setup-jfrog-cli@v3
with:
version: 'latest'
- name: Login to Artifact Aerospike Docker Registry
run: |
jf docker login artifact.aerospike.io --username ${{ secrets.JFROG_USERNAME }} --password ${{ secrets.JFROG_ACCESS_TOKEN }}
# needed these to get the docker cache working
docker pull artifact.aerospike.io/ecosystem-container-dev-local/asvec:latest || true
docker push artifact.aerospike.io/ecosystem-container-dev-local/asvec:latest || true
env:
JFROG_CLI_OFFER_CONFIG: 'false'
- name: Configure JFrog CLI
run: |
jf c add \
--url https://artifact.aerospike.io/ \
--user ${{ secrets.JFROG_USERNAME }} \
--access-token ${{ secrets.JFROG_ACCESS_TOKEN }} \
artifact
jf c use artifact
env:
JFROG_CLI_OFFER_CONFIG: 'false'
- name: Set Version
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ] && [ -n "${{ github.event.inputs.version }}" ]; then
VERSION_ARG="${{ github.event.inputs.version }}"
elif [ "${{ github.event_name }}" == "push" ] && [[ "${{ github.ref }}" == refs/tags/* ]]; then
VERSION_ARG="${GITHUB_REF#refs/tags/}"
else
VERSION_ARG=$(cat RELEASE)
fi
BUILD_ID=${GITHUB_RUN_NUMBER}
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
VERSION="${VERSION_ARG}"
else
VERSION="${VERSION_ARG}-${BUILD_ID}"
fi
echo "VERSION=${VERSION}" >> $GITHUB_ENV
- name: Build Docker Image (No Push)
if: github.event_name == 'pull_request'
run: |
jf docker buildx bake \
--set asvec.args.VERSION_ARG=${{ env.VERSION }} \
--set asvec.args.REPO=${{ env.REPO }} \
--set asvec.tags.0=asvec:test-${{ github.run_id }} \
--file docker/asvec.docker/bake.hcl \
env:
DOCKER_BUILDKIT: '1'
- name: Build and Push Docker Image
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
jf docker buildx bake \
--set asvec.args.VERSION_ARG=${{ env.VERSION }} \
--set asvec.args.REPO=${{ env.REPO }} \
--set asvec.tags.0=${{ env.REPO }}/asvec:${{ env.VERSION }} \
--file docker/asvec.docker/bake.hcl \
--push \
--metadata-file=build-metadata
env:
DOCKER_BUILDKIT: '1'
- name: Build and Push Docker Image with 'latest' Tag (Release)
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: |
jf docker buildx bake \
--set asvec.args.VERSION_ARG=${{ env.VERSION }} \
--set asvec.args.REPO=${{ env.REPO }} \
--set asvec.tags.0=${{ env.REPO }}/asvec:${{ env.VERSION }} \
--set asvec.tags.1=${{ env.REPO }}/asvec:latest \
--file docker/asvec.docker/bake.hcl \
--push \
--metadata-file=build-metadata
env:
DOCKER_BUILDKIT: '1'
- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq
- name: Extract Image Name and Digest
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
run: |
jq -r '.[] | {digest: .["containerimage.digest"], names: .["image.name"] | split(",")} | "\(.names[0])@\(.digest)"' build-metadata > meta-info
- name: Create Docker Build Info
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
run: |
jf rt build-docker-create \
--build-name "${{ env.JFROG_CLI_BUILD_NAME }}" \
--build-number "${{ env.VERSION }}" \
--image-file ./meta-info \
--project ecosystem \
ecosystem-container-dev-local
- name: Publish Build Info
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
run: |
jf rt build-publish \
--detailed-summary \
--project ecosystem \
"${{ env.JFROG_CLI_BUILD_NAME }}" "${{ env.VERSION }}"