mirror of
https://github.com/thegeeklab/drone-yaml.git
synced 2024-11-24 19:10:40 +00:00
130 lines
3.2 KiB
Go
130 lines
3.2 KiB
Go
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
||
// Use of this source code is governed by the Drone Non-Commercial License
|
||
// that can be found in the LICENSE file.
|
||
|
||
package gitlab
|
||
|
||
import (
|
||
"github.com/drone/drone-yaml/yaml/converter/internal"
|
||
)
|
||
|
||
type (
|
||
// Config defines the pipeline configuration.
|
||
Config struct {
|
||
// Image specifies the Docker image with
|
||
// which we run your builds.
|
||
Image Image
|
||
|
||
// Stages is used to group steps into stages,
|
||
// where each stage is executed sequentially.
|
||
Stages []string
|
||
|
||
// Services is used to define a set of services
|
||
// that should be started and linked to each
|
||
// step in the pipeline.
|
||
Services []*Image
|
||
|
||
// Variables is used to customize execution,
|
||
// such as the clone strategy.
|
||
Variables map[string]string
|
||
|
||
// Before contains the list of bash commands
|
||
// that are executed in sequence before the
|
||
// first job.
|
||
Before internal.StringSlice `yaml:"before_script"`
|
||
|
||
// After contains the list of bash commands
|
||
// that are executed in sequence after the
|
||
// last job.
|
||
After internal.StringSlice `yaml:"after_script"`
|
||
|
||
// Jobs is used to define individual units
|
||
// of execution that make up a stage.
|
||
Jobs map[string]*Job `yaml:",inline"`
|
||
}
|
||
|
||
// Job defines a build execution unit.
|
||
Job struct {
|
||
// Name of the pipeline step.
|
||
Name string
|
||
|
||
// Stage is the name of the stage.
|
||
Stage string
|
||
|
||
// Image specifies the Docker image with
|
||
// which we run your builds.
|
||
Image Image
|
||
|
||
// Script contains the list of bash commands
|
||
// that are executed in sequence.
|
||
Script internal.StringSlice
|
||
|
||
// Before contains the list of bash commands
|
||
// that are executed in sequence before the
|
||
// primary script.
|
||
Before internal.StringSlice `yaml:"before_script"`
|
||
|
||
// After contains the list of bash commands
|
||
// that are executed in sequence after the
|
||
// primary script.
|
||
After internal.StringSlice `yaml:"after_script"`
|
||
|
||
// Services defines a set of services linked
|
||
// to the job.
|
||
Services []*Image
|
||
|
||
// Only defines the names of branches and tags
|
||
// for which the job will run.
|
||
Only internal.StringSlice
|
||
|
||
// Except defines the names of branches and tags
|
||
// for which the job will not run.
|
||
Except internal.StringSlice
|
||
|
||
// Variables is used to customize execution,
|
||
// such as the clone strategy.
|
||
Variables map[string]string
|
||
|
||
// Allow job to fail. Failed job doesn’t contribute
|
||
// to commit status
|
||
AllowFailure bool
|
||
|
||
// Define when to run job. Can be on_success, on_failure,
|
||
// always or manual
|
||
When internal.StringSlice
|
||
}
|
||
|
||
// Image defines a Docker image.
|
||
Image struct {
|
||
Name string
|
||
Entrypoint []string
|
||
Command []string
|
||
Alias string
|
||
}
|
||
)
|
||
|
||
// UnmarshalYAML implements custom parsing for an Image.
|
||
func (i *Image) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||
var name string
|
||
err := unmarshal(&name)
|
||
if err == nil {
|
||
i.Name = name
|
||
return nil
|
||
}
|
||
data := struct {
|
||
Name string
|
||
Entrypoint internal.StringSlice
|
||
Command internal.StringSlice
|
||
Alias string
|
||
}{}
|
||
err = unmarshal(&data)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
i.Name = data.Name
|
||
i.Entrypoint = data.Entrypoint
|
||
i.Command = data.Command
|
||
i.Alias = data.Alias
|
||
return nil
|
||
}
|