-
Notifications
You must be signed in to change notification settings - Fork 0
134 lines (124 loc) · 5.05 KB
/
init_container.yaml
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
name: "Init container for k8s operator"
on:
workflow_dispatch:
inputs:
release_tag:
description: "Release tag of the agent"
required: true
init_image_tag:
description: "Image tag"
required: true
default: "0"
force:
description: "Force build"
required: false
default: "false"
jobs:
set_image_tag_variable:
strategy:
matrix:
agents:
[
{ name: "linux", file: "agent.zip", platform: "linux/amd64" },
{
name: "alpine",
file: "agent-alpine.zip",
platform: "linux/amd64",
},
{
name: "linux-arm64",
file: "agent-arm64.zip",
platform: "linux/arm64",
},
{
name: "alpine-arm64",
file: "agent-alpine-arm64.zip",
platform: "linux/arm64",
},
]
runs-on: ubuntu-latest
name: Build and push Docker image
env:
base_image_tag: alpine-3.20.0
steps:
- name: Set release tag
shell: bash
run: |
# check that tag is matching regex x.y.x-release.<commit hash> or force flag is enabled
if [[ ! ${{ inputs.release_tag }} =~ ^[0-9]+\.[0-9]+\.[0-9]+-release\.[0-9a-f]+$ ]] ; then
echo "Tag ${{ inputs.release_tag }} is not matching regex x.y.x-release.<commithash>"
if [[ "${{ inputs.force }}" == "true" ]] ; then
echo "Force flag is enabled. Continue"
else
exit 1
fi
fi
echo "TAG_NAME=$(echo ${{ inputs.release_tag }} | sed -E 's/^([0-9]*\.[0-9]*\.[0-9]*).*/\1/')-init.${{ inputs.init_image_tag }}" >> "$GITHUB_OUTPUT"
id: set_tag
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
if: ${{ success() }}
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_PASS }}
- name: Configure AWS credentials for artifacts bucket
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.RELEASE_ARTIFACTS_MANAGER_KEY }}
aws-secret-access-key: ${{ secrets.RELEASE_ARTIFACTS_MANAGER_SECRET }}
aws-region: us-east-1
- name: Set docker image tags
id: set_docker_tags
run: |
python3 -m pip install semver
existing_tags=()
dockerhub_tags=$(curl -s "https://hub.docker.com/v2/namespaces/lightruncom/repositories/k8s-operator-init-java-agent-${{ matrix.agents.name }}/tags?page_size=50" | jq -r ".results[].name")
if [[ $? -ne 0 ]] ; then
echo "Failed to fetch existing tags"
exit 1
fi
while IFS= read -r line; do
existing_tags+=("$line")
done < <(echo $dockerhub_tags)
for tag in $existing_tags
do
if [[ "$tag" == "latest" ]] ; then
continue
fi
echo "Comparing existing tag: $tag with new: ${{steps.set_tag.outputs.TAG_NAME}}"
if [[ $(pysemver compare $tag ${{steps.set_tag.outputs.TAG_NAME}}) -ge 0 ]] ; then
echo "Existing tag: $tag is greater or equal than new: ${{ inputs.release_tag }}. Skip adding latest tag"
echo "DOCKER_TAGS=lightruncom/k8s-operator-init-java-agent-${{ matrix.agents.name }}:${{steps.set_tag.outputs.TAG_NAME}}" >> "$GITHUB_OUTPUT"
exit 0
fi
done
echo "Adding latest tag to ${{steps.set_tag.outputs.TAG_NAME}}"
echo "DOCKER_TAGS=lightruncom/k8s-operator-init-java-agent-${{ matrix.agents.name }}:${{steps.set_tag.outputs.TAG_NAME}},lightruncom/k8s-operator-init-java-agent-${{ matrix.agents.name }}:latest" >> "$GITHUB_OUTPUT"
- name: Download agent artifacts
run: |
aws s3 cp s3://${{ secrets.RELEASE_ARTIFACTS_BUCKET }}/artifacts/${{ inputs.release_tag }}/${{ matrix.agents.file }} ./lightrun-init-agent/
- name: Build and push ${{ matrix.agents.name }} container
uses: docker/build-push-action@v4
with:
context: .
file: ./lightrun-init-agent/Dockerfile
push: true
platforms: ${{ matrix.agents.platform }}
tags: ${{steps.set_docker_tags.outputs.DOCKER_TAGS}}
build-args: |
FILE=${{ matrix.agents.file }}
base_image_tag=${{ env.base_image_tag }}
- name: Slack Notification
if: always()
uses: rtCamp/[email protected]
env:
SLACK_CHANNEL: devops-alerts
SLACK_COLOR: ${{ job.status }} # or a specific color like 'good' or '#ff00ff'
SLACK_MESSAGE: "Tag ${{ inputs.release_tag }} | Platform ${{ matrix.agents.name }}"
SLACK_TITLE: Init contianer build status - ${{ job.status }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}