Skip to content

Commit 38bb2a1

Browse files
committed
feat: adds watch support, and TTY detection, with better tests
1 parent b4edd4f commit 38bb2a1

File tree

5 files changed

+81
-85
lines changed

5 files changed

+81
-85
lines changed

go.mod

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,26 @@ module github.com/nxtcoder17/runfile
33
go 1.22.7
44

55
require (
6-
github.com/alecthomas/chroma v0.10.0
7-
github.com/alecthomas/chroma/v2 v2.14.0
8-
github.com/charmbracelet/bubbles v0.20.0
9-
github.com/charmbracelet/bubbletea v1.2.4
6+
github.com/alecthomas/chroma/v2 v2.14.1-0.20241203085416-67f0e3b31d46
107
github.com/charmbracelet/lipgloss v1.0.0
11-
github.com/go-task/slim-sprig/v3 v3.0.0
128
github.com/joho/godotenv v1.5.1
139
github.com/muesli/termenv v0.15.2
14-
github.com/nxtcoder17/fwatcher v1.0.3-0.20241210142126-8465e393708a
10+
github.com/nxtcoder17/fwatcher v1.0.3-0.20241212071621-beb84ec5b061
1511
github.com/phuslu/log v1.0.112
1612
github.com/urfave/cli/v3 v3.0.0-beta1
1713
golang.org/x/sync v0.10.0
1814
sigs.k8s.io/yaml v1.4.0
1915
)
2016

2117
require (
22-
github.com/atotto/clipboard v0.1.4 // indirect
2318
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
24-
github.com/charmbracelet/x/ansi v0.5.2 // indirect
25-
github.com/charmbracelet/x/term v0.2.1 // indirect
26-
github.com/dlclark/regexp2 v1.11.0 // indirect
27-
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
19+
github.com/charmbracelet/x/ansi v0.6.0 // indirect
20+
github.com/dlclark/regexp2 v1.11.4 // indirect
21+
github.com/fsnotify/fsnotify v1.8.0 // indirect
2822
github.com/google/go-cmp v0.6.0 // indirect
2923
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
3024
github.com/mattn/go-isatty v0.0.20 // indirect
31-
github.com/mattn/go-localereader v0.0.1 // indirect
3225
github.com/mattn/go-runewidth v0.0.16 // indirect
33-
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
34-
github.com/muesli/cancelreader v0.2.2 // indirect
3526
github.com/rivo/uniseg v0.4.7 // indirect
36-
github.com/stretchr/testify v1.9.0 // indirect
37-
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
3827
golang.org/x/sys v0.28.0 // indirect
39-
golang.org/x/text v0.3.8 // indirect
4028
)

go.sum

Lines changed: 12 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,21 @@
1-
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
2-
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
3-
github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE=
4-
github.com/alecthomas/assert/v2 v2.7.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
5-
github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
6-
github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
7-
github.com/alecthomas/chroma/v2 v2.14.0 h1:R3+wzpnUArGcQz7fCETQBzO5n9IMNi13iIs46aU4V9E=
8-
github.com/alecthomas/chroma/v2 v2.14.0/go.mod h1:QolEbTfmUHIMVpBqxeDnNBj2uoeI4EbYP4i6n68SG4I=
1+
github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
2+
github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
3+
github.com/alecthomas/chroma/v2 v2.14.1-0.20241203085416-67f0e3b31d46 h1:s18LOL63NvaZHsxUMGBIxcEVJK4un5SzXuGvCGPz0lg=
4+
github.com/alecthomas/chroma/v2 v2.14.1-0.20241203085416-67f0e3b31d46/go.mod h1:gUhVLrPDXPtp/f+L1jo9xepo9gL4eLwRuGAunSZMkio=
95
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
106
github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
11-
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
12-
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
137
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
148
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
15-
github.com/charmbracelet/bubbles v0.20.0 h1:jSZu6qD8cRQ6k9OMfR1WlM+ruM8fkPWkHvQWD9LIutE=
16-
github.com/charmbracelet/bubbles v0.20.0/go.mod h1:39slydyswPy+uVOHZ5x/GjwVAFkCsV8IIVy+4MhzwwU=
17-
github.com/charmbracelet/bubbletea v1.2.4 h1:KN8aCViA0eps9SCOThb2/XPIlea3ANJLUkv3KnQRNCE=
18-
github.com/charmbracelet/bubbletea v1.2.4/go.mod h1:Qr6fVQw+wX7JkWWkVyXYk/ZUQ92a6XNekLXa3rR18MM=
199
github.com/charmbracelet/lipgloss v1.0.0 h1:O7VkGDvqEdGi93X+DeqsQ7PKHDgtQfF8j8/O2qFMQNg=
2010
github.com/charmbracelet/lipgloss v1.0.0/go.mod h1:U5fy9Z+C38obMs+T+tJqst9VGzlOYGj4ri9reL3qUlo=
21-
github.com/charmbracelet/x/ansi v0.5.2 h1:dEa1x2qdOZXD/6439s+wF7xjV+kZLu/iN00GuXXrU9E=
22-
github.com/charmbracelet/x/ansi v0.5.2/go.mod h1:KBUFw1la39nl0dLl10l5ORDAqGXaeurTQmwyyVKse/Q=
23-
github.com/charmbracelet/x/term v0.2.1 h1:AQeHeLZ1OqSXhrAWpYUtZyX1T3zVxfpZuEQMIQaGIAQ=
24-
github.com/charmbracelet/x/term v0.2.1/go.mod h1:oQ4enTYFV7QN4m0i9mzHrViD7TQKvNEEkHUMCmsxdUg=
25-
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
11+
github.com/charmbracelet/x/ansi v0.6.0 h1:qOznutrb93gx9oMiGf7caF7bqqubh6YIM0SWKyA08pA=
12+
github.com/charmbracelet/x/ansi v0.6.0/go.mod h1:KBUFw1la39nl0dLl10l5ORDAqGXaeurTQmwyyVKse/Q=
2613
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
2714
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
28-
github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
29-
github.com/dlclark/regexp2 v1.11.0 h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
30-
github.com/dlclark/regexp2 v1.11.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
31-
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4=
32-
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM=
33-
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
34-
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
15+
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
16+
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
17+
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
18+
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
3519
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
3620
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
3721
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
@@ -43,46 +27,30 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69
4327
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
4428
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
4529
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
46-
github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4=
47-
github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88=
4830
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
4931
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
50-
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI=
51-
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo=
52-
github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA=
53-
github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo=
5432
github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo=
5533
github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8=
56-
github.com/nxtcoder17/fwatcher v1.0.3-0.20241210142126-8465e393708a h1:lAVn2+j+f1Nfe5ndya0ByTAZ30h5Y7bb4kSMQQXGVAw=
57-
github.com/nxtcoder17/fwatcher v1.0.3-0.20241210142126-8465e393708a/go.mod h1:MNmSwXYOrqp7U1pUxh0GWB5skpjFTWTQXhAA0+sPJcU=
34+
github.com/nxtcoder17/fwatcher v1.0.3-0.20241212071621-beb84ec5b061 h1:bNRVjvghGLiCJ9EOTS/qkrSAyKvz4e2S6CMzL8GnxgI=
35+
github.com/nxtcoder17/fwatcher v1.0.3-0.20241212071621-beb84ec5b061/go.mod h1:MNmSwXYOrqp7U1pUxh0GWB5skpjFTWTQXhAA0+sPJcU=
5836
github.com/phuslu/log v1.0.112 h1:vQ0ZFd5O+in/0IQAcjuEl6wRkHiQPw7T0sqwmOjpL0U=
5937
github.com/phuslu/log v1.0.112/go.mod h1:F8osGJADo5qLK/0F88djWwdyoZZ9xDJQL1HYRHFEkS0=
6038
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
6139
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
6240
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
6341
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
6442
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
65-
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
66-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
6743
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
6844
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
69-
github.com/urfave/cli/v3 v3.0.0-alpha9 h1:P0RMy5fQm1AslQS+XCmy9UknDXctOmG/q/FZkUFnJSo=
70-
github.com/urfave/cli/v3 v3.0.0-alpha9/go.mod h1:0kK/RUFHyh+yIKSfWxwheGndfnrvYSmYFVeKCh03ZUc=
7145
github.com/urfave/cli/v3 v3.0.0-beta1 h1:6DTaaUarcM0wX7qj5Hcvs+5Dm3dyUTBbEwIWAjcw9Zg=
7246
github.com/urfave/cli/v3 v3.0.0-beta1/go.mod h1:FnIeEMYu+ko8zP1F9Ypr3xkZMIDqW3DR92yUtY39q1Y=
73-
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
74-
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
7547
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
7648
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
77-
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
7849
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
7950
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
8051
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
81-
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
82-
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
8352
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
8453
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
85-
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
8654
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
8755
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
8856
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=

runner/run-task.go

Lines changed: 53 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ import (
66
"fmt"
77
"os"
88
"os/exec"
9+
"path/filepath"
910
"strings"
11+
"time"
1012

11-
"github.com/alecthomas/chroma/quick"
13+
"github.com/alecthomas/chroma/v2/quick"
1214
"github.com/charmbracelet/lipgloss"
1315
"github.com/muesli/termenv"
1416
"github.com/nxtcoder17/fwatcher/pkg/executor"
17+
"github.com/nxtcoder17/fwatcher/pkg/watcher"
1518
"github.com/nxtcoder17/runfile/errors"
1619
fn "github.com/nxtcoder17/runfile/functions"
1720
"github.com/nxtcoder17/runfile/parser"
@@ -143,34 +146,27 @@ func runTask(ctx Context, prf *types.ParsedRunfile, args runTaskArgs) error {
143146
borderColor = "#3d5485"
144147
}
145148
s := lipgloss.NewStyle().BorderForeground(lipgloss.Color(borderColor)).PaddingLeft(1).PaddingRight(1).Border(lipgloss.RoundedBorder(), true, true, true, true)
149+
// labelStyle := lipgloss.NewStyle().Foreground(lipgloss.Color(borderColor)).Blink(true)
146150

147151
hlCode := new(bytes.Buffer)
148152
// choose colorschemes from `https://swapoff.org/chroma/playground/`
149153
colorscheme := "catppuccin-macchiato"
150154
if !isDarkTheme() {
151155
colorscheme = "monokailight"
152156
}
153-
quick.Highlight(hlCode, strings.TrimSpace(command.Command), "bash", "terminal16m", colorscheme)
157+
_ = colorscheme
158+
// quick.Highlight(hlCode, strings.TrimSpace(command.Command), "bash", "terminal16m", colorscheme)
159+
160+
cmdStr := strings.TrimSpace(command.Command)
161+
162+
quick.Highlight(hlCode, cmdStr, "bash", "terminal16m", colorscheme)
163+
// cst := styles.Get("gruvbox")
164+
// fmt.Println("cst: ", cst.Name, styles.Fallback.Name, styles.Names())
154165

155166
// fmt.Printf("%s\n", s.Render(args.taskName+" | "+hlCode.String()))
156167
fmt.Printf("%s\n", s.Render(padString(hlCode.String(), args.taskName)))
157168
}
158169

159-
// cmd := CreateCommand(ctx, CmdArgs{
160-
// Shell: pt.Shell,
161-
// Env: fn.ToEnviron(pt.Env),
162-
// Cmd: command.Command,
163-
// WorkingDir: pt.WorkingDir,
164-
// interactive: pt.Interactive,
165-
// Stdout: os.Stdout,
166-
// Stderr: os.Stderr,
167-
// })
168-
169-
// logger2 := logging.New(logging.Options{
170-
// Prefix: "executor",
171-
// ShowDebugLogs: true,
172-
// })
173-
174170
ex := executor.NewExecutor(executor.ExecutorArgs{
175171
Logger: logger,
176172
Command: func(c context.Context) *exec.Cmd {
@@ -186,11 +182,47 @@ func runTask(ctx Context, prf *types.ParsedRunfile, args runTaskArgs) error {
186182
},
187183
})
188184

189-
// if err := cmd.Run(); err != nil {
190-
// return errors.ErrTaskFailed.Wrap(err).KV("cmd", cmd.String())
191-
// }
185+
if task.Watch.Enable {
186+
watch, err := watcher.NewWatcher(watcher.WatcherArgs{
187+
Logger: logger,
188+
WatchDirs: append(task.Watch.Dirs, pt.WorkingDir),
189+
OnlySuffixes: pt.Watch.OnlySuffixes,
190+
IgnoreSuffixes: pt.Watch.IgnoreSuffixes,
191+
ExcludeDirs: pt.Watch.ExcludeDirs,
192+
UseDefaultIgnoreList: true,
193+
})
194+
if err != nil {
195+
return errors.WithErr(err)
196+
}
197+
198+
go ex.Exec()
199+
200+
go func() {
201+
<-ctx.Done()
202+
logger.Info("fwatcher is closing ...")
203+
<-time.After(200 * time.Millisecond)
204+
os.Exit(0)
205+
}()
206+
207+
// if err := ex.Exec(); err != nil {
208+
// return errors.ErrTaskFailed.Wrap(err).KV("task", args.taskName)
209+
// }
210+
211+
watch.WatchEvents(func(event watcher.Event, fp string) error {
212+
relPath, err := filepath.Rel(fn.Must(os.Getwd()), fp)
213+
if err != nil {
214+
return err
215+
}
216+
logger.Info(fmt.Sprintf("[RELOADING] due changes in %s", relPath))
217+
ex.Kill()
218+
<-time.After(100 * time.Millisecond)
219+
go ex.Exec()
220+
return nil
221+
})
222+
223+
return nil
224+
}
192225

193-
// wg.Wait()
194226
if err := ex.Exec(); err != nil {
195227
return errors.ErrTaskFailed.Wrap(err).KV("task", args.taskName)
196228
}

types/parsed-types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package types
33
type ParsedTask struct {
44
Shell []string `json:"shell"`
55
WorkingDir string `json:"workingDir"`
6+
Watch TaskWatch `json:"watch"`
67
Env map[string]string `json:"environ"`
78
Interactive bool `json:"interactive,omitempty"`
89
Commands []ParsedCommandJson `json:"commands"`

types/types.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ type Requires struct {
2929
}
3030

3131
/*
32-
EnvVar Values could take multiple forms:
32+
// EnvVar Values could take multiple forms:
3333
- my_key: "value"
3434
or
3535
- my_key:
@@ -44,6 +44,14 @@ type TaskMetadata struct {
4444
Description string `json:"description"`
4545
}
4646

47+
type TaskWatch struct {
48+
Enable bool `json:"enable"`
49+
Dirs []string `json:"dirs"`
50+
OnlySuffixes []string `json:"onlySuffixes"`
51+
IgnoreSuffixes []string `json:"ignoreSuffixes"`
52+
ExcludeDirs []string `json:"excludeDirs"`
53+
}
54+
4755
type Task struct {
4856
Metadata struct {
4957
RunfilePath *string
@@ -67,8 +75,7 @@ type Task struct {
6775

6876
Env EnvVar `json:"env,omitempty"`
6977

70-
// this field is for testing purposes only
71-
ignoreSystemEnv bool `json:"-"`
78+
Watch TaskWatch `json:"watch"`
7279

7380
Requires []*Requires `json:"requires,omitempty"`
7481

0 commit comments

Comments
 (0)