[chore] refactor ghwf functional tests go dependency caching #2014
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.22.10 | |
# 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: | |
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' }} | |
strategy: | |
fail-fast: false | |
matrix: | |
# The kubernetes_version matrix entries are currently following native Kubernetes version support and +1, see: https://endoflife.date/kubernetes | |
# To check latest versions, see: https://hub.docker.com/r/kindest/node/tags | |
k8s-version: | |
- v1.30.0 # Support: 28 Apr 2025 - 28 Jun 2025 | |
- v1.29.0 # Support: 28 Dec 2024 - 28 Feb 2025 | |
- v1.28.0 # Support: 28 Aug 2024 - 28 Oct 2024 | |
- v1.27.3 # Support: 28 Apr 2024 - 28 Jun 2024 | |
- v1.26.6 # Support: 28 Dec 2023 - 28 Feb 2024 | |
# Test current +1 out-of-date Kubernetes version to cover EKS's extended support version matrix | |
- v1.25.11 # Support: 27 Aug 2023 - 27 Oct 2023 | |
test-job: | |
- functional | |
- histogram | |
- configuration_switching | |
runs-on: ubuntu-latest | |
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-version }} | |
kubectl_version: ${{ matrix.k8s-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: Deploy cert-manager | |
run: | | |
make cert-manager | |
- name: run functional tests | |
id: run-functional-tests | |
env: | |
K8S_VERSION: ${{ matrix.k8s-version }} | |
run: | | |
TEARDOWN_BEFORE_SETUP=true UPDATE_EXPECTED_RESULTS=${{ env.UPLOAD_UPDATED_EXPECTED_RESULTS }} TAGS=${{ 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-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-version }} | |
path: functional_tests/results | |
retention-days: 5 | |
eks-test: | |
name: Test helm install in EKS - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: eks-access | |
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 | |
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: Deploy cert-manager | |
run: | | |
make cert-manager | |
- name: run functional tests | |
env: | |
HOST_ENDPOINT: 0.0.0.0 | |
run: | | |
TEARDOWN_BEFORE_SETUP=true TAGS=functional make functionaltest | |
eks-upgrade-test: | |
name: Test helm upgrade in EKS - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: eks-access | |
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 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checkout main if in a PR | |
if: github.event_name == 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
path: base | |
ref: main | |
- name: Checkout previous main commit if in main | |
if: github.event_name != 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
path: base | |
ref: HEAD | |
fetch-depth: 2 | |
- name: Checkout previous main commit if in main | |
if: github.event_name != 'pull_request' | |
run: cd base && git checkout HEAD^ | |
- 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: | | |
cd base && make dep-update | |
- name: Deploy cert-manager | |
run: | | |
cd base && make cert-manager | |
- name: Deploy previous version of the chart | |
run: | | |
helm list --quiet | grep -q "^sock$" && echo "Found previous 'sock' release. Deleting..." && helm delete sock | |
cd base && helm upgrade sock helm-charts/splunk-otel-collector --set cloudProvider=aws --set distribution=eks --set splunkObservability.realm=us0 --set splunkObservability.accessToken=xxxxx | |
- name: Update dependencies | |
run: | | |
make dep-update | |
- name: Deploy cert-manager | |
run: | | |
make cert-manager | |
- name: run functional tests | |
env: | |
HOST_ENDPOINT: 0.0.0.0 | |
run: | | |
TAGS=functional make functionaltest | |
eks-upgrade-from-release-test: | |
name: Test helm upgrade from release in EKS - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: eks-access | |
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 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checkout old release | |
uses: actions/checkout@v4 | |
with: | |
path: base | |
ref: splunk-otel-collector-0.109.0 | |
fetch-depth: 0 | |
- 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: | | |
cd base && make dep-update | |
- name: Deploy cert-manager | |
run: | | |
cd base && make cert-manager | |
- name: Deploy previous version of the chart | |
run: | | |
helm list --quiet | grep -q "^sock$" && echo "Found previous 'sock' release. Deleting..." && helm delete sock | |
cd base && helm install sock helm-charts/splunk-otel-collector --set cloudProvider=aws --set distribution=eks --set splunkObservability.realm=us0 --set splunkObservability.accessToken=xxxxx --set operator.enabled=true --set environment=dev | |
- name: Update dependencies | |
run: | | |
make dep-update | |
- name: Deploy cert-manager | |
run: | | |
make cert-manager | |
- name: run functional tests | |
env: | |
HOST_ENDPOINT: 0.0.0.0 | |
run: | | |
TAGS=functional make functionaltest | |
gke-autopilot-test: | |
name: Test helm install in GKE/Autopilot - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: gke-autopilot-access | |
env: | |
KUBE_TEST_ENV: gke/autopilot | |
SKIP_TESTS: "true" | |
runs-on: ubuntu-latest | |
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 TAGS=functional make functionaltest | |
gke-autopilot-upgrade-test: | |
name: Test helm upgrade in GKE/Autopilot - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: gke-autopilot-access | |
env: | |
KUBE_TEST_ENV: gke/autopilot | |
SKIP_TESTS: "true" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checkout main if in a PR | |
if: github.event_name == 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
path: base | |
ref: main | |
- name: Checkout previous main commit if in main | |
if: github.event_name != 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
path: base | |
ref: HEAD | |
fetch-depth: 2 | |
- name: Checkout previous main commit if in main | |
if: github.event_name != 'pull_request' | |
run: cd base && git checkout HEAD^ | |
- 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: Deploy previous version of the chart | |
run: | | |
cd base | |
helm dependency update helm-charts/splunk-otel-collector | |
helm install sock helm-charts/splunk-otel-collector --set cloudProvider=gcp --set distribution=gke/autopilot --set splunkObservability.realm=us0 --set splunkObservability.accessToken=xxxxx | |
- name: run functional tests | |
env: | |
HOST_ENDPOINT: 0.0.0.0 | |
run: | | |
TAGS=functional make functionaltest | |
aks-windows-test: | |
name: Test helm install in AKS - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: aks-windows-group | |
env: | |
KUBE_TEST_ENV: aks | |
SKIP_TESTS: "true" | |
runs-on: ubuntu-latest | |
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 TAGS=functional make functionaltest | |
gce-autopilot-test: | |
name: Test helm install in GCE (kops) - credentials needed | |
needs: kubernetes-test | |
if: github.event.pull_request.head.repo.full_name == github.repository | |
concurrency: | |
group: gce-access | |
env: | |
KUBE_TEST_ENV: gce | |
SKIP_TESTS: "true" | |
runs-on: ubuntu-latest | |
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 TAGS=functional make functionaltest |