name: Run code tests on: push: workflow_call: secrets: DNSIMPLE_API_TOKEN: required: true DNSIMPLE_ZONE_NAME: required: true jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v5 with: go-version-file: src/go.mod cache-dependency-path: src/go.sum - name: Install kubebuilder fixtures id: kubebuilder run: | go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest echo "BIN_DIR=$(setup-envtest use -p path)" >> $GITHUB_OUTPUT - name: Run tests env: DNSIMPLE_API_TOKEN: ${{ secrets.DNSIMPLE_API_TOKEN }} DNSIMPLE_ZONE_NAME: ${{ secrets.DNSIMPLE_ZONE_NAME }} run: | export TEST_ASSET_KUBE_APISERVER=${{ steps.kubebuilder.outputs.BIN_DIR }}/kube-apiserver export TEST_ASSET_ETCD=${{ steps.kubebuilder.outputs.BIN_DIR }}/etcd export TEST_ASSET_KUBECTL=${{ steps.kubebuilder.outputs.BIN_DIR }}/kubectl export TEST_ZONE_NAME="${DNSIMPLE_ZONE_NAME}." # add trailing dot YLW='\033[1;33m' NC='\033[0m' echo """apiVersion: v1 kind: Secret metadata: name: dnsimple-token type: Opaque stringData: token: $DNSIMPLE_API_TOKEN """ > testdata/dnsimple-token.yaml cd src # Occasionally, transient network errors can make tests fail attempt=0 max_attempts=3 while [ $attempt -lt $max_attempts ]; do attempt=$((attempt+1)) output=$(go test -v . 2>&1 | tee /dev/tty) if echo "$output" | grep -q -e "Temporary failure in name resolution" -e "connection reset by peer"; then echo -e "${YLW}Detected transient network error. Retrying... ($attempt/$max_attempts)${NC}" else break fi done