Skip to content

Commit f177f86

Browse files
committed
new: add --scheduler-name to build and buildrun
- test: add go test and bats tests Signed-off-by: rxinui <[email protected]>
1 parent 63a617e commit f177f86

File tree

11 files changed

+115
-4
lines changed

11 files changed

+115
-4
lines changed

docs/shp_build_create.md

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ shp build create <name> [flags]
3030
--retention-succeeded-limit uint number of succeeded BuildRuns to be kept (default 65535)
3131
--retention-ttl-after-failed duration duration to delete a failed BuildRun after completion
3232
--retention-ttl-after-succeeded duration duration to delete a succeeded BuildRun after completion
33+
--scheduler-name string specify the scheduler to be used to dispatch the Pod
3334
--source-context-dir string use a inner directory as context directory
3435
--source-git-clone-secret string name of the secret with credentials to access the git source, e.g. git credentials
3536
--source-git-revision string git repository source revision

docs/shp_build_run.md

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ shp build run <name> [flags]
3232
--retention-ttl-after-failed duration duration to delete the BuildRun after it failed
3333
--retention-ttl-after-succeeded duration duration to delete the BuildRun after it succeeded
3434
--sa-name string Kubernetes service-account name
35+
--scheduler-name string specify the scheduler to be used to dispatch the Pod
3536
--timeout duration build process timeout
3637
```
3738

docs/shp_build_upload.md

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ shp build upload <build-name> [path/to/source|.] [flags]
4242
--retention-ttl-after-failed duration duration to delete the BuildRun after it failed
4343
--retention-ttl-after-succeeded duration duration to delete the BuildRun after it succeeded
4444
--sa-name string Kubernetes service-account name
45+
--scheduler-name string specify the scheduler to be used to dispatch the Pod
4546
--timeout duration build process timeout
4647
```
4748

docs/shp_buildrun_create.md

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ shp buildrun create <name> [flags]
3131
--retention-ttl-after-failed duration duration to delete the BuildRun after it failed
3232
--retention-ttl-after-succeeded duration duration to delete the BuildRun after it succeeded
3333
--sa-name string Kubernetes service-account name
34+
--scheduler-name string specify the scheduler to be used to dispatch the Pod
3435
--timeout duration build process timeout
3536
```
3637

pkg/shp/flags/build.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ func BuildSpecFromFlags(flags *pflag.FlagSet) (*buildv1beta1.BuildSpec, *string,
4444
TTLAfterFailed: &metav1.Duration{},
4545
TTLAfterSucceeded: &metav1.Duration{},
4646
},
47-
NodeSelector: map[string]string{},
47+
NodeSelector: map[string]string{},
48+
SchedulerName: ptr.To(""),
4849
}
4950

5051
sourceFlags(flags, spec.Source)
@@ -57,6 +58,7 @@ func BuildSpecFromFlags(flags *pflag.FlagSet) (*buildv1beta1.BuildSpec, *string,
5758
imageAnnotationsFlags(flags, spec.Output.Annotations)
5859
buildRetentionFlags(flags, spec.Retention)
5960
buildNodeSelectorFlags(flags, spec.NodeSelector)
61+
buildSchedulerNameFlag(flags, spec.SchedulerName)
6062
var dockerfile, builderImage string
6163
dockerfileFlags(flags, &dockerfile)
6264
builderImageFlag(flags, &builderImage)

pkg/shp/flags/build_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ func TestBuildSpecFromFlags(t *testing.T) {
5555
Duration: 30 * time.Minute,
5656
},
5757
},
58-
NodeSelector: map[string]string{"kubernetes.io/hostname": "worker-1"},
58+
NodeSelector: map[string]string{"kubernetes.io/hostname": "worker-1"},
59+
SchedulerName: ptr.To("dolphinscheduler"),
5960
}
6061

6162
cmd := &cobra.Command{}
@@ -123,6 +124,13 @@ func TestBuildSpecFromFlags(t *testing.T) {
123124
g.Expect(expected.NodeSelector).To(o.Equal(spec.NodeSelector), ".spec.nodeSelector")
124125
})
125126

127+
t.Run(".spec.schedulerName", func(_ *testing.T) {
128+
err := flags.Set(SchedulerNameFlag, *expected.SchedulerName)
129+
g.Expect(err).To(o.BeNil())
130+
131+
g.Expect(expected.SchedulerName).To(o.Equal(spec.SchedulerName), "spec.schedulerName")
132+
})
133+
126134
t.Run(".spec.timeout", func(_ *testing.T) {
127135
err := flags.Set(TimeoutFlag, expected.Timeout.Duration.String())
128136
g.Expect(err).To(o.BeNil())

pkg/shp/flags/buildrun.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ func BuildRunSpecFromFlags(flags *pflag.FlagSet) *buildv1beta1.BuildRunSpec {
2828
TTLAfterFailed: &metav1.Duration{},
2929
TTLAfterSucceeded: &metav1.Duration{},
3030
},
31-
NodeSelector: map[string]string{},
31+
NodeSelector: map[string]string{},
32+
SchedulerName: ptr.To(""),
3233
}
3334

3435
buildRefFlags(flags, &spec.Build)
@@ -41,6 +42,7 @@ func BuildRunSpecFromFlags(flags *pflag.FlagSet) *buildv1beta1.BuildRunSpec {
4142
imageAnnotationsFlags(flags, spec.Output.Annotations)
4243
buildRunRetentionFlags(flags, spec.Retention)
4344
buildNodeSelectorFlags(flags, spec.NodeSelector)
45+
buildSchedulerNameFlag(flags, spec.SchedulerName)
4446
return spec
4547
}
4648

pkg/shp/flags/buildrun_test.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ func TestBuildRunSpecFromFlags(t *testing.T) {
3838
Duration: 30 * time.Minute,
3939
},
4040
},
41-
NodeSelector: map[string]string{"kubernetes.io/hostname": "worker-1"},
41+
NodeSelector: map[string]string{"kubernetes.io/hostname": "worker-1"},
42+
SchedulerName: ptr.To("dolphinscheduler"),
4243
}
4344

4445
cmd := &cobra.Command{}
@@ -83,6 +84,13 @@ func TestBuildRunSpecFromFlags(t *testing.T) {
8384
g.Expect(expected.NodeSelector).To(o.Equal(spec.NodeSelector), ".spec.nodeSelector")
8485
})
8586

87+
t.Run(".spec.schedulerName", func(_ *testing.T) {
88+
err := flags.Set(SchedulerNameFlag, *expected.SchedulerName)
89+
g.Expect(err).To(o.BeNil())
90+
91+
g.Expect(expected.SchedulerName).To(o.Equal(spec.SchedulerName), "spec.schedulerName")
92+
})
93+
8694
t.Run(".spec.retention.ttlAfterFailed", func(_ *testing.T) {
8795
err := flags.Set(RetentionTTLAfterFailedFlag, expected.Retention.TTLAfterFailed.Duration.String())
8896
g.Expect(err).To(o.BeNil())

pkg/shp/flags/flags.go

+12
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ const (
6666
RetentionTTLAfterSucceededFlag = "retention-ttl-after-succeeded"
6767
// NodeSelectorFlag command-line flag.
6868
NodeSelectorFlag = "node-selector"
69+
// SchedulerNameFlag command-line flag.
70+
SchedulerNameFlag = "scheduler-name"
6971
)
7072

7173
// sourceFlags flags for ".spec.source"
@@ -266,6 +268,16 @@ func buildNodeSelectorFlags(flags *pflag.FlagSet, nodeSelectorLabels map[string]
266268
flags.Var(NewMapValue(nodeSelectorLabels), NodeSelectorFlag, "set of key-value pairs that correspond to labels of a node to match")
267269
}
268270

271+
// buildSchedulerNameFlag registers flags for adding BuildSpec.SchedulerName
272+
func buildSchedulerNameFlag(flags *pflag.FlagSet, schedulerName *string) {
273+
flags.StringVar(
274+
schedulerName,
275+
SchedulerNameFlag,
276+
"",
277+
"specify the scheduler to be used to dispatch the Pod",
278+
)
279+
}
280+
269281
// envFlags registers flags for adding corev1.EnvVars.
270282
func envFlags(flags *pflag.FlagSet, envs *[]corev1.EnvVar) {
271283
flags.VarP(

test/e2e/node-selector.bats

+74
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ teardown() {
1313
run kubectl delete buildruns.shipwright.io --all
1414
}
1515

16+
<<<<<<< HEAD
17+
=======
18+
scheduler_name="dolphinscheduler"
19+
20+
>>>>>>> 3ffe829c (new: add --scheduler-name to build and buildrun)
1621
@test "shp build create --node-selector single label" {
1722
# generate random names for our build
1823
build_name=$(random_name)
@@ -50,6 +55,27 @@ teardown() {
5055
assert_output --partial '"kubernetes.io/os":"linux"'
5156
}
5257

58+
<<<<<<< HEAD
59+
=======
60+
@test "shp build create --scheduler-name" {
61+
# generate random names for our build
62+
build_name=$(random_name)
63+
64+
# create a Build with node selector
65+
run shp build create ${build_name} --source-git-url=https://github.com/shipwright-io/sample-go --output-image=my-fake-image --scheduler-name=${scheduler_name}
66+
assert_success
67+
68+
# ensure that the build was successfully created
69+
assert_output --partial "Created build \"${build_name}\""
70+
71+
# get the jsonpath of Build object .spec.nodeSelector
72+
run kubectl get builds.shipwright.io/${build_name} -ojsonpath="{.spec.schedulerName}"
73+
assert_success
74+
75+
assert_output "${scheduler_name}"
76+
}
77+
78+
>>>>>>> 3ffe829c (new: add --scheduler-name to build and buildrun)
5379
@test "shp buildrun create --node-selector single label" {
5480
# generate random names for our buildrun
5581
buildrun_name=$(random_name)
@@ -89,6 +115,28 @@ teardown() {
89115
assert_output --partial '"kubernetes.io/os":"linux"'
90116
}
91117

118+
<<<<<<< HEAD
119+
=======
120+
@test "shp buildrun create --scheduler-name" {
121+
# generate random names for our buildrun
122+
buildrun_name=$(random_name)
123+
build_name=$(random_name)
124+
125+
# create a Build with node selector
126+
run shp buildrun create ${buildrun_name} --buildref-name=${build_name} --scheduler-name=${scheduler_name}
127+
assert_success
128+
129+
# ensure that the build was successfully created
130+
assert_output --partial "BuildRun created \"${buildrun_name}\" for Build \"${build_name}\""
131+
132+
# get the jsonpath of Build object .spec.nodeSelector
133+
run kubectl get buildruns.shipwright.io/${buildrun_name} -ojsonpath="{.spec.schedulerName}"
134+
assert_success
135+
136+
assert_output "${scheduler_name}"
137+
}
138+
139+
>>>>>>> 3ffe829c (new: add --scheduler-name to build and buildrun)
92140

93141
@test "shp build run --node-selector set" {
94142
# generate random names for our build
@@ -111,4 +159,30 @@ teardown() {
111159
run kubectl get buildruns.shipwright.io -ojsonpath='{.items[*].spec.nodeSelector}'
112160
assert_success
113161
assert_output --partial '"kubernetes.io/hostname":"node-1"'
162+
<<<<<<< HEAD
163+
=======
164+
}
165+
166+
@test "shp build run --scheduler-name" {
167+
# generate random names for our build
168+
build_name=$(random_name)
169+
170+
# create a Build with node selector
171+
run shp build create ${build_name} --source-git-url=https://github.com/shipwright-io/sample-go --output-image=my-fake-image
172+
assert_success
173+
174+
# ensure that the build was successfully created
175+
assert_output --partial "Created build \"${build_name}\""
176+
177+
# get the build object
178+
run kubectl get builds.shipwright.io/${build_name}
179+
assert_success
180+
181+
run shp build run ${build_name} --scheduler-name=${scheduler_name}
182+
183+
# get the jsonpath of Build object .spec.nodeSelector
184+
run kubectl get buildruns.shipwright.io -ojsonpath='{.items[*].spec.schedulerName}'
185+
assert_success
186+
assert_output --partial "${scheduler_name}"
187+
>>>>>>> 3ffe829c (new: add --scheduler-name to build and buildrun)
114188
}

vendor/github.com/shipwright-io/build/pkg/apis/build/v1alpha1/build_types.go

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)