kubenetworks/kubevpn

View on GitHub
.github/workflows/test.yml

Summary

Maintainability
Test Coverage
name: Test

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  image:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.23'
          check-latest: true
      - name: Push image to docker hub
        run: |
          echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USER }} --password-stdin
          echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
          docker buildx create --use
          export VERSION=${{github.event.pull_request.head.sha}}
          if [[ -z "$VERSION" ]]; then
            export VERSION=${{ github.sha }}
          fi
          make container-test
  linux:
    runs-on: ubuntu-latest
    needs: [ "image" ]
    steps:
      - uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.23'
          check-latest: true
      - name: Setup Minikube
        id: minikube
        timeout-minutes: 30
        uses: medyagh/setup-minikube@latest
        with:
          cache: true

      - name: Kubernetes info
        run: |
          kubectl cluster-info
          cat ~/.kube/config
          kubectl get pods -n kube-system -o wide
      - name: Install demo bookinfo
        run: |
          minikube image load --remote istio/examples-bookinfo-details-v1:1.16.2
          minikube image load --remote istio/examples-bookinfo-ratings-v1:1.16.2
          minikube image load --remote istio/examples-bookinfo-reviews-v1:1.16.2
          minikube image load --remote istio/examples-bookinfo-productpage-v1:1.16.2
          minikube image load --remote naison/authors:latest
          minikube image load --remote nginx:latest
          minikube image load --remote naison/kubevpn:test
          minikube image ls
          eval $(minikube docker-env)
          kubectl apply -f https://raw.githubusercontent.com/kubenetworks/kubevpn/master/samples/bookinfo.yaml

      - name: Build
        run: |
          export VERSION=${{github.event.pull_request.head.sha}}
          if [[ -z "$VERSION" ]]; then
            export VERSION=${{ github.sha }}
          fi
          make kubevpn-linux-amd64
          chmod +x ./bin/kubevpn
          cp ./bin/kubevpn /usr/local/bin/kubevpn
          kubevpn version

      - name: Wait for pods reviews to be ready
        run: |
          kubectl wait pods -l app=reviews --for=condition=Ready --timeout=3600s
          kubectl wait pods -l app=productpage --for=condition=Ready --timeout=3600s
          kubectl get svc -A -o wide
          kubectl get pod -A -o wide
          kubectl get all -o wide
          kubectl get nodes -o yaml
          ifconfig
          route -n
          sudo ln /usr/bin/resolvectl /usr/bin/systemd-resolve

      - name: Test
        run: make ut

  macos:
    runs-on: macos-13
    needs: [ "image" ]
    steps:
      - uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.23'
          check-latest: true

      # https://github.com/crazy-max/ghaction-setup-docker/issues/108
      - name: Set up QEMU
        uses: docker/actions-toolkit/.github/actions/macos-setup-qemu@19ca9ade20f5da695f76a10988d6532058575f82

      - name: Set up Docker
        uses: crazy-max/ghaction-setup-docker@v3

      - name: Install minikube
        run: |
          set -x
          docker version
          brew install minikube
          minikube start --driver=docker
          kubectl get pod -A -o wide
          minikube kubectl -- get pod -A -o wide

      - name: Kubernetes info
        run: |
          kubectl cluster-info
          cat ~/.kube/config
          kubectl get pods -n kube-system -o wide

      - name: Install demo bookinfo
        run: |
          minikube image load --remote istio/examples-bookinfo-details-v1:1.16.2
          minikube image load --remote istio/examples-bookinfo-ratings-v1:1.16.2
          minikube image load --remote istio/examples-bookinfo-reviews-v1:1.16.2
          minikube image load --remote istio/examples-bookinfo-productpage-v1:1.16.2
          minikube image load --remote naison/authors:latest
          minikube image load --remote nginx:latest
          minikube image load --remote naison/kubevpn:test
          minikube image ls
          eval $(minikube docker-env)
          kubectl apply -f https://raw.githubusercontent.com/kubenetworks/kubevpn/master/samples/bookinfo.yaml

      - name: Build
        run: |
          export VERSION=${{github.event.pull_request.head.sha}}
          if [[ -z "$VERSION" ]]; then
            export VERSION=${{ github.sha }}
          fi
          make kubevpn-darwin-amd64
          chmod +x ./bin/kubevpn
          cp ./bin/kubevpn /usr/local/bin/kubevpn
          kubevpn version

      - name: Wait for pods reviews to be ready
        run: |
          kubectl wait pods -l app=reviews --for=condition=Ready --timeout=3600s
          kubectl wait pods -l app=productpage --for=condition=Ready --timeout=3600s
          kubectl get svc -A -o wide || true
          kubectl get pod -A -o wide || true
          kubectl get all -o wide || true
          kubectl get nodes -o yaml || true
          ifconfig
          netstat -anr

      - name: Test
        run: make ut

  windows:
    runs-on: windows-latest
    needs: [ "image" ]
    steps:
      - uses: actions/checkout@v4

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.23'

      - name: Set up Docker
        uses: crazy-max/ghaction-setup-docker@v3
      - run: |
          docker info --format '{{.OSType}}'
      - run: |
          choco install minikube
          minikube start --driver=docker
          choco install make

      - name: Build
        run: make kubevpn-windows-amd64