Skip to content

Commit 3b2f684

Browse files
author
Eric Stroczynski
authored
test/test-framework: add go.mod, go.sum and build/Dockerfile (#2202)
* test/test-framework: add go.mod, go.sum and build/Dockerfile, and update CRDs after running generators * hack/generate/gen-test-framework.sh: remove workarounds for lack of go.mod, go.sum, build/Dockerfile * internal/scaffold/crd_test.go: modularizing test/test-framework broke the Go project test because submodules are not packages of a module, which caused CRD generator errors. Changing wd to test/test-framework fixed the issue. Add Replace for invalid doc link * release.md: add test/test-framework/go.mod to list of updated files
1 parent 422ae38 commit 3b2f684

File tree

7 files changed

+813
-18
lines changed

7 files changed

+813
-18
lines changed

doc/dev/release.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,10 @@ $ git checkout -b release-v1.3.0
196196
Commit the following changes:
197197
198198
- `version/version.go`: update `Version` to `v1.3.0`.
199-
- `internal/scaffold/go_mod.go`, in the `require` block for `github.com/operator-framework/operator-sdk`:
200-
- Change the version for `github.com/operator-framework/operator-sdk` from `master` to `v1.3.0`.
199+
- `internal/scaffold/go_mod.go`, change the `require` line version for `github.com/operator-framework/operator-sdk` from `master` to `v1.3.0`.
201200
- `internal/scaffold/helm/go_mod.go`: same as for `internal/scaffold/go_mod.go`.
202201
- `internal/scaffold/ansible/go_mod.go`: same as for `internal/scaffold/go_mod.go`.
202+
- `test/test-framework/go.mod`: change the `require` line version for `github.com/operator-framework/operator-sdk` from its current version to `v1.3.0`.
203203
- `CHANGELOG.md`: update the `## Unreleased` header to `## v1.3.0`.
204204
- `doc/user/install-operator-sdk.md`: update the linux and macOS URLs to point to the new release URLs.
205205
@@ -236,8 +236,7 @@ Once this tag passes CI, go to step 3. For more info on tagging, see the [releas
236236
Check out a new branch from master (or use your `release-v1.3.0` branch) and commit the following changes:
237237
238238
- `version/version.go`: update `Version` to `v1.3.0+git`.
239-
- `internal/scaffold/go_mod.go`, in the `require` block for `github.com/operator-framework/operator-sdk`:
240-
- Change the version for `github.com/operator-framework/operator-sdk` from `v1.3.0` to `master`.
239+
- `internal/scaffold/go_mod.go`, change the `require` line version for `github.com/operator-framework/operator-sdk` from `v1.3.0` to `master`.
241240
- `internal/scaffold/helm/go_mod.go`: same as for `internal/scaffold/go_mod.go`.
242241
- `internal/scaffold/ansible/go_mod.go`: same as for `internal/scaffold/go_mod.go`.
243242
- `CHANGELOG.md`: add the following as a new set of headers above `## v1.3.0`:

hack/generate/gen-test-framework.sh

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,22 @@ set -ex
88

99
source hack/lib/test_lib.sh
1010

11-
# Define vars
12-
DOCKERFILE="build/Dockerfile"
13-
1411
# Go inside of the mock data test project
1512
cd test/test-framework
1613

17-
# Create the required files in the mock test/test-framework just to allow run from it the oprator-sdk commands
18-
echo > $DOCKERFILE
19-
go mod init test-framework
20-
21-
# Remove files that are required and created just to exec the commands.
22-
trap_add 'rm -rf $DOCKERFILE go.mod go.sum' EXIT
14+
# Ensure test-framework is up-to-date with current Go project dependencies.
15+
# NOTE: the SDK dependency version still needs updating on a new release.
16+
sdk_version="$(go list -m -f '{{.Version}}' github.com/operator-framework/operator-sdk)"
17+
../../build/operator-sdk print-deps > go.mod
18+
sed -i 's|github.com/operator-framework/operator-sdk\s*master||g' go.mod
19+
echo -e "\nreplace github.com/operator-framework/operator-sdk => ../../" >> go.mod
20+
go mod edit -require "github.com/operator-framework/operator-sdk@${sdk_version}"
21+
go build ./...
22+
go mod tidy
2323

2424
# Run gen commands
2525
../../build/operator-sdk generate k8s
26-
../../build/operator-sdk generate openapi
27-
2826
# TODO(camilamacedo86): remove this when the openapi gen be set to false and it no longer is generated
2927
# The following file is gen by openapi but it has not been committed in order to allow we clone and call the test locally in any path.
30-
trap_add 'rm pkg/apis/cache/v1alpha1/zz_generated.openapi.go' EXIT
28+
trap_add 'rm pkg/apis/cache/v1alpha1/zz_generated.openapi.go' EXIT
29+
../../build/operator-sdk generate openapi

internal/scaffold/crd.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package scaffold
1616

1717
import (
18+
"bytes"
1819
"fmt"
1920
"io"
2021
"os"
@@ -112,6 +113,15 @@ func (s *CRD) CustomRender() ([]byte, error) {
112113
}
113114
return nil, err
114115
}
116+
// Until we bump dependencies to Kubernetes v1.16, generated validation
117+
// descriptions for kind and apiVersion will contain an invalid link.
118+
// Manually replace them here.
119+
//
120+
// TODO(estroz): remove on k8s v1.16 bump.
121+
b = bytes.ReplaceAll(b,
122+
[]byte("https://git.k8s.io/community/contributors/devel/api-conventions.md"),
123+
[]byte("https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md"),
124+
)
115125
if err = yaml.Unmarshal(b, crd); err != nil {
116126
return nil, err
117127
}

internal/scaffold/crd_test.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package scaffold
1616

1717
import (
18+
"os"
1819
"path/filepath"
1920
"testing"
2021

@@ -42,6 +43,15 @@ func TestCRDGoProject(t *testing.T) {
4243
t.Fatal(err)
4344
}
4445

46+
// Must change directories since the test framework dir is a sub-module.
47+
wd, err := os.Getwd()
48+
if err != nil {
49+
t.Fatal(err)
50+
}
51+
defer func() { os.Chdir(wd) }()
52+
if err = os.Chdir(cfg.AbsProjectPath); err != nil {
53+
t.Fatal(err)
54+
}
4555
err = s.Execute(cfg, &CRD{Resource: r, IsOperatorGo: true})
4656
if err != nil {
4757
t.Fatalf("Failed to execute the scaffold: (%v)", err)
@@ -74,12 +84,12 @@ spec:
7484
apiVersion:
7585
description: 'APIVersion defines the versioned schema of this representation
7686
of an object. Servers should convert recognized schemas to the latest
77-
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
87+
internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
7888
type: string
7989
kind:
8090
description: 'Kind is a string value representing the REST resource this
8191
object represents. Servers may infer this from the endpoint the client
82-
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
92+
submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
8393
type: string
8494
metadata:
8595
type: object

test/test-framework/build/Dockerfile

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
FROM registry.access.redhat.com/ubi8/ubi-minimal:latest
2+
3+
ENV OPERATOR=/usr/local/bin/memcached-operator \
4+
USER_UID=1001 \
5+
USER_NAME=test-framework
6+
7+
# install operator binary
8+
COPY build/_output/bin/test-framework ${OPERATOR}
9+
10+
COPY build/bin /usr/local/bin
11+
RUN /usr/local/bin/user_setup
12+
13+
ENTRYPOINT ["/usr/local/bin/entrypoint"]
14+
15+
USER ${USER_UID}

test/test-framework/go.mod

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
module github.com/operator-framework/operator-sdk/test/test-framework
2+
3+
go 1.13
4+
5+
require (
6+
github.com/operator-framework/operator-sdk v0.12.1-0.20191114194531-79e6369540c6
7+
github.com/spf13/pflag v1.0.3
8+
k8s.io/api v0.0.0
9+
k8s.io/apimachinery v0.0.0
10+
k8s.io/client-go v11.0.0+incompatible
11+
sigs.k8s.io/controller-runtime v0.3.0
12+
)
13+
14+
// Pinned to kubernetes-1.15.4
15+
replace (
16+
k8s.io/api => k8s.io/api v0.0.0-20190918195907-bd6ac527cfd2
17+
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.0.0-20190918201827-3de75813f604
18+
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190817020851-f2f3a405f61d
19+
k8s.io/apiserver => k8s.io/apiserver v0.0.0-20190918200908-1e17798da8c1
20+
k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20190918202139-0b14c719ca62
21+
k8s.io/client-go => k8s.io/client-go v0.0.0-20190918200256-06eb1244587a
22+
k8s.io/cloud-provider => k8s.io/cloud-provider v0.0.0-20190918203125-ae665f80358a
23+
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.0.0-20190918202959-c340507a5d48
24+
k8s.io/code-generator => k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b
25+
k8s.io/component-base => k8s.io/component-base v0.0.0-20190918200425-ed2f0867c778
26+
k8s.io/cri-api => k8s.io/cri-api v0.0.0-20190817025403-3ae76f584e79
27+
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.0.0-20190918203248-97c07dcbb623
28+
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.0.0-20190918201136-c3a845f1fbb2
29+
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.0.0-20190918202837-c54ce30c680e
30+
k8s.io/kube-proxy => k8s.io/kube-proxy v0.0.0-20190918202429-08c8357f8e2d
31+
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.0.0-20190918202713-c34a54b3ec8e
32+
k8s.io/kubelet => k8s.io/kubelet v0.0.0-20190918202550-958285cf3eef
33+
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20190918203421-225f0541b3ea
34+
k8s.io/metrics => k8s.io/metrics v0.0.0-20190918202012-3c1ca76f5bda
35+
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.0.0-20190918201353-5cc279503896
36+
)
37+
38+
replace github.com/operator-framework/operator-sdk => ../../

0 commit comments

Comments
 (0)