mirror of
				https://github.com/go-task/task.git
				synced 2025-10-30 23:58:01 +02:00 
			
		
		
		
	fix: properly resolve remote entrypoints (#2438)
This commit is contained in:
		| @@ -72,6 +72,16 @@ func NewNode( | ||||
| 	return node, err | ||||
| } | ||||
|  | ||||
| func isRemoteEntrypoint(entrypoint string) bool { | ||||
| 	scheme, _ := getScheme(entrypoint) | ||||
| 	switch scheme { | ||||
| 	case "git", "http", "https": | ||||
| 		return true | ||||
| 	default: | ||||
| 		return false | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func getScheme(uri string) (string, error) { | ||||
| 	u, err := giturls.Parse(uri) | ||||
| 	if u == nil { | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import ( | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-task/task/v3/internal/execext" | ||||
| 	"github.com/go-task/task/v3/internal/filepathext" | ||||
| @@ -51,10 +50,7 @@ func (node *FileNode) Read() ([]byte, error) { | ||||
|  | ||||
| func (node *FileNode) ResolveEntrypoint(entrypoint string) (string, error) { | ||||
| 	// If the file is remote, we don't need to resolve the path | ||||
| 	if strings.Contains(entrypoint, "://") { | ||||
| 		return entrypoint, nil | ||||
| 	} | ||||
| 	if strings.HasPrefix(entrypoint, "git") { | ||||
| 	if isRemoteEntrypoint(entrypoint) { | ||||
| 		return entrypoint, nil | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -98,6 +98,11 @@ func (node *GitNode) ReadContext(_ context.Context) ([]byte, error) { | ||||
| } | ||||
|  | ||||
| func (node *GitNode) ResolveEntrypoint(entrypoint string) (string, error) { | ||||
| 	// If the file is remote, we don't need to resolve the path | ||||
| 	if isRemoteEntrypoint(entrypoint) { | ||||
| 		return entrypoint, nil | ||||
| 	} | ||||
|  | ||||
| 	dir, _ := filepath.Split(node.path) | ||||
| 	resolvedEntrypoint := fmt.Sprintf("%s//%s", node.url, filepath.Join(dir, entrypoint)) | ||||
| 	if node.ref != "" { | ||||
|   | ||||
| @@ -21,6 +21,17 @@ func TestGitNode_ssh(t *testing.T) { | ||||
| 	assert.Equal(t, "ssh://git@github.com/foo/bar.git//common.yml?ref=main", entrypoint) | ||||
| } | ||||
|  | ||||
| func TestGitNode_sshWithAltRepo(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	node, err := NewGitNode("git@github.com:foo/bar.git//Taskfile.yml?ref=main", "", false) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| 	entrypoint, err := node.ResolveEntrypoint("git@github.com:foo/other.git//Taskfile.yml?ref=dev") | ||||
| 	assert.NoError(t, err) | ||||
| 	assert.Equal(t, "git@github.com:foo/other.git//Taskfile.yml?ref=dev", entrypoint) | ||||
| } | ||||
|  | ||||
| func TestGitNode_sshWithDir(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import ( | ||||
| 	"bufio" | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/go-task/task/v3/internal/execext" | ||||
| 	"github.com/go-task/task/v3/internal/filepathext" | ||||
| @@ -43,7 +42,7 @@ func (node *StdinNode) Read() ([]byte, error) { | ||||
|  | ||||
| func (node *StdinNode) ResolveEntrypoint(entrypoint string) (string, error) { | ||||
| 	// If the file is remote, we don't need to resolve the path | ||||
| 	if strings.Contains(entrypoint, "://") { | ||||
| 	if isRemoteEntrypoint(entrypoint) { | ||||
| 		return entrypoint, nil | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user