Add test and docker build step to ci (#24)


closes #21
closes #22
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ec277a9..1aaa224 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -38,7 +38,16 @@
       - uses: pre-commit/action@v1.0.1
 
   build:
-    name: Build
+    name: Build docker
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out code
+        uses: actions/checkout@v2
+      - name: Build
+        run: docker build . -t "ci"
+
+  tests:
+    name: Tests
     runs-on: ubuntu-latest
     steps:
       - name: Set up Go 1.13
@@ -46,9 +55,14 @@
         with:
           go-version: 1.13
         id: go
-      - name: Check out code into the Go module directory
+      - name: Check out code
         uses: actions/checkout@v2
-      - name: Get dependencies
-        run: go mod download
-      - name: Build
-        run: go build -v .
+      - name: Install kubebuilder
+        run: |
+          os=$(go env GOOS) && \
+          arch=$(go env GOARCH) && \
+          curl -L https://go.kubebuilder.io/dl/2.3.0/$os/$arch | tar -xz -C /tmp/ && \
+          sudo mv /tmp/kubebuilder_2.3.0_${os}_${arch} /usr/local/kubebuilder && \
+          export PATH=$PATH:/usr/local/kubebuilder/bin
+      - name: Run test
+        run: make test
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 40d062a..859bee5 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -46,7 +46,7 @@
     hooks:
       - id: insert-license
         name: Add license for all yaml files
-        exclude: ^vendor/.*$
+        exclude: ^vendor/.*$|^config/crd/bases/.*$|^config/rbac/role.yaml$|^config/webhook/manifests.yaml$
         types: [yaml]
         args:
           - --comment-style
@@ -67,7 +67,7 @@
       - id: insert-license
         name: Add license for all go files
         files: \.go$
-        exclude: ^vendor/.*$|^zz_generated.*$
+        exclude: ^vendor/.*$|api/v1alpha1/zz_generated.deepcopy.go
         args:
           - --comment-style
           - "//"
diff --git a/Dockerfile b/Dockerfile
index 240f095..9bfc700 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -17,6 +17,7 @@
 FROM golang:1.13 as builder
 
 WORKDIR /workspace
+COPY vendor/ vendor/
 # Copy the Go Modules manifests
 COPY go.mod go.mod
 COPY go.sum go.sum
diff --git a/Makefile b/Makefile
index 90fbeed..79bc972 100644
--- a/Makefile
+++ b/Makefile
@@ -33,14 +33,14 @@
 # Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
 CRD_OPTIONS ?= "crd:trivialVersions=true"
 
-all: test manager
+all: test build
 
 # Run tests
-test: generate fmt vet manifests
+test: generate manifests
 	go test ./controllers/... -coverprofile cover.out
 
 # Build manager binary
-manager: generate fmt vet
+build: generate fmt vet
 	go build -o bin/manager main.go
 
 # Run against the configured Kubernetes cluster in ~/.kube/config
diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go
index 03c7bc3..75cff99 100644
--- a/api/v1alpha1/zz_generated.deepcopy.go
+++ b/api/v1alpha1/zz_generated.deepcopy.go
@@ -1,20 +1,5 @@
 // +build !ignore_autogenerated
 
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
 // Code generated by controller-gen. DO NOT EDIT.
 
 package v1alpha1
diff --git a/config/crd/bases/airflow.apache.org_airflowbases.yaml b/config/crd/bases/airflow.apache.org_airflowbases.yaml
index ad21748..488ac23 100644
--- a/config/crd/bases/airflow.apache.org_airflowbases.yaml
+++ b/config/crd/bases/airflow.apache.org_airflowbases.yaml
@@ -1,17 +1,3 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
 
 ---
 apiVersion: apiextensions.k8s.io/v1beta1
@@ -108,8 +94,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchFields:
@@ -142,8 +128,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                             type: object
@@ -153,8 +139,8 @@
                             format: int32
                             type: integer
                         required:
-                          - preference
-                          - weight
+                        - preference
+                        - weight
                         type: object
                       type: array
                     requiredDuringSchedulingIgnoredDuringExecution:
@@ -204,8 +190,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchFields:
@@ -238,14 +224,14 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                             type: object
                           type: array
                       required:
-                        - nodeSelectorTerms
+                      - nodeSelectorTerms
                       type: object
                   type: object
                 podAffinity:
@@ -304,8 +290,8 @@
                                             type: string
                                           type: array
                                       required:
-                                        - key
-                                        - operator
+                                      - key
+                                      - operator
                                       type: object
                                     type: array
                                   matchLabels:
@@ -336,7 +322,7 @@
                                   is running. Empty topologyKey is not allowed.
                                 type: string
                             required:
-                              - topologyKey
+                            - topologyKey
                             type: object
                           weight:
                             description: weight associated with matching the corresponding
@@ -344,8 +330,8 @@
                             format: int32
                             type: integer
                         required:
-                          - podAffinityTerm
-                          - weight
+                        - podAffinityTerm
+                        - weight
                         type: object
                       type: array
                     requiredDuringSchedulingIgnoredDuringExecution:
@@ -399,8 +385,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchLabels:
@@ -430,7 +416,7 @@
                               topologyKey is not allowed.
                             type: string
                         required:
-                          - topologyKey
+                        - topologyKey
                         type: object
                       type: array
                   type: object
@@ -492,8 +478,8 @@
                                             type: string
                                           type: array
                                       required:
-                                        - key
-                                        - operator
+                                      - key
+                                      - operator
                                       type: object
                                     type: array
                                   matchLabels:
@@ -524,7 +510,7 @@
                                   is running. Empty topologyKey is not allowed.
                                 type: string
                             required:
-                              - topologyKey
+                            - topologyKey
                             type: object
                           weight:
                             description: weight associated with matching the corresponding
@@ -532,8 +518,8 @@
                             format: int32
                             type: integer
                         required:
-                          - podAffinityTerm
-                          - weight
+                        - podAffinityTerm
+                        - weight
                         type: object
                       type: array
                     requiredDuringSchedulingIgnoredDuringExecution:
@@ -587,8 +573,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchLabels:
@@ -618,7 +604,7 @@
                               topologyKey is not allowed.
                             type: string
                         required:
-                          - topologyKey
+                        - topologyKey
                         type: object
                       type: array
                   type: object
@@ -668,11 +654,11 @@
                             and restore e.g. s3, oci-s3-compat, aws-s3, gce-s3, etc.
                           type: string
                       required:
-                        - storageprovider
+                      - storageprovider
                       type: object
                   required:
-                    - schedule
-                    - storage
+                  - schedule
+                  - storage
                   type: object
                 backupVolumeClaimTemplate:
                   description: BackupVolumeClaimTemplate allows a user to specify
@@ -729,8 +715,8 @@
                               description: Name is the name of resource being referenced
                               type: string
                           required:
-                            - kind
-                            - name
+                          - kind
+                          - name
                           type: object
                         resources:
                           description: 'Resources represents the minimum resources
@@ -784,8 +770,8 @@
                                       type: string
                                     type: array
                                 required:
-                                  - key
-                                  - operator
+                                - key
+                                - operator
                                 type: object
                               type: array
                             matchLabels:
@@ -863,8 +849,8 @@
                                   a valid value of PersistentVolumeClaimCondition.Type
                                 type: string
                             required:
-                              - status
-                              - type
+                            - status
+                            - type
                             type: object
                           type: array
                         phase:
@@ -966,8 +952,8 @@
                               description: Name is the name of resource being referenced
                               type: string
                           required:
-                            - kind
-                            - name
+                          - kind
+                          - name
                           type: object
                         resources:
                           description: 'Resources represents the minimum resources
@@ -1021,8 +1007,8 @@
                                       type: string
                                     type: array
                                 required:
-                                  - key
-                                  - operator
+                                - key
+                                - operator
                                 type: object
                               type: array
                             matchLabels:
@@ -1100,8 +1086,8 @@
                                   a valid value of PersistentVolumeClaimCondition.Type
                                 type: string
                             required:
-                              - status
-                              - type
+                            - status
+                            - type
                             type: object
                           type: array
                         phase:
@@ -1118,7 +1104,7 @@
               type: object
             postgres:
               description: 'PostgresSpec defines the attributes and desired state
-                  of Postgres Component TODO - minimum spec needed .. for now it is
+                of Postgres Component TODO - minimum spec needed .. for now it is
                 version: "" need to consider empty mysql'
               properties:
                 image:
@@ -1215,8 +1201,8 @@
                               description: Name is the name of resource being referenced
                               type: string
                           required:
-                            - kind
-                            - name
+                          - kind
+                          - name
                           type: object
                         resources:
                           description: 'Resources represents the minimum resources
@@ -1270,8 +1256,8 @@
                                       type: string
                                     type: array
                                 required:
-                                  - key
-                                  - operator
+                                - key
+                                - operator
                                 type: object
                               type: array
                             matchLabels:
@@ -1349,8 +1335,8 @@
                                   a valid value of PersistentVolumeClaimCondition.Type
                                 type: string
                             required:
-                              - status
-                              - type
+                            - status
+                            - type
                             type: object
                           type: array
                         phase:
@@ -1402,10 +1388,10 @@
                   description: Version defines the SQL Proxy docker image version.
                   type: string
               required:
-                - instance
-                - project
-                - region
-                - type
+              - instance
+              - project
+              - region
+              - type
               type: object
             storage:
               description: Spec for NFS component.
@@ -1489,8 +1475,8 @@
                               description: Name is the name of resource being referenced
                               type: string
                           required:
-                            - kind
-                            - name
+                          - kind
+                          - name
                           type: object
                         resources:
                           description: 'Resources represents the minimum resources
@@ -1544,8 +1530,8 @@
                                       type: string
                                     type: array
                                 required:
-                                  - key
-                                  - operator
+                                - key
+                                - operator
                                 type: object
                               type: array
                             matchLabels:
@@ -1623,8 +1609,8 @@
                                   a valid value of PersistentVolumeClaimCondition.Type
                                 type: string
                             required:
-                              - status
-                              - type
+                            - status
+                            - type
                             type: object
                           type: array
                         phase:
@@ -1666,8 +1652,8 @@
                         format: int32
                         type: integer
                     required:
-                      - currenthealthy
-                      - desiredhealthy
+                    - currenthealthy
+                    - desiredhealthy
                     type: object
                   status:
                     description: 'Status. Values: InProgress, Ready, Unknown'
@@ -1695,10 +1681,10 @@
                         format: int32
                         type: integer
                     required:
-                      - currentcount
-                      - progress
-                      - readycount
-                      - replicas
+                    - currentcount
+                    - progress
+                    - readycount
+                    - replicas
                     type: object
                 type: object
               type: array
@@ -1731,8 +1717,8 @@
                     description: Type of condition.
                     type: string
                 required:
-                  - status
-                  - type
+                - status
+                - type
                 type: object
               type: array
             observedGeneration:
@@ -1745,9 +1731,9 @@
       type: object
   version: v1alpha1
   versions:
-    - name: v1alpha1
-      served: true
-      storage: true
+  - name: v1alpha1
+    served: true
+    storage: true
 status:
   acceptedNames:
     kind: ""
diff --git a/config/crd/bases/airflow.apache.org_airflowclusters.yaml b/config/crd/bases/airflow.apache.org_airflowclusters.yaml
index 1fc064e..71cc63b 100644
--- a/config/crd/bases/airflow.apache.org_airflowclusters.yaml
+++ b/config/crd/bases/airflow.apache.org_airflowclusters.yaml
@@ -1,17 +1,3 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
 
 ---
 apiVersion: apiextensions.k8s.io/v1beta1
@@ -108,8 +94,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchFields:
@@ -142,8 +128,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                             type: object
@@ -153,8 +139,8 @@
                             format: int32
                             type: integer
                         required:
-                          - preference
-                          - weight
+                        - preference
+                        - weight
                         type: object
                       type: array
                     requiredDuringSchedulingIgnoredDuringExecution:
@@ -204,8 +190,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchFields:
@@ -238,14 +224,14 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                             type: object
                           type: array
                       required:
-                        - nodeSelectorTerms
+                      - nodeSelectorTerms
                       type: object
                   type: object
                 podAffinity:
@@ -304,8 +290,8 @@
                                             type: string
                                           type: array
                                       required:
-                                        - key
-                                        - operator
+                                      - key
+                                      - operator
                                       type: object
                                     type: array
                                   matchLabels:
@@ -336,7 +322,7 @@
                                   is running. Empty topologyKey is not allowed.
                                 type: string
                             required:
-                              - topologyKey
+                            - topologyKey
                             type: object
                           weight:
                             description: weight associated with matching the corresponding
@@ -344,8 +330,8 @@
                             format: int32
                             type: integer
                         required:
-                          - podAffinityTerm
-                          - weight
+                        - podAffinityTerm
+                        - weight
                         type: object
                       type: array
                     requiredDuringSchedulingIgnoredDuringExecution:
@@ -399,8 +385,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchLabels:
@@ -430,7 +416,7 @@
                               topologyKey is not allowed.
                             type: string
                         required:
-                          - topologyKey
+                        - topologyKey
                         type: object
                       type: array
                   type: object
@@ -492,8 +478,8 @@
                                             type: string
                                           type: array
                                       required:
-                                        - key
-                                        - operator
+                                      - key
+                                      - operator
                                       type: object
                                     type: array
                                   matchLabels:
@@ -524,7 +510,7 @@
                                   is running. Empty topologyKey is not allowed.
                                 type: string
                             required:
-                              - topologyKey
+                            - topologyKey
                             type: object
                           weight:
                             description: weight associated with matching the corresponding
@@ -532,8 +518,8 @@
                             format: int32
                             type: integer
                         required:
-                          - podAffinityTerm
-                          - weight
+                        - podAffinityTerm
+                        - weight
                         type: object
                       type: array
                     requiredDuringSchedulingIgnoredDuringExecution:
@@ -587,8 +573,8 @@
                                         type: string
                                       type: array
                                   required:
-                                    - key
-                                    - operator
+                                  - key
+                                  - operator
                                   type: object
                                 type: array
                               matchLabels:
@@ -618,7 +604,7 @@
                               topologyKey is not allowed.
                             type: string
                         required:
-                          - topologyKey
+                        - topologyKey
                         type: object
                       type: array
                   type: object
@@ -672,7 +658,8 @@
                       description: Bucket describes the GCS bucket
                       type: string
                     once:
-                      description: Once syncs initially and quits (use init container instead of sidecar)
+                      description: Once syncs initially and quits (use init container
+                        instead of sidecar)
                       type: boolean
                   type: object
                 git:
@@ -683,7 +670,8 @@
                       description: Branch describes the branch name to be synced
                       type: string
                     cred:
-                      description: Reference to git credentials (user, password, ssh etc)
+                      description: Reference to git credentials (user, password, ssh
+                        etc)
                       properties:
                         name:
                           description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
@@ -704,7 +692,7 @@
                       description: User for git access
                       type: string
                   required:
-                    - repo
+                  - repo
                   type: object
                 nfspv:
                   description: NfsPVSpec
@@ -759,8 +747,8 @@
                               description: Name is the name of resource being referenced
                               type: string
                           required:
-                            - kind
-                            - name
+                          - kind
+                          - name
                           type: object
                         resources:
                           description: 'Resources represents the minimum resources
@@ -814,8 +802,8 @@
                                       type: string
                                     type: array
                                 required:
-                                  - key
-                                  - operator
+                                - key
+                                - operator
                                 type: object
                               type: array
                             matchLabels:
@@ -893,8 +881,8 @@
                                   a valid value of PersistentVolumeClaimCondition.Type
                                 type: string
                             required:
-                              - status
-                              - type
+                            - status
+                            - type
                             type: object
                           type: array
                         phase:
@@ -928,7 +916,7 @@
                         restore e.g. s3, oci-s3-compat, aws-s3, gce-s3, etc.
                       type: string
                   required:
-                    - storageprovider
+                  - storageprovider
                   type: object
                 subdir:
                   description: DagSubdir is the directory under source where the dags
@@ -1047,8 +1035,8 @@
                                 format: int32
                                 type: integer
                             required:
-                              - currenthealthy
-                              - desiredhealthy
+                            - currenthealthy
+                            - desiredhealthy
                             type: object
                           status:
                             description: 'Status. Values: InProgress, Ready, Unknown'
@@ -1078,10 +1066,10 @@
                                 format: int32
                                 type: integer
                             required:
-                              - currentcount
-                              - progress
-                              - readycount
-                              - replicas
+                            - currentcount
+                            - progress
+                            - readycount
+                            - replicas
                             type: object
                         type: object
                       type: array
@@ -1115,8 +1103,8 @@
                             description: Type of condition.
                             type: string
                         required:
-                          - status
-                          - type
+                        - status
+                        - type
                         type: object
                       type: array
                     createTime:
@@ -1155,8 +1143,8 @@
                   description: 'Tier: Required. The service tier of the instance.'
                   type: string
               required:
-                - project
-                - region
+              - project
+              - region
               type: object
             nodeSelector:
               additionalProperties:
@@ -1264,8 +1252,8 @@
                               description: Name is the name of resource being referenced
                               type: string
                           required:
-                            - kind
-                            - name
+                          - kind
+                          - name
                           type: object
                         resources:
                           description: 'Resources represents the minimum resources
@@ -1319,8 +1307,8 @@
                                       type: string
                                     type: array
                                 required:
-                                  - key
-                                  - operator
+                                - key
+                                - operator
                                 type: object
                               type: array
                             matchLabels:
@@ -1398,8 +1386,8 @@
                                   a valid value of PersistentVolumeClaimCondition.Type
                                 type: string
                             required:
-                              - status
-                              - type
+                            - status
+                            - type
                             type: object
                           type: array
                         phase:
@@ -1543,8 +1531,8 @@
                         format: int32
                         type: integer
                     required:
-                      - currenthealthy
-                      - desiredhealthy
+                    - currenthealthy
+                    - desiredhealthy
                     type: object
                   status:
                     description: 'Status. Values: InProgress, Ready, Unknown'
@@ -1572,10 +1560,10 @@
                         format: int32
                         type: integer
                     required:
-                      - currentcount
-                      - progress
-                      - readycount
-                      - replicas
+                    - currentcount
+                    - progress
+                    - readycount
+                    - replicas
                     type: object
                 type: object
               type: array
@@ -1608,8 +1596,8 @@
                     description: Type of condition.
                     type: string
                 required:
-                  - status
-                  - type
+                - status
+                - type
                 type: object
               type: array
             observedGeneration:
@@ -1622,9 +1610,9 @@
       type: object
   version: v1alpha1
   versions:
-    - name: v1alpha1
-      served: true
-      storage: true
+  - name: v1alpha1
+    served: true
+    storage: true
 status:
   acceptedNames:
     kind: ""
diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml
index 2f05014..7c2331d 100644
--- a/config/rbac/role.yaml
+++ b/config/rbac/role.yaml
@@ -1,17 +1,3 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
 
 ---
 apiVersion: rbac.authorization.k8s.io/v1
@@ -20,143 +6,143 @@
   creationTimestamp: null
   name: manager-role
 rules:
-  - resources:
-      - configmaps
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - resources:
-      - secrets
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - resources:
-      - serviceaccounts
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - resources:
-      - services
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - airflow.apache.org
-    resources:
-      - airflowbases
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - airflow.apache.org
-    resources:
-      - airflowbases/status
-    verbs:
-      - get
-      - patch
-      - update
-  - apiGroups:
-      - airflow.apache.org
-    resources:
-      - airflowclusters
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - airflow.apache.org
-    resources:
-      - airflowclusters/status
-    verbs:
-      - get
-      - patch
-      - update
-  - apiGroups:
-      - app.k8s.io
-    resources:
-      - applications
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - apps
-    resources:
-      - statefulsets
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - policy
-    resources:
-      - poddisruptionbudgets
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - rbac.authorization.k8s.io
-    resources:
-      - rolebindings
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
-  - apiGroups:
-      - storage.k8s.io
-    resources:
-      - storageclasses
-    verbs:
-      - create
-      - delete
-      - get
-      - list
-      - patch
-      - update
-      - watch
+- resources:
+  - configmaps
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- resources:
+  - secrets
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- resources:
+  - serviceaccounts
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- resources:
+  - services
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - airflow.apache.org
+  resources:
+  - airflowbases
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - airflow.apache.org
+  resources:
+  - airflowbases/status
+  verbs:
+  - get
+  - patch
+  - update
+- apiGroups:
+  - airflow.apache.org
+  resources:
+  - airflowclusters
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - airflow.apache.org
+  resources:
+  - airflowclusters/status
+  verbs:
+  - get
+  - patch
+  - update
+- apiGroups:
+  - app.k8s.io
+  resources:
+  - applications
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - apps
+  resources:
+  - statefulsets
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - policy
+  resources:
+  - poddisruptionbudgets
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - rbac.authorization.k8s.io
+  resources:
+  - rolebindings
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - storage.k8s.io
+  resources:
+  - storageclasses
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
diff --git a/config/webhook/manifests.yaml b/config/webhook/manifests.yaml
index ec20143..e69de29 100644
--- a/config/webhook/manifests.yaml
+++ b/config/webhook/manifests.yaml
@@ -1,14 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
diff --git a/docs/development.md b/docs/development.md
index 02b43cc..b4288f6 100644
--- a/docs/development.md
+++ b/docs/development.md
@@ -17,7 +17,8 @@
 
 # Development
 You should have kubeconfig setup to point to your cluster.
-In case you want to build the Airflow Operator from the source code, e.g., to test a fix or a feature you write, you can do so following the instructions below.
+In case you want to build the Airflow Operator from the source code, e.g.,
+to test a fix or a feature you write, you can do so following the instructions below.
 
 ## Cloning the repo:
 ```bash
@@ -26,6 +27,22 @@
 $ git clone git@github.com:apache/airflow-on-k8s-operator.git
 ```
 
+## Install kubebuilder
+You have to install the [kubebuilder](https://book.kubebuilder.io/quick-start.html):
+```shell script
+os=$(go env GOOS)
+arch=$(go env GOARCH)
+
+# download kubebuilder and extract it to tmp
+curl -L https://go.kubebuilder.io/dl/2.3.0/${os}/${arch} | tar -xz -C /tmp/
+
+# move to a long-term location and put it on your path
+# (you'll need to set the KUBEBUILDER_ASSETS env var if you put it somewhere else)
+sudo mv /tmp/kubebuilder_2.3.0_${os}_${arch} /usr/local/kubebuilder
+export PATH=$PATH:/usr/local/kubebuilder/bin
+```
+
+
 ## Building and running locally:
 ```bash
 # build
@@ -34,6 +51,7 @@
 # run locally
 make run
 ```
+
 ## Building docker image
 #### GCP
 When working with GCP ensure that gcloud is setup and gcr(container registry) is enabled for the current project.
diff --git a/yamllint-config.yaml b/yamllint-config.yaml
index bd85d17..8395ada 100644
--- a/yamllint-config.yaml
+++ b/yamllint-config.yaml
@@ -17,6 +17,11 @@
 ---
 extends: default
 
+ignore: |
+  /config/crd/bases/*
+  /config/rbac/role.yaml
+  /config/webhook/manifests.yaml
+
 rules:
   line-length:
     max: 200