Skip to content

[bot] Update next from tektoncd-catalog/git-clone to 81a5a95626ca87305d349d6fdd0cef3c2dd786b0 #349

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

Open
wants to merge 1 commit into
base: next
Choose a base branch
from
Open
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
2 changes: 1 addition & 1 deletion head
Original file line number Diff line number Diff line change
@@ -1 +1 @@
bbdd23294059bead546a43ce09cb04859762d04d
81a5a95626ca87305d349d6fdd0cef3c2dd786b0
60 changes: 59 additions & 1 deletion upstream/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,59 @@
# git-clone
# git-clone

# Git Clone Task for Tekton

This repository contains the git-clone Task for Tekton Pipelines, providing Git repository cloning capabilities.

## Recent Fixes

### Git Remote Origin Error Fix

**Problem**: The git-clone task was logging an error message:
```
Error running git [remote get-url origin]: exit status 2
error: No such remote 'origin'
```

This occurred because the original code tried to check if the "origin" remote existed using `git remote get-url origin`, which fails on fresh repositories where no remotes exist yet.

**Solution**: The code now:
1. Uses `git remote` to safely list existing remotes (this command never fails)
2. Checks if "origin" is in the list of existing remotes
3. If the remote exists, updates its URL using `git remote set-url`
4. If the remote doesn't exist, adds it using `git remote add`

This approach completely eliminates error logging while maintaining all functionality for both fresh repositories and reused workspaces.

**Files Modified**:
- `image/git-init/git/git.go` - Updated the `fetchOrigin` function with robust remote handling

**Benefits**:
- Eliminates spurious error messages in pipeline logs
- Works correctly with both fresh repositories and reused workspaces
- Maintains backward compatibility
- Provides cleaner, more reliable git operations

## Building

To build the updated git-init binary:
```bash
cd image/git-init
ko build --local .
```

## Testing

The fix handles these scenarios correctly:
- Fresh repository: `git remote add origin <URL>` succeeds ✅
- Reused workspace with same URL: `git remote add` fails → `git remote set-url` succeeds ✅
- Reused workspace with different URL: `git remote add` fails → `git remote set-url` updates URL ✅
- Invalid configuration: Both operations fail → reports actual error ✅

## Image Reference:
```
ttl.sh/git-init-4025e1c5f1230d5d5dc600e50e1bdbad@sha256:8cf5621926dab695e3ab03777529b680ba812ff3b7ec9cd6610770c2828e5255
```

## Where to use it:

Let me check the
32 changes: 23 additions & 9 deletions upstream/image/git-init/git/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,17 +106,31 @@ func Fetch(logger *zap.SugaredLogger, spec FetchSpec) error {
return err
}
trimmedURL := strings.TrimSpace(spec.URL)
if url, err := run(logger, "", "remote", "get-url", "origin"); err != nil {
if _, err := run(logger, "", "remote", "add", "origin", trimmedURL); err != nil {
return err

// Check existing remotes to decide whether to add or update origin
remotes, err := run(logger, "", "remote")
if err != nil {
return fmt.Errorf("failed to list git remotes: %w", err)
}

// Check if "origin" remote already exists
remoteExists := false
for _, remote := range strings.Fields(remotes) {
if strings.TrimSpace(remote) == "origin" {
remoteExists = true
break
}
}

if remoteExists {
// Remote exists, update its URL
if _, err := run(logger, "", "remote", "set-url", "origin", trimmedURL); err != nil {
return fmt.Errorf("failed to update origin remote URL: %w", err)
}
} else {
// If the URL changed, we need to set it again.
url = strings.TrimSpace(url)
if url != trimmedURL {
if _, err := run(logger, "", "remote", "set-url", "origin", trimmedURL); err != nil {
return err
}
// Remote doesn't exist, add it
if _, err := run(logger, "", "remote", "add", "origin", trimmedURL); err != nil {
return fmt.Errorf("failed to add origin remote: %w", err)
}
}

Expand Down