grim/convey
Clone
Summary
Browse
Changes
Graph
Add a .reviewboardrc file
2022-03-26, Gary Kramlich
8fea0c778f8e
Add a .reviewboardrc file
package
config
import
(
"fmt"
"gopkg.in/yaml.v2"
"keep.imfreedom.org/grim/convey/runtime"
"keep.imfreedom.org/grim/convey/tasks"
)
type
rawConfig
struct
{
Environment
[]
string
Tasks
map
[
string
]
yaml
.
MapSlice
Plans
map
[
string
]
runtime
.
Plan
MetaPlans
map
[
string
]
runtime
.
MetaPlan
`yaml:"meta-plans"`
}
func
(
r
*
rawConfig
)
processTasks
()
(
map
[
string
]
runtime
.
Task
,
error
)
{
realTasks
:=
map
[
string
]
runtime
.
Task
{}
for
name
,
rawTask
:=
range
r
.
Tasks
{
taskType
:=
""
for
_
,
item
:=
range
rawTask
{
if
item
.
Key
==
"type"
{
rawType
,
ok
:=
item
.
Value
.(
string
)
if
!
ok
{
return
nil
,
fmt
.
Errorf
(
"the type value for task %q is not a string"
,
name
)
}
taskType
=
rawType
}
}
if
taskType
==
""
{
return
nil
,
fmt
.
Errorf
(
"task %q is missing its type"
,
name
)
}
// look for the real task in the taskmap
templateTask
,
found
:=
tasksMap
[
taskType
]
if
!
found
{
return
nil
,
fmt
.
Errorf
(
"task %q has unknown type %q"
,
name
,
taskType
)
}
realTask
,
err
:=
tasks
.
Clone
(
rawTask
,
templateTask
)
if
err
!=
nil
{
return
nil
,
err
}
realTasks
[
name
]
=
realTask
}
return
realTasks
,
nil
}
func
(
r
*
rawConfig
)
process
()
(
*
Config
,
error
)
{
cfg
:=
Config
{
Environment
:
r
.
Environment
,
MetaPlans
:
r
.
MetaPlans
,
Plans
:
r
.
Plans
,
}
tasks
,
err
:=
r
.
processTasks
()
if
err
!=
nil
{
return
nil
,
err
}
cfg
.
Tasks
=
tasks
return
&
cfg
,
nil
}