Skip to content

Commit

Permalink
move package tests from contrib repo
Browse files Browse the repository at this point in the history
Signed-off-by: Moritz Wiesinger <[email protected]>

add shellcheck option to follow other files

Signed-off-by: Moritz Wiesinger <[email protected]>

use shellcheck directive

Signed-off-by: Moritz Wiesinger <[email protected]>

make shellcheck happy

Signed-off-by: Moritz Wiesinger <[email protected]>

fix shellcheck things

Signed-off-by: Moritz Wiesinger <[email protected]>

move dockerfiles, remove unneeded files

Signed-off-by: Moritz Wiesinger <[email protected]>

also test rpm package

Signed-off-by: Moritz Wiesinger <[email protected]>

add missing variable

Signed-off-by: Moritz Wiesinger <[email protected]>

only build linux amd64 for now

Signed-off-by: Moritz Wiesinger <[email protected]>

only build linux amd64 for now

Signed-off-by: Moritz Wiesinger <[email protected]>

fix service unit name

Signed-off-by: Moritz Wiesinger <[email protected]>

add missing files

Signed-off-by: Moritz Wiesinger <[email protected]>

remove unneeded variables and files

Signed-off-by: Moritz Wiesinger <[email protected]>

add checkout step

Signed-off-by: Moritz Wiesinger <[email protected]>

fix if conditionals

Signed-off-by: Moritz Wiesinger <[email protected]>

add demo config, add script run

Signed-off-by: Moritz Wiesinger <[email protected]>

copy over package test scripts

Signed-off-by: Moritz Wiesinger <[email protected]>

add job dependency

Signed-off-by: Moritz Wiesinger <[email protected]>

move package test steps for testing

Signed-off-by: Moritz Wiesinger <[email protected]>

revert goreleaser change

Signed-off-by: Moritz Wiesinger <[email protected]>

fix if statement

Signed-off-by: Moritz Wiesinger <[email protected]>

test commit

Signed-off-by: Moritz Wiesinger <[email protected]>

run package tests as part of core ci workflow

Signed-off-by: Moritz Wiesinger <[email protected]>

download artifacts in new workflow

Signed-off-by: Moritz Wiesinger <[email protected]>

defuse package tests for now

Signed-off-by: Moritz Wiesinger <[email protected]>

upload linux/amd64 service packages after building a snapshot

Signed-off-by: Moritz Wiesinger <[email protected]>

update goreleaser-pro to latest version, add version field to config files to remove warning

Signed-off-by: Moritz Wiesinger <[email protected]>

add package test workflow

Signed-off-by: Moritz Wiesinger <[email protected]>
  • Loading branch information
mowies committed Jul 23, 2024
1 parent 19d291d commit ee498b1
Show file tree
Hide file tree
Showing 16 changed files with 227 additions and 12 deletions.
9 changes: 8 additions & 1 deletion .github/workflows/base-ci-goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
platforms: arm64,ppc64le,linux/arm/v7,s390x

- name: Setup wixl # Required to build MSI packages for Windows
if: ${{ matrix.GOOS }} == 'windows' && (${{ matrix.GOARCH }} == '386' || ${{ matrix.GOARCH }} == 'amd64')
if: ${{ matrix.GOOS == 'windows' && ( matrix.GOARCH == '386' || matrix.GOARCH == 'amd64') }}
run: |
sudo apt-get update
sudo apt-get install -y wixl
Expand Down Expand Up @@ -74,3 +74,10 @@ jobs:
GOOS: ${{ matrix.GOOS }}
GOARCH: ${{ matrix.GOARCH }}
GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}

- name: Upload linux service packages
if: ${{ matrix.GOOS == 'linux' && matrix.GOARCH == 'amd64' }}
uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4.3.4
with:
name: linux-packages
path: distributions/${{ inputs.distribution }}/dist/linux_amd64/*
2 changes: 1 addition & 1 deletion .github/workflows/base-release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
check-latest: true

- name: Setup wixl # Required to build MSI packages for Windows
if: ${{ matrix.GOOS }} == 'windows' && (${{ matrix.GOARCH }} == '386' || ${{ matrix.GOARCH }} == 'amd64')
if: ${{ matrix.GOOS == 'windows' && ( matrix.GOARCH == '386' || matrix.GOARCH == 'amd64') }}
run: |
sudo apt-get update
sudo apt-get install -y wixl
Expand Down
32 changes: 30 additions & 2 deletions .github/workflows/ci-goreleaser-core.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,34 @@ jobs:
uses: ./.github/workflows/base-ci-goreleaser.yaml
with:
distribution: otelcol
goos: '[ "linux", "windows", "darwin" ]'
goarch: '[ "386", "amd64", "arm64", "ppc64le", "arm", "s390x" ]'
goos: '[ "linux" ]'
# goos: '[ "linux", "windows", "darwin" ]'
goarch: '[ "amd64" ]'
# goarch: '[ "386", "amd64", "arm64", "ppc64le", "arm", "s390x" ]'
secrets: inherit

package-tests:
# name: Package tests
# uses: ./.github/workflows/package-test.yaml # TODO move all code below after testing
# with:
# type: '[ "deb", "rpm", "apk" ]'
name: Package Tests
runs-on: ubuntu-latest
needs: check-goreleaser
steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

- name: Download built artifacts
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8
with:
name: linux-packages

- run: ls -la

- name: Test deb package
run: ./scripts/package-tests/package-tests.sh ./otelcol*-SNAPSHOT-*_linux_amd64.deb ./scripts/package-tests/otel-collector-config.yaml

- name: Test rpm package
run: ./scripts/package-tests/package-tests.sh ./otelcol*-SNAPSHOT-*_linux_amd64.rpm ./scripts/package-tests/otel-collector-config.yaml
# run: ./scripts/package-tests/package-tests.sh ./otelcol*-SNAPSHOT-*_linux_amd64.${{ matrix.type }} ./scripts/package-tests/otel-collector-config.yaml
11 changes: 11 additions & 0 deletions .github/workflows/package-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
name: Package Tests

on:
workflow_call:

jobs:
tests:
name: Tests
runs-on: ubuntu-latest
steps:
- run: echo "test"
2 changes: 2 additions & 0 deletions .github/workflows/shellcheck.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,5 @@ jobs:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@00cae500b08a931fb5698e11e79bfbd38e612a38 # 2.0.0
env:
SHELLCHECK_OPTS: -x
1 change: 1 addition & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
version: 2
release:
header: |
Check the [v{{.Version}} contrib changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases/tags/v{{.Version}}) and the [v{{.Version}} core changelog](https://github.com/open-telemetry/opentelemetry-collector/releases/tags/v{{.Version}}) for changelogs on specific components.
5 changes: 3 additions & 2 deletions cmd/goreleaser/internal/configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
"path"
"strings"

"github.com/goreleaser/goreleaser-pro/pkg/config"
"github.com/goreleaser/goreleaser-pro/v2/pkg/config"
)

const ArmArch = "arm"
Expand All @@ -51,6 +51,7 @@ func Generate(dist string) config.Project {
Signs: Sign(),
DockerSigns: DockerSigns(),
SBOMs: SBOM(),
Version: 2,
}
}

Expand Down Expand Up @@ -112,7 +113,7 @@ func WinPackages(dist string) []config.MSI {
// https://goreleaser.com/customization/msi/
func WinPackage(dist string) config.MSI {
return config.MSI{
ID: dist,
ID: dist,
Name: fmt.Sprintf("%s_{{ .Version }}_{{ .Os }}_{{ .MsiArch }}", dist),
WXS: "windows-installer.wxs",
Files: []string{
Expand Down
1 change: 1 addition & 0 deletions distributions/otelcol-contrib/.goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
partial:
by: target
version: 2
project_name: opentelemetry-collector-releases
env:
- COSIGN_YES=true
Expand Down
1 change: 1 addition & 0 deletions distributions/otelcol-k8s/.goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
partial:
by: target
version: 2
project_name: opentelemetry-collector-releases
env:
- COSIGN_YES=true
Expand Down
1 change: 1 addition & 0 deletions distributions/otelcol/.goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
partial:
by: target
version: 2
project_name: opentelemetry-collector-releases
env:
- COSIGN_YES=true
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ module github.com/open-telemetry/opentelemetry-collector-releases
go 1.22

require (
github.com/goreleaser/goreleaser-pro v1.25.1-pro
github.com/goreleaser/goreleaser-pro/v2 v2.1.0-pro
gopkg.in/yaml.v3 v3.0.1
)

require (
github.com/kr/pretty v0.3.1 // indirect
github.com/rogpeppe/go-internal v1.11.0 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
)
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/goreleaser/goreleaser-pro v1.25.1-pro h1:NOoSx96oAK0zNA1+hiL0p6pY1DWL101kwPmpmkiExXk=
github.com/goreleaser/goreleaser-pro v1.25.1-pro/go.mod h1:7q9HURJC4ZYBT9VyX3XlqjK0kwe5QbG/VIUAJSP3CKc=
github.com/goreleaser/goreleaser-pro/v2 v2.1.0-pro h1:9SYFXdnxoLB/8RRazytwFjKg/+394hjVplm7YLcXpQ8=
github.com/goreleaser/goreleaser-pro/v2 v2.1.0-pro/go.mod h1:GA7Uzk7qKA3efeDmgfWwcMTrDJe+V7D6H5RMqXlFvuc=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
Expand All @@ -10,8 +10,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
Expand Down
14 changes: 14 additions & 0 deletions scripts/package-tests/Dockerfile.test.deb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# A debian11 image with systemd enabled. Must be run with:
# `-d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro` flags
FROM debian:12

ENV container docker
ENV DEBIAN_FRONTEND noninteractive

# Enable systemd.
RUN apt-get update ; \
apt-get install -y systemd systemd-sysv procps; \
apt-get clean ; \
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

CMD ["/lib/systemd/systemd"]
9 changes: 9 additions & 0 deletions scripts/package-tests/Dockerfile.test.rpm
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# A rockylinux8.5 image with systemd enabled. Must be run with:
# `-d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro` flags
FROM rockylinux:9.3

ENV container docker

RUN dnf install -y initscripts

CMD ["/usr/sbin/init"]
48 changes: 48 additions & 0 deletions scripts/package-tests/common.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/bash

# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0

export SERVICE_NAME="otelcol"
export PROCESS_NAME="otelcol"
export PKG_NAME="otelcol"

podman_cp() {
local container="$1"
local src="$2"
local dest="$3"
local dest_dir
dest_dir="$( dirname "$dest" )"

echo "Copying $src to $container:$dest ..."
podman exec "$container" mkdir -p "$dest_dir"
podman cp "$src" "$container":"$dest"
}

install_pkg() {
local container="$1"
local pkg_path="$2"
local pkg_base
pkg_base=$( basename "$pkg_path" )

echo "Installing $pkg_base ..."
podman_cp "$container" "$pkg_path" /tmp/"$pkg_base"
if [[ "${pkg_base##*.}" = "deb" ]]; then
podman exec "$container" dpkg -i /tmp/"$pkg_base"
else
podman exec "$container" rpm -ivh /tmp/"$pkg_base"
fi
}

uninstall_pkg() {
local container="$1"
local pkg_type="$2"
local pkg_name="${3:-"$PKG_NAME"}"

echo "Uninstalling $pkg_name ..."
if [[ "$pkg_type" = "deb" ]]; then
podman exec "$container" dpkg -r "$pkg_name"
else
podman exec "$container" rpm -e "$pkg_name"
fi
}
91 changes: 91 additions & 0 deletions scripts/package-tests/package-tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#!/bin/bash

# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0

set -euov pipefail

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
REPO_DIR="$( cd "$SCRIPT_DIR/../../../../" && pwd )"
export REPO_DIR
PKG_PATH="${1:-}"

# shellcheck source=scripts/package-tests/common.sh
source "$SCRIPT_DIR"/common.sh

if [[ -z "$PKG_PATH" ]]; then
echo "usage: ${BASH_SOURCE[0]} DEB_OR_RPM_PATH" >&2
exit 1
fi

if [[ ! -f "$PKG_PATH" ]]; then
echo "$PKG_PATH not found!" >&2
exit 1
fi


pkg_base="$( basename "$PKG_PATH" )"
pkg_type="${pkg_base##*.}"
if [[ ! "$pkg_type" =~ ^(deb|rpm)$ ]]; then
echo "$PKG_PATH not supported!" >&2
exit 1
fi
image_name="otelcontribcol-$pkg_type-test"
container_name="$image_name"
container_exec="podman exec $container_name"

trap 'podman rm -fv $container_name >/dev/null 2>&1 || true' EXIT

podman build -t "$image_name" -f "$SCRIPT_DIR/Dockerfile.test.$pkg_type" "$SCRIPT_DIR"
podman rm -fv "$container_name" >/dev/null 2>&1 || true

# test install
CRUN_VER='1.14.4'
mkdir -p "${HOME}/.local/bin"
curl -L "https://github.com/containers/crun/releases/download/${CRUN_VER}/crun-${CRUN_VER}-linux-amd64" -o "${HOME}/.local/bin/crun"
chmod +x "${HOME}/.local/bin/crun"
mkdir -p "${HOME}/.config/containers"
cat << EOF > "${HOME}/.config/containers/containers.conf"
[engine.runtimes]
crun = [
"${HOME}/.local/bin/crun",
"/usr/bin/crun"
]
EOF

echo
podman run --name "$container_name" -d "$image_name"
install_pkg "$container_name" "$PKG_PATH"

# ensure service has started and still running after 5 seconds
sleep 5
echo "Checking $SERVICE_NAME service status ..."
$container_exec systemctl --no-pager status "$SERVICE_NAME"

echo "Checking $PROCESS_NAME process ..."
$container_exec pgrep -a -u otel "$PROCESS_NAME"

# test uninstall
echo
uninstall_pkg "$container_name" "$pkg_type"

echo "Checking $SERVICE_NAME service status after uninstall ..."
if $container_exec systemctl --no-pager status "$SERVICE_NAME"; then
echo "$SERVICE_NAME service still running after uninstall" >&2
exit 1
fi
echo "$SERVICE_NAME service successfully stopped after uninstall"

echo "Checking $SERVICE_NAME service existence after uninstall ..."
if $container_exec systemctl list-unit-files --all | grep "$SERVICE_NAME"; then
echo "$SERVICE_NAME service still exists after uninstall" >&2
exit 1
fi
echo "$SERVICE_NAME service successfully removed after uninstall"

echo "Checking $PROCESS_NAME process after uninstall ..."
if $container_exec pgrep "$PROCESS_NAME"; then
echo "$PROCESS_NAME process still running after uninstall"
exit 1
fi
echo "$PROCESS_NAME process successfully killed after uninstall"

0 comments on commit ee498b1

Please sign in to comment.