name: e2e-k3s on: pull_request: types: [labeled] jobs: e2e-k3s: runs-on: ubuntu-latest if: ${{ github.event.label.name == 'ok-to-test' }} env: DOCKER_TAG: pull-${{ github.event.number }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup golang uses: actions/setup-go@v4 with: go-version: "1.21" - name: Build query-service image env: DEV_BUILD: 1 run: make build-ee-query-service-amd64 - name: Build frontend image run: make build-frontend-amd64 - name: Create a k3s cluster uses: AbsaOSS/k3d-action@v2 with: cluster-name: "signoz" - name: Inject the images to the cluster run: k3d image import signoz/query-service:$DOCKER_TAG signoz/frontend:$DOCKER_TAG -c signoz - name: Set up HotROD sample-app run: | # create sample-application namespace kubectl create ns sample-application # apply hotrod k8s manifest file kubectl -n sample-application apply -f https://raw.githubusercontent.com/SigNoz/signoz/develop/sample-apps/hotrod/hotrod.yaml # wait for all deployments in sample-application namespace to be READY kubectl -n sample-application get deploy --output name | xargs -r -n1 -t kubectl -n sample-application rollout status --timeout=300s - name: Deploy the app run: | # add signoz helm repository helm repo add signoz https://charts.signoz.io # create platform namespace kubectl create ns platform # installing signoz using helm helm install my-release signoz/signoz -n platform \ --wait \ --timeout 10m0s \ --set frontend.service.type=LoadBalancer \ --set queryService.image.tag=$DOCKER_TAG \ --set frontend.image.tag=$DOCKER_TAG # get pods, services and the container images kubectl get pods -n platform kubectl get svc -n platform - name: Kick off a sample-app workload run: | # start the locust swarm kubectl --namespace sample-application run strzal --image=djbingham/curl \ --restart='OnFailure' -i --tty --rm --command -- curl -X POST -F \ 'user_count=6' -F 'spawn_rate=2' http://locust-master:8089/swarm - name: Get short commit SHA, display tunnel URL and IP Address of the worker node id: get-subdomain run: | subdomain="pr-$(git rev-parse --short HEAD)" echo "URL for tunnelling: https://$subdomain.loca.lt" echo "subdomain=$subdomain" >> $GITHUB_OUTPUT worker_ip="$(curl -4 -s ipconfig.io/ip)" echo "Worker node IP address: $worker_ip" - name: Start tunnel env: SUBDOMAIN: ${{ steps.get-subdomain.outputs.subdomain }} run: | npm install -g localtunnel host=$(kubectl get svc -n platform | grep frontend | tr -s ' ' | cut -d" " -f4) port=$(kubectl get svc -n platform | grep frontend | tr -s ' ' | cut -d" " -f5 | cut -d":" -f1) lt -p $port -l $host -s $SUBDOMAIN