Skip to content
This repository was archived by the owner on Dec 9, 2024. It is now read-only.

Commit 940fa6c

Browse files
committed
support individual_build
Signed-off-by: mahjonp <junpeng.man@gmail.com>
1 parent 058b616 commit 940fa6c

File tree

5 files changed

+130
-20
lines changed

5 files changed

+130
-20
lines changed

Makefile

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ LDFLAGS += -X "github.com/pingcap/tipocket/pkg/test-infra/fixture.BuildHash=$(sh
1212

1313
GOBUILD=$(GO) build -ldflags '$(LDFLAGS)'
1414

15-
DOCKER_REGISTRY_PREFIX := $(if $(DOCKER_REGISTRY),$(DOCKER_REGISTRY)/,)
15+
DOCKER_REGISTRY_TIPOCKET := $(if $(DOCKER_REGISTRY),$(DOCKER_REGISTRY)/,)tipocket
1616

1717
default: tidy fmt lint build
1818

@@ -168,8 +168,9 @@ endif
168168
groupimports: install-goimports
169169
goimports -w -l -local github.com/pingcap/tipocket $$($(PACKAGE_DIRECTORIES))
170170

171+
i ?= true
171172
init: tipocket
172-
bin/tipocket init -c $(c)
173+
bin/tipocket init -c=$(c) -i=$i
173174

174175
install-goimports:
175176
ifeq (, $(shell which goimports))
@@ -250,9 +251,11 @@ test:
250251
find testcase -mindepth 1 -maxdepth 1 -type d | xargs -I% sh -c 'cd %; make test';
251252

252253
image:
253-
DOCKER_BUILDKIT=1 docker build -t ${DOCKER_REGISTRY_PREFIX}pingcap/tipocket:latest .
254+
DOCKER_BUILDKIT=1 docker build -t ${DOCKER_REGISTRY_TIPOCKET}/tipocket:latest .
255+
find testcase -mindepth 1 -maxdepth 1 -type d | xargs -I% sh -c 'if [ -f %/Dockerfile ]; then DOCKER_BUILDKIT=1 docker build -t ${DOCKER_REGISTRY_TIPOCKET}/`basename %`:latest -f %/Dockerfile .; fi';
254256

255257
docker-push:
256-
docker push ${DOCKER_REGISTRY_PREFIX}pingcap/tipocket:latest
258+
docker push ${DOCKER_REGISTRY_TIPOCKET}/tipocket:latest
259+
find testcase -mindepth 1 -maxdepth 1 -type d | xargs -I% sh -c 'if [ -f %/Dockerfile ]; then DOCKER_BUILDKIT=1 docker push ${DOCKER_REGISTRY_TIPOCKET}/`basename %`:latest; fi';
257260

258261
.PHONY: all clean pocket compare test fmt

cmd/tipocket/init.go

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import (
1717
)
1818

1919
var (
20-
caseNameFlag string
20+
caseNameFlag string
21+
individualBuildFlag bool
2122
)
2223

2324
func newInitCmd() *cobra.Command {
@@ -35,7 +36,7 @@ func newInitCmd() *cobra.Command {
3536
RunE: func(cmd *cobra.Command, args []string) error {
3637
scaffolder := scaffolds.NewScaffold()
3738
universe := model.NewUniverse()
38-
err := scaffolder.Execute(universe, &testcase.Makefile{
39+
fileBuilders := []file.Builder{&testcase.Makefile{
3940
TemplateMixin: file.TemplateMixin{Path: filepath.Join("testcase", caseNameFlag, "Makefile")},
4041
CaseName: caseNameFlag,
4142
}, &testcase.Client{
@@ -51,23 +52,32 @@ func newInitCmd() *cobra.Command {
5152
TemplateMixin: file.TemplateMixin{Path: filepath.Join("testcase", caseNameFlag, "revive.toml")},
5253
CaseName: caseNameFlag,
5354
}, &template.MakefileUpdater{
54-
InserterMixin: file.InserterMixin{Path: "Makefile"},
55-
CaseName: caseNameFlag,
55+
InserterMixin: file.InserterMixin{Path: "Makefile"},
56+
CaseName: caseNameFlag,
57+
IndividualBuild: individualBuildFlag,
5658
}, &template.CaseJsonnetUpdater{
5759
InserterMixin: file.InserterMixin{Path: filepath.Join("run", "lib", "case.libsonnet")},
5860
CaseName: caseNameFlag,
5961
}, &workflow.CaseJsonnetTemplate{
60-
TemplateMixin: file.TemplateMixin{Path: filepath.Join("run", "workflow", fmt.Sprintf("%s.jsonnet", caseNameFlag))},
61-
CaseName: caseNameFlag,
62-
})
63-
if err != nil {
62+
TemplateMixin: file.TemplateMixin{Path: filepath.Join("run", "workflow", fmt.Sprintf("%s.jsonnet", caseNameFlag))},
63+
CaseName: caseNameFlag,
64+
IndividualBuild: individualBuildFlag,
65+
}}
66+
if individualBuildFlag {
67+
fileBuilders = append(fileBuilders, &testcase.Dockerfile{
68+
TemplateMixin: file.TemplateMixin{Path: filepath.Join("testcase", caseNameFlag, "Dockerfile")},
69+
CaseName: caseNameFlag,
70+
})
71+
}
72+
if err := scaffolder.Execute(universe, fileBuilders...); err != nil {
6473
return err
6574
}
6675
fmt.Printf("create a new case `%[1]s`: testcase/%[1]s\n", caseNameFlag)
6776
return nil
6877
},
6978
}
7079
cmd.Flags().StringVarP(&caseNameFlag, "case-name", "c", "", "test case name")
80+
cmd.Flags().BoolVarP(&individualBuildFlag, "individual-build", "i", false, "individual build from root image")
7181
cmd.MarkFlagRequired("case-name")
7282
return cmd
7383
}

pkg/scaffolds/template/makefile.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@ const (
1515
cd testcase/%[1]s; make build; \
1616
cp bin/* ../../bin/
1717
18+
`
19+
makefileCmdIndividualBuildInsertionTemplate = `%[1]s:
20+
cd testcase/%[1]s; make build;
21+
1822
`
1923
)
2024

2125
// MakefileUpdater inserts a build rule for the new test case
2226
type MakefileUpdater struct {
2327
file.InserterMixin
24-
CaseName string
28+
CaseName string
29+
IndividualBuild bool
2530
}
2631

2732
// GetIfExistsAction ...
@@ -31,8 +36,15 @@ func (m *MakefileUpdater) GetIfExistsAction() file.IfExistsAction {
3136

3237
// GetCodeFragments ...
3338
func (m *MakefileUpdater) GetCodeFragments() map[file.Marker]file.CodeFragment {
34-
return map[file.Marker]file.CodeFragment{
35-
makefileBuildMarker: {fmt.Sprintf(makefileBuildInsertionTemplate, m.CaseName)},
36-
makefileCmdMarker: {fmt.Sprintf(makefileCmdInsertionTemplate, m.CaseName)},
39+
if m.IndividualBuild {
40+
return map[file.Marker]file.CodeFragment{
41+
makefileBuildMarker: {fmt.Sprintf(makefileBuildInsertionTemplate, m.CaseName)},
42+
makefileCmdMarker: {fmt.Sprintf(makefileCmdIndividualBuildInsertionTemplate, m.CaseName)},
43+
}
44+
} else {
45+
return map[file.Marker]file.CodeFragment{
46+
makefileBuildMarker: {fmt.Sprintf(makefileBuildInsertionTemplate, m.CaseName)},
47+
makefileCmdMarker: {fmt.Sprintf(makefileCmdInsertionTemplate, m.CaseName)},
48+
}
3749
}
3850
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
// Copyright 2021 PingCAP, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// See the License for the specific language governing permissions and
12+
// limitations under the License.
13+
14+
package testcase
15+
16+
import "github.com/pingcap/tipocket/pkg/scaffolds/file"
17+
18+
// GoModule uses for go.mod
19+
type Dockerfile struct {
20+
file.TemplateMixin
21+
CaseName string
22+
}
23+
24+
// GetIfExistsAction ...
25+
func (g *Dockerfile) GetIfExistsAction() file.IfExistsAction {
26+
return file.IfExistsActionError
27+
}
28+
29+
// Validate ...
30+
func (g *Dockerfile) Validate() error {
31+
return g.TemplateMixin.Validate()
32+
}
33+
34+
// SetTemplateDefaults ...
35+
func (g *Dockerfile) SetTemplateDefaults() error {
36+
g.TemplateBody = dockerfileTemplate
37+
return nil
38+
}
39+
40+
const dockerfileTemplate = `# syntax = docker/dockerfile:1.0-experimental
41+
FROM golang:alpine3.10 AS build_base
42+
43+
RUN apk add --no-cache gcc libc-dev make bash git
44+
45+
ENV GO111MODULE=on
46+
WORKDIR /src
47+
COPY . .
48+
COPY .git .git
49+
50+
RUN rm -rf /go/src/
51+
RUN --mount=type=cache,id=tipocket_go_pkg,target=/go/pkg \
52+
--mount=type=cache,id=tipocket_go_cache,target=/root/.cache/go-build \
53+
--mount=type=tmpfs,id=tipocket_go_src,target=/go/src/ cd testcase/{{ .CaseName }} && make build
54+
55+
FROM alpine:3.8
56+
57+
RUN apk update && apk upgrade && \
58+
apk add --no-cache bash curl wget
59+
60+
RUN mkdir -p /config && mkdir -p /resources
61+
COPY --from=0 /src/testcase/{{ .CaseName }}/bin/* /bin/
62+
COPY --from=0 /src/config /config
63+
COPY --from=0 /src/resources /resources
64+
65+
EXPOSE 8080
66+
`

pkg/scaffolds/template/workflow/case.jsonnet.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import "github.com/pingcap/tipocket/pkg/scaffolds/file"
1818
// CaseJsonnetTemplate uses for client.go
1919
type CaseJsonnetTemplate struct {
2020
file.TemplateMixin
21-
CaseName string
21+
CaseName string
22+
IndividualBuild bool
2223
}
2324

2425
// GetIfExistsAction ...
@@ -33,14 +34,19 @@ func (c *CaseJsonnetTemplate) Validate() error {
3334

3435
// SetTemplateDefaults ...
3536
func (c *CaseJsonnetTemplate) SetTemplateDefaults() error {
36-
c.TemplateBody = clientTemplate
37+
if c.IndividualBuild {
38+
c.TemplateBody = clientIndividualBuildTemplate
39+
} else {
40+
c.TemplateBody = clientTemplate
41+
}
3742
return nil
3843
}
3944

40-
const clientTemplate = `{
45+
const (
46+
clientTemplate = `{
4147
_config+:: {
4248
case_name: '{{ .CaseName }}',
43-
image_name: 'hub.pingcap.net/qa/tipocket',
49+
image_name: 'hub.pingcap.net/tipocket/tipocket',
4450
args+: {
4551
// k8s configurations
4652
// 'storage-class': 'local-storage',
@@ -49,3 +55,16 @@ const clientTemplate = `{
4955
},
5056
}
5157
`
58+
clientIndividualBuildTemplate = `{
59+
_config+:: {
60+
case_name: '{{ .CaseName }}',
61+
image_name: 'hub.pingcap.net/tipocket/{{ .CaseName }}',
62+
args+: {
63+
// k8s configurations
64+
// 'storage-class': 'local-storage',
65+
},
66+
command: {},
67+
},
68+
}
69+
`
70+
)

0 commit comments

Comments
 (0)