-
Notifications
You must be signed in to change notification settings - Fork 48
138 lines (126 loc) · 4.47 KB
/
build-and-release.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
135
136
137
138
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
name: build-and-release
run-name: Publishing a release
on:
workflow_dispatch:
inputs:
release_type:
description: "Release type"
required: true
type: choice
options:
- public
- unofficial
default: public
ref:
description: "Tag, branch or SHA to checkout"
required: true
type: string
image_prefix:
description: "Prefix to use for destination image name"
required: false
type: string
default: "opentelemetry-ebpf-"
additional_tag:
description: "Additional tag to use when pushing to docker repository"
required: false
type: string
dry_run:
description: "Build everything but don't actually push to repository"
required: false
type: boolean
default: false
env:
BENV_IMAGE: quay.io/splunko11ytest/network-explorer-debug/build-env
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
DOCKER_REGISTRY: ${{ vars.DOCKER_REGISTRY }}
DOCKER_NAMESPACE: ${{ vars.DOCKER_NAMESPACE }}
IMAGE_PREFIX: ${{ inputs.image_prefix }}
jobs:
build-and-release:
name: Build and release
runs-on: ubuntu-20.04
steps:
- name: Checkout sources
uses: actions/checkout@v3
with:
ref: ${{ inputs.ref }}
fetch-depth: 0
submodules: recursive
path: src
- name: Log-in to container registry
run: |
docker login --username="$DOCKER_USERNAME" --password-stdin $DOCKER_REGISTRY <<< "$DOCKER_PASSWORD"
- name: Fetch build environment
run: |
docker pull $BENV_IMAGE
- name: Build artifacts
run: |
echo "github.workspace = ${{ github.workspace }}"
mkdir -p $GITHUB_WORKSPACE/out
docker run -t --rm \
--mount "type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock" \
--mount "type=bind,source=$GITHUB_WORKSPACE/src,destination=/root/src,readonly" \
--mount "type=bind,source=$GITHUB_WORKSPACE/out,destination=/root/out" \
--env EBPF_NET_SRC_ROOT=/root/src \
$BENV_IMAGE \
./build.sh pipeline-docker
- name: Build packages
run: |
docker run -t --rm \
--mount "type=bind,source=$GITHUB_WORKSPACE/src,destination=/root/src,readonly" \
--mount "type=bind,source=$GITHUB_WORKSPACE/out,destination=/root/out" \
--env EBPF_NET_SRC_ROOT=/root/src \
--workdir /root/out \
$BENV_IMAGE \
cpack -G 'RPM;DEB'
- name: Upload packages
uses: actions/upload-artifact@v3
with:
name: packages
path: |
out/opentelemetry-ebpf-*.rpm
out/opentelemetry-ebpf-*.deb
- name: Push to container registry
run: |
cd $GITHUB_WORKSPACE/src
source ./version.sh
git_short_hash=$(git rev-parse --short=8 HEAD)
short_version_number="${EBPF_NET_MAJOR_VERSION}.${EBPF_NET_MINOR_VERSION}"
full_version_number="${EBPF_NET_MAJOR_VERSION}.${EBPF_NET_MINOR_VERSION}.${EBPF_NET_PATCH_VERSION}"
if [[ "${{ inputs.release_type }}" == "public" ]]; then
tags=(
latest
latest-v${short_version_number}
v${full_version_number}
)
else
tags=(
v${full_version_number}-${git_short_hash}
)
fi
if [[ "${{ inputs.additional_tag }}" != "" ]]; then
tags=(${tags[@]} "${{ inputs.additional_tag }}")
fi
images=(
reducer
kernel-collector
cloud-collector
k8s-watcher
k8s-relay
)
# strip potential "https://" prefix and trailing slashes from docker registry
docker_registry=$(sed -e 's,^https://,,' -e 's,/*$,,' <<< $DOCKER_REGISTRY)
for image in ${images[@]}; do
image_name="${IMAGE_PREFIX}${image}"
image_path="${docker_registry}/${DOCKER_NAMESPACE}/${image_name}"
for tag in ${tags[@]}; do
docker tag $image ${image_path}:${tag}
if [[ "${{ inputs.dry_run }}" == "false" ]]; then
docker push ${image_path}:${tag}
fi
done
done
docker images --no-trunc