plugins: Fix copying to docker containers #3177
Workflow file for this run
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
# "Setup minikube as CI step in GitHub Actions" | |
# https://minikube.sigs.k8s.io/docs/tutorials/setup_minikube_in_github_actions/ | |
# https://github.com/marketplace/actions/setup-minikube | |
name: Build Container and test | |
on: | |
pull_request: | |
paths: | |
- 'backend/**' | |
- 'frontend/**' | |
- Makefile | |
- '.github/**' | |
- Dockerfile | |
- 'e2e-tests/**' | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
name: build discover and deploy | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 18.x | |
- name: Start cluster | |
uses: medyagh/setup-minikube@master | |
# now you can run kubectl to see the pods in the cluster | |
- name: Try the cluster! | |
run: kubectl get pods -A | |
- name: Make a .plugins folder for testing later | |
run: | | |
echo "Extract pod-counter plugin into .plugins folder, which will be copied into image later by 'make image'." | |
cd plugins/examples/pod-counter | |
npm install | |
npm run build | |
cd ../../../ | |
cd plugins/headlamp-plugin | |
npm install | |
node bin/headlamp-plugin.js extract ../examples/pod-counter ../../.plugins/ | |
cd ../../ | |
ls -laR .plugins | |
- name: Remove unnecessary files | |
run: | | |
sudo rm -rf /usr/share/dotnet | |
sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
- name: Build image | |
run: | | |
export SHELL=/bin/bash | |
eval $(minikube -p minikube docker-env) | |
DOCKER_IMAGE_VERSION=latest make image | |
DOCKER_IMAGE_VERSION=latest DOCKER_PLUGINS_IMAGE_NAME=headlamp-plugins-test make build-plugins-container | |
echo -n "verifying images:" | |
docker images | |
- name: Test .plugins folder | |
run: | | |
export SHELL=/bin/bash | |
eval $(minikube -p minikube docker-env) | |
echo "----------------------------" | |
echo "Test .plugins folder is copied to the right place in the image by 'make image'" | |
echo "--- Files in the image /headlamp/ folder: ---" | |
docker run --rm --entrypoint=/bin/sh ghcr.io/headlamp-k8s/headlamp:latest -c "cd /headlamp/ && find ." | |
echo "----- Checking if the .plugins/ are copied to the right place in the image -----" | |
docker run --rm --entrypoint=/bin/sh ghcr.io/headlamp-k8s/headlamp:latest -c "set -e; (cd /headlamp/plugins && [ -e pod-counter/package.json ] && [ -e pod-counter/main.js ]) || exit 1" | |
echo "----- Checking if the plugins/example folder match copied docker plugins -----" | |
# List contents of /plugins inside the container | |
docker_output=$(docker run --rm --entrypoint=/bin/sh ghcr.io/headlamp-k8s/headlamp-plugins-test:latest -c "set -e; ls /plugins || exit 1") | |
# Get the list of folders inside the examples folder | |
examples_folder="plugins/examples" | |
examples_content=$(ls "$examples_folder") | |
# Check if the Docker output matches the examples folder content | |
if [[ "$docker_output" == "$examples_content" ]]; then | |
echo "Docker output matches examples folder content" | |
else | |
echo "Docker output does not match examples folder content" | |
echo "Docker output: $docker_output" | |
echo "----------------------------" | |
echo "Examples content: $examples_content" | |
exit 1 | |
fi | |
- name: Deploy to cluster | |
run: | |
kubectl apply -f e2e-tests/kubernetes-headlamp-ci.yaml | |
- name: Run e2e tests | |
run: | | |
echo "------------------sleeping 3...------------------" | |
sleep 3 | |
minikube service list | |
minikube service headlamp -n kube-system --url | |
kubectl get deployments -n kube-system | |
minikube logs | tail -10 | |
echo "------------------waiting for headlamp deployment to be available...------------------" | |
kubectl wait deployment -n kube-system headlamp --for condition=Available=True --timeout=30s | |
minikube service headlamp -n kube-system --url | |
echo "------------------opening the service------------------" | |
export SERVICE_URL=$(minikube service headlamp -n kube-system --url | tail -1) | |
echo $SERVICE_URL | |
curl -L $SERVICE_URL | grep -q "Headlamp: Kubernetes Web UI" | |
echo "------------------Getting HEADLAMP_TOKEN------------------" | |
kubectl create serviceaccount headlamp-admin --namespace kube-system | |
kubectl create clusterrolebinding headlamp-admin --serviceaccount=kube-system:headlamp-admin --clusterrole=cluster-admin | |
export HEADLAMP_TOKEN=$(kubectl create token headlamp-admin --duration 24h -n kube-system) | |
echo "------------------Running playwright e2e tests------------------" | |
cd e2e-tests | |
npm ci | |
npx playwright install --with-deps | |
HEADLAMP_TEST_URL=$SERVICE_URL npx playwright test | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: e2e-tests-report | |
path: e2e-tests/playwright-report/ | |
retention-days: 30 |