Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix variable error #78

Closed
wants to merge 68 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
5883251
feat: initial commit for use with DNSimple
arnediekmann May 26, 2020
f703e54
doc: add certificate creation to README
arnediekmann May 26, 2020
2724b83
feat: add release script
arnediekmann May 26, 2020
6496c7d
fix: add correct helm path in release script
arnediekmann May 27, 2020
cda293d
chore: Bump version to 0.0.1.
arnediekmann May 27, 2020
a4132d7
fix: fix path to helm dir in release script
arnediekmann May 27, 2020
e1e088b
chore: update deps
arnediekmann May 27, 2020
b85fb0f
chore: update README.md
arnediekmann Jun 2, 2020
3741646
fix: quote account id in staging cluster issuer
arnediekmann Jul 29, 2020
67e2abf
chore: Bump version to 0.0.2.
arnediekmann Jul 29, 2020
81f4c24
docs: add better description for chart
arnediekmann Jul 29, 2020
4a085a8
chore: update helm index in repo that enframes all of our charts
arnediekmann Jul 29, 2020
9ce3e6d
docs: update README to include instructions on how to use our helm repo
arnediekmann Jul 29, 2020
2ed52c8
chore: add more info to Helm chart metadata
arnediekmann Jul 29, 2020
1bb8d33
chore: Bump version to 0.0.3.
arnediekmann Jul 29, 2020
0acec98
fix: explicit pki durations to match resulting objects
cmacrae Aug 25, 2020
6c154de
Merge pull request #5 from cmacrae/compat/gitops_pki_durations
arnediekmann Aug 25, 2020
0bb6900
chore: Bump version to 0.0.4.
arnediekmann Aug 25, 2020
24c78cb
chore: update deps
arnediekmann Dec 9, 2020
c5b7612
chore: change apiVersion to v1
arnediekmann Dec 9, 2020
fc6e021
chore: Bump version to 0.0.5.
arnediekmann Dec 9, 2020
1880524
Fetch account ID from DNSimple API
Jan 19, 2021
3142c58
Add support for using an existing token secret
Jan 19, 2021
6c88ff5
Add support for imagePullSecret
Jan 20, 2021
865b72e
Merge pull request #7 from Peltarion/parmus/whoami
arnediekmann Mar 25, 2021
61c77c0
Merge pull request #9 from Peltarion/parmus/helm-secret
arnediekmann Mar 25, 2021
4516234
Merge pull request #10 from Peltarion/parmus/helm-pullsecret
arnediekmann Mar 25, 2021
55c1af1
docs: clarify test execution
arnediekmann Mar 25, 2021
11fb703
fix: downgrade k8s libraries to 0.19.0 to fix #8
arnediekmann Mar 25, 2021
c22a4ce
chore: use yq v4 in release script
arnediekmann Mar 25, 2021
8b70f5f
chore: Bump version to 0.1.0.
arnediekmann Mar 25, 2021
5041b63
fix typo in values
denismatyu Jul 1, 2021
5684017
fix typo
denismatyu Jul 1, 2021
f4504a7
Merge pull request #11 from denismatiu/master
arnediekmann Oct 12, 2021
e9100f8
Support newer stable APIs in Helm chart
Dec 1, 2021
687d533
Merge pull request #16 from Peltarion/parmus/helm
arnediekmann Dec 20, 2021
365a0db
chore: Bump version to 0.1.1.
arnediekmann Dec 20, 2021
d6f3d9a
Upgrade dependencies and allign with cert-manager/webhook-example
splattner Jul 17, 2023
8b63a36
Merge pull request #23 from splattner/upgrade-dependencies
arnediekmann Aug 24, 2023
04cc3cc
chore: Bump version to 0.1.2.
arnediekmann Aug 24, 2023
c1db14c
Add the ability to use a DNSimple User API token (#26)
IntegralProgrammer Apr 22, 2024
b5793bb
CI/CD using github actions and a custom dnsimple account (#31)
moll-re May 27, 2024
97de643
allow running as unprivileged pod by choosing a higher port for liste…
moll-re May 27, 2024
1f64cdf
use ko to build images (#34)
moll-re May 27, 2024
01362dd
chore: Configure Renovate (#27)
renovate[bot] May 27, 2024
23d4c7c
bump container version to incorporate new changes
moll-re May 27, 2024
f6d110c
Merge pull request #36 from puzzle/update/helm-release-with-usertoken…
madchr1st Jun 10, 2024
b9630d8
Change wording and handling of .Values.groupName
klopfenstein-puzzle Jun 19, 2024
de52757
chore(deps): update ko-build/setup-ko action to v0.7
renovate[bot] Jun 21, 2024
493e618
More verbosity during k8s test suite
klopfenstein-puzzle Aug 16, 2024
3fa3cce
Add space, iteration time and fix replica conditional
klopfenstein-puzzle Aug 16, 2024
664caec
Merge pull request #45 from puzzle/feature/verbose-test-suite
klopfenstein-puzzle Aug 16, 2024
95b3acf
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.3
renovate[bot] Aug 16, 2024
992d304
Merge pull request #39 from puzzle/renovate/github.com-cert-manager-c…
klopfenstein-puzzle Aug 16, 2024
36ea455
fix(deps): update module github.com/dnsimple/dnsimple-go to v1.7.0
renovate[bot] Aug 16, 2024
4eb60d1
Merge pull request #43 from puzzle/renovate/ko-build-setup-ko-0.x
klopfenstein-puzzle Aug 16, 2024
3765f9b
Merge pull request #40 from puzzle/renovate/github.com-dnsimple-dnsim…
klopfenstein-puzzle Aug 16, 2024
3412b5f
Adjust wording
klopfenstein-puzzle Aug 26, 2024
a3bb504
Merge pull request #42 from puzzle/fix/group-name
klopfenstein-puzzle Aug 26, 2024
8cd8638
chore: Bump version to 0.1.4
klopfenstein-puzzle Aug 26, 2024
038038d
Merge pull request #46 from puzzle/bump/version-0.1.4
klopfenstein-puzzle Aug 26, 2024
db70e03
fix(deps): update module k8s.io/klog to v2 (#41)
renovate[bot] Aug 28, 2024
378611c
chore: :bookmark: Bumb version to 0.1.5
bacht-fidi Oct 17, 2024
65e6848
fix: :bug: removed legacy apiversions and set it as static value
bacht-fidi Oct 17, 2024
f46d9ae
Merge pull request #1 from bacht-fidi/fix/remove-legacy-apiversions
bacht-fidi Oct 17, 2024
9169711
prerequisite cert-manager >= 1.0.0 for v1 version
Pidu2 Oct 17, 2024
7ceb198
Merge pull request #50 from bacht-fidi/master
Pidu2 Oct 17, 2024
fad72af
fix variable that went missing
Pidu2 Oct 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions .github/workflows/build-images.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Build docker images

on:
workflow_call:
inputs:
tags:
description: 'Tags to build the image for (separated by a whitespace)'
required: true
type: string


jobs:
build:
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: Get go dependencies
run: |
cd src
go mod download


- name: Setup ko
# KO is a tool for building go container images https://ko.build/
uses: ko-build/[email protected]
# KO is configured to use GHCR as the registry


- name: Format tags with a comma
id: format-tags
run: echo "TAGS=$(echo ${{ inputs.tags }} | tr ' ' ',')" >> $GITHUB_OUTPUT


- name: Build images
run: |
cd src
ko build --tags="${{ steps.format-tags.outputs.TAGS }}" --platform=linux/amd64,linux/arm64 --bare --sbom=none
30 changes: 30 additions & 0 deletions .github/workflows/helm-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# This workflow publishes a new chart release to github pages
# The content of the branch gh-pages is then published to https://puzzle.github.io/cert-manager-webhook-dnsimple/
name: Release a new chart version

on:
workflow_dispatch:

jobs:
release:
permissions:
contents: write

runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "[email protected]"

- name: Run chart-releaser
uses: helm/[email protected]
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
with:
charts_dir: ./charts
54 changes: 54 additions & 0 deletions .github/workflows/test-go.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
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
echo """apiVersion: v1
kind: Secret
metadata:
name: dnsimple-token
type: Opaque
stringData:
token: $DNSIMPLE_API_TOKEN
""" > testdata/dnsimple-token.yaml
cd src
go test -v .
122 changes: 122 additions & 0 deletions .github/workflows/test-kubernetes.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
name: Run webhook tests in a full environment

on:
workflow_call:
secrets:
DNSIMPLE_API_TOKEN:
required: true
DNSIMPLE_ZONE_NAME:
required: true


jobs:
test:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4


- name: Start minikube
uses: medyagh/setup-minikube@master
with:
kubernetes-version: 1.29.3


- name: Install cert-manager, patch upstream dns servers, wait for readiness
run: |
echo "Target cert-manager version: ${{ vars.TARGET_CERT_MANAGER_VERSION }}"
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/${{ vars.TARGET_CERT_MANAGER_VERSION }}/cert-manager.yaml
# Patch cert-manager to use DNSimple's nameservers for faster propagation-checks
kubectl patch deployment cert-manager -n cert-manager --type='json' -p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--dns01-recursive-nameservers=ns1.dnsimple.com:53"}]'
kubectl wait --for=condition=available --timeout=600s deployment/cert-manager-webhook -n cert-manager


- name: Install cert-manager-webhook-dnsimple, wait for readiness
env:
DNSIMPLE_API_TOKEN: ${{ secrets.DNSIMPLE_API_TOKEN }}
DNSIMPLE_ZONE_NAME: ${{ secrets.DNSIMPLE_ZONE_NAME}}
run: |
helm install cert-manager-webhook-dnsimple ./charts/cert-manager-webhook-dnsimple \
--namespace cert-manager \
--set dnsimple.token="$DNSIMPLE_API_TOKEN" \
--set groupName="acme.$DNSIMPLE_ZONE_NAME" \
--set image.repository=ghcr.io/${{ github.repository_owner }}/cert-manager-webhook-dnsimple \
--set clusterIssuer.staging.enabled=true \
--set clusterIssuer.email="noreply@$DNSIMPLE_ZONE_NAME" \
--set image.tag=commit-${{ github.sha }}

helm -n cert-manager list

max_wait_time_seconds=600
sleep_between_iterations=10

start=$(date +%s)
end=$(( $start + $max_wait_time_seconds ))

echo ""
echo "Awaiting succesful deployment for max ${max_wait_time_seconds} seconds or until $(date --date="@$end")"
while [ $(date +%s) -le $end ]; do
echo "[i] New iteration at $(date +%s)"
kubectl -n cert-manager get po

if [ $(kubectl -n cert-manager get po | grep Crash | wc -l) -gt 0 ]; then
echo "::error title=Deployment is failing::At least one pod is crashing"
for pod in $(kubectl -n cert-manager get po | grep Crash | awk '{print $1}'); do
echo "Logs for pod '$pod'"
kubectl -n cert-manager logs $pod
done

exit 1
fi

replicas=$(kubectl -n cert-manager get deploy/cert-manager-webhook-dnsimple -o=jsonpath={.status.unavailableReplicas})
if [[ $([ -z $replicas ]) || $replicas -gt 0 ]]; then
sleep $sleep_between_iterations
else
echo "Replicas of deployment cert-manager-webhook-dnsimple have become available."
exit 0
fi
done

echo "::error title=Deployment timed out::Have timed out waiting for good deployment health"
exit 1

- name: Create sample certificate that uses the webhook
env:
DNSIMPLE_ZONE_NAME: ${{ secrets.DNSIMPLE_ZONE_NAME }}
run: |
echo """apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: dnsimple-test
namespace: default
spec:
dnsNames:
- gh-action-test.$DNSIMPLE_ZONE_NAME
issuerRef:
name: cert-manager-webhook-dnsimple-staging
kind: ClusterIssuer
secretName: dnsimple-test-tls
""" > certificate.yaml
kubectl apply -f certificate.yaml


- name: Assert that the DNS record was created
env:
DNSIMPLE_ZONE_NAME: ${{ secrets.DNSIMPLE_ZONE_NAME }}
timeout-minutes: 10
run: |
while true; do
if nslookup -type=TXT _acme-challenge.gh-action-test.$DNSIMPLE_ZONE_NAME ns1.dnsimple.com; then
break
fi
sleep 30
done


- name: Check the certificate status
run: |
kubectl wait --for=condition=ready --timeout=600s certificate/dnsimple-test
# this should not be necessary since the certificate is usually ready once the DNS record is propagated
kubectl get certificate dnsimple-test -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' | grep True
32 changes: 32 additions & 0 deletions .github/workflows/workflow_full-test-suite.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Run full test suite

on:
push:
branches:
- master
pull_request:
branches:
- master

jobs:
code-test:
name: Run tests on code
uses: ./.github/workflows/test-go.yaml
secrets: inherit


build-image:
name: Build Docker image
uses: ./.github/workflows/build-images.yaml
with:
tags: >-
commit-${{ github.sha }}
latest
needs: code-test


webhook-tests:
name: Run tests on webhooks
needs: build-image
uses: ./.github/workflows/test-kubernetes.yaml
secrets: inherit
16 changes: 16 additions & 0 deletions .github/workflows/workflow_tagged-build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Publish a new tagged Docker image

on:
push:
tags: # v* tags are protected in the repository settings
- 'v*'

jobs:
docker-build:
name: Build tagged Docker image
uses: ./.github/workflows/build-images.yaml
with:
tags: >-
${{ github.ref_name }}
commit-${{ github.sha }}
latest
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
# Output of the go coverage tool, specifically when used with LiteIDE
*.out

# Ignore the built binary
cert-manager-webhook-example
# Ignore kubebuilder test binaries
_test/
25 changes: 0 additions & 25 deletions Dockerfile

This file was deleted.

35 changes: 20 additions & 15 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,20 +1,25 @@
IMAGE_NAME := "webhook"
IMAGE_TAG := "latest"
GO ?= $(shell which go)
OS ?= $(shell $(GO) env GOOS)
ARCH ?= $(shell $(GO) env GOARCH)
KUBE_VERSION=1.25.0

OUT := $(shell pwd)/_out
# required by go tests
export TEST_ASSET_ETCD=../_test/kubebuilder/etcd
export TEST_ASSET_KUBE_APISERVER=../_test/kubebuilder/kube-apiserver
export TEST_ASSET_KUBECTL=../_test/kubebuilder/kubectl

$(shell mkdir -p "$(OUT)")
test: _test/kubebuilder
cd src && $(GO) test -v .

verify:
go test -v .
_test/kubebuilder:
curl -fsSL https://go.kubebuilder.io/test-tools/$(KUBE_VERSION)/$(OS)/$(ARCH) -o kubebuilder-tools.tar.gz
mkdir -p _test/kubebuilder
tar -xvf kubebuilder-tools.tar.gz
mv kubebuilder/bin/* _test/kubebuilder/
rm kubebuilder-tools.tar.gz
rm -R kubebuilder

build:
docker build -t "$(IMAGE_NAME):$(IMAGE_TAG)" .
clean: clean-kubebuilder

.PHONY: rendered-manifest.yaml
rendered-manifest.yaml:
helm template \
--name example-webhook \
--set image.repository=$(IMAGE_NAME) \
--set image.tag=$(IMAGE_TAG) \
deploy/example-webhook > "$(OUT)/rendered-manifest.yaml"
clean-kubebuilder:
rm -Rf _test
Loading