aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--acid.go33
-rw-r--r--acid.yaml.example7
2 files changed, 25 insertions, 15 deletions
diff --git a/acid.go b/acid.go
index b206057..f938d02 100644
--- a/acid.go
+++ b/acid.go
@@ -66,10 +66,11 @@ type Config struct {
}
type ConfigRunner struct {
- Name string `yaml:"name"` // descriptive name
- Run string `yaml:"run"` // runner executable
- Setup string `yaml:"setup"` // runner setup script (SSH)
- SSH struct {
+ Name string `yaml:"name"` // descriptive name
+ Manual bool `yaml:"manual"` // only run on request
+ Run string `yaml:"run"` // runner executable
+ Setup string `yaml:"setup"` // runner setup script (SSH)
+ SSH struct {
User string `yaml:"user"` // remote username
Address string `yaml:"address"` // TCP host:port
Identity string `yaml:"identity"` // private key path
@@ -80,6 +81,18 @@ type ConfigProject struct {
Runners map[string]ConfigProjectRunner `yaml:"runners"`
}
+func (cf *ConfigProject) AutomaticRunners() (runners []string) {
+ // We pass through unknown runner names,
+ // so that they can cause reference errors later.
+ for runner := range cf.Runners {
+ if r, _ := gConfig.Runners[runner]; !r.Manual {
+ runners = append(runners, runner)
+ }
+ }
+ sort.Strings(runners)
+ return
+}
+
type ConfigProjectRunner struct {
Setup string `yaml:"setup"` // project setup script (SSH)
Build string `yaml:"build"` // project build script (SSH)
@@ -379,12 +392,7 @@ func handlePush(w http.ResponseWriter, r *http.Request) {
return
}
- runners := []string{}
- for name := range project.Runners {
- runners = append(runners, name)
- }
- sort.Strings(runners)
-
+ runners := project.AutomaticRunners()
if err := createTasks(r.Context(),
event.Repository.Owner.Username, event.Repository.Name,
event.HeadCommit.ID, runners); err != nil {
@@ -493,11 +501,8 @@ func rpcEnqueue(ctx context.Context,
runners := fs.Args()[3:]
if len(runners) == 0 {
- for runner := range project.Runners {
- runners = append(runners, runner)
- }
+ runners = project.AutomaticRunners()
}
- sort.Strings(runners)
for _, runner := range runners {
if _, ok := project.Runners[runner]; !ok {
diff --git a/acid.yaml.example b/acid.yaml.example
index 499366e..50cf0ba 100644
--- a/acid.yaml.example
+++ b/acid.yaml.example
@@ -61,7 +61,12 @@ projects:
# Project build script.
build: |
echo Computing line count...
- find . -not -path '*/.*' -type f -print0 | xargs -0 cat | wc -l
+ find . -not -path '*/.*' -type f -print0 | xargs -0 cat | wc -l \
+ | tee count
+
+ # Project deployment script.
+ deploy: |
+ # TODO: I have to figure this all out yet.
# Time limit in time.ParseDuration format.
# The default of one hour should suffice.