Skip to content

Commit

Permalink
Feature - Allow for schedule config
Browse files Browse the repository at this point in the history
  • Loading branch information
Gary James committed Nov 26, 2021
1 parent e6481f8 commit b238f29
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 15 deletions.
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.72
0.0.73
5 changes: 5 additions & 0 deletions docs/resources/dbt_cloud_job.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ description: |-
- **is_active** (Boolean) Flag for whether the job is marked active or deleted
- **num_threads** (Number) Number of threads to use in the job
- **run_generate_sources** (Boolean) Flag for whether the job should run generate sources
- **schedule_cron** (String) Custom cron expression for schedule
- **schedule_days** (List of Number) List of days of week as numbers (0 = Sunday, 7 = Saturday) to execute the job at if running on a schedule
- **schedule_hours** (List of Number) List of hours to execute the job at if running on a schedule
- **schedule_interval** (Number) Number of hours between job executions if running on a schedule
- **schedule_type** (String) Type of schedule to use, one of every_day/ days_of_week/ custom_cron
- **target_name** (String) Target name for the DBT profile


1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require (
github.com/aws/aws-sdk-go v1.37.0 // indirect
github.com/hashicorp/hcl/v2 v2.8.2 // indirect
github.com/hashicorp/terraform-exec v0.15.0 // indirect
github.com/hashicorp/terraform-plugin-docs v0.5.1 // indirect
github.com/hashicorp/terraform-plugin-sdk/v2 v2.7.1
github.com/mattn/go-colorable v0.1.11 // indirect
github.com/zclconf/go-cty v1.10.0 // indirect
Expand Down
13 changes: 13 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,11 @@ cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk=
Expand All @@ -64,6 +67,7 @@ github.com/apparentlymart/go-textseg/v12 v12.0.0 h1:bNEQyAGak9tojivJNkoqWErVCQbj
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw=
github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
Expand All @@ -73,6 +77,7 @@ github.com/aws/aws-sdk-go v1.37.0 h1:GzFnhOIsrGyQ69s7VgqtrG2BG8v7X7vwB3Xpbd/DBBk
github.com/aws/aws-sdk-go v1.37.0/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas=
github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4=
github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s=
Expand Down Expand Up @@ -162,6 +167,7 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
Expand Down Expand Up @@ -207,13 +213,16 @@ github.com/hashicorp/terraform-exec v0.15.0/go.mod h1:H4IG8ZxanU+NW0ZpDRNsvh9f0u
github.com/hashicorp/terraform-json v0.12.0/go.mod h1:pmbq9o4EuL43db5+0ogX10Yofv1nozM+wskr/bGFJpI=
github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY=
github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk=
github.com/hashicorp/terraform-plugin-docs v0.5.1 h1:WwrUcamix9x0TqfTw/WGHMRqoTe1QPZKaeWJPuFb4lQ=
github.com/hashicorp/terraform-plugin-docs v0.5.1/go.mod h1:SQwEgy0/B0UPQ07rNEG1Wpt6E3jvRcCwkVHPNybGgc0=
github.com/hashicorp/terraform-plugin-go v0.3.0 h1:AJqYzP52JFYl9NABRI7smXI1pNjgR5Q/y2WyVJ/BOZA=
github.com/hashicorp/terraform-plugin-go v0.3.0/go.mod h1:dFHsQMaTLpON2gWhVWT96fvtlc/MF1vSy3OdMhWBzdM=
github.com/hashicorp/terraform-plugin-sdk/v2 v2.7.1 h1:vpzKKP2dIFb9n89AG8Wxl758/5JSZWZH0OuKdlq0M38=
github.com/hashicorp/terraform-plugin-sdk/v2 v2.7.1/go.mod h1:o3pdss6ynDZW9FfiZ+rETUH5LEVufrXdhwLU+5OiRo0=
github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ=
github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM=
github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
Expand Down Expand Up @@ -262,6 +271,7 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mitchellh/cli v1.1.2 h1:PvH+lL2B7IQ101xQL63Of8yFS2y+aDlsFcsqNc+u/Kw=
github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
Expand Down Expand Up @@ -291,9 +301,12 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww=
github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY=
github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
Expand Down
40 changes: 30 additions & 10 deletions pkg/dbt_cloud/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,15 @@ type JobSettings struct {
}

type scheduleDate struct {
Type string `json:"type"`
Type string `json:"type"`
Days *[]int `json:"days,omitempty"`
Cron *string `json:"cron,omitempty"`
}

type scheduleTime struct {
Type string `json:"type"`
Interval int `json:"interval"`
Interval int `json:"interval,omitempty"`
Hours *[]int `json:"hours,omitempty"`
}

type JobSchedule struct {
Expand Down Expand Up @@ -76,7 +79,7 @@ func (c *Client) GetJob(jobID string) (*Job, error) {
return &jobResponse.Data, nil
}

func (c *Client) CreateJob(projectId int, environmentId int, name string, executeSteps []string, dbtVersion string, isActive bool, triggers map[string]interface{}, numThreads int, targetName string, generateDocs bool, runGenerateSources bool) (*Job, error) {
func (c *Client) CreateJob(projectId int, environmentId int, name string, executeSteps []string, dbtVersion string, isActive bool, triggers map[string]interface{}, numThreads int, targetName string, generateDocs bool, runGenerateSources bool, scheduleType string, scheduleInterval int, scheduleHours []int, scheduleDays []int, scheduleCron string) (*Job, error) {
state := 1
if !isActive {
state = 2
Expand Down Expand Up @@ -107,14 +110,31 @@ func (c *Client) CreateJob(projectId int, environmentId int, name string, execut
Threads: numThreads,
Target_Name: targetName,
}

time := scheduleTime{
Type: "every_hour",
Interval: 1,
}
if scheduleInterval > 0 {
time.Interval = scheduleInterval
}
if len(scheduleHours) > 0 {
time.Type = "at_exact_hours"
time.Hours = &scheduleHours
time.Interval = 0
}

date := scheduleDate{
Type: scheduleType,
}
if scheduleType == "days_of_week" {
date.Days = &scheduleDays
} else if scheduleCron != "" {
date.Cron = &scheduleCron
}
jobSchedule := JobSchedule{
Date: scheduleDate{
Type: "every_day",
},
Time: scheduleTime{
Type: "every_hour",
Interval: 1,
},
Date: date,
Time: time,
}

newJob := Job{
Expand Down
116 changes: 114 additions & 2 deletions pkg/resources/job.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ import (
"github.com/gthesheep/terraform-provider-dbt-cloud/pkg/dbt_cloud"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
)

var (
scheduleTypes = []string{
"every_day",
"days_of_week",
"custom_cron",
}
)

var jobSchema = map[string]*schema.Schema{
Expand Down Expand Up @@ -80,6 +89,45 @@ var jobSchema = map[string]*schema.Schema{
Default: false,
Description: "Flag for whether the job should run generate sources",
},
"schedule_type": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Default: "every_day",
Description: "Type of schedule to use, one of every_day/ days_of_week/ custom_cron",
ValidateFunc: validation.StringInSlice(scheduleTypes, false),
},
"schedule_interval": &schema.Schema{
Type: schema.TypeInt,
Optional: true,
Default: 1,
Description: "Number of hours between job executions if running on a schedule",
ValidateFunc: validation.IntBetween(1, 23),
ConflictsWith: []string{"schedule_hours"},
},
"schedule_hours": &schema.Schema{
Type: schema.TypeList,
MinItems: 1,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeInt,
},
Description: "List of hours to execute the job at if running on a schedule",
ConflictsWith: []string{"schedule_interval"},
},
"schedule_days": &schema.Schema{
Type: schema.TypeList,
MinItems: 1,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeInt,
},
Description: "List of days of week as numbers (0 = Sunday, 7 = Saturday) to execute the job at if running on a schedule",
},
"schedule_cron": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: "Custom cron expression for schedule",
},
}

func ResourceJob() *schema.Resource {
Expand Down Expand Up @@ -139,6 +187,27 @@ func resourceJobRead(ctx context.Context, d *schema.ResourceData, m interface{})
if err := d.Set("run_generate_sources", job.Run_Generate_Sources); err != nil {
return diag.FromErr(err)
}
if err := d.Set("schedule_type", job.Schedule.Date.Type); err != nil {
return diag.FromErr(err)
}

schedule := 1
if job.Schedule.Time.Interval > 0 {
schedule = job.Schedule.Time.Interval
}
if err := d.Set("schedule_interval", schedule); err != nil {
return diag.FromErr(err)
}

if err := d.Set("schedule_hours", job.Schedule.Time.Hours); err != nil {
return diag.FromErr(err)
}
if err := d.Set("schedule_days", job.Schedule.Date.Days); err != nil {
return diag.FromErr(err)
}
if err := d.Set("schedule_cron", job.Schedule.Date.Cron); err != nil {
return diag.FromErr(err)
}

var triggers map[string]interface{}
triggersInput, _ := json.Marshal(job.Triggers)
Expand Down Expand Up @@ -167,13 +236,26 @@ func resourceJobCreate(ctx context.Context, d *schema.ResourceData, m interface{
targetName := d.Get("target_name").(string)
generateDocs := d.Get("generate_docs").(bool)
runGenerateSources := d.Get("run_generate_sources").(bool)
scheduleType := d.Get("schedule_type").(string)
scheduleInterval := d.Get("schedule_interval").(int)
scheduleHours := d.Get("schedule_hours").([]interface{})
scheduleDays := d.Get("schedule_days").([]interface{})
scheduleCron := d.Get("schedule_cron").(string)

steps := []string{}
for _, step := range executeSteps {
steps = append(steps, step.(string))
}
hours := []int{}
for _, hour := range scheduleHours {
hours = append(hours, hour.(int))
}
days := []int{}
for _, day := range scheduleDays {
days = append(days, day.(int))
}

j, err := c.CreateJob(projectId, environmentId, name, steps, dbtVersion, isActive, triggers, numThreads, targetName, generateDocs, runGenerateSources)
j, err := c.CreateJob(projectId, environmentId, name, steps, dbtVersion, isActive, triggers, numThreads, targetName, generateDocs, runGenerateSources, scheduleType, scheduleInterval, hours, days, scheduleCron)
if err != nil {
return diag.FromErr(err)
}
Expand All @@ -191,7 +273,9 @@ func resourceJobUpdate(ctx context.Context, d *schema.ResourceData, m interface{

if d.HasChange("name") || d.HasChange("dbt_version") || d.HasChange("num_threads") ||
d.HasChange("target_name") || d.HasChange("execute_steps") || d.HasChange("run_generate_sources") ||
d.HasChange("generate_docs") || d.HasChange("triggers") {
d.HasChange("generate_docs") || d.HasChange("triggers") || d.HasChange("schedule_type") ||
d.HasChange("schedule_interval") || d.HasChange("schedule_hours") || d.HasChange("schedule_days") ||
d.HasChange("schedule_cron") {
job, err := c.GetJob(jobId)
if err != nil {
return diag.FromErr(err)
Expand Down Expand Up @@ -235,6 +319,34 @@ func resourceJobUpdate(ctx context.Context, d *schema.ResourceData, m interface{
job.Triggers.Schedule = newTriggers["schedule"].(bool)
job.Triggers.Custom_Branch_Only = newTriggers["custom_branch_only"].(bool)
}
if d.HasChange("schedule_type") {
scheduleType := d.Get("schedule_type").(string)
job.Schedule.Date.Type = scheduleType
}
if d.HasChange("schedule_interval") {
scheduleInterval := d.Get("schedule_interval").(int)
job.Schedule.Time.Interval = scheduleInterval
}
if d.HasChange("schedule_hours") {
scheduleHours := make([]int, len(d.Get("schedule_hours").([]interface{})))
for i, hour := range d.Get("schedule_hours").([]interface{}) {
scheduleHours[i] = hour.(int)
}
job.Schedule.Time.Hours = &scheduleHours
job.Schedule.Time.Type = "at_exact_hours"
job.Schedule.Time.Interval = 0
}
if d.HasChange("schedule_days") {
scheduleDays := make([]int, len(d.Get("schedule_days").([]interface{})))
for i, day := range d.Get("schedule_days").([]interface{}) {
scheduleDays[i] = day.(int)
}
job.Schedule.Date.Days = &scheduleDays
}
if d.HasChange("schedule_cron") {
scheduleCron := d.Get("schedule_cron").(string)
job.Schedule.Date.Cron = &scheduleCron
}

_, err = c.UpdateJob(jobId, *job)
if err != nil {
Expand Down
6 changes: 4 additions & 2 deletions pkg/resources/job_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,16 +118,18 @@ resource "dbt_cloud_job" "test_job" {
"dbt test"
]
triggers = {
"github_webhook": true,
"github_webhook": false,
"git_provider_webhook": false,
"schedule": false,
"schedule": true,
"custom_branch_only": false,
}
is_active = true
num_threads = 37
target_name = "test"
run_generate_sources = true
generate_docs = true
schedule_type = "every_day"
schedule_hours = [9, 17]
}
`, projectName, environmentName, jobName)
}
Expand Down

0 comments on commit b238f29

Please sign in to comment.