grim/convey
Clone
Summary
Browse
Changes
Graph
closing closed branch again
multiple-images
2018-01-26, Gary Kramlich
8e45b1f8ccff
closing closed branch again
/*
* Convey
* Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package
plans
import
(
"fmt"
"github.com/aphistic/gomol"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/logging"
"bitbucket.org/rw_grim/convey/options"
"bitbucket.org/rw_grim/convey/stages"
"bitbucket.org/rw_grim/convey/tasks"
"bitbucket.org/rw_grim/convey/workspace"
)
type
Plan
struct
{
Environment
[]
string
`yaml:"environment"`
Stages
[]
stages
.
Stage
`yaml:"stages"`
}
func
(
p
*
Plan
)
Execute
(
path
string
,
tasks
map
[
string
]
tasks
.
Task
,
env
[]
string
,
opts
*
options
.
Options
)
error
{
logger
:=
logging
.
NewAdapter
(
path
)
logger
.
Info
(
"creating workspace..."
)
ws
,
err
:=
workspace
.
Create
()
if
err
!=
nil
{
logger
.
Fatal
(
"failed to create workspace"
)
return
err
}
logger
.
Infof
(
"created workspace %s"
,
ws
.
Name
)
planEnv
:=
environment
.
Merge
(
env
,
p
.
Environment
)
// set a flag on whether or not we've failed
var
planErr
error
for
_
,
stage
:=
range
p
.
Stages
{
if
planErr
==
nil
||
stage
.
Always
{
absStageName
:=
fmt
.
Sprintf
(
"%s/%s"
,
path
,
stage
.
Name
)
stageLogger
:=
logging
.
NewAdapter
(
absStageName
)
stageLogger
.
Info
(
"stage starting"
)
err
:=
stage
.
Execute
(
absStageName
,
stageLogger
,
ws
,
tasks
,
planEnv
,
opts
)
if
err
!=
nil
{
stageLogger
.
Fatal
(
"stage failed"
)
planErr
=
err
continue
}
stageLogger
.
Info
(
"stage finished"
)
}
}
cleanupWorkspace
(
logger
,
ws
,
opts
.
KeepWorkspace
)
return
planErr
}
func
cleanupWorkspace
(
logger
*
gomol
.
LogAdapter
,
ws
*
workspace
.
Workspace
,
keep
bool
)
{
if
keep
{
logger
.
Infof
(
"not removing workspace %s as requested"
,
ws
.
Name
)
}
else
{
logger
.
Infof
(
"removing workspace %s"
,
ws
.
Name
)
if
err
:=
ws
.
Destroy
();
err
!=
nil
{
logger
.
Fatalf
(
"failed to remove workspace %s"
,
ws
.
Name
)
return
}
logger
.
Infof
(
"removed workspace %s"
,
ws
.
Name
)
}
}