Skip to content

Publishing a release #9

Publishing a release

Publishing a release #9

# 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
default: "main"
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: Compute version numbers
run: |
# sets environment variables for use in later steps.
# see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable
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
github_tag=v${full_version_number}
else
github_tag=v${full_version_number}-${git_short_hash}
fi
echo "git_short_hash=${git_short_hash}" >> "$GITHUB_ENV"
echo "short_version_number=${short_version_number}" >> "$GITHUB_ENV"
echo "full_version_number=${full_version_number}" >> "$GITHUB_ENV"
echo "github_tag=${github_tag}" >> "$GITHUB_ENV"
- name: Output build information
run: |
echo "github.workspace = ${{ github.workspace }}"
echo "github.ref = ${{ github.ref }}"
echo "inputs.image_prefix = ${{ inputs.image_prefix }}"
echo "inputs.dry_run = ${{ inputs.dry_run }}"
echo "git_short_hash = ${git_short_hash}"
echo "short_version_number = ${short_version_number}"
echo "full_version_number = ${full_version_number}"
echo "github_tag = ${github_tag}"
- 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: |
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 to GitHub Action artifacts
uses: actions/upload-artifact@v3
with:
name: packages
path: |
out/opentelemetry-ebpf-*.rpm
out/opentelemetry-ebpf-*.deb
- name: Upload packages to Release
uses: softprops/action-gh-release@c9b46fe7aad9f02afd89b12450b780f52dacfb2d
if: ${{ !inputs.dry_run }}
with:
tag_name: ${{ env.github_tag }}
target_commitish: ${{ inputs.ref }}
prerelease: ${{ inputs.release_type != 'public' }}
files: |
out/opentelemetry-ebpf-*.rpm
out/opentelemetry-ebpf-*.deb
- name: Push to container registry
run: |
cd $GITHUB_WORKSPACE/src
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