forked from mirror/github.com-drone-plugins-github-actions
76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package utils
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/pkg/errors"
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type workflow struct {
|
|
Name string `yaml:"name"`
|
|
On string `yaml:"on"`
|
|
Jobs map[string]job `yaml:"jobs"`
|
|
}
|
|
|
|
type job struct {
|
|
Name string `yaml:"name"`
|
|
RunsOn string `yaml:"runs-on"`
|
|
Steps []step `yaml:"steps"`
|
|
}
|
|
|
|
type step struct {
|
|
Uses string `yaml:"uses"`
|
|
With map[string]string `yaml:"with"`
|
|
Env map[string]string `yaml:"env"`
|
|
}
|
|
|
|
const (
|
|
workflowEvent = "push"
|
|
workflowName = "drone-github-action"
|
|
jobName = "action"
|
|
runsOnImage = "ubuntu-latest"
|
|
)
|
|
|
|
func CreateWorkflowFile(ymlFile string, action string,
|
|
with map[string]string, env map[string]string) error {
|
|
j := job{
|
|
Name: jobName,
|
|
RunsOn: runsOnImage,
|
|
Steps: []step{
|
|
{
|
|
Uses: action,
|
|
With: with,
|
|
Env: env,
|
|
},
|
|
},
|
|
}
|
|
wf := &workflow{
|
|
Name: workflowName,
|
|
On: getWorkflowEvent(),
|
|
Jobs: map[string]job{
|
|
jobName: j,
|
|
},
|
|
}
|
|
|
|
out, err := yaml.Marshal(&wf)
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed to create action workflow yml")
|
|
}
|
|
|
|
if err = ioutil.WriteFile(ymlFile, out, 0644); err != nil {
|
|
return errors.Wrap(err, "failed to write yml workflow file")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func getWorkflowEvent() string {
|
|
buildEvent := os.Getenv("DRONE_BUILD_EVENT")
|
|
if buildEvent == "push" || buildEvent == "pull_request" || buildEvent == "tag" {
|
|
return buildEvent
|
|
}
|
|
return "custom"
|
|
}
|