harness-drone/plugin/converter/starlark/args.go
2021-06-17 07:06:10 +03:00

121 lines
4.3 KiB
Go

// Copyright 2019 Drone IO, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package starlark
import (
"github.com/drone/drone/core"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
)
// TODO(bradrydzewski) add repository id
// TODO(bradrydzewski) add repository timeout
// TODO(bradrydzewski) add repository counter
// TODO(bradrydzewski) add repository created
// TODO(bradrydzewski) add repository updated
// TODO(bradrydzewski) add repository synced
// TODO(bradrydzewski) add repository version
// TODO(bradrydzewski) add build id, will always be zero value
// TODO(bradrydzewski) add build number, will always be zero value
// TODO(bradrydzewski) add build started, will always be zero value
// TODO(bradrydzewski) add build finished, will always be zero value
// TODO(bradrydzewski) add build created, will always be zero value
// TODO(bradrydzewski) add build updated, will always be zero value
// TODO(bradrydzewski) add build parent
// TODO(bradrydzewski) add build timestamp
func createArgs(repo *core.Repository, build *core.Build, input map[string]interface{}) []starlark.Value {
return []starlark.Value{
starlarkstruct.FromStringDict(
starlark.String("context"),
starlark.StringDict{
"repo": starlarkstruct.FromStringDict(starlark.String("repo"), fromRepo(repo)),
"build": starlarkstruct.FromStringDict(starlark.String("build"), fromBuild(build)),
"input": starlarkstruct.FromStringDict(starlark.String("input"), fromInput(input)),
},
),
}
}
func fromInput(input map[string]interface{}) starlark.StringDict {
out := map[string]starlark.Value{}
for k, v := range input {
if s, ok := v.(string); ok {
out[k] = starlark.String(s)
}
}
return out
}
func fromBuild(v *core.Build) starlark.StringDict {
return starlark.StringDict{
"event": starlark.String(v.Event),
"action": starlark.String(v.Action),
"cron": starlark.String(v.Cron),
"environment": starlark.String(v.Deploy),
"link": starlark.String(v.Link),
"branch": starlark.String(v.Target),
"source": starlark.String(v.Source),
"before": starlark.String(v.Before),
"after": starlark.String(v.After),
"target": starlark.String(v.Target),
"ref": starlark.String(v.Ref),
"commit": starlark.String(v.After),
"title": starlark.String(v.Title),
"message": starlark.String(v.Message),
"source_repo": starlark.String(v.Fork),
"author_login": starlark.String(v.Author),
"author_name": starlark.String(v.AuthorName),
"author_email": starlark.String(v.AuthorEmail),
"author_avatar": starlark.String(v.AuthorAvatar),
"sender": starlark.String(v.Sender),
"debug": starlark.Bool(v.Debug),
"params": fromMap(v.Params),
}
}
func fromRepo(v *core.Repository) starlark.StringDict {
return starlark.StringDict{
"uid": starlark.String(v.UID),
"name": starlark.String(v.Name),
"namespace": starlark.String(v.Namespace),
"slug": starlark.String(v.Slug),
"git_http_url": starlark.String(v.HTTPURL),
"git_ssh_url": starlark.String(v.SSHURL),
"link": starlark.String(v.Link),
"branch": starlark.String(v.Branch),
"config": starlark.String(v.Config),
"private": starlark.Bool(v.Private),
"visibility": starlark.String(v.Visibility),
"active": starlark.Bool(v.Active),
"trusted": starlark.Bool(v.Trusted),
"protected": starlark.Bool(v.Protected),
"ignore_forks": starlark.Bool(v.IgnoreForks),
"ignore_pull_requests": starlark.Bool(v.IgnorePulls),
}
}
func fromMap(m map[string]string) *starlark.Dict {
dict := new(starlark.Dict)
for k, v := range m {
dict.SetKey(
starlark.String(k),
starlark.String(v),
)
}
return dict
}