Skip to content

Change health check and prom internal metrics ports to a unique value #2758

Change health check and prom internal metrics ports to a unique value

Change health check and prom internal metrics ports to a unique value #2758

name: functional-tests
on:
pull_request:
push:
branches: [ main ]
workflow_dispatch:
inputs:
UPLOAD_UPDATED_EXPECTED_RESULTS:
description: 'Set this to true to upload updated golden file expected results and upload these results as a Github workflow artifact.'
required: false
default: false
UPLOAD_KUBERNETES_DEBUG_INFO:
description: 'Set this to true to collect the debug info of the k8s cluster and upload this info as a Github workflow artifact.'
required: false
default: false
env:
GO_VERSION: 1.23.6
# Make sure to exit early if cache segment download times out after 2 minutes.
# We limit cache download as a whole to 5 minutes.
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2
jobs:
get-test-matrix:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: get matrix
id: test_matrix
run: |
echo "Getting test matrix"
matrix=`cat ci-matrix.json | jq '.functional_test_v2' | jq -r 'tostring' | tr -d '\n'`
echo "matrix=${matrix}" >> $GITHUB_OUTPUT
outputs:
matrix: ${{ steps.test_matrix.outputs.matrix }}
kubernetes-test:
env:
KUBECONFIG: /tmp/kube-config-splunk-otel-collector-chart-functional-testing
KUBE_TEST_ENV: kind
UPLOAD_UPDATED_EXPECTED_RESULTS: ${{ github.event.inputs.UPLOAD_UPDATED_EXPECTED_RESULTS || 'false' }}
UPLOAD_KUBERNETES_DEBUG_INFO: ${{ github.event.inputs.UPLOAD_KUBERNETES_DEBUG_INFO || 'false' }}
needs: get-test-matrix
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.get-test-matrix.outputs.matrix) }}
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Create kind cluster
uses: helm/[email protected]
with:
node_image: kindest/node:${{ matrix.k8s-kind-version }}
kubectl_version: ${{ matrix.k8s-kind-version }}
cluster_name: kind
config: ./.github/workflows/configs/kind-config.yaml
- name: Fix kubelet TLS server certificates
run: |
kubectl get csr -o=jsonpath='{range.items[?(@.spec.signerName=="kubernetes.io/kubelet-serving")]}{.metadata.name}{" "}{end}' | xargs kubectl certificate approve
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
id: run-functional-tests
env:
K8S_VERSION: ${{ matrix.k8s-kind-version }}
run: |
TEARDOWN_BEFORE_SETUP=true UPDATE_EXPECTED_RESULTS=${{ env.UPLOAD_UPDATED_EXPECTED_RESULTS }} SUITE=${{ matrix.test-job }} make functionaltest
- name: Collect Kubernetes Cluster debug info on failure
if: always() && (steps.run-functional-tests.outcome == 'failure' || env.UPLOAD_KUBERNETES_DEBUG_INFO == 'true')
id: collect-debug-info
run: |
echo "Functional tests failed. Collecting debug info for current state of the Kubernetes cluster..."
cd tools
./splunk_kubernetes_debug_info.sh
- name: Upload Kubernetes Cluster debug info
if: always() && (steps.run-functional-tests.outcome == 'failure' || env.UPLOAD_KUBERNETES_DEBUG_INFO == 'true')
uses: actions/upload-artifact@v4
with:
name: k8s-debug-info-${{ matrix.test-job }}-${{ matrix.k8s-kind-version }}
path: tools/splunk_kubernetes_debug_info_*
retention-days: 5
- name: Upload test results
if: always() && env.UPLOAD_UPDATED_EXPECTED_RESULTS == 'true'
uses: actions/upload-artifact@v4
with:
name: functional_tests-${{ matrix.test-job }}-${{ matrix.k8s-kind-version }}
path: functional_tests/results
retention-days: 5
eks-test:
name: Test helm install in EKS - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBECONFIG: /tmp/kube-config-splunk-otel-collector-chart-functional-testing-eks
KUBE_TEST_ENV: eks
SKIP_TESTS: "true" # we need to skip functional tests as we have not set probes to listen to the traffic.
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET }}
aws-region: us-west-1
- name: Install kubeconfig
run: |
aws eks update-kubeconfig --name rotel-eks --region us-west-1
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
eks-upgrade-test:
name: Test helm upgrade in EKS - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBECONFIG: /tmp/kube-config-splunk-otel-collector-chart-functional-testing-eks
KUBE_TEST_ENV: eks
SKIP_TESTS: "true" # we need to skip functional tests as we have not set probes to listen to the traffic.
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- name: Download the latest published release to use as a base for the upgrade
run: |
helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
helm repo update
helm pull splunk-otel-collector-chart/splunk-otel-collector --untar --untardir base
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET }}
aws-region: us-west-1
- name: Install kubeconfig
run: |
aws eks update-kubeconfig --name rotel-eks --region us-west-1
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
UPGRADE_FROM_VALUES: aws_upgrade_from_previous_release_values.yaml
UPGRADE_FROM_CHART_DIR: base/splunk-otel-collector
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
gke-autopilot-test:
name: Test helm install in GKE/Autopilot - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBE_TEST_ENV: gke/autopilot
SKIP_TESTS: "true"
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- uses: 'google-github-actions/[email protected]'
with:
project_id: ${{ secrets.GKE_PROJECT }}
credentials_json: ${{ secrets.GKE_SA_KEY }}
- uses: google-github-actions/[email protected]
with:
project_id: ${{ secrets.GKE_PROJECT }}
- uses: google-github-actions/[email protected]
with:
cluster_name: ${{ secrets.GKE_AUTOPILOT_CLUSTER }}
location: ${{ secrets.GKE_REGION }}
project_id: ${{ secrets.GKE_PROJECT }}
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
gke-autopilot-upgrade-test:
name: Test helm upgrade in GKE/Autopilot - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBE_TEST_ENV: gke/autopilot
SKIP_TESTS: "true"
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- name: Download the latest published release to use as a base for the upgrade
run: |
helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
helm repo update
helm pull splunk-otel-collector-chart/splunk-otel-collector --untar --untardir base
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- uses: 'google-github-actions/[email protected]'
with:
project_id: ${{ secrets.GKE_PROJECT }}
credentials_json: ${{ secrets.GKE_SA_KEY }}
- uses: google-github-actions/[email protected]
with:
project_id: ${{ secrets.GKE_PROJECT }}
- uses: google-github-actions/[email protected]
with:
cluster_name: ${{ secrets.GKE_AUTOPILOT_CLUSTER }}
location: ${{ secrets.GKE_REGION }}
project_id: ${{ secrets.GKE_PROJECT }}
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
UPGRADE_FROM_VALUES: gke_autopilot_upgrade_from_previous_release_values.yaml
UPGRADE_FROM_CHART_DIR: base/splunk-otel-collector
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
aks-windows-test:
name: Test helm install in AKS - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBE_TEST_ENV: aks
SKIP_TESTS: "true"
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Set up kubelogin for non-interactive login
uses: azure/[email protected]
with:
kubelogin-version: "v0.0.24"
- uses: azure/[email protected]
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- uses: azure/aks-set-context@v4
with:
resource-group: ${{ secrets.AKS_RESOURCE_GROUP }}
cluster-name: ${{ secrets.AKS_CLUSTER_NAME }}
admin: false
use-kubelogin: true
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
gce-autopilot-test:
name: Test helm install in GCE (kops) - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBE_TEST_ENV: gce
SKIP_TESTS: "true"
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Update dependencies
run: |
make dep-update
- name: Set kubeconfig
run: echo "$GCE_KUBECONFIG" > /tmp/kubeconfig
env:
GCE_KUBECONFIG: ${{ secrets.GCE_KUBECONFIG }}
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
KUBECONFIG: /tmp/kubeconfig
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
eks-fargate-test:
name: Test helm install in EKS Fargate - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBECONFIG: /tmp/kube-config-splunk-otel-collector-chart-functional-testing-eks-fargate
KUBE_TEST_ENV: "eks/fargate"
SKIP_TESTS: "true" # we need to skip functional tests as we have not set probes to listen to the traffic.
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET }}
aws-region: us-west-2
- name: Install kubeconfig
run: |
aws eks update-kubeconfig --name github-gdi-fargate --region us-west-2
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest
eks-fargate-upgrade-test:
name: Test helm upgrade in EKS Fargate - credentials needed
if: |
(github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) ||
(github.ref == 'refs/heads/main')
env:
KUBECONFIG: /tmp/kube-config-splunk-otel-collector-chart-functional-testing-eks-fargate
KUBE_TEST_ENV: "eks/fargate"
SKIP_TESTS: "true" # we need to skip functional tests as we have not set probes to listen to the traffic.
runs-on: ubuntu-latest
continue-on-error: ${{ contains(github.event.pull_request.labels.*.name, 'Ignore Tests') }}
steps:
- uses: actions/checkout@v4
- name: Download the latest published release to use as a base for the upgrade
run: |
helm repo add splunk-otel-collector-chart https://signalfx.github.io/splunk-otel-collector-chart
helm repo update
helm pull splunk-otel-collector-chart/splunk-otel-collector --untar --untardir base
- uses: actions/setup-go@v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: '**/go.sum'
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_KEY }}
aws-secret-access-key: ${{ secrets.AWS_SECRET }}
aws-region: us-west-2
- name: Install kubeconfig
run: |
aws eks update-kubeconfig --name github-gdi-fargate --region us-west-2
- name: Update dependencies
run: |
make dep-update
- name: run functional tests
env:
HOST_ENDPOINT: 0.0.0.0
UPGRADE_FROM_VALUES: eks_fargate_upgrade_from_previous_release_values.yaml
UPGRADE_FROM_CHART_DIR: base/splunk-otel-collector
run: |
TEARDOWN_BEFORE_SETUP=true SUITE=functional make functionaltest