Skip to content

update default nix folder. #3

update default nix folder.

update default nix folder. #3

name: Integration test
on:
push:
branches:
- '**'
jobs:
manifest_check:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
- uses: cachix/install-nix-action@v25
with:
nix_path: nixpkgs=channel:nixos-23.11
- name: Install dependencies in environment
run: nix-env -if ui-tests/default.nix
- name: Validate integration test manifest
run: kustomize build integration_test | kubeconform -strict -kubernetes-version 1.21.5
integration_test:
timeout-minutes: 45
needs: manifest_check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: cachix/install-nix-action@v25
with:
nix_path: nixpkgs=channel:nixos-23.11
- name: Install dependencies
run: nix-env -if ui-tests/default.nix
- name: Install helm
run: sudo snap install helm --classic
- name: Start cluster
run: minikube start --driver=docker --kubernetes-version=v1.21.5
- name: Add Vault Helm Repo
run: helm repo add hashicorp https://helm.releases.hashicorp.com
- name: Install Vault on cluster
run: helm install vault hashicorp/vault --values ui-tests/manifests/vault/helm-values.yaml
- name: Wait for kube api server to process and create vault
run: sleep 60s
- name: Wait for vault to be initialized
run: timeout 900 kubectl wait --for=condition=Initialized pod vault-0 --timeout=900s
- name: Bootstrap Vault
run: . scripts/bootstrap-vault.sh
- name: Deploy
run: skaffold run -p integration-test
- name: Wait for kube api server to process and create all resources
# This is because the wait step that follows this one does this:
# 1. retrieve list of pods
# 2. wait for list of pods
# Unfortunately, the list of pods might not be complete at step (1), as all pods may not yet
# be created, meaning the list of pods waited on in step (2) is not complete. We therefore
# wait some time here to allow that to finish before we retrieve the list of pods to wait on.
# 30s should be more than enough.
run: sleep 30s
- name: Wait for deployment readiness
# Skaffold is supposed to do this, but for whatever reason, does not. At the time of writing,
# investigating this was not a priority.
run: timeout 900 kubectl wait --for=condition=Ready pod --all --timeout=900s
- name: Port-forward the portal frontend ingress
run: kubectl port-forward -n ingress-nginx --address 0.0.0.0 svc/ingress-nginx-controller 3000:80 &
- name: Install test dependencies
working-directory: ui-tests/tests
run: |-
npm ci
- name: Run tests
working-directory: ui-tests/tests
run: |-
PAYMENT_MANAGER_ENDPOINT="http://127.0.0.1:3000" npm run test:headless
- name: Archive test report
if: ${{ always() }}
uses: actions/upload-artifact@v2
with:
name: test-report
path: ui-tests/tests/report.html
- name: Print docker containers to check any issues with the cluster
if: ${{ failure() }}
run: docker ps
- name: Print resources
if: ${{ always() }}
run: kubectl get svc,deploy,sts,pv,pvc,configmap,job,pod -A
- name: Describe resources
if: ${{ always() }}
run: kubectl describe svc,deploy,sts,pv,pvc,configmap,job,pod -A
- name: Print secret values
if: ${{ always() }}
run: |-
kubectl get secrets -o json | jq -r '.items[] | { name: .metadata.name, data: .data | map_values(@base64d) }'