Skip to content

Commit

Permalink
feat(sdk+backend): Add support for generic ephemeral volume (#10605)
Browse files Browse the repository at this point in the history
* feat(sdk+backend): Add add_ephemeral_volume method to python sdk + add support to backend
Signed-off-by: abaland <abaland@indeed.com>

* feat(sdk+backend): Add add_ephemeral_volume method to python sdk + add support to backend

Signed-off-by: abaland <abaland@indeed.com>

* chore: upgrade go module + go mod tidy

Signed-off-by: abaland <abaland@indeed.com>

* chore: upgrade license files

Signed-off-by: abaland <abaland@indeed.com>

---------

Signed-off-by: abaland <abaland@indeed.com>
  • Loading branch information
abaland authored Apr 9, 2024
1 parent 6491df6 commit 3fb76a8
Show file tree
Hide file tree
Showing 18 changed files with 545 additions and 28 deletions.
41 changes: 41 additions & 0 deletions backend/src/v2/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -611,6 +611,47 @@ func extendPodSpecPatch(
podSpec.ActiveDeadlineSeconds = &timeout
}

// Get Pod Generic Ephemeral volume information
for _, ephemeralVolumeSpec := range kubernetesExecutorConfig.GetGenericEphemeralVolume() {
var accessModes []k8score.PersistentVolumeAccessMode
for _, value := range ephemeralVolumeSpec.GetAccessModes() {
accessModes = append(accessModes, accessModeMap[value])
}
var storageClassName *string
storageClassName = nil
if !ephemeralVolumeSpec.GetDefaultStorageClass() {
_storageClassName := ephemeralVolumeSpec.GetStorageClassName()
storageClassName = &_storageClassName
}
ephemeralVolume := k8score.Volume{
Name: ephemeralVolumeSpec.GetVolumeName(),
VolumeSource: k8score.VolumeSource{
Ephemeral: &k8score.EphemeralVolumeSource{
VolumeClaimTemplate: &k8score.PersistentVolumeClaimTemplate{
ObjectMeta: metav1.ObjectMeta{
Labels: ephemeralVolumeSpec.GetMetadata().GetLabels(),
Annotations: ephemeralVolumeSpec.GetMetadata().GetAnnotations(),
},
Spec: k8score.PersistentVolumeClaimSpec{
AccessModes: accessModes,
Resources: k8score.ResourceRequirements{
Requests: k8score.ResourceList{
k8score.ResourceStorage: k8sres.MustParse(ephemeralVolumeSpec.GetSize()),
},
},
StorageClassName: storageClassName,
},
},
},
},
}
ephemeralVolumeMount := k8score.VolumeMount{
Name: ephemeralVolumeSpec.GetVolumeName(),
MountPath: ephemeralVolumeSpec.GetMountPath(),
}
podSpec.Volumes = append(podSpec.Volumes, ephemeralVolume)
podSpec.Containers[0].VolumeMounts = append(podSpec.Containers[0].VolumeMounts, ephemeralVolumeMount)
}
return nil
}

Expand Down
189 changes: 189 additions & 0 deletions backend/src/v2/driver/driver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ package driver

import (
"encoding/json"
k8sres "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"testing"

"github.com/kubeflow/pipelines/api/v2alpha1/go/pipelinespec"
Expand Down Expand Up @@ -1272,3 +1274,190 @@ func Test_extendPodSpecPatch_ImagePullPolicy(t *testing.T) {
})
}
}

func Test_extendPodSpecPatch_GenericEphemeralVolume(t *testing.T) {
storageClass := "storageClass"
tests := []struct {
name string
k8sExecCfg *kubernetesplatform.KubernetesExecutorConfig
podSpec *k8score.PodSpec
expected *k8score.PodSpec
}{
{
"Valid - single volume added (default storage class)",
&kubernetesplatform.KubernetesExecutorConfig{
GenericEphemeralVolume: []*kubernetesplatform.GenericEphemeralVolume{
{
VolumeName: "volume",
MountPath: "/data/path",
AccessModes: []string{"ReadWriteOnce"},
Size: "5Gi",
DefaultStorageClass: true,
},
},
},
&k8score.PodSpec{
Containers: []k8score.Container{
{
Name: "main",
},
},
},
&k8score.PodSpec{
Containers: []k8score.Container{
{
Name: "main",
VolumeMounts: []k8score.VolumeMount{
{
Name: "volume",
MountPath: "/data/path",
},
},
},
},
Volumes: []k8score.Volume{
{
Name: "volume",
VolumeSource: k8score.VolumeSource{
Ephemeral: &k8score.EphemeralVolumeSource{
VolumeClaimTemplate: &k8score.PersistentVolumeClaimTemplate{
Spec: k8score.PersistentVolumeClaimSpec{
AccessModes: []k8score.PersistentVolumeAccessMode{k8score.ReadWriteOnce},
Resources: k8score.ResourceRequirements{
Requests: k8score.ResourceList{
k8score.ResourceStorage: k8sres.MustParse("5Gi"),
},
},
},
},
},
},
},
},
},
},
{
"Valid - no generic volumes specified",
&kubernetesplatform.KubernetesExecutorConfig{},
&k8score.PodSpec{
Containers: []k8score.Container{
{
Name: "main",
},
},
},
&k8score.PodSpec{
Containers: []k8score.Container{
{
Name: "main",
},
},
},
},
{
"Valid - multiple volumes specified (one with labels, one with storage class)",
&kubernetesplatform.KubernetesExecutorConfig{
GenericEphemeralVolume: []*kubernetesplatform.GenericEphemeralVolume{
{
VolumeName: "volume",
MountPath: "/data/path",
AccessModes: []string{"ReadWriteOnce"},
Size: "5Gi",
DefaultStorageClass: true,
},
{
VolumeName: "volume2",
MountPath: "/data/path2",
AccessModes: []string{"ReadWriteOnce"},
Size: "10Gi",
StorageClassName: storageClass,
Metadata: &kubernetesplatform.PodMetadata{
Annotations: map[string]string{
"annotation1": "a1",
},
Labels: map[string]string{
"label1": "l1",
},
},
},
},
},
&k8score.PodSpec{
Containers: []k8score.Container{
{
Name: "main",
},
},
},
&k8score.PodSpec{
Containers: []k8score.Container{
{
Name: "main",
VolumeMounts: []k8score.VolumeMount{
{
Name: "volume",
MountPath: "/data/path",
},
{
Name: "volume2",
MountPath: "/data/path2",
},
},
},
},
Volumes: []k8score.Volume{
{
Name: "volume",
VolumeSource: k8score.VolumeSource{
Ephemeral: &k8score.EphemeralVolumeSource{
VolumeClaimTemplate: &k8score.PersistentVolumeClaimTemplate{
Spec: k8score.PersistentVolumeClaimSpec{
AccessModes: []k8score.PersistentVolumeAccessMode{k8score.ReadWriteOnce},
Resources: k8score.ResourceRequirements{
Requests: k8score.ResourceList{
k8score.ResourceStorage: k8sres.MustParse("5Gi"),
},
},
},
},
},
},
},
{
Name: "volume2",
VolumeSource: k8score.VolumeSource{
Ephemeral: &k8score.EphemeralVolumeSource{
VolumeClaimTemplate: &k8score.PersistentVolumeClaimTemplate{
ObjectMeta: metav1.ObjectMeta{
Annotations: map[string]string{
"annotation1": "a1",
},
Labels: map[string]string{
"label1": "l1",
},
},
Spec: k8score.PersistentVolumeClaimSpec{
AccessModes: []k8score.PersistentVolumeAccessMode{k8score.ReadWriteOnce},
Resources: k8score.ResourceRequirements{
Requests: k8score.ResourceList{
k8score.ResourceStorage: k8sres.MustParse("10Gi"),
},
},
StorageClassName: &storageClass,
},
},
},
},
},
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
err := extendPodSpecPatch(tt.podSpec, tt.k8sExecCfg, nil, nil)
assert.Nil(t, err)
assert.Equal(t, tt.expected, tt.podSpec)
})
}
}
8 changes: 4 additions & 4 deletions backend/third_party_licenses/apiserver.csv
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICEN
github.com/go-sql-driver/mysql,https://github.com/go-sql-driver/mysql/blob/v1.6.0/LICENSE,MPL-2.0
github.com/go-stack/stack,https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md,MIT
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/groupcache/lru,https://github.com/golang/groupcache/blob/41bb18bfe9da/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/gnostic,https://github.com/google/gnostic/blob/v0.6.9/LICENSE,Apache-2.0
Expand Down Expand Up @@ -60,10 +60,10 @@ github.com/klauspost/compress/flate,https://github.com/klauspost/compress/blob/v
github.com/klauspost/cpuid,https://github.com/klauspost/cpuid/blob/v1.3.1/LICENSE,MIT
github.com/klauspost/cpuid/v2,https://github.com/klauspost/cpuid/blob/v2.0.9/LICENSE,MIT
github.com/klauspost/pgzip,https://github.com/klauspost/pgzip/blob/v1.2.5/LICENSE,MIT
github.com/kubeflow/pipelines/api/v2alpha1/go,https://github.com/kubeflow/pipelines/blob/758c91f76784/api/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/api/v2alpha1/go,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/api/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/backend,https://github.com/kubeflow/pipelines/blob/HEAD/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/kubernetes_platform/go/kubernetesplatform,https://github.com/kubeflow/pipelines/blob/8b2a099e8c9f/kubernetes_platform/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/third_party/ml-metadata/go/ml_metadata,https://github.com/kubeflow/pipelines/blob/e1f0c010f800/third_party/ml-metadata/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/kubernetes_platform/go/kubernetesplatform,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/kubernetes_platform/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/third_party/ml-metadata/go/ml_metadata,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/third_party/ml-metadata/LICENSE,Apache-2.0
github.com/lann/builder,https://github.com/lann/builder/blob/47ae307949d0/LICENSE,MIT
github.com/lann/ps,https://github.com/lann/ps/blob/62de8c46ede0/LICENSE,MIT
github.com/lestrrat-go/strftime,https://github.com/lestrrat-go/strftime/blob/v1.0.4/LICENSE,MIT
Expand Down
2 changes: 1 addition & 1 deletion backend/third_party_licenses/cache_server.csv
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICEN
github.com/go-sql-driver/mysql,https://github.com/go-sql-driver/mysql/blob/v1.6.0/LICENSE,MPL-2.0
github.com/go-stack/stack,https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md,MIT
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/gnostic,https://github.com/google/gnostic/blob/v0.6.9/LICENSE,Apache-2.0
github.com/google/go-cmp/cmp,https://github.com/google/go-cmp/blob/v0.6.0/LICENSE,BSD-3-Clause
Expand Down
8 changes: 4 additions & 4 deletions backend/third_party_licenses/driver.csv
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ github.com/go-openapi/jsonpointer,https://github.com/go-openapi/jsonpointer/blob
github.com/go-openapi/jsonreference,https://github.com/go-openapi/jsonreference/blob/v0.20.2/LICENSE,Apache-2.0
github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICENSE,Apache-2.0
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/groupcache/lru,https://github.com/golang/groupcache/blob/41bb18bfe9da/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/cel-go,https://github.com/google/cel-go/blob/v0.12.6/LICENSE,Apache-2.0
Expand All @@ -29,10 +29,10 @@ github.com/grpc-ecosystem/grpc-gateway,https://github.com/grpc-ecosystem/grpc-ga
github.com/jmespath/go-jmespath,https://github.com/jmespath/go-jmespath/blob/v0.4.0/LICENSE,Apache-2.0
github.com/josharian/intern,https://github.com/josharian/intern/blob/v1.0.0/license.md,MIT
github.com/json-iterator/go,https://github.com/json-iterator/go/blob/v1.1.12/LICENSE,MIT
github.com/kubeflow/pipelines/api/v2alpha1/go,https://github.com/kubeflow/pipelines/blob/758c91f76784/api/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/api/v2alpha1/go,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/api/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/backend,https://github.com/kubeflow/pipelines/blob/HEAD/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/kubernetes_platform/go/kubernetesplatform,https://github.com/kubeflow/pipelines/blob/8b2a099e8c9f/kubernetes_platform/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/third_party/ml-metadata/go/ml_metadata,https://github.com/kubeflow/pipelines/blob/e1f0c010f800/third_party/ml-metadata/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/kubernetes_platform/go/kubernetesplatform,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/kubernetes_platform/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/third_party/ml-metadata/go/ml_metadata,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/third_party/ml-metadata/LICENSE,Apache-2.0
github.com/mailru/easyjson,https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE,MIT
github.com/modern-go/concurrent,https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE,Apache-2.0
github.com/modern-go/reflect2,https://github.com/modern-go/reflect2/blob/v1.0.2/LICENSE,Apache-2.0
Expand Down
6 changes: 3 additions & 3 deletions backend/third_party_licenses/launcher.csv
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ github.com/go-openapi/jsonpointer,https://github.com/go-openapi/jsonpointer/blob
github.com/go-openapi/jsonreference,https://github.com/go-openapi/jsonreference/blob/v0.20.2/LICENSE,Apache-2.0
github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICENSE,Apache-2.0
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/groupcache/lru,https://github.com/golang/groupcache/blob/41bb18bfe9da/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/gnostic,https://github.com/google/gnostic/blob/v0.6.9/LICENSE,Apache-2.0
Expand All @@ -27,9 +27,9 @@ github.com/grpc-ecosystem/grpc-gateway,https://github.com/grpc-ecosystem/grpc-ga
github.com/jmespath/go-jmespath,https://github.com/jmespath/go-jmespath/blob/v0.4.0/LICENSE,Apache-2.0
github.com/josharian/intern,https://github.com/josharian/intern/blob/v1.0.0/license.md,MIT
github.com/json-iterator/go,https://github.com/json-iterator/go/blob/v1.1.12/LICENSE,MIT
github.com/kubeflow/pipelines/api/v2alpha1/go,https://github.com/kubeflow/pipelines/blob/758c91f76784/api/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/api/v2alpha1/go,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/api/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/backend,https://github.com/kubeflow/pipelines/blob/HEAD/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/third_party/ml-metadata/go/ml_metadata,https://github.com/kubeflow/pipelines/blob/e1f0c010f800/third_party/ml-metadata/LICENSE,Apache-2.0
github.com/kubeflow/pipelines/third_party/ml-metadata/go/ml_metadata,https://github.com/kubeflow/pipelines/blob/a78dc77a301c/third_party/ml-metadata/LICENSE,Apache-2.0
github.com/mailru/easyjson,https://github.com/mailru/easyjson/blob/v0.7.7/LICENSE,MIT
github.com/modern-go/concurrent,https://github.com/modern-go/concurrent/blob/bacd9c7ef1dd/LICENSE,Apache-2.0
github.com/modern-go/reflect2,https://github.com/modern-go/reflect2/blob/v1.0.2/LICENSE,Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion backend/third_party_licenses/persistence_agent.csv
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ github.com/go-openapi/strfmt,https://github.com/go-openapi/strfmt/blob/v0.21.1/L
github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICENSE,Apache-2.0
github.com/go-stack/stack,https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md,MIT
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/gnostic,https://github.com/google/gnostic/blob/v0.6.9/LICENSE,Apache-2.0
github.com/google/go-cmp/cmp,https://github.com/google/go-cmp/blob/v0.6.0/LICENSE,BSD-3-Clause
Expand Down
2 changes: 1 addition & 1 deletion backend/third_party_licenses/swf.csv
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ github.com/go-openapi/strfmt,https://github.com/go-openapi/strfmt/blob/v0.21.1/L
github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICENSE,Apache-2.0
github.com/go-stack/stack,https://github.com/go-stack/stack/blob/v1.8.0/LICENSE.md,MIT
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/groupcache/lru,https://github.com/golang/groupcache/blob/41bb18bfe9da/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/gnostic,https://github.com/google/gnostic/blob/v0.6.9/LICENSE,Apache-2.0
Expand Down
2 changes: 1 addition & 1 deletion backend/third_party_licenses/viewer.csv
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ github.com/go-openapi/jsonpointer,https://github.com/go-openapi/jsonpointer/blob
github.com/go-openapi/jsonreference,https://github.com/go-openapi/jsonreference/blob/v0.20.2/LICENSE,Apache-2.0
github.com/go-openapi/swag,https://github.com/go-openapi/swag/blob/v0.22.3/LICENSE,Apache-2.0
github.com/gogo/protobuf,https://github.com/gogo/protobuf/blob/v1.3.2/LICENSE,BSD-3-Clause
github.com/golang/glog,https://github.com/golang/glog/blob/v1.1.0/LICENSE,Apache-2.0
github.com/golang/glog,https://github.com/golang/glog/blob/v1.2.0/LICENSE,Apache-2.0
github.com/golang/groupcache/lru,https://github.com/golang/groupcache/blob/41bb18bfe9da/LICENSE,Apache-2.0
github.com/golang/protobuf,https://github.com/golang/protobuf/blob/v1.5.3/LICENSE,BSD-3-Clause
github.com/google/gnostic,https://github.com/google/gnostic/blob/v0.6.9/LICENSE,Apache-2.0
Expand Down
8 changes: 4 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ require (
github.com/go-openapi/swag v0.22.3
github.com/go-openapi/validate v0.20.3
github.com/go-sql-driver/mysql v1.6.0
github.com/golang/glog v1.1.0
github.com/golang/glog v1.2.0
github.com/golang/protobuf v1.5.3
github.com/google/addlicense v0.0.0-20200906110928-a0294312aa76
github.com/google/cel-go v0.12.6
Expand All @@ -28,9 +28,9 @@ require (
github.com/jinzhu/gorm v1.9.1
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/kubeflow/pipelines/api v0.0.0-20230331215358-758c91f76784
github.com/kubeflow/pipelines/kubernetes_platform v0.0.0-20240403164522-8b2a099e8c9f
github.com/kubeflow/pipelines/third_party/ml-metadata v0.0.0-20230810215105-e1f0c010f800
github.com/kubeflow/pipelines/api v0.0.0-20240403202122-a78dc77a301c
github.com/kubeflow/pipelines/kubernetes_platform v0.0.0-20240403202122-a78dc77a301c
github.com/kubeflow/pipelines/third_party/ml-metadata v0.0.0-20240403202122-a78dc77a301c
github.com/lestrrat-go/strftime v1.0.4
github.com/mattn/go-sqlite3 v1.14.19
github.com/minio/minio-go/v6 v6.0.57
Expand Down
Loading

0 comments on commit 3fb76a8

Please sign in to comment.