Skip to content

ai generated windows build, untested #91

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ builds:
goos:
- linux
- darwin
- windows
goarch:
- amd64
- arm64
Expand Down
13 changes: 1 addition & 12 deletions cmd/cu/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,8 @@ func init() {
)
}

func handleSIGUSR(sigusrCh <-chan os.Signal) {
for sig := range sigusrCh {
if sig == syscall.SIGUSR1 {
dumpStacks()
}
}
}

func main() {
sigusrCh := make(chan os.Signal, 1)
signal.Notify(sigusrCh, syscall.SIGUSR1)

go handleSIGUSR(sigusrCh)
setupPlatformSignals()

ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()
Expand Down
23 changes: 23 additions & 0 deletions cmd/cu/signals_unix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//go:build unix

package main

import (
"os"
"os/signal"
"syscall"
)

func setupPlatformSignals() {
sigusrCh := make(chan os.Signal, 1)
signal.Notify(sigusrCh, syscall.SIGUSR1)
go handleSIGUSR(sigusrCh)
}

func handleSIGUSR(sigusrCh <-chan os.Signal) {
for sig := range sigusrCh {
if sig == syscall.SIGUSR1 {
dumpStacks()
}
}
}
15 changes: 15 additions & 0 deletions cmd/cu/signals_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//go:build windows

package main

import (
"os"
)

func setupPlatformSignals() {
// Windows doesn't support SIGUSR1, so this is a no-op
}

func handleSIGUSR(sigusrCh <-chan os.Signal) {
// Windows doesn't support SIGUSR1, so this is a no-op
}
13 changes: 1 addition & 12 deletions cmd/cu/terminal.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
package main

import (
"errors"
"fmt"
"log/slog"
"os"
"os/exec"
"syscall"

"dagger.io/dagger"
"github.com/dagger/container-use/environment"
Expand All @@ -24,14 +20,7 @@ var terminalCmd = &cobra.Command{
// FIXME(aluzzardi): This is a hack to make sure we're wrapped in `dagger run` since `Terminal()` only works with the CLI.
// If not, it will auto-wrap this command in a `dagger run`.
if _, ok := os.LookupEnv("DAGGER_SESSION_TOKEN"); !ok {
daggerBin, err := exec.LookPath("dagger")
if err != nil {
if errors.Is(err, exec.ErrNotFound) {
return fmt.Errorf("dagger is not installed. Please install it from https://docs.dagger.io/install/")
}
return fmt.Errorf("failed to look up dagger binary: %w", err)
}
return syscall.Exec(daggerBin, append([]string{"dagger", "run"}, os.Args...), os.Environ())
return execDagger(os.Args)
}

dag, err := dagger.Connect(ctx, dagger.WithLogOutput(os.Stderr))
Expand Down
22 changes: 22 additions & 0 deletions cmd/cu/terminal_unix.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//go:build unix

package main

import (
"errors"
"fmt"
"os"
"os/exec"
"syscall"
)

func execDagger(args []string) error {
daggerBin, err := exec.LookPath("dagger")
if err != nil {
if errors.Is(err, exec.ErrNotFound) {
return fmt.Errorf("dagger is not installed. Please install it from https://docs.dagger.io/install/")
}
return fmt.Errorf("failed to look up dagger binary: %w", err)
}
return syscall.Exec(daggerBin, append([]string{"dagger", "run"}, args...), os.Environ())
}
36 changes: 36 additions & 0 deletions cmd/cu/terminal_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
//go:build windows

package main

import (
"errors"
"fmt"
"os"
"os/exec"
)

func execDagger(args []string) error {
daggerBin, err := exec.LookPath("dagger")
if err != nil {
if errors.Is(err, exec.ErrNotFound) {
return fmt.Errorf("dagger is not installed. Please install it from https://docs.dagger.io/install/")
}
return fmt.Errorf("failed to look up dagger binary: %w", err)
}

cmd := exec.Command(daggerBin, append([]string{"run"}, args...)...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin

err = cmd.Run()
if err != nil {
if exitError, ok := err.(*exec.ExitError); ok {
os.Exit(exitError.ExitCode())
}
return err
}

os.Exit(0)
return nil
}
2 changes: 2 additions & 0 deletions cmd/cu/watch.go → cmd/cu/watch_unix.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
//go:build unix

package main

import (
Expand Down
63 changes: 63 additions & 0 deletions cmd/cu/watch_windows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
//go:build windows

package main

import (
"context"
"fmt"
"os"
"os/exec"
"time"

"github.com/spf13/cobra"
)

var watchCmd = &cobra.Command{
Use: "watch",
Short: "Watch git log output",
Long: `Watch the following git log command every second: 'git log --color=always --remotes=container-use --oneline --graph --decorate'.`,
RunE: func(app *cobra.Command, _ []string) error {
ctx := app.Context()
ticker := time.NewTicker(time.Second)
defer ticker.Stop()

// Run once immediately
if err := runGitLog(ctx); err != nil {
return err
}

for {
select {
case <-ctx.Done():
return ctx.Err()
case <-ticker.C:
if err := runGitLog(ctx); err != nil {
return err
}
}
}
},
}

func runGitLog(ctx context.Context) error {
// Clear screen (Windows cmd equivalent)
clearCmd := exec.CommandContext(ctx, "cmd", "/c", "cls")
clearCmd.Stdout = os.Stdout
clearCmd.Run() // Ignore errors for clearing screen

// Run git log command
cmd := exec.CommandContext(ctx, "git", "log", "--color=always", "--remotes=container-use", "--oneline", "--graph", "--decorate")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr

if err := cmd.Run(); err != nil {
fmt.Fprintf(os.Stderr, "Error running git log: %v\n", err)
return err
}

return nil
}

func init() {
rootCmd.AddCommand(watchCmd)
}
10 changes: 0 additions & 10 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
dagger.io/dagger v0.18.9 h1:IXZhlGm893LuqYFpo6VHtaCAEP6Qz0VjMhLvyKQVl1Y=
dagger.io/dagger v0.18.9/go.mod h1:e6Y+sAPWh04pHvBf4s3sSiOe1QMoCEcccmMv898RnZA=
dagger.io/dagger v0.18.10 h1:Ibyz5LqxjjEHfLMlaU9PJ3xt3ju7p29RWy0lVfvSNU0=
dagger.io/dagger v0.18.10/go.mod h1:VSj+2HMd/EnaCVt7gTY70p8LBW+oQDYjA1XTadr8vBE=
github.com/99designs/gqlgen v0.17.74 h1:1FuVtkXxOc87xpKio3f6sohREmec+Jvy86PcYOuwgWo=
Expand Down Expand Up @@ -109,29 +107,21 @@ go.opentelemetry.io/proto/otlp v1.7.0 h1:jX1VolD6nHuFzOYso2E73H85i92Mv8JQYk0K9vz
go.opentelemetry.io/proto/otlp v1.7.0/go.mod h1:fSKjH6YJ7HDlwzltzyMj036AJ3ejJLCgCSHGj4efDDo=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY=
golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds=
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4=
golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822 h1:oWVWY3NzT7KJppx2UKhKmzPq4SRe0LdCijVRwvGeikY=
google.golang.org/genproto/googleapis/api v0.0.0-20250603155806-513f23925822/go.mod h1:h3c4v36UTKzUiuaOKQ6gr3S+0hovBtUrXzTG/i3+XEc=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8=
google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM=
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
Expand Down