From 23f08ea642e2998aa00ea90ab42bcf3002fc7f37 Mon Sep 17 00:00:00 2001 From: Ben Moss Date: Fri, 13 May 2022 11:10:37 -0400 Subject: [PATCH] Mark files executable --- hack/dependencies.go | 6 +++++- hack/dependencies_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/hack/dependencies.go b/hack/dependencies.go index bbe27cd6d..e5ff77579 100644 --- a/hack/dependencies.go +++ b/hack/dependencies.go @@ -188,10 +188,14 @@ func (c *installCommand) downloadAndVerify(ctx context.Context, dep *dependency) if err != nil { return err } - dest, err := os.Create(path.Join(c.destDir, dep.Name)) + filepath := path.Join(c.destDir, dep.Name) + dest, err := os.Create(filepath) if err != nil { return err } + if err := os.Chmod(filepath, 0777); err != nil { + return err + } if _, err := io.Copy(dest, file); err != nil { return err } diff --git a/hack/dependencies_test.go b/hack/dependencies_test.go index 127e293e9..73ba31cf5 100644 --- a/hack/dependencies_test.go +++ b/hack/dependencies_test.go @@ -8,6 +8,8 @@ import ( "fmt" "io" "net/http" + "os" + "path" "testing" ) @@ -141,6 +143,41 @@ func TestDependencyUpdate(t *testing.T) { } } +func TestDownloadAndVerify(t *testing.T) { + dep := dependency{ + Name: "test", + Repo: "benmoss/test-resources", + Version: "v1.0.0", + URLTemplate: "https://github.com/{{.Repo}}/releases/download/{{.Version}}/{{.Name}}-{{.Version}}-{{.OS}}-{{.Arch}}", + Checksums: map[string]map[string]checksum{ + "darwin": { + "amd64": "d51945f0bca8e1b54025a8a18ffebf885edd09a8731a8955100a9b0f03dbd4c0", + }, + }, + } + tmpDir, err := os.MkdirTemp("", "hack-test") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmpDir) + + install := installCommand{ + os: "darwin", + arch: "amd64", + destDir: tmpDir, + } + if err := install.downloadAndVerify(context.Background(), &dep); err != nil { + t.Fatal(err) + } + fileInfo, err := os.Stat(path.Join(tmpDir, dep.Name)) + if err != nil { + t.Fatal(err) + } + if fileInfo.Mode().Perm() != 0777 { + t.Fatalf("expected file to be executable, got mode %s", fileInfo.Mode().Perm()) + } +} + func stringPtr(str string) *string { return &str }