Repository: crossplane-contrib/provider-helm
Pull request #71 (2020-11-30 13:57:27)

Bump APIs to v1beta1
<!--
Thank you for helping to improve Crossplane!

Please read through https://git.io/fj2m9 if this is your first time opening a
Crossplane pull request. Find us in https://slack.crossplane.io/messages/dev if
you need any help contributing.
-->

### Description of your changes

Bump `Release`, `ProviderConfig` and `ProviderConfigUsage` APIs to v1beta1

On top of PR #67  

I have:

- [x] Read and followed Crossplane's [contribution process].
- [x] Run `make reviewable test` to ensure this PR is ready for review.

### How has this code been tested

Following local testing instructions in README, created both `v1alpha1` and `v1beta1` resources and verified both works.

[contribution process]: https://git.io/fj2m9



Patch:
diff --git a/apis/helm.go b/apis/helm.go
index e16fa3a..03dad51 100644
--- a/apis/helm.go
+++ b/apis/helm.go
@@ -21,14 +21,18 @@ import (
 	"k8s.io/apimachinery/pkg/runtime"
 
 	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 	helmv1alpha1 "github.com/crossplane-contrib/provider-helm/apis/v1alpha1"
+	helmv1beta1 "github.com/crossplane-contrib/provider-helm/apis/v1beta1"
 )
 
 func init() {
 	// Register the types with the Scheme so the components can map objects to GroupVersionKinds and back
 	AddToSchemes = append(AddToSchemes,
 		helmv1alpha1.SchemeBuilder.AddToScheme,
+		helmv1beta1.SchemeBuilder.AddToScheme,
 		v1alpha1.SchemeBuilder.AddToScheme,
+		v1beta1.SchemeBuilder.AddToScheme,
 	)
 }
 
diff --git a/apis/release/v1beta1/doc.go b/apis/release/v1beta1/doc.go
new file mode 100644
index 0000000..e96098e
--- /dev/null
+++ b/apis/release/v1beta1/doc.go
@@ -0,0 +1,21 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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.
+*/
+
+// Package v1beta1 contains the v1beta1 group release resource of the Helm provider.
+// +kubebuilder:object:generate=true
+// +groupName=helm.crossplane.io
+// +versionName=v1beta1
+package v1beta1
diff --git a/apis/release/v1beta1/register.go b/apis/release/v1beta1/register.go
new file mode 100644
index 0000000..a00904d
--- /dev/null
+++ b/apis/release/v1beta1/register.go
@@ -0,0 +1,50 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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.
+*/
+
+package v1beta1
+
+import (
+	"reflect"
+
+	"k8s.io/apimachinery/pkg/runtime/schema"
+	"sigs.k8s.io/controller-runtime/pkg/scheme"
+)
+
+// Package type metadata.
+const (
+	Group   = "helm.crossplane.io"
+	Version = "v1beta1"
+)
+
+var (
+	// SchemeGroupVersion is group version used to register these objects
+	SchemeGroupVersion = schema.GroupVersion{Group: Group, Version: Version}
+
+	// SchemeBuilder is used to add go types to the GroupVersionKind scheme
+	SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
+)
+
+// Release type metadata.
+var (
+	ReleaseKind             = reflect.TypeOf(Release{}).Name()
+	ReleaseGroupKind        = schema.GroupKind{Group: Group, Kind: ReleaseKind}.String()
+	ReleaseKindAPIVersion   = ReleaseKind + "." + SchemeGroupVersion.String()
+	ReleaseGroupVersionKind = SchemeGroupVersion.WithKind(ReleaseKind)
+)
+
+func init() {
+	SchemeBuilder.Register(&Release{}, &ReleaseList{})
+}
diff --git a/apis/release/v1beta1/types.go b/apis/release/v1beta1/types.go
new file mode 100644
index 0000000..ea8d415
--- /dev/null
+++ b/apis/release/v1beta1/types.go
@@ -0,0 +1,131 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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.
+*/
+
+package v1beta1
+
+import (
+	"helm.sh/helm/v3/pkg/release"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	runtime "k8s.io/apimachinery/pkg/runtime"
+
+	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+)
+
+// A ChartSpec defines the chart spec for a Release
+type ChartSpec struct {
+	Repository    string                          `json:"repository"`
+	Name          string                          `json:"name"`
+	Version       string                          `json:"version"`
+	PullSecretRef runtimev1alpha1.SecretReference `json:"pullSecretRef,omitempty"`
+}
+
+// NamespacedName represents a namespaced object name
+type NamespacedName struct {
+	Namespace string `json:"namespace"`
+	Name      string `json:"name"`
+}
+
+// DataKeySelector defines required spec to access a key of a configmap or secret
+type DataKeySelector struct {
+	NamespacedName `json:",inline,omitempty"`
+	Key            string `json:"key,omitempty"`
+	Optional       bool   `json:"optional,omitempty"`
+}
+
+// ValueFromSource represents source of a value
+type ValueFromSource struct {
+	ConfigMapKeyRef *DataKeySelector `json:"configMapKeyRef,omitempty"`
+	SecretKeyRef    *DataKeySelector `json:"secretKeyRef,omitempty"`
+}
+
+// SetVal represents a "set" value override in a Release
+type SetVal struct {
+	Name      string           `json:"name"`
+	Value     string           `json:"value,omitempty"`
+	ValueFrom *ValueFromSource `json:"valueFrom,omitempty"`
+}
+
+// ValuesSpec defines the Helm value overrides spec for a Release
+type ValuesSpec struct {
+	// +kubebuilder:pruning:PreserveUnknownFields
+	Values     runtime.RawExtension `json:"values,omitempty"`
+	ValuesFrom []ValueFromSource    `json:"valuesFrom,omitempty"`
+	Set        []SetVal             `json:"set,omitempty"`
+}
+
+// ReleaseParameters are the configurable fields of a Release.
+type ReleaseParameters struct {
+	Chart       ChartSpec         `json:"chart"`
+	Namespace   string            `json:"namespace"`
+	Wait        bool              `json:"wait,omitempty"`
+	PatchesFrom []ValueFromSource `json:"patchesFrom,omitempty"`
+	ValuesSpec  `json:",inline"`
+}
+
+// ReleaseObservation are the observable fields of a Release.
+type ReleaseObservation struct {
+	State              release.Status `json:"state,omitempty"`
+	ReleaseDescription string         `json:"releaseDescription,omitempty"`
+	Revision           int            `json:"revision,omitempty"`
+}
+
+// A ReleaseSpec defines the desired state of a Release.
+type ReleaseSpec struct {
+	runtimev1alpha1.ResourceSpec `json:",inline"`
+	ForProvider                  ReleaseParameters `json:"forProvider"`
+	// RollbackRetriesLimit is max number of attempts to retry Helm deployment by rolling back the release.
+	RollbackRetriesLimit *int32 `json:"rollbackLimit,omitempty"`
+}
+
+// A ReleaseStatus represents the observed state of a Release.
+type ReleaseStatus struct {
+	runtimev1alpha1.ResourceStatus `json:",inline"`
+	AtProvider                     ReleaseObservation `json:"atProvider,omitempty"`
+	PatchesSha                     string             `json:"patchesSha,omitempty"`
+	Failed                         int32              `json:"failed,omitempty"`
+	Synced                         bool               `json:"synced,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+// +kubebuilder:storageversion
+
+// A Release is an example API type
+// +kubebuilder:subresource:status
+// +kubebuilder:printcolumn:name="CHART",type="string",JSONPath=".spec.forProvider.chart.name"
+// +kubebuilder:printcolumn:name="VERSION",type="string",JSONPath=".spec.forProvider.chart.version"
+// +kubebuilder:printcolumn:name="SYNCED",type="string",JSONPath=".status.conditions[?(@.type=='Synced')].status"
+// +kubebuilder:printcolumn:name="READY",type="string",JSONPath=".status.conditions[?(@.type=='Ready')].status"
+// +kubebuilder:printcolumn:name="STATE",type="string",JSONPath=".status.atProvider.state"
+// +kubebuilder:printcolumn:name="REVISION",type="string",JSONPath=".status.atProvider.revision"
+// +kubebuilder:printcolumn:name="DESCRIPTION",type="string",JSONPath=".status.atProvider.releaseDescription"
+// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp"
+// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,helm}
+type Release struct {
+	metav1.TypeMeta   `json:",inline"`
+	metav1.ObjectMeta `json:"metadata,omitempty"`
+
+	Spec   ReleaseSpec   `json:"spec"`
+	Status ReleaseStatus `json:"status,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+
+// ReleaseList contains a list of Release
+type ReleaseList struct {
+	metav1.TypeMeta `json:",inline"`
+	metav1.ListMeta `json:"metadata,omitempty"`
+	Items           []Release `json:"items"`
+}
diff --git a/apis/release/v1beta1/zz_generated.deepcopy.go b/apis/release/v1beta1/zz_generated.deepcopy.go
new file mode 100644
index 0000000..1a3bbbc
--- /dev/null
+++ b/apis/release/v1beta1/zz_generated.deepcopy.go
@@ -0,0 +1,284 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 v1beta1
+
+import (
+	"k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ChartSpec) DeepCopyInto(out *ChartSpec) {
+	*out = *in
+	out.PullSecretRef = in.PullSecretRef
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpec.
+func (in *ChartSpec) DeepCopy() *ChartSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(ChartSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *DataKeySelector) DeepCopyInto(out *DataKeySelector) {
+	*out = *in
+	out.NamespacedName = in.NamespacedName
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataKeySelector.
+func (in *DataKeySelector) DeepCopy() *DataKeySelector {
+	if in == nil {
+		return nil
+	}
+	out := new(DataKeySelector)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *NamespacedName) DeepCopyInto(out *NamespacedName) {
+	*out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespacedName.
+func (in *NamespacedName) DeepCopy() *NamespacedName {
+	if in == nil {
+		return nil
+	}
+	out := new(NamespacedName)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Release) DeepCopyInto(out *Release) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Release.
+func (in *Release) DeepCopy() *Release {
+	if in == nil {
+		return nil
+	}
+	out := new(Release)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *Release) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ReleaseList) DeepCopyInto(out *ReleaseList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]Release, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseList.
+func (in *ReleaseList) DeepCopy() *ReleaseList {
+	if in == nil {
+		return nil
+	}
+	out := new(ReleaseList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ReleaseList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ReleaseObservation) DeepCopyInto(out *ReleaseObservation) {
+	*out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseObservation.
+func (in *ReleaseObservation) DeepCopy() *ReleaseObservation {
+	if in == nil {
+		return nil
+	}
+	out := new(ReleaseObservation)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ReleaseParameters) DeepCopyInto(out *ReleaseParameters) {
+	*out = *in
+	out.Chart = in.Chart
+	if in.PatchesFrom != nil {
+		in, out := &in.PatchesFrom, &out.PatchesFrom
+		*out = make([]ValueFromSource, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	in.ValuesSpec.DeepCopyInto(&out.ValuesSpec)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseParameters.
+func (in *ReleaseParameters) DeepCopy() *ReleaseParameters {
+	if in == nil {
+		return nil
+	}
+	out := new(ReleaseParameters)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ReleaseSpec) DeepCopyInto(out *ReleaseSpec) {
+	*out = *in
+	in.ResourceSpec.DeepCopyInto(&out.ResourceSpec)
+	in.ForProvider.DeepCopyInto(&out.ForProvider)
+	if in.RollbackRetriesLimit != nil {
+		in, out := &in.RollbackRetriesLimit, &out.RollbackRetriesLimit
+		*out = new(int32)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseSpec.
+func (in *ReleaseSpec) DeepCopy() *ReleaseSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(ReleaseSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ReleaseStatus) DeepCopyInto(out *ReleaseStatus) {
+	*out = *in
+	in.ResourceStatus.DeepCopyInto(&out.ResourceStatus)
+	out.AtProvider = in.AtProvider
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReleaseStatus.
+func (in *ReleaseStatus) DeepCopy() *ReleaseStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(ReleaseStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *SetVal) DeepCopyInto(out *SetVal) {
+	*out = *in
+	if in.ValueFrom != nil {
+		in, out := &in.ValueFrom, &out.ValueFrom
+		*out = new(ValueFromSource)
+		(*in).DeepCopyInto(*out)
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SetVal.
+func (in *SetVal) DeepCopy() *SetVal {
+	if in == nil {
+		return nil
+	}
+	out := new(SetVal)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ValueFromSource) DeepCopyInto(out *ValueFromSource) {
+	*out = *in
+	if in.ConfigMapKeyRef != nil {
+		in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef
+		*out = new(DataKeySelector)
+		**out = **in
+	}
+	if in.SecretKeyRef != nil {
+		in, out := &in.SecretKeyRef, &out.SecretKeyRef
+		*out = new(DataKeySelector)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValueFromSource.
+func (in *ValueFromSource) DeepCopy() *ValueFromSource {
+	if in == nil {
+		return nil
+	}
+	out := new(ValueFromSource)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ValuesSpec) DeepCopyInto(out *ValuesSpec) {
+	*out = *in
+	in.Values.DeepCopyInto(&out.Values)
+	if in.ValuesFrom != nil {
+		in, out := &in.ValuesFrom, &out.ValuesFrom
+		*out = make([]ValueFromSource, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+	if in.Set != nil {
+		in, out := &in.Set, &out.Set
+		*out = make([]SetVal, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValuesSpec.
+func (in *ValuesSpec) DeepCopy() *ValuesSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(ValuesSpec)
+	in.DeepCopyInto(out)
+	return out
+}
diff --git a/apis/release/v1beta1/zz_generated.managed.go b/apis/release/v1beta1/zz_generated.managed.go
new file mode 100644
index 0000000..b1f423a
--- /dev/null
+++ b/apis/release/v1beta1/zz_generated.managed.go
@@ -0,0 +1,76 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 angryjet. DO NOT EDIT.
+
+package v1beta1
+
+import runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+
+// GetCondition of this Release.
+func (mg *Release) GetCondition(ct runtimev1alpha1.ConditionType) runtimev1alpha1.Condition {
+	return mg.Status.GetCondition(ct)
+}
+
+// GetDeletionPolicy of this Release.
+func (mg *Release) GetDeletionPolicy() runtimev1alpha1.DeletionPolicy {
+	return mg.Spec.DeletionPolicy
+}
+
+// GetProviderConfigReference of this Release.
+func (mg *Release) GetProviderConfigReference() *runtimev1alpha1.Reference {
+	return mg.Spec.ProviderConfigReference
+}
+
+/*
+GetProviderReference of this Release.
+Deprecated: Use GetProviderConfigReference.
+*/
+func (mg *Release) GetProviderReference() *runtimev1alpha1.Reference {
+	return mg.Spec.ProviderReference
+}
+
+// GetWriteConnectionSecretToReference of this Release.
+func (mg *Release) GetWriteConnectionSecretToReference() *runtimev1alpha1.SecretReference {
+	return mg.Spec.WriteConnectionSecretToReference
+}
+
+// SetConditions of this Release.
+func (mg *Release) SetConditions(c ...runtimev1alpha1.Condition) {
+	mg.Status.SetConditions(c...)
+}
+
+// SetDeletionPolicy of this Release.
+func (mg *Release) SetDeletionPolicy(r runtimev1alpha1.DeletionPolicy) {
+	mg.Spec.DeletionPolicy = r
+}
+
+// SetProviderConfigReference of this Release.
+func (mg *Release) SetProviderConfigReference(r *runtimev1alpha1.Reference) {
+	mg.Spec.ProviderConfigReference = r
+}
+
+/*
+SetProviderReference of this Release.
+Deprecated: Use SetProviderConfigReference.
+*/
+func (mg *Release) SetProviderReference(r *runtimev1alpha1.Reference) {
+	mg.Spec.ProviderReference = r
+}
+
+// SetWriteConnectionSecretToReference of this Release.
+func (mg *Release) SetWriteConnectionSecretToReference(r *runtimev1alpha1.SecretReference) {
+	mg.Spec.WriteConnectionSecretToReference = r
+}
diff --git a/apis/release/v1beta1/zz_generated.managedlist.go b/apis/release/v1beta1/zz_generated.managedlist.go
new file mode 100644
index 0000000..2ffcc2f
--- /dev/null
+++ b/apis/release/v1beta1/zz_generated.managedlist.go
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 angryjet. DO NOT EDIT.
+
+package v1beta1
+
+import resource "github.com/crossplane/crossplane-runtime/pkg/resource"
+
+// GetItems of this ReleaseList.
+func (l *ReleaseList) GetItems() []resource.Managed {
+	items := make([]resource.Managed, len(l.Items))
+	for i := range l.Items {
+		items[i] = &l.Items[i]
+	}
+	return items
+}
diff --git a/apis/v1alpha1/types.go b/apis/v1alpha1/types.go
index a02d10c..f3d5534 100644
--- a/apis/v1alpha1/types.go
+++ b/apis/v1alpha1/types.go
@@ -19,7 +19,6 @@ package v1alpha1
 import (
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 
-	"github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
 	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
 )
 
@@ -69,7 +68,7 @@ type ProviderConfigUsage struct {
 	metav1.TypeMeta   `json:",inline"`
 	metav1.ObjectMeta `json:"metadata,omitempty"`
 
-	v1alpha1.ProviderConfigUsage `json:",inline"`
+	runtimev1alpha1.ProviderConfigUsage `json:",inline"`
 }
 
 // +kubebuilder:object:root=true
diff --git a/apis/v1beta1/doc.go b/apis/v1beta1/doc.go
new file mode 100644
index 0000000..0b77af7
--- /dev/null
+++ b/apis/v1beta1/doc.go
@@ -0,0 +1,21 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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.
+*/
+
+// Package v1beta1 contains the core resources of the Helm provider.
+// +kubebuilder:object:generate=true
+// +groupName=helm.crossplane.io
+// +versionName=v1beta1
+package v1beta1
diff --git a/apis/v1beta1/register.go b/apis/v1beta1/register.go
new file mode 100644
index 0000000..2edb04c
--- /dev/null
+++ b/apis/v1beta1/register.go
@@ -0,0 +1,64 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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.
+*/
+
+package v1beta1
+
+import (
+	"reflect"
+
+	"k8s.io/apimachinery/pkg/runtime/schema"
+	"sigs.k8s.io/controller-runtime/pkg/scheme"
+)
+
+// Package type metadata.
+const (
+	Group   = "helm.crossplane.io"
+	Version = "v1beta1"
+)
+
+var (
+	// SchemeGroupVersion is group version used to register these objects
+	SchemeGroupVersion = schema.GroupVersion{Group: Group, Version: Version}
+
+	// SchemeBuilder is used to add go types to the GroupVersionKind scheme
+	SchemeBuilder = &scheme.Builder{GroupVersion: SchemeGroupVersion}
+)
+
+// ProviderConfig type metadata.
+var (
+	ProviderConfigKind             = reflect.TypeOf(ProviderConfig{}).Name()
+	ProviderConfigGroupKind        = schema.GroupKind{Group: Group, Kind: ProviderConfigKind}.String()
+	ProviderConfigKindAPIVersion   = ProviderConfigKind + "." + SchemeGroupVersion.String()
+	ProviderConfigGroupVersionKind = SchemeGroupVersion.WithKind(ProviderConfigKind)
+)
+
+// ProviderConfigUsage type metadata.
+var (
+	ProviderConfigUsageKind             = reflect.TypeOf(ProviderConfigUsage{}).Name()
+	ProviderConfigUsageGroupKind        = schema.GroupKind{Group: Group, Kind: ProviderConfigUsageKind}.String()
+	ProviderConfigUsageKindAPIVersion   = ProviderConfigUsageKind + "." + SchemeGroupVersion.String()
+	ProviderConfigUsageGroupVersionKind = SchemeGroupVersion.WithKind(ProviderConfigUsageKind)
+
+	ProviderConfigUsageListKind             = reflect.TypeOf(ProviderConfigUsageList{}).Name()
+	ProviderConfigUsageListGroupKind        = schema.GroupKind{Group: Group, Kind: ProviderConfigUsageListKind}.String()
+	ProviderConfigUsageListKindAPIVersion   = ProviderConfigUsageListKind + "." + SchemeGroupVersion.String()
+	ProviderConfigUsageListGroupVersionKind = SchemeGroupVersion.WithKind(ProviderConfigUsageListKind)
+)
+
+func init() {
+	SchemeBuilder.Register(&ProviderConfig{}, &ProviderConfigList{})
+	SchemeBuilder.Register(&ProviderConfigUsage{}, &ProviderConfigUsageList{})
+}
diff --git a/apis/v1beta1/types.go b/apis/v1beta1/types.go
new file mode 100644
index 0000000..82773d1
--- /dev/null
+++ b/apis/v1beta1/types.go
@@ -0,0 +1,83 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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.
+*/
+
+package v1beta1
+
+import (
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+
+	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+)
+
+// A ProviderConfigSpec defines the desired state of a Provider.
+type ProviderConfigSpec struct {
+	runtimev1alpha1.ProviderConfigSpec `json:",inline"`
+}
+
+// A ProviderConfigStatus defines the status of a Provider.
+type ProviderConfigStatus struct {
+	runtimev1alpha1.ProviderConfigStatus `json:",inline"`
+}
+
+// +kubebuilder:object:root=true
+// +kubebuilder:storageversion
+
+// A ProviderConfig configures a Helm 'provider', i.e. a connection to a particular
+// +kubebuilder:subresource:status
+// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp"
+// +kubebuilder:printcolumn:name="SECRET-NAME",type="string",JSONPath=".spec.credentialsSecretRef.name",priority=1
+// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,helm}
+type ProviderConfig struct {
+	metav1.TypeMeta   `json:",inline"`
+	metav1.ObjectMeta `json:"metadata,omitempty"`
+
+	Spec   ProviderConfigSpec   `json:"spec"`
+	Status ProviderConfigStatus `json:"status,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+
+// ProviderConfigList contains a list of Provider
+type ProviderConfigList struct {
+	metav1.TypeMeta `json:",inline"`
+	metav1.ListMeta `json:"metadata,omitempty"`
+	Items           []ProviderConfig `json:"items"`
+}
+
+// +kubebuilder:object:root=true
+// +kubebuilder:storageversion
+
+// A ProviderConfigUsage indicates that a resource is using a ProviderConfig.
+// +kubebuilder:printcolumn:name="AGE",type="date",JSONPath=".metadata.creationTimestamp"
+// +kubebuilder:printcolumn:name="CONFIG-NAME",type="string",JSONPath=".providerConfigRef.name"
+// +kubebuilder:printcolumn:name="RESOURCE-KIND",type="string",JSONPath=".resourceRef.kind"
+// +kubebuilder:printcolumn:name="RESOURCE-NAME",type="string",JSONPath=".resourceRef.name"
+// +kubebuilder:resource:scope=Cluster,categories={crossplane,provider,helm}
+type ProviderConfigUsage struct {
+	metav1.TypeMeta   `json:",inline"`
+	metav1.ObjectMeta `json:"metadata,omitempty"`
+
+	runtimev1alpha1.ProviderConfigUsage `json:",inline"`
+}
+
+// +kubebuilder:object:root=true
+
+// ProviderConfigUsageList contains a list of ProviderConfigUsage
+type ProviderConfigUsageList struct {
+	metav1.TypeMeta `json:",inline"`
+	metav1.ListMeta `json:"metadata,omitempty"`
+	Items           []ProviderConfigUsage `json:"items"`
+}
diff --git a/apis/v1beta1/zz_generated.deepcopy.go b/apis/v1beta1/zz_generated.deepcopy.go
new file mode 100644
index 0000000..eeb6b92
--- /dev/null
+++ b/apis/v1beta1/zz_generated.deepcopy.go
@@ -0,0 +1,174 @@
+// +build !ignore_autogenerated
+
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 v1beta1
+
+import (
+	runtime "k8s.io/apimachinery/pkg/runtime"
+)
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProviderConfig) DeepCopyInto(out *ProviderConfig) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	in.Spec.DeepCopyInto(&out.Spec)
+	in.Status.DeepCopyInto(&out.Status)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfig.
+func (in *ProviderConfig) DeepCopy() *ProviderConfig {
+	if in == nil {
+		return nil
+	}
+	out := new(ProviderConfig)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ProviderConfig) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProviderConfigList) DeepCopyInto(out *ProviderConfigList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ProviderConfig, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigList.
+func (in *ProviderConfigList) DeepCopy() *ProviderConfigList {
+	if in == nil {
+		return nil
+	}
+	out := new(ProviderConfigList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ProviderConfigList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProviderConfigSpec) DeepCopyInto(out *ProviderConfigSpec) {
+	*out = *in
+	in.ProviderConfigSpec.DeepCopyInto(&out.ProviderConfigSpec)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigSpec.
+func (in *ProviderConfigSpec) DeepCopy() *ProviderConfigSpec {
+	if in == nil {
+		return nil
+	}
+	out := new(ProviderConfigSpec)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProviderConfigStatus) DeepCopyInto(out *ProviderConfigStatus) {
+	*out = *in
+	in.ProviderConfigStatus.DeepCopyInto(&out.ProviderConfigStatus)
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigStatus.
+func (in *ProviderConfigStatus) DeepCopy() *ProviderConfigStatus {
+	if in == nil {
+		return nil
+	}
+	out := new(ProviderConfigStatus)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProviderConfigUsage) DeepCopyInto(out *ProviderConfigUsage) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+	out.ProviderConfigUsage = in.ProviderConfigUsage
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigUsage.
+func (in *ProviderConfigUsage) DeepCopy() *ProviderConfigUsage {
+	if in == nil {
+		return nil
+	}
+	out := new(ProviderConfigUsage)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ProviderConfigUsage) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ProviderConfigUsageList) DeepCopyInto(out *ProviderConfigUsageList) {
+	*out = *in
+	out.TypeMeta = in.TypeMeta
+	in.ListMeta.DeepCopyInto(&out.ListMeta)
+	if in.Items != nil {
+		in, out := &in.Items, &out.Items
+		*out = make([]ProviderConfigUsage, len(*in))
+		for i := range *in {
+			(*in)[i].DeepCopyInto(&(*out)[i])
+		}
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProviderConfigUsageList.
+func (in *ProviderConfigUsageList) DeepCopy() *ProviderConfigUsageList {
+	if in == nil {
+		return nil
+	}
+	out := new(ProviderConfigUsageList)
+	in.DeepCopyInto(out)
+	return out
+}
+
+// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
+func (in *ProviderConfigUsageList) DeepCopyObject() runtime.Object {
+	if c := in.DeepCopy(); c != nil {
+		return c
+	}
+	return nil
+}
diff --git a/apis/v1beta1/zz_generated.pc.go b/apis/v1beta1/zz_generated.pc.go
new file mode 100644
index 0000000..66008af
--- /dev/null
+++ b/apis/v1beta1/zz_generated.pc.go
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 angryjet. DO NOT EDIT.
+
+package v1beta1
+
+import runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+
+// GetCondition of this ProviderConfig.
+func (p *ProviderConfig) GetCondition(ct runtimev1alpha1.ConditionType) runtimev1alpha1.Condition {
+	return p.Status.GetCondition(ct)
+}
+
+// GetUsers of this ProviderConfig.
+func (p *ProviderConfig) GetUsers() int64 {
+	return p.Status.Users
+}
+
+// SetConditions of this ProviderConfig.
+func (p *ProviderConfig) SetConditions(c ...runtimev1alpha1.Condition) {
+	p.Status.SetConditions(c...)
+}
+
+// SetUsers of this ProviderConfig.
+func (p *ProviderConfig) SetUsers(i int64) {
+	p.Status.Users = i
+}
diff --git a/apis/v1beta1/zz_generated.pcu.go b/apis/v1beta1/zz_generated.pcu.go
new file mode 100644
index 0000000..e9fd7d7
--- /dev/null
+++ b/apis/v1beta1/zz_generated.pcu.go
@@ -0,0 +1,40 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 angryjet. DO NOT EDIT.
+
+package v1beta1
+
+import runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+
+// GetProviderConfigReference of this ProviderConfigUsage.
+func (p *ProviderConfigUsage) GetProviderConfigReference() runtimev1alpha1.Reference {
+	return p.ProviderConfigReference
+}
+
+// GetResourceReference of this ProviderConfigUsage.
+func (p *ProviderConfigUsage) GetResourceReference() runtimev1alpha1.TypedReference {
+	return p.ResourceReference
+}
+
+// SetProviderConfigReference of this ProviderConfigUsage.
+func (p *ProviderConfigUsage) SetProviderConfigReference(r runtimev1alpha1.Reference) {
+	p.ProviderConfigReference = r
+}
+
+// SetResourceReference of this ProviderConfigUsage.
+func (p *ProviderConfigUsage) SetResourceReference(r runtimev1alpha1.TypedReference) {
+	p.ResourceReference = r
+}
diff --git a/apis/v1beta1/zz_generated.pculist.go b/apis/v1beta1/zz_generated.pculist.go
new file mode 100644
index 0000000..d36470b
--- /dev/null
+++ b/apis/v1beta1/zz_generated.pculist.go
@@ -0,0 +1,29 @@
+/*
+Copyright 2020 The Crossplane Authors.
+
+Licensed 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 angryjet. DO NOT EDIT.
+
+package v1beta1
+
+import resource "github.com/crossplane/crossplane-runtime/pkg/resource"
+
+// GetItems of this ProviderConfigUsageList.
+func (p *ProviderConfigUsageList) GetItems() []resource.ProviderConfigUsage {
+	items := make([]resource.ProviderConfigUsage, len(p.Items))
+	for i := range p.Items {
+		items[i] = &p.Items[i]
+	}
+	return items
+}
diff --git a/examples/in-composition/composition.yaml b/examples/in-composition/composition.yaml
index b7b4fb5..b4bf880 100644
--- a/examples/in-composition/composition.yaml
+++ b/examples/in-composition/composition.yaml
@@ -144,7 +144,7 @@ spec:
         - fromFieldPath: "spec.parameters.storageGB"
           toFieldPath: "spec.forProvider.settings.dataDiskSizeGb"
     - base:
-        apiVersion: helm.crossplane.io/v1alpha1
+        apiVersion: helm.crossplane.io/v1beta1
         kind: ProviderConfig
         spec:
           credentials:
@@ -166,7 +166,7 @@ spec:
       readinessChecks:
         - type: None
     - base:
-        apiVersion: helm.crossplane.io/v1alpha1
+        apiVersion: helm.crossplane.io/v1beta1
         kind: Release
         metadata:
           annotations: 
diff --git a/examples/provider-config/provider-config-incluster.yaml b/examples/provider-config/provider-config-incluster.yaml
index e69c473..f49d686 100644
--- a/examples/provider-config/provider-config-incluster.yaml
+++ b/examples/provider-config/provider-config-incluster.yaml
@@ -3,7 +3,7 @@
 # You can give admin permissions by running:
 # SA=$(kubectl -n crossplane-system get sa -o name | grep provider-helm | sed -e 's|serviceaccount\/|crossplane-system:|g')
 # kubectl create clusterrolebinding provider-helm-admin-binding --clusterrole cluster-admin --serviceaccount="${SA}"
-apiVersion: helm.crossplane.io/v1alpha1
+apiVersion: helm.crossplane.io/v1beta1
 kind: ProviderConfig
 metadata:
   name: helm-provider
diff --git a/examples/provider-config/provider-config-with-secret.yaml b/examples/provider-config/provider-config-with-secret.yaml
index 1eb0977..0e20641 100644
--- a/examples/provider-config/provider-config-with-secret.yaml
+++ b/examples/provider-config/provider-config-with-secret.yaml
@@ -1,4 +1,4 @@
-apiVersion: helm.crossplane.io/v1alpha1
+apiVersion: helm.crossplane.io/v1beta1
 kind: ProviderConfig
 metadata:
   name: helm-provider
diff --git a/examples/sample/release-with-patch.yaml b/examples/sample/release-with-patch.yaml
index 78a4db6..5280866 100644
--- a/examples/sample/release-with-patch.yaml
+++ b/examples/sample/release-with-patch.yaml
@@ -20,7 +20,7 @@ data:
         target:
           kind: Deployment
 ---
-apiVersion: helm.crossplane.io/v1alpha1
+apiVersion: helm.crossplane.io/v1beta1
 kind: Release
 metadata:
   name: wordpress-example-patched
@@ -44,5 +44,5 @@ spec:
           namespace: wordpress
           optional: false
   providerRef:
-    name: local-provider
+    name: helm-provider
 
diff --git a/examples/sample/release.yaml b/examples/sample/release.yaml
index 780ece1..a670e35 100644
--- a/examples/sample/release.yaml
+++ b/examples/sample/release.yaml
@@ -1,4 +1,4 @@
-apiVersion: helm.crossplane.io/v1alpha1
+apiVersion: helm.crossplane.io/v1beta1
 kind: Release
 metadata:
   name: wordpress-example
diff --git a/go.mod b/go.mod
index e2bdeb5..ee7e354 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/crossplane-contrib/provider-helm
 go 1.13
 
 require (
-	github.com/crossplane/crossplane-runtime v0.10.0
+	github.com/crossplane/crossplane-runtime v0.11.0
 	github.com/crossplane/crossplane-tools v0.0.0-20201007233256-88b291e145bb
 	github.com/go-logr/zapr v0.1.1 // indirect
 	github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6 // indirect
diff --git a/go.sum b/go.sum
index a4c9b2e..87548d5 100644
--- a/go.sum
+++ b/go.sum
@@ -137,8 +137,8 @@ github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfc
 github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
 github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
-github.com/crossplane/crossplane-runtime v0.10.0 h1:H8YvMcrm1uzZYpwU/BpxjRQfceVulxgYJMx4rmX38Hg=
-github.com/crossplane/crossplane-runtime v0.10.0/go.mod h1:cJl5ZZONisre4v6wTmbrC8Jh3AI+erq/lNaxZzv9tnU=
+github.com/crossplane/crossplane-runtime v0.11.0 h1:hLDWsGYhU/CUVQ1sU7NHF5bnP6WT6wA6Nu2SaBSSe6w=
+github.com/crossplane/crossplane-runtime v0.11.0/go.mod h1:cJl5ZZONisre4v6wTmbrC8Jh3AI+erq/lNaxZzv9tnU=
 github.com/crossplane/crossplane-tools v0.0.0-20201007233256-88b291e145bb h1:j09j/Gk1qH64HUtf/fcTjMAxLxUdOuQXySWu46WTVTU=
 github.com/crossplane/crossplane-tools v0.0.0-20201007233256-88b291e145bb/go.mod h1:C735A9X0x0lR8iGVOOxb49Mt70Ua4EM2b7PGaRPBLd4=
 github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg=
diff --git a/package/crds/helm.crossplane.io_providerconfigs.yaml b/package/crds/helm.crossplane.io_providerconfigs.yaml
index 920c92e..46db82d 100644
--- a/package/crds/helm.crossplane.io_providerconfigs.yaml
+++ b/package/crds/helm.crossplane.io_providerconfigs.yaml
@@ -115,6 +115,106 @@ spec:
         - spec
         type: object
     served: true
+    storage: false
+    subresources:
+      status: {}
+  - additionalPrinterColumns:
+    - jsonPath: .metadata.creationTimestamp
+      name: AGE
+      type: date
+    - jsonPath: .spec.credentialsSecretRef.name
+      name: SECRET-NAME
+      priority: 1
+      type: string
+    name: v1beta1
+    schema:
+      openAPIV3Schema:
+        description: A ProviderConfig configures a Helm 'provider', i.e. a connection to a particular
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: A ProviderConfigSpec defines the desired state of a Provider.
+            properties:
+              credentials:
+                description: Credentials required to authenticate to this provider.
+                properties:
+                  secretRef:
+                    description: A CredentialsSecretRef is a reference to a secret key that contains the credentials that must be used to connect to the provider.
+                    properties:
+                      key:
+                        description: The key to select.
+                        type: string
+                      name:
+                        description: Name of the secret.
+                        type: string
+                      namespace:
+                        description: Namespace of the secret.
+                        type: string
+                    required:
+                    - key
+                    - name
+                    - namespace
+                    type: object
+                  source:
+                    description: Source of the provider credentials.
+                    enum:
+                    - None
+                    - Secret
+                    - InjectedIdentity
+                    type: string
+                required:
+                - source
+                type: object
+            required:
+            - credentials
+            type: object
+          status:
+            description: A ProviderConfigStatus defines the status of a Provider.
+            properties:
+              conditions:
+                description: Conditions of the resource.
+                items:
+                  description: A Condition that may apply to a resource.
+                  properties:
+                    lastTransitionTime:
+                      description: LastTransitionTime is the last time this condition transitioned from one status to another.
+                      format: date-time
+                      type: string
+                    message:
+                      description: A Message containing details about this condition's last transition from one status to another, if any.
+                      type: string
+                    reason:
+                      description: A Reason for this condition's last transition from one status to another.
+                      type: string
+                    status:
+                      description: Status of this condition; is it currently True, False, or Unknown?
+                      type: string
+                    type:
+                      description: Type of this condition. At most one of each condition type may apply to a resource at any point in time.
+                      type: string
+                  required:
+                  - lastTransitionTime
+                  - reason
+                  - status
+                  - type
+                  type: object
+                type: array
+              users:
+                description: Users of this provider configuration.
+                format: int64
+                type: integer
+            type: object
+        required:
+        - spec
+        type: object
+    served: true
     storage: true
     subresources:
       status: {}
diff --git a/package/crds/helm.crossplane.io_providerconfigusages.yaml b/package/crds/helm.crossplane.io_providerconfigusages.yaml
index d1e18a3..a6b81c3 100644
--- a/package/crds/helm.crossplane.io_providerconfigusages.yaml
+++ b/package/crds/helm.crossplane.io_providerconfigusages.yaml
@@ -78,6 +78,68 @@ spec:
         - resourceRef
         type: object
     served: true
+    storage: false
+    subresources: {}
+  - additionalPrinterColumns:
+    - jsonPath: .metadata.creationTimestamp
+      name: AGE
+      type: date
+    - jsonPath: .providerConfigRef.name
+      name: CONFIG-NAME
+      type: string
+    - jsonPath: .resourceRef.kind
+      name: RESOURCE-KIND
+      type: string
+    - jsonPath: .resourceRef.name
+      name: RESOURCE-NAME
+      type: string
+    name: v1beta1
+    schema:
+      openAPIV3Schema:
+        description: A ProviderConfigUsage indicates that a resource is using a ProviderConfig.
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          providerConfigRef:
+            description: ProviderConfigReference to the provider config being used.
+            properties:
+              name:
+                description: Name of the referenced object.
+                type: string
+            required:
+            - name
+            type: object
+          resourceRef:
+            description: ResourceReference to the managed resource using the provider config.
+            properties:
+              apiVersion:
+                description: APIVersion of the referenced object.
+                type: string
+              kind:
+                description: Kind of the referenced object.
+                type: string
+              name:
+                description: Name of the referenced object.
+                type: string
+              uid:
+                description: UID of the referenced object.
+                type: string
+            required:
+            - apiVersion
+            - kind
+            - name
+            type: object
+        required:
+        - providerConfigRef
+        - resourceRef
+        type: object
+    served: true
     storage: true
     subresources: {}
 status:
diff --git a/package/crds/helm.crossplane.io_releases.yaml b/package/crds/helm.crossplane.io_releases.yaml
index 31ba407..6418e15 100644
--- a/package/crds/helm.crossplane.io_releases.yaml
+++ b/package/crds/helm.crossplane.io_releases.yaml
@@ -316,6 +316,307 @@ spec:
         - spec
         type: object
     served: true
+    storage: false
+    subresources:
+      status: {}
+  - additionalPrinterColumns:
+    - jsonPath: .spec.forProvider.chart.name
+      name: CHART
+      type: string
+    - jsonPath: .spec.forProvider.chart.version
+      name: VERSION
+      type: string
+    - jsonPath: .status.conditions[?(@.type=='Synced')].status
+      name: SYNCED
+      type: string
+    - jsonPath: .status.conditions[?(@.type=='Ready')].status
+      name: READY
+      type: string
+    - jsonPath: .status.atProvider.state
+      name: STATE
+      type: string
+    - jsonPath: .status.atProvider.revision
+      name: REVISION
+      type: string
+    - jsonPath: .status.atProvider.releaseDescription
+      name: DESCRIPTION
+      type: string
+    - jsonPath: .metadata.creationTimestamp
+      name: AGE
+      type: date
+    name: v1beta1
+    schema:
+      openAPIV3Schema:
+        description: A Release is an example API type
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: A ReleaseSpec defines the desired state of a Release.
+            properties:
+              deletionPolicy:
+                description: DeletionPolicy specifies what will happen to the underlying external when this managed resource is deleted - either "Delete" or "Orphan" the external resource. The "Delete" policy is the default when no policy is specified.
+                enum:
+                - Orphan
+                - Delete
+                type: string
+              forProvider:
+                description: ReleaseParameters are the configurable fields of a Release.
+                properties:
+                  chart:
+                    description: A ChartSpec defines the chart spec for a Release
+                    properties:
+                      name:
+                        type: string
+                      pullSecretRef:
+                        description: A SecretReference is a reference to a secret in an arbitrary namespace.
+                        properties:
+                          name:
+                            description: Name of the secret.
+                            type: string
+                          namespace:
+                            description: Namespace of the secret.
+                            type: string
+                        required:
+                        - name
+                        - namespace
+                        type: object
+                      repository:
+                        type: string
+                      version:
+                        type: string
+                    required:
+                    - name
+                    - repository
+                    - version
+                    type: object
+                  namespace:
+                    type: string
+                  patchesFrom:
+                    items:
+                      description: ValueFromSource represents source of a value
+                      properties:
+                        configMapKeyRef:
+                          description: DataKeySelector defines required spec to access a key of a configmap or secret
+                          properties:
+                            key:
+                              type: string
+                            name:
+                              type: string
+                            namespace:
+                              type: string
+                            optional:
+                              type: boolean
+                          required:
+                          - name
+                          - namespace
+                          type: object
+                        secretKeyRef:
+                          description: DataKeySelector defines required spec to access a key of a configmap or secret
+                          properties:
+                            key:
+                              type: string
+                            name:
+                              type: string
+                            namespace:
+                              type: string
+                            optional:
+                              type: boolean
+                          required:
+                          - name
+                          - namespace
+                          type: object
+                      type: object
+                    type: array
+                  set:
+                    items:
+                      description: SetVal represents a "set" value override in a Release
+                      properties:
+                        name:
+                          type: string
+                        value:
+                          type: string
+                        valueFrom:
+                          description: ValueFromSource represents source of a value
+                          properties:
+                            configMapKeyRef:
+                              description: DataKeySelector defines required spec to access a key of a configmap or secret
+                              properties:
+                                key:
+                                  type: string
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                                optional:
+                                  type: boolean
+                              required:
+                              - name
+                              - namespace
+                              type: object
+                            secretKeyRef:
+                              description: DataKeySelector defines required spec to access a key of a configmap or secret
+                              properties:
+                                key:
+                                  type: string
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                                optional:
+                                  type: boolean
+                              required:
+                              - name
+                              - namespace
+                              type: object
+                          type: object
+                      required:
+                      - name
+                      type: object
+                    type: array
+                  values:
+                    type: object
+                    x-kubernetes-preserve-unknown-fields: true
+                  valuesFrom:
+                    items:
+                      description: ValueFromSource represents source of a value
+                      properties:
+                        configMapKeyRef:
+                          description: DataKeySelector defines required spec to access a key of a configmap or secret
+                          properties:
+                            key:
+                              type: string
+                            name:
+                              type: string
+                            namespace:
+                              type: string
+                            optional:
+                              type: boolean
+                          required:
+                          - name
+                          - namespace
+                          type: object
+                        secretKeyRef:
+                          description: DataKeySelector defines required spec to access a key of a configmap or secret
+                          properties:
+                            key:
+                              type: string
+                            name:
+                              type: string
+                            namespace:
+                              type: string
+                            optional:
+                              type: boolean
+                          required:
+                          - name
+                          - namespace
+                          type: object
+                      type: object
+                    type: array
+                  wait:
+                    type: boolean
+                required:
+                - chart
+                - namespace
+                type: object
+              providerConfigRef:
+                description: ProviderConfigReference specifies how the provider that will be used to create, observe, update, and delete this managed resource should be configured.
+                properties:
+                  name:
+                    description: Name of the referenced object.
+                    type: string
+                required:
+                - name
+                type: object
+              providerRef:
+                description: 'ProviderReference specifies the provider that will be used to create, observe, update, and delete this managed resource. Deprecated: Please use ProviderConfigReference, i.e. `providerConfigRef`'
+                properties:
+                  name:
+                    description: Name of the referenced object.
+                    type: string
+                required:
+                - name
+                type: object
+              rollbackLimit:
+                description: RollbackRetriesLimit is max number of attempts to retry Helm deployment by rolling back the release.
+                format: int32
+                type: integer
+              writeConnectionSecretToRef:
+                description: WriteConnectionSecretToReference specifies the namespace and name of a Secret to which any connection details for this managed resource should be written. Connection details frequently include the endpoint, username, and password required to connect to the managed resource.
+                properties:
+                  name:
+                    description: Name of the secret.
+                    type: string
+                  namespace:
+                    description: Namespace of the secret.
+                    type: string
+                required:
+                - name
+                - namespace
+                type: object
+            required:
+            - forProvider
+            type: object
+          status:
+            description: A ReleaseStatus represents the observed state of a Release.
+            properties:
+              atProvider:
+                description: ReleaseObservation are the observable fields of a Release.
+                properties:
+                  releaseDescription:
+                    type: string
+                  revision:
+                    type: integer
+                  state:
+                    description: Status is the status of a release
+                    type: string
+                type: object
+              conditions:
+                description: Conditions of the resource.
+                items:
+                  description: A Condition that may apply to a resource.
+                  properties:
+                    lastTransitionTime:
+                      description: LastTransitionTime is the last time this condition transitioned from one status to another.
+                      format: date-time
+                      type: string
+                    message:
+                      description: A Message containing details about this condition's last transition from one status to another, if any.
+                      type: string
+                    reason:
+                      description: A Reason for this condition's last transition from one status to another.
+                      type: string
+                    status:
+                      description: Status of this condition; is it currently True, False, or Unknown?
+                      type: string
+                    type:
+                      description: Type of this condition. At most one of each condition type may apply to a resource at any point in time.
+                      type: string
+                  required:
+                  - lastTransitionTime
+                  - reason
+                  - status
+                  - type
+                  type: object
+                type: array
+              failed:
+                format: int32
+                type: integer
+              patchesSha:
+                type: string
+              synced:
+                type: boolean
+            type: object
+        required:
+        - spec
+        type: object
+    served: true
     storage: true
     subresources:
       status: {}
diff --git a/pkg/clients/helm/client.go b/pkg/clients/helm/client.go
index b3f5ef4..ff98192 100644
--- a/pkg/clients/helm/client.go
+++ b/pkg/clients/helm/client.go
@@ -33,7 +33,7 @@ import (
 	"k8s.io/client-go/rest"
 	ktype "sigs.k8s.io/kustomize/api/types"
 
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -56,7 +56,7 @@ type Client interface {
 	Upgrade(release string, chart *chart.Chart, vals map[string]interface{}, patches []ktype.Patch) (*release.Release, error)
 	Rollback(release string) error
 	Uninstall(release string) error
-	PullAndLoadChart(spec *v1alpha1.ChartSpec, creds *RepoCreds) (*chart.Chart, error)
+	PullAndLoadChart(spec *v1beta1.ChartSpec, creds *RepoCreds) (*chart.Chart, error)
 }
 
 type client struct {
@@ -135,7 +135,7 @@ func getChartFileName(dir string) (string, error) {
 }
 
 // Pulls latest chart version. Returns absolute chartFilePath or error.
-func (hc *client) pullLatestChartVersion(spec *v1alpha1.ChartSpec, creds *RepoCreds) (string, error) {
+func (hc *client) pullLatestChartVersion(spec *v1beta1.ChartSpec, creds *RepoCreds) (string, error) {
 	tmpDir, err := ioutil.TempDir(chartCache, "")
 	if err != nil {
 		return "", err
@@ -162,7 +162,7 @@ func (hc *client) pullLatestChartVersion(spec *v1alpha1.ChartSpec, creds *RepoCr
 	return chartFilePath, nil
 }
 
-func (hc *client) pullChart(spec *v1alpha1.ChartSpec, creds *RepoCreds, chartDir string) error {
+func (hc *client) pullChart(spec *v1beta1.ChartSpec, creds *RepoCreds, chartDir string) error {
 	pc := hc.pullClient
 
 	pc.RepoURL = spec.Repository
@@ -180,7 +180,7 @@ func (hc *client) pullChart(spec *v1alpha1.ChartSpec, creds *RepoCreds, chartDir
 	return nil
 }
 
-func (hc *client) PullAndLoadChart(spec *v1alpha1.ChartSpec, creds *RepoCreds) (*chart.Chart, error) {
+func (hc *client) PullAndLoadChart(spec *v1beta1.ChartSpec, creds *RepoCreds) (*chart.Chart, error) {
 	var chartFilePath string
 	var err error
 	if spec.Version == "" {
diff --git a/pkg/controller/config/config.go b/pkg/controller/config/config.go
index 735b494..05bfb8d 100644
--- a/pkg/controller/config/config.go
+++ b/pkg/controller/config/config.go
@@ -25,23 +25,23 @@ import (
 	"github.com/crossplane/crossplane-runtime/pkg/reconciler/providerconfig"
 	"github.com/crossplane/crossplane-runtime/pkg/resource"
 
-	"github.com/crossplane-contrib/provider-helm/apis/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/v1beta1"
 )
 
 // Setup adds a controller that reconciles ProviderConfigs by accounting for
 // their current usage.
 func Setup(mgr ctrl.Manager, l logging.Logger) error {
-	name := providerconfig.ControllerName(v1alpha1.ProviderConfigGroupKind)
+	name := providerconfig.ControllerName(v1beta1.ProviderConfigGroupKind)
 
 	of := resource.ProviderConfigKinds{
-		Config:    v1alpha1.ProviderConfigGroupVersionKind,
-		UsageList: v1alpha1.ProviderConfigUsageListGroupVersionKind,
+		Config:    v1beta1.ProviderConfigGroupVersionKind,
+		UsageList: v1beta1.ProviderConfigUsageListGroupVersionKind,
 	}
 
 	return ctrl.NewControllerManagedBy(mgr).
 		Named(name).
-		For(&v1alpha1.ProviderConfig{}).
-		Watches(&source.Kind{Type: &v1alpha1.ProviderConfigUsage{}}, &resource.EnqueueRequestForProviderConfig{}).
+		For(&v1beta1.ProviderConfig{}).
+		Watches(&source.Kind{Type: &v1beta1.ProviderConfigUsage{}}, &resource.EnqueueRequestForProviderConfig{}).
 		Complete(providerconfig.NewReconciler(mgr, of,
 			providerconfig.WithLogger(l.WithValues("controller", name)),
 			providerconfig.WithRecorder(event.NewAPIRecorder(mgr.GetEventRecorderFor(name)))))
diff --git a/pkg/controller/release/chart.go b/pkg/controller/release/chart.go
index a2976f3..ea17f49 100644
--- a/pkg/controller/release/chart.go
+++ b/pkg/controller/release/chart.go
@@ -19,12 +19,11 @@ package release
 import (
 	"context"
 
+	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
 	"github.com/pkg/errors"
 	"k8s.io/apimachinery/pkg/types"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
-
 	helmClient "github.com/crossplane-contrib/provider-helm/pkg/clients/helm"
 )
 
diff --git a/pkg/controller/release/data.go b/pkg/controller/release/data.go
index 94cf146..931b56d 100644
--- a/pkg/controller/release/data.go
+++ b/pkg/controller/release/data.go
@@ -26,7 +26,7 @@ import (
 	"k8s.io/apimachinery/pkg/types"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -63,7 +63,7 @@ func getConfigMapData(ctx context.Context, kube client.Client, nn types.Namespac
 	return cm.Data, nil
 }
 
-func getDataValueFromSource(ctx context.Context, kube client.Client, source v1alpha1.ValueFromSource, defaultKey string) (string, error) { // nolint:gocyclo
+func getDataValueFromSource(ctx context.Context, kube client.Client, source v1beta1.ValueFromSource, defaultKey string) (string, error) { // nolint:gocyclo
 	if source.SecretKeyRef != nil {
 		r := source.SecretKeyRef
 		d, err := getSecretData(ctx, kube, types.NamespacedName{Name: r.Name, Namespace: r.Namespace})
diff --git a/pkg/controller/release/observe.go b/pkg/controller/release/observe.go
index d5848a9..d88d17f 100644
--- a/pkg/controller/release/observe.go
+++ b/pkg/controller/release/observe.go
@@ -24,7 +24,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/yaml"
 
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -34,8 +34,8 @@ const (
 )
 
 // generateObservation generates release observation for the input release object
-func generateObservation(in *release.Release) v1alpha1.ReleaseObservation {
-	o := v1alpha1.ReleaseObservation{}
+func generateObservation(in *release.Release) v1beta1.ReleaseObservation {
+	o := v1beta1.ReleaseObservation{}
 
 	relInfo := in.Info
 	if relInfo != nil {
@@ -47,7 +47,7 @@ func generateObservation(in *release.Release) v1alpha1.ReleaseObservation {
 }
 
 // isUpToDate checks whether desired spec up to date with the observed state for a given release
-func isUpToDate(ctx context.Context, kube client.Client, in *v1alpha1.ReleaseParameters, observed *release.Release, s v1alpha1.ReleaseStatus) (bool, error) {
+func isUpToDate(ctx context.Context, kube client.Client, in *v1beta1.ReleaseParameters, observed *release.Release, s v1beta1.ReleaseStatus) (bool, error) {
 	if observed.Info == nil {
 		return false, errors.New(errReleaseInfoNilInObservedRelease)
 	}
diff --git a/pkg/controller/release/patch.go b/pkg/controller/release/patch.go
index ef49922..d89c0f1 100644
--- a/pkg/controller/release/patch.go
+++ b/pkg/controller/release/patch.go
@@ -12,7 +12,7 @@ import (
 	ktypes "sigs.k8s.io/kustomize/api/types"
 	"sigs.k8s.io/yaml"
 
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -22,13 +22,13 @@ const (
 
 // Patcher interface for managing Kustomize patches and detecting updates
 type Patcher interface {
-	hasUpdates(ctx context.Context, kube client.Client, in []v1alpha1.ValueFromSource, s v1alpha1.ReleaseStatus) (bool, error)
+	hasUpdates(ctx context.Context, kube client.Client, in []v1beta1.ValueFromSource, s v1beta1.ReleaseStatus) (bool, error)
 	patchGetter
 	patchHasher
 }
 
 type patchGetter interface {
-	getFromSpec(ctx context.Context, kube client.Client, vals []v1alpha1.ValueFromSource) ([]ktypes.Patch, error)
+	getFromSpec(ctx context.Context, kube client.Client, vals []v1beta1.ValueFromSource) ([]ktypes.Patch, error)
 }
 
 type patchHasher interface {
@@ -47,7 +47,7 @@ type patch struct {
 	patchGetter
 }
 
-func (p patch) hasUpdates(ctx context.Context, kube client.Client, in []v1alpha1.ValueFromSource, s v1alpha1.ReleaseStatus) (bool, error) {
+func (p patch) hasUpdates(ctx context.Context, kube client.Client, in []v1beta1.ValueFromSource, s v1beta1.ReleaseStatus) (bool, error) {
 	patches, err := p.getFromSpec(ctx, kube, in)
 	if err != nil {
 		return false, err
@@ -78,7 +78,7 @@ func (patchSha) shaOf(patches []ktypes.Patch) (string, error) {
 
 type patchGet struct{}
 
-func (patchGet) getFromSpec(ctx context.Context, kube client.Client, vals []v1alpha1.ValueFromSource) ([]ktypes.Patch, error) {
+func (patchGet) getFromSpec(ctx context.Context, kube client.Client, vals []v1beta1.ValueFromSource) ([]ktypes.Patch, error) {
 	var base []ktypes.Patch // nolint:prealloc
 
 	for _, vf := range vals {
diff --git a/pkg/controller/release/release.go b/pkg/controller/release/release.go
index 5363d3e..f49909e 100644
--- a/pkg/controller/release/release.go
+++ b/pkg/controller/release/release.go
@@ -38,8 +38,8 @@ import (
 	"github.com/crossplane/crossplane-runtime/pkg/reconciler/managed"
 	"github.com/crossplane/crossplane-runtime/pkg/resource"
 
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
-	helmv1alpha1 "github.com/crossplane-contrib/provider-helm/apis/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
+	helmv1beta1 "github.com/crossplane-contrib/provider-helm/apis/v1beta1"
 	"github.com/crossplane-contrib/provider-helm/pkg/clients"
 	helmClient "github.com/crossplane-contrib/provider-helm/pkg/clients/helm"
 )
@@ -78,15 +78,15 @@ const (
 
 // Setup adds a controller that reconciles Release managed resources.
 func Setup(mgr ctrl.Manager, l logging.Logger) error {
-	name := managed.ControllerName(v1alpha1.ReleaseGroupKind)
+	name := managed.ControllerName(v1beta1.ReleaseGroupKind)
 	logger := l.WithValues("controller", name)
 
 	r := managed.NewReconciler(mgr,
-		resource.ManagedKind(v1alpha1.ReleaseGroupVersionKind),
+		resource.ManagedKind(v1beta1.ReleaseGroupVersionKind),
 		managed.WithExternalConnecter(&connector{
 			logger:          logger,
 			client:          mgr.GetClient(),
-			usage:           resource.NewProviderConfigUsageTracker(mgr.GetClient(), &helmv1alpha1.ProviderConfigUsage{}),
+			usage:           resource.NewProviderConfigUsageTracker(mgr.GetClient(), &helmv1beta1.ProviderConfigUsage{}),
 			newRestConfigFn: clients.NewRestConfig,
 			newKubeClientFn: clients.NewKubeClient,
 			newHelmClientFn: helmClient.NewClient,
@@ -98,7 +98,7 @@ func Setup(mgr ctrl.Manager, l logging.Logger) error {
 
 	return ctrl.NewControllerManagedBy(mgr).
 		Named(name).
-		For(&v1alpha1.Release{}).
+		For(&v1beta1.Release{}).
 		WithOptions(controller.Options{MaxConcurrentReconciles: maxConcurrency}).
 		Complete(r)
 }
@@ -113,7 +113,7 @@ type connector struct {
 }
 
 func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.ExternalClient, error) {
-	cr, ok := mg.(*v1alpha1.Release)
+	cr, ok := mg.(*v1beta1.Release)
 	if !ok {
 		return nil, errors.New(errNotRelease)
 	}
@@ -121,7 +121,7 @@ func (c *connector) Connect(ctx context.Context, mg resource.Managed) (managed.E
 
 	l.Debug("Connecting")
 
-	p := &helmv1alpha1.ProviderConfig{}
+	p := &helmv1beta1.ProviderConfig{}
 
 	if cr.GetProviderConfigReference() == nil {
 		return nil, errors.New(errProviderConfigNotSet)
@@ -197,7 +197,7 @@ type helmExternal struct {
 }
 
 func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (managed.ExternalObservation, error) {
-	cr, ok := mg.(*v1alpha1.Release)
+	cr, ok := mg.(*v1beta1.Release)
 	if !ok {
 		return managed.ExternalObservation{}, errors.New(errNotRelease)
 	}
@@ -250,7 +250,7 @@ func (e *helmExternal) Observe(ctx context.Context, mg resource.Managed) (manage
 
 type deployAction func(release string, chart *chart.Chart, vals map[string]interface{}, patches []ktype.Patch) (*release.Release, error)
 
-func (e *helmExternal) deploy(ctx context.Context, cr *v1alpha1.Release, action deployAction) error {
+func (e *helmExternal) deploy(ctx context.Context, cr *v1beta1.Release, action deployAction) error {
 	cv, err := composeValuesFromSpec(ctx, e.localKube, cr.Spec.ForProvider.ValuesSpec)
 	if err != nil {
 		return errors.Wrap(err, errFailedToComposeValues)
@@ -299,7 +299,7 @@ func (e *helmExternal) deploy(ctx context.Context, cr *v1alpha1.Release, action
 }
 
 func (e *helmExternal) Create(ctx context.Context, mg resource.Managed) (managed.ExternalCreation, error) {
-	cr, ok := mg.(*v1alpha1.Release)
+	cr, ok := mg.(*v1beta1.Release)
 	if !ok {
 		return managed.ExternalCreation{}, errors.New(errNotRelease)
 	}
@@ -309,7 +309,7 @@ func (e *helmExternal) Create(ctx context.Context, mg resource.Managed) (managed
 }
 
 func (e *helmExternal) Update(ctx context.Context, mg resource.Managed) (managed.ExternalUpdate, error) {
-	cr, ok := mg.(*v1alpha1.Release)
+	cr, ok := mg.(*v1beta1.Release)
 	if !ok {
 		return managed.ExternalUpdate{}, errors.New(errNotRelease)
 	}
@@ -338,7 +338,7 @@ func (e *helmExternal) Update(ctx context.Context, mg resource.Managed) (managed
 }
 
 func (e *helmExternal) Delete(_ context.Context, mg resource.Managed) error {
-	cr, ok := mg.(*v1alpha1.Release)
+	cr, ok := mg.(*v1beta1.Release)
 	if !ok {
 		return errors.New(errNotRelease)
 	}
@@ -348,16 +348,16 @@ func (e *helmExternal) Delete(_ context.Context, mg resource.Managed) error {
 	return errors.Wrap(e.helm.Uninstall(meta.GetExternalName(cr)), errFailedToUninstall)
 }
 
-func shouldRollBack(cr *v1alpha1.Release) bool {
+func shouldRollBack(cr *v1beta1.Release) bool {
 	return rollBackEnabled(cr) &&
 		((cr.Status.Synced && cr.Status.AtProvider.State == release.StatusFailed) ||
 			(cr.Status.AtProvider.State == release.StatusPendingInstall) ||
 			(cr.Status.AtProvider.State == release.StatusPendingUpgrade))
 }
 
-func rollBackEnabled(cr *v1alpha1.Release) bool {
+func rollBackEnabled(cr *v1beta1.Release) bool {
 	return cr.Spec.RollbackRetriesLimit != nil
 }
-func rollBackLimitReached(cr *v1alpha1.Release) bool {
+func rollBackLimitReached(cr *v1beta1.Release) bool {
 	return cr.Status.Failed >= *cr.Spec.RollbackRetriesLimit
 }
diff --git a/pkg/controller/release/values.go b/pkg/controller/release/values.go
index 88114c0..6e69c1c 100644
--- a/pkg/controller/release/values.go
+++ b/pkg/controller/release/values.go
@@ -25,7 +25,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/yaml"
 
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -40,7 +40,7 @@ const (
 	errMissingValueForSet             = "missing value for --set"
 )
 
-func composeValuesFromSpec(ctx context.Context, kube client.Client, spec v1alpha1.ValuesSpec) (map[string]interface{}, error) {
+func composeValuesFromSpec(ctx context.Context, kube client.Client, spec v1beta1.ValuesSpec) (map[string]interface{}, error) {
 	base := map[string]interface{}{}
 
 	for _, vf := range spec.ValuesFrom {


Test patch:
diff --git a/pkg/controller/release/chart_test.go b/pkg/controller/release/chart_test.go
index 7ecf72d..71c5d47 100644
--- a/pkg/controller/release/chart_test.go
+++ b/pkg/controller/release/chart_test.go
@@ -5,6 +5,8 @@ import (
 	"fmt"
 	"testing"
 
+	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+	"github.com/crossplane/crossplane-runtime/pkg/test"
 	"github.com/google/go-cmp/cmp"
 	"github.com/pkg/errors"
 	corev1 "k8s.io/api/core/v1"
@@ -13,9 +15,6 @@ import (
 	"k8s.io/apimachinery/pkg/runtime/schema"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
-	"github.com/crossplane/crossplane-runtime/pkg/test"
-
 	"github.com/crossplane-contrib/provider-helm/pkg/clients/helm"
 )
 
diff --git a/pkg/controller/release/data_test.go b/pkg/controller/release/data_test.go
index 1657756..fdea514 100644
--- a/pkg/controller/release/data_test.go
+++ b/pkg/controller/release/data_test.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"testing"
 
+	"github.com/crossplane/crossplane-runtime/pkg/test"
 	"github.com/google/go-cmp/cmp"
 	"github.com/pkg/errors"
 	corev1 "k8s.io/api/core/v1"
@@ -14,9 +15,7 @@ import (
 	"k8s.io/apimachinery/pkg/types"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"github.com/crossplane/crossplane-runtime/pkg/test"
-
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -225,7 +224,7 @@ func Test_getConfigMapData(t *testing.T) {
 func Test_getDataValueFromSource(t *testing.T) {
 	type args struct {
 		kube       client.Client
-		source     v1alpha1.ValueFromSource
+		source     v1beta1.ValueFromSource
 		defaultKey string
 	}
 	type want struct {
@@ -243,7 +242,7 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{},
+				source: v1beta1.ValueFromSource{},
 			},
 			want: want{
 				out: "",
@@ -260,9 +259,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return nil
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -286,9 +285,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return nil
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
@@ -312,9 +311,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -338,9 +337,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -364,9 +363,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
@@ -390,9 +389,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
@@ -420,9 +419,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -450,9 +449,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -480,9 +479,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
@@ -510,9 +509,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
@@ -540,9 +539,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -570,9 +569,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					SecretKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					SecretKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testSecretName,
 						},
@@ -600,9 +599,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
@@ -630,9 +629,9 @@ func Test_getDataValueFromSource(t *testing.T) {
 						return errBoom
 					},
 				},
-				source: v1alpha1.ValueFromSource{
-					ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-						NamespacedName: v1alpha1.NamespacedName{
+				source: v1beta1.ValueFromSource{
+					ConfigMapKeyRef: &v1beta1.DataKeySelector{
+						NamespacedName: v1beta1.NamespacedName{
 							Namespace: testNamespace,
 							Name:      testCMName,
 						},
diff --git a/pkg/controller/release/observe_test.go b/pkg/controller/release/observe_test.go
index 8807633..16d63a7 100644
--- a/pkg/controller/release/observe_test.go
+++ b/pkg/controller/release/observe_test.go
@@ -6,15 +6,14 @@ import (
 
 	"k8s.io/apimachinery/pkg/runtime"
 
+	"github.com/crossplane/crossplane-runtime/pkg/test"
 	"github.com/google/go-cmp/cmp"
 	"github.com/pkg/errors"
 	"helm.sh/helm/v3/pkg/chart"
 	"helm.sh/helm/v3/pkg/release"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"github.com/crossplane/crossplane-runtime/pkg/test"
-
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -40,7 +39,7 @@ func Test_generateObservation(t *testing.T) {
 		in *release.Release
 	}
 	type want struct {
-		out v1alpha1.ReleaseObservation
+		out v1beta1.ReleaseObservation
 	}
 	cases := map[string]struct {
 		args
@@ -54,7 +53,7 @@ func Test_generateObservation(t *testing.T) {
 				},
 			},
 			want: want{
-				out: v1alpha1.ReleaseObservation{
+				out: v1beta1.ReleaseObservation{
 					State:              "",
 					ReleaseDescription: "",
 				},
@@ -71,7 +70,7 @@ func Test_generateObservation(t *testing.T) {
 				},
 			},
 			want: want{
-				out: v1alpha1.ReleaseObservation{
+				out: v1beta1.ReleaseObservation{
 					State:              release.StatusDeployed,
 					ReleaseDescription: testDescription,
 				},
@@ -91,7 +90,7 @@ func Test_generateObservation(t *testing.T) {
 func Test_isUpToDate(t *testing.T) {
 	type args struct {
 		kube     client.Client
-		in       *v1alpha1.ReleaseParameters
+		in       *v1beta1.ReleaseParameters
 		observed *release.Release
 	}
 	type want struct {
@@ -161,12 +160,12 @@ func Test_isUpToDate(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				in: &v1alpha1.ReleaseParameters{
-					Chart: v1alpha1.ChartSpec{
+				in: &v1beta1.ReleaseParameters{
+					Chart: v1beta1.ChartSpec{
 						Name:    testChart,
 						Version: testVersion,
 					},
-					ValuesSpec: v1alpha1.ValuesSpec{
+					ValuesSpec: v1beta1.ValuesSpec{
 						Values: runtime.RawExtension{
 							Raw:    []byte("invalid-yaml"),
 							Object: nil,
@@ -199,12 +198,12 @@ func Test_isUpToDate(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				in: &v1alpha1.ReleaseParameters{
-					Chart: v1alpha1.ChartSpec{
+				in: &v1beta1.ReleaseParameters{
+					Chart: v1beta1.ChartSpec{
 						Name:    "another-chart",
 						Version: testVersion,
 					},
-					ValuesSpec: v1alpha1.ValuesSpec{
+					ValuesSpec: v1beta1.ValuesSpec{
 						Values: runtime.RawExtension{
 							Raw: []byte(testReleaseConfigStr),
 						},
@@ -232,12 +231,12 @@ func Test_isUpToDate(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				in: &v1alpha1.ReleaseParameters{
-					Chart: v1alpha1.ChartSpec{
+				in: &v1beta1.ReleaseParameters{
+					Chart: v1beta1.ChartSpec{
 						Name:    testChart,
 						Version: "another-version",
 					},
-					ValuesSpec: v1alpha1.ValuesSpec{
+					ValuesSpec: v1beta1.ValuesSpec{
 						Values: runtime.RawExtension{
 							Raw: []byte(testReleaseConfigStr),
 						},
@@ -265,12 +264,12 @@ func Test_isUpToDate(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				in: &v1alpha1.ReleaseParameters{
-					Chart: v1alpha1.ChartSpec{
+				in: &v1beta1.ReleaseParameters{
+					Chart: v1beta1.ChartSpec{
 						Name:    testChart,
 						Version: testVersion,
 					},
-					ValuesSpec: v1alpha1.ValuesSpec{
+					ValuesSpec: v1beta1.ValuesSpec{
 						Values: runtime.RawExtension{
 							Raw: []byte("keyA: valX"),
 						},
@@ -298,12 +297,12 @@ func Test_isUpToDate(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				in: &v1alpha1.ReleaseParameters{
-					Chart: v1alpha1.ChartSpec{
+				in: &v1beta1.ReleaseParameters{
+					Chart: v1beta1.ChartSpec{
 						Name:    testChart,
 						Version: testVersion,
 					},
-					ValuesSpec: v1alpha1.ValuesSpec{
+					ValuesSpec: v1beta1.ValuesSpec{
 						Values: runtime.RawExtension{
 							Raw: []byte(testReleaseConfigStr),
 						},
@@ -331,12 +330,12 @@ func Test_isUpToDate(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				in: &v1alpha1.ReleaseParameters{
-					Chart: v1alpha1.ChartSpec{
+				in: &v1beta1.ReleaseParameters{
+					Chart: v1beta1.ChartSpec{
 						Name:    testChart,
 						Version: testVersion,
 					},
-					ValuesSpec: v1alpha1.ValuesSpec{
+					ValuesSpec: v1beta1.ValuesSpec{
 						Values: runtime.RawExtension{
 							Raw: []byte(testReleaseConfigStr),
 						},
@@ -363,7 +362,7 @@ func Test_isUpToDate(t *testing.T) {
 
 	for name, tc := range cases {
 		t.Run(name, func(t *testing.T) {
-			got, gotErr := isUpToDate(context.Background(), tc.args.kube, tc.args.in, tc.args.observed, v1alpha1.ReleaseStatus{})
+			got, gotErr := isUpToDate(context.Background(), tc.args.kube, tc.args.in, tc.args.observed, v1beta1.ReleaseStatus{})
 			if diff := cmp.Diff(tc.want.err, gotErr, test.EquateErrors()); diff != "" {
 				t.Fatalf("isUpToDate(...): -want error, +got error: %s", diff)
 			}
diff --git a/pkg/controller/release/patch_test.go b/pkg/controller/release/patch_test.go
index c22752a..287b01d 100644
--- a/pkg/controller/release/patch_test.go
+++ b/pkg/controller/release/patch_test.go
@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"testing"
 
+	"github.com/crossplane/crossplane-runtime/pkg/test"
 	"github.com/google/go-cmp/cmp"
 	corev1 "k8s.io/api/core/v1"
 	kerrors "k8s.io/apimachinery/pkg/api/errors"
@@ -14,9 +15,7 @@ import (
 	"sigs.k8s.io/kustomize/api/resid"
 	"sigs.k8s.io/kustomize/api/types"
 
-	"github.com/crossplane/crossplane-runtime/pkg/test"
-
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 const (
@@ -119,7 +118,7 @@ type mockPatchGet struct {
 	err     error
 }
 
-func (m mockPatchGet) getFromSpec(ctx context.Context, kube client.Client, vals []v1alpha1.ValueFromSource) ([]types.Patch, error) {
+func (m mockPatchGet) getFromSpec(ctx context.Context, kube client.Client, vals []v1beta1.ValueFromSource) ([]types.Patch, error) {
 	return m.patches, m.err
 }
 
@@ -218,7 +217,7 @@ func Test_PatchHasUpdates(t *testing.T) {
 					err:     tc.args.getPatchesFromSpecErr,
 				},
 			}
-			s := v1alpha1.ReleaseStatus{
+			s := v1beta1.ReleaseStatus{
 				PatchesSha: tc.existingSha,
 			}
 			got, gotErr := p.hasUpdates(context.Background(), nil, nil, s)
@@ -236,7 +235,7 @@ func Test_PatchHasUpdates(t *testing.T) {
 func Test_getPatchesFromSpec(t *testing.T) {
 	type args struct {
 		kube client.Client
-		spec []v1alpha1.ValueFromSource
+		spec []v1beta1.ValueFromSource
 	}
 
 	type want struct {
@@ -263,10 +262,10 @@ func Test_getPatchesFromSpec(t *testing.T) {
 						return errBoom
 					},
 				},
-				spec: []v1alpha1.ValueFromSource{
+				spec: []v1beta1.ValueFromSource{
 					{
-						ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-							NamespacedName: v1alpha1.NamespacedName{
+						ConfigMapKeyRef: &v1beta1.DataKeySelector{
+							NamespacedName: v1beta1.NamespacedName{
 								Name:      testCMName,
 								Namespace: testNamespace,
 							},
@@ -303,10 +302,10 @@ func Test_getPatchesFromSpec(t *testing.T) {
 						return nil
 					},
 				},
-				spec: []v1alpha1.ValueFromSource{
+				spec: []v1beta1.ValueFromSource{
 					{
-						ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-							NamespacedName: v1alpha1.NamespacedName{
+						ConfigMapKeyRef: &v1beta1.DataKeySelector{
+							NamespacedName: v1beta1.NamespacedName{
 								Name:      "1",
 								Namespace: testNamespace,
 							},
@@ -315,8 +314,8 @@ func Test_getPatchesFromSpec(t *testing.T) {
 						},
 					},
 					{
-						ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-							NamespacedName: v1alpha1.NamespacedName{
+						ConfigMapKeyRef: &v1beta1.DataKeySelector{
+							NamespacedName: v1beta1.NamespacedName{
 								Name:      "2",
 								Namespace: testNamespace,
 							},
@@ -325,8 +324,8 @@ func Test_getPatchesFromSpec(t *testing.T) {
 						},
 					},
 					{
-						ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-							NamespacedName: v1alpha1.NamespacedName{
+						ConfigMapKeyRef: &v1beta1.DataKeySelector{
+							NamespacedName: v1beta1.NamespacedName{
 								Name:      "3",
 								Namespace: testNamespace,
 							},
@@ -373,10 +372,10 @@ func Test_getPatchesFromSpec(t *testing.T) {
 						return kerrors.NewNotFound(schema.GroupResource{Group: "ConfigMap", Resource: key.Name}, key.Name)
 					},
 				},
-				spec: []v1alpha1.ValueFromSource{
+				spec: []v1beta1.ValueFromSource{
 					{
-						ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-							NamespacedName: v1alpha1.NamespacedName{
+						ConfigMapKeyRef: &v1beta1.DataKeySelector{
+							NamespacedName: v1beta1.NamespacedName{
 								Name:      "1",
 								Namespace: testNamespace,
 							},
diff --git a/pkg/controller/release/release_test.go b/pkg/controller/release/release_test.go
index 5f67f81..7f345aa 100644
--- a/pkg/controller/release/release_test.go
+++ b/pkg/controller/release/release_test.go
@@ -5,6 +5,11 @@ import (
 	"fmt"
 	"testing"
 
+	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
+	"github.com/crossplane/crossplane-runtime/pkg/logging"
+	"github.com/crossplane/crossplane-runtime/pkg/reconciler/managed"
+	"github.com/crossplane/crossplane-runtime/pkg/resource"
+	"github.com/crossplane/crossplane-runtime/pkg/test"
 	"github.com/google/go-cmp/cmp"
 	"github.com/pkg/errors"
 	"helm.sh/helm/v3/pkg/chart"
@@ -17,14 +22,8 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/kustomize/api/types"
 
-	runtimev1alpha1 "github.com/crossplane/crossplane-runtime/apis/core/v1alpha1"
-	"github.com/crossplane/crossplane-runtime/pkg/logging"
-	"github.com/crossplane/crossplane-runtime/pkg/reconciler/managed"
-	"github.com/crossplane/crossplane-runtime/pkg/resource"
-	"github.com/crossplane/crossplane-runtime/pkg/test"
-
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
-	helmv1alpha1 "github.com/crossplane-contrib/provider-helm/apis/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
+	helmv1beta1 "github.com/crossplane-contrib/provider-helm/apis/v1beta1"
 	helmClient "github.com/crossplane-contrib/provider-helm/pkg/clients/helm"
 )
 
@@ -39,28 +38,28 @@ const (
 	testReleaseName = "test-release"
 )
 
-type helmReleaseModifier func(release *v1alpha1.Release)
+type helmReleaseModifier func(release *v1beta1.Release)
 
-func helmRelease(rm ...helmReleaseModifier) *v1alpha1.Release {
-	r := &v1alpha1.Release{
+func helmRelease(rm ...helmReleaseModifier) *v1beta1.Release {
+	r := &v1beta1.Release{
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      testReleaseName,
 			Namespace: testNamespace,
 		},
-		Spec: v1alpha1.ReleaseSpec{
+		Spec: v1beta1.ReleaseSpec{
 			ResourceSpec: runtimev1alpha1.ResourceSpec{
 				ProviderConfigReference: &runtimev1alpha1.Reference{
 					Name: providerName,
 				},
 			},
-			ForProvider: v1alpha1.ReleaseParameters{
-				Chart: v1alpha1.ChartSpec{
+			ForProvider: v1beta1.ReleaseParameters{
+				Chart: v1beta1.ChartSpec{
 					Name:    testChart,
 					Version: testVersion,
 				},
 			},
 		},
-		Status: v1alpha1.ReleaseStatus{},
+		Status: v1beta1.ReleaseStatus{},
 	}
 
 	for _, m := range rm {
@@ -75,7 +74,7 @@ type MockInstallFn func(release string, chart *chart.Chart, vals map[string]inte
 type MockUpgradeFn func(release string, chart *chart.Chart, vals map[string]interface{}, patches []types.Patch) (*release.Release, error)
 type MockRollBackFn func(release string) error
 type MockUninstallFn func(release string) error
-type MockPullAndLoadChartFn func(spec *v1alpha1.ChartSpec, creds *helmClient.RepoCreds) (*chart.Chart, error)
+type MockPullAndLoadChartFn func(spec *v1beta1.ChartSpec, creds *helmClient.RepoCreds) (*chart.Chart, error)
 
 type MockHelmClient struct {
 	MockGetLastRelease   MockGetLastReleaseFn
@@ -106,7 +105,7 @@ func (c *MockHelmClient) Uninstall(release string) error {
 	return c.MockUninstall(release)
 }
 
-func (c *MockHelmClient) PullAndLoadChart(spec *v1alpha1.ChartSpec, creds *helmClient.RepoCreds) (*chart.Chart, error) {
+func (c *MockHelmClient) PullAndLoadChart(spec *v1beta1.ChartSpec, creds *helmClient.RepoCreds) (*chart.Chart, error) {
 	if c.MockPullAndLoadChart != nil {
 		return c.MockPullAndLoadChart(spec, creds)
 	}
@@ -118,9 +117,9 @@ type notHelmRelease struct {
 }
 
 func Test_connector_Connect(t *testing.T) {
-	providerConfig := helmv1alpha1.ProviderConfig{
+	providerConfig := helmv1beta1.ProviderConfig{
 		ObjectMeta: metav1.ObjectMeta{Name: providerName},
-		Spec: helmv1alpha1.ProviderConfigSpec{
+		Spec: helmv1beta1.ProviderConfigSpec{
 			ProviderConfigSpec: runtimev1alpha1.ProviderConfigSpec{
 				Credentials: runtimev1alpha1.ProviderCredentials{
 					Source: runtimev1alpha1.CredentialsSourceSecret,
@@ -178,7 +177,7 @@ func Test_connector_Connect(t *testing.T) {
 				client: &test.MockClient{
 					MockGet: func(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
 						if key.Name == providerName {
-							*obj.(*helmv1alpha1.ProviderConfig) = providerConfig
+							*obj.(*helmv1beta1.ProviderConfig) = providerConfig
 							return errBoom
 						}
 						return nil
@@ -198,7 +197,7 @@ func Test_connector_Connect(t *testing.T) {
 						if key.Name == providerName {
 							pc := providerConfig.DeepCopy()
 							pc.Spec.Credentials.Source = runtimev1alpha1.CredentialsSource("wat")
-							*obj.(*helmv1alpha1.ProviderConfig) = *pc
+							*obj.(*helmv1beta1.ProviderConfig) = *pc
 							return nil
 						}
 						return nil
@@ -218,7 +217,7 @@ func Test_connector_Connect(t *testing.T) {
 						if key.Name == providerName {
 							pc := providerConfig.DeepCopy()
 							pc.Spec.Credentials.SecretRef = nil
-							*obj.(*helmv1alpha1.ProviderConfig) = *pc
+							*obj.(*helmv1beta1.ProviderConfig) = *pc
 							return nil
 						}
 						return nil
@@ -236,7 +235,7 @@ func Test_connector_Connect(t *testing.T) {
 				client: &test.MockClient{
 					MockGet: func(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
 						if key.Name == providerName {
-							*obj.(*helmv1alpha1.ProviderConfig) = providerConfig
+							*obj.(*helmv1beta1.ProviderConfig) = providerConfig
 							return nil
 						}
 						if key.Name == providerSecretName && key.Namespace == providerSecretNamespace {
@@ -257,7 +256,7 @@ func Test_connector_Connect(t *testing.T) {
 				client: &test.MockClient{
 					MockGet: func(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
 						if key.Name == providerName {
-							*obj.(*helmv1alpha1.ProviderConfig) = providerConfig
+							*obj.(*helmv1beta1.ProviderConfig) = providerConfig
 							return nil
 						}
 						if key.Name == providerSecretName && key.Namespace == providerSecretNamespace {
@@ -282,7 +281,7 @@ func Test_connector_Connect(t *testing.T) {
 				client: &test.MockClient{
 					MockGet: func(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
 						if key.Name == providerName {
-							*obj.(*helmv1alpha1.ProviderConfig) = providerConfig
+							*obj.(*helmv1beta1.ProviderConfig) = providerConfig
 							return nil
 						}
 						if key.Name == providerSecretName && key.Namespace == providerSecretNamespace {
@@ -313,7 +312,7 @@ func Test_connector_Connect(t *testing.T) {
 				client: &test.MockClient{
 					MockGet: func(ctx context.Context, key client.ObjectKey, obj runtime.Object) error {
 						switch t := obj.(type) {
-						case *helmv1alpha1.ProviderConfig:
+						case *helmv1beta1.ProviderConfig:
 							*t = providerConfig
 						case *corev1.Secret:
 							*t = secret
@@ -440,7 +439,7 @@ func Test_helmExternal_Observe(t *testing.T) {
 					},
 				},
 				mg: helmRelease(
-					func(release *v1alpha1.Release) {
+					func(release *v1beta1.Release) {
 						now := metav1.Now()
 						release.SetDeletionTimestamp(&now)
 					},
@@ -486,7 +485,7 @@ func Test_helmExternal_Observe(t *testing.T) {
 						}, nil
 					},
 				},
-				mg: helmRelease(func(r *v1alpha1.Release) {
+				mg: helmRelease(func(r *v1beta1.Release) {
 					rl := int32(3)
 					r.Spec.RollbackRetriesLimit = &rl
 					r.Status.Failed = 0
@@ -612,7 +611,7 @@ func Test_helmExternal_Create(t *testing.T) {
 					MockInstall: func(r string, chart *chart.Chart, vals map[string]interface{}, patches []types.Patch) (hr *release.Release, err error) {
 						return &release.Release{}, nil
 					},
-					MockPullAndLoadChart: func(spec *v1alpha1.ChartSpec, creds *helmClient.RepoCreds) (*chart.Chart, error) {
+					MockPullAndLoadChart: func(spec *v1beta1.ChartSpec, creds *helmClient.RepoCreds) (*chart.Chart, error) {
 						return &chart.Chart{
 							Metadata: &chart.Metadata{
 								Version: testVersion,
@@ -620,11 +619,11 @@ func Test_helmExternal_Create(t *testing.T) {
 						}, nil
 					},
 				},
-				mg: helmRelease(func(r *v1alpha1.Release) {
+				mg: helmRelease(func(r *v1beta1.Release) {
 					r.Spec.ForProvider.Chart.Version = ""
 				}),
 				updateFn: func(ctx context.Context, obj runtime.Object, opts ...client.UpdateOption) error {
-					cr := obj.(*v1alpha1.Release)
+					cr := obj.(*v1beta1.Release)
 					if diff := cmp.Diff(cr.Spec.ForProvider.Chart.Version, testVersion); diff != "" {
 						t.Fatalf("updateFn(...): -want version, +got version: %s", diff)
 					}
@@ -687,7 +686,7 @@ func Test_helmExternal_Update(t *testing.T) {
 						return errBoom
 					},
 				},
-				mg: helmRelease(func(r *v1alpha1.Release) {
+				mg: helmRelease(func(r *v1beta1.Release) {
 					l := int32(3)
 					r.Spec.RollbackRetriesLimit = &l
 					r.Status.Synced = true
@@ -706,7 +705,7 @@ func Test_helmExternal_Update(t *testing.T) {
 						return errBoom
 					},
 				},
-				mg: helmRelease(func(r *v1alpha1.Release) {
+				mg: helmRelease(func(r *v1beta1.Release) {
 					l := int32(3)
 					r.Spec.RollbackRetriesLimit = &l
 					r.Status.Synced = true
@@ -725,7 +724,7 @@ func Test_helmExternal_Update(t *testing.T) {
 						return nil
 					},
 				},
-				mg: helmRelease(func(r *v1alpha1.Release) {
+				mg: helmRelease(func(r *v1beta1.Release) {
 					l := int32(3)
 					r.Spec.RollbackRetriesLimit = &l
 					r.Status.Synced = true
@@ -740,7 +739,7 @@ func Test_helmExternal_Update(t *testing.T) {
 		"MaxRetry": {
 			args: args{
 				helm: &MockHelmClient{},
-				mg: helmRelease(func(r *v1alpha1.Release) {
+				mg: helmRelease(func(r *v1beta1.Release) {
 					l := int32(3)
 					r.Spec.RollbackRetriesLimit = &l
 					r.Status.Failed = 3
diff --git a/pkg/controller/release/values_test.go b/pkg/controller/release/values_test.go
index 8022803..90aba8b 100644
--- a/pkg/controller/release/values_test.go
+++ b/pkg/controller/release/values_test.go
@@ -5,23 +5,20 @@ import (
 	"fmt"
 	"testing"
 
-	corev1 "k8s.io/api/core/v1"
-
-	"k8s.io/apimachinery/pkg/runtime"
-
+	"github.com/crossplane/crossplane-runtime/pkg/test"
 	"github.com/google/go-cmp/cmp"
 	"github.com/pkg/errors"
+	corev1 "k8s.io/api/core/v1"
+	"k8s.io/apimachinery/pkg/runtime"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 
-	"github.com/crossplane/crossplane-runtime/pkg/test"
-
-	"github.com/crossplane-contrib/provider-helm/apis/release/v1alpha1"
+	"github.com/crossplane-contrib/provider-helm/apis/release/v1beta1"
 )
 
 func Test_composeValuesFromSpec(t *testing.T) {
 	type args struct {
 		kube client.Client
-		spec v1alpha1.ValuesSpec
+		spec v1beta1.ValuesSpec
 	}
 
 	type want struct {
@@ -37,7 +34,7 @@ func Test_composeValuesFromSpec(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				spec: v1alpha1.ValuesSpec{
+				spec: v1beta1.ValuesSpec{
 					Values: runtime.RawExtension{
 						Raw: []byte(testReleaseConfigStr),
 					},
@@ -55,7 +52,7 @@ func Test_composeValuesFromSpec(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				spec: v1alpha1.ValuesSpec{
+				spec: v1beta1.ValuesSpec{
 					Values: runtime.RawExtension{
 						Raw: []byte("invalid-yaml"),
 					},
@@ -85,11 +82,11 @@ func Test_composeValuesFromSpec(t *testing.T) {
 						return errBoom
 					},
 				},
-				spec: v1alpha1.ValuesSpec{
-					ValuesFrom: []v1alpha1.ValueFromSource{
+				spec: v1beta1.ValuesSpec{
+					ValuesFrom: []v1beta1.ValueFromSource{
 						{
-							ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-								NamespacedName: v1alpha1.NamespacedName{
+							ConfigMapKeyRef: &v1beta1.DataKeySelector{
+								NamespacedName: v1beta1.NamespacedName{
 									Name:      testCMName,
 									Namespace: testNamespace,
 								},
@@ -116,11 +113,11 @@ func Test_composeValuesFromSpec(t *testing.T) {
 						return nil
 					},
 				},
-				spec: v1alpha1.ValuesSpec{
-					ValuesFrom: []v1alpha1.ValueFromSource{
+				spec: v1beta1.ValuesSpec{
+					ValuesFrom: []v1beta1.ValueFromSource{
 						{
-							ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-								NamespacedName: v1alpha1.NamespacedName{
+							ConfigMapKeyRef: &v1beta1.DataKeySelector{
+								NamespacedName: v1beta1.NamespacedName{
 									Name:      testCMName,
 									Namespace: testNamespace,
 								},
@@ -154,11 +151,11 @@ func Test_composeValuesFromSpec(t *testing.T) {
 						return errBoom
 					},
 				},
-				spec: v1alpha1.ValuesSpec{
-					ValuesFrom: []v1alpha1.ValueFromSource{
+				spec: v1beta1.ValuesSpec{
+					ValuesFrom: []v1beta1.ValueFromSource{
 						{
-							ConfigMapKeyRef: &v1alpha1.DataKeySelector{
-								NamespacedName: v1alpha1.NamespacedName{
+							ConfigMapKeyRef: &v1beta1.DataKeySelector{
+								NamespacedName: v1beta1.NamespacedName{
 									Name:      testCMName,
 									Namespace: testNamespace,
 								},
@@ -181,7 +178,7 @@ func Test_composeValuesFromSpec(t *testing.T) {
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				spec: v1alpha1.ValuesSpec{
+				spec: v1beta1.ValuesSpec{
 					Values: runtime.RawExtension{
 						Raw: []byte(`
 keyA: valA
@@ -190,7 +187,7 @@ keyB:
 `),
 					},
 					ValuesFrom: nil,
-					Set: []v1alpha1.SetVal{
+					Set: []v1beta1.SetVal{
 						{
 							Name:  "keyA",
 							Value: "valX",
@@ -213,8 +210,8 @@ keyB:
 				kube: &test.MockClient{
 					MockGet: nil,
 				},
-				spec: v1alpha1.ValuesSpec{
-					Set: []v1alpha1.SetVal{
+				spec: v1beta1.ValuesSpec{
+					Set: []v1beta1.SetVal{
 						{
 							Name: "keyA",
 						},
@@ -242,7 +239,7 @@ keyB:
 						return errBoom
 					},
 				},
-				spec: v1alpha1.ValuesSpec{
+				spec: v1beta1.ValuesSpec{
 					Values: runtime.RawExtension{
 						Raw: []byte(`
 keyA: valA
@@ -251,12 +248,12 @@ keyB:
 `),
 					},
 					ValuesFrom: nil,
-					Set: []v1alpha1.SetVal{
+					Set: []v1beta1.SetVal{
 						{
 							Name: "keyA",
-							ValueFrom: &v1alpha1.ValueFromSource{
-								SecretKeyRef: &v1alpha1.DataKeySelector{
-									NamespacedName: v1alpha1.NamespacedName{
+							ValueFrom: &v1beta1.ValueFromSource{
+								SecretKeyRef: &v1beta1.DataKeySelector{
+									NamespacedName: v1beta1.NamespacedName{
 										Name:      testSecretName,
 										Namespace: testNamespace,
 									},
@@ -288,7 +285,7 @@ keyB:
 						return nil
 					},
 				},
-				spec: v1alpha1.ValuesSpec{
+				spec: v1beta1.ValuesSpec{
 					Values: runtime.RawExtension{
 						Raw: []byte(`
 keyA: valA
@@ -297,12 +294,12 @@ keyB:
 `),
 					},
 					ValuesFrom: nil,
-					Set: []v1alpha1.SetVal{
+					Set: []v1beta1.SetVal{
 						{
 							Name: "keyA",
-							ValueFrom: &v1alpha1.ValueFromSource{
-								SecretKeyRef: &v1alpha1.DataKeySelector{
-									NamespacedName: v1alpha1.NamespacedName{
+							ValueFrom: &v1beta1.ValueFromSource{
+								SecretKeyRef: &v1beta1.DataKeySelector{
+									NamespacedName: v1beta1.NamespacedName{
 										Name:      testSecretName,
 										Namespace: testNamespace,
 									},