Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
0c1f2edb99 | ||
|
721857e4a0 | ||
|
6b1010ad07 | ||
|
e12252a43a | ||
|
8609522aa4 |
@@ -42,6 +42,11 @@ func TestParse(t *testing.T) {
|
|||||||
options: nil,
|
options: nil,
|
||||||
wantErr: false,
|
wantErr: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "empty_step",
|
||||||
|
options: nil,
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
@@ -40,6 +40,13 @@ func (w *SingleWorkflow) jobs() ([]string, []*Job, error) {
|
|||||||
if err := item.Decode(job); err != nil {
|
if err := item.Decode(job); err != nil {
|
||||||
return nil, nil, fmt.Errorf("yaml.Unmarshal: %w", err)
|
return nil, nil, fmt.Errorf("yaml.Unmarshal: %w", err)
|
||||||
}
|
}
|
||||||
|
steps := make([]*Step, 0, len(job.Steps))
|
||||||
|
for _, s := range job.Steps {
|
||||||
|
if s != nil {
|
||||||
|
steps = append(steps, s)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
job.Steps = steps
|
||||||
jobs = append(jobs, job)
|
jobs = append(jobs, job)
|
||||||
expectKey = true
|
expectKey = true
|
||||||
}
|
}
|
||||||
@@ -143,6 +150,9 @@ type Step struct {
|
|||||||
|
|
||||||
// String gets the name of step
|
// String gets the name of step
|
||||||
func (s *Step) String() string {
|
func (s *Step) String() string {
|
||||||
|
if s == nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
return (&model.Step{
|
return (&model.Step{
|
||||||
ID: s.ID,
|
ID: s.ID,
|
||||||
Name: s.Name,
|
Name: s.Name,
|
||||||
@@ -158,6 +168,7 @@ type ContainerSpec struct {
|
|||||||
Volumes []string `yaml:"volumes,omitempty"`
|
Volumes []string `yaml:"volumes,omitempty"`
|
||||||
Options string `yaml:"options,omitempty"`
|
Options string `yaml:"options,omitempty"`
|
||||||
Credentials map[string]string `yaml:"credentials,omitempty"`
|
Credentials map[string]string `yaml:"credentials,omitempty"`
|
||||||
|
Cmd []string `yaml:"cmd,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Strategy struct {
|
type Strategy struct {
|
||||||
|
8
pkg/jobparser/testdata/empty_step.in.yaml
vendored
Normal file
8
pkg/jobparser/testdata/empty_step.in.yaml
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
name: test
|
||||||
|
jobs:
|
||||||
|
job1:
|
||||||
|
name: job1
|
||||||
|
runs-on: linux
|
||||||
|
steps:
|
||||||
|
- run: echo job-1
|
||||||
|
-
|
7
pkg/jobparser/testdata/empty_step.out.yaml
vendored
Normal file
7
pkg/jobparser/testdata/empty_step.out.yaml
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
name: test
|
||||||
|
jobs:
|
||||||
|
job1:
|
||||||
|
name: job1
|
||||||
|
runs-on: linux
|
||||||
|
steps:
|
||||||
|
- run: echo job-1
|
@@ -522,6 +522,9 @@ type ContainerSpec struct {
|
|||||||
Args string
|
Args string
|
||||||
Name string
|
Name string
|
||||||
Reuse bool
|
Reuse bool
|
||||||
|
|
||||||
|
// Gitea specific
|
||||||
|
Cmd []string `yaml:"cmd"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step is the structure of one step in a job
|
// Step is the structure of one step in a job
|
||||||
|
@@ -246,9 +246,19 @@ func (rc *RunContext) startJobContainer() common.Executor {
|
|||||||
|
|
||||||
// add service containers
|
// add service containers
|
||||||
for name, spec := range rc.Run.Job().Services {
|
for name, spec := range rc.Run.Job().Services {
|
||||||
mergedEnv := envList
|
// interpolate env
|
||||||
|
interpolatedEnvs := make(map[string]string, len(spec.Env))
|
||||||
for k, v := range spec.Env {
|
for k, v := range spec.Env {
|
||||||
mergedEnv = append(mergedEnv, fmt.Sprintf("%s=%s", k, v))
|
interpolatedEnvs[k] = rc.ExprEval.Interpolate(ctx, v)
|
||||||
|
}
|
||||||
|
envs := make([]string, 0, len(interpolatedEnvs))
|
||||||
|
for k, v := range interpolatedEnvs {
|
||||||
|
envs = append(envs, fmt.Sprintf("%s=%s", k, v))
|
||||||
|
}
|
||||||
|
// interpolate cmd
|
||||||
|
interpolatedCmd := make([]string, 0, len(spec.Cmd))
|
||||||
|
for _, v := range spec.Cmd {
|
||||||
|
interpolatedCmd = append(interpolatedCmd, rc.ExprEval.Interpolate(ctx, v))
|
||||||
}
|
}
|
||||||
serviceContainerName := createSimpleContainerName(rc.jobContainerName(), name)
|
serviceContainerName := createSimpleContainerName(rc.jobContainerName(), name)
|
||||||
c := container.NewContainer(&container.NewContainerInput{
|
c := container.NewContainer(&container.NewContainerInput{
|
||||||
@@ -257,7 +267,8 @@ func (rc *RunContext) startJobContainer() common.Executor {
|
|||||||
Image: spec.Image,
|
Image: spec.Image,
|
||||||
Username: username,
|
Username: username,
|
||||||
Password: password,
|
Password: password,
|
||||||
Env: mergedEnv,
|
Cmd: interpolatedCmd,
|
||||||
|
Env: envs,
|
||||||
Mounts: map[string]string{
|
Mounts: map[string]string{
|
||||||
// TODO merge volumes
|
// TODO merge volumes
|
||||||
name: ext.ToContainerPath(rc.Config.Workdir),
|
name: ext.ToContainerPath(rc.Config.Workdir),
|
||||||
@@ -271,6 +282,7 @@ func (rc *RunContext) startJobContainer() common.Executor {
|
|||||||
UsernsMode: rc.Config.UsernsMode,
|
UsernsMode: rc.Config.UsernsMode,
|
||||||
Platform: rc.Config.ContainerArchitecture,
|
Platform: rc.Config.ContainerArchitecture,
|
||||||
AutoRemove: rc.Config.AutoRemove,
|
AutoRemove: rc.Config.AutoRemove,
|
||||||
|
Options: spec.Options,
|
||||||
NetworkAliases: []string{name},
|
NetworkAliases: []string{name},
|
||||||
})
|
})
|
||||||
rc.ServiceContainers = append(rc.ServiceContainers, c)
|
rc.ServiceContainers = append(rc.ServiceContainers, c)
|
||||||
|
Reference in New Issue
Block a user