Skip to content

Commit 9ae2b4e

Browse files
committed
fix github runner issues
1 parent 672fd20 commit 9ae2b4e

File tree

3 files changed

+51
-3
lines changed

3 files changed

+51
-3
lines changed

cmd/toolchain.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
)
1010

1111
var (
12-
logLevel string
1312
githubToken string
1413
toolVersionsFile string
1514
toolsDir string

cmd/toolchain_get.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@ var toolchainVersionsCmd = &cobra.Command{
2727
func init() {
2828
toolchainVersionsCmd.Flags().String("file", "", "Path to tool-versions file (defaults to global --tool-versions-file)")
2929
toolchainVersionsCmd.Flags().Bool("all", false, "Fetch all available versions from GitHub API")
30-
toolchainVersionsCmd.Flags().Int("limit", 50, "Maximum number of versions to fetch when using --all")
30+
toolchainVersionsCmd.Flags().Int("limit", defaultVersionsLimit, "Maximum number of versions to fetch when using --all")
3131
}

toolchain/installer.go

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"path/filepath"
1313
"runtime"
1414
"strings"
15+
"syscall"
1516
"text/template"
1617
"time"
1718

@@ -732,13 +733,61 @@ func (i *Installer) extractTarGz(tarPath, binaryPath string, tool *Tool) error {
732733
}
733734

734735
// Move the binary into place
735-
if err := os.Rename(found, binaryPath); err != nil {
736+
if err := MoveFile(found, binaryPath); err != nil {
736737
return fmt.Errorf("failed to move extracted binary: %w", err)
737738
}
738739

739740
return nil
740741
}
741742

743+
func isCrossDeviceError(errno syscall.Errno) bool {
744+
if runtime.GOOS == "windows" {
745+
return errno == 0x11 // ERROR_NOT_SAME_DEVICE
746+
}
747+
return errno == syscall.EXDEV
748+
}
749+
750+
// MoveFile tries os.Rename, but if that fails due to cross-device link,
751+
// it falls back to a copy+remove.
752+
func MoveFile(src, dst string) error {
753+
// Ensure target dir exists
754+
if err := os.MkdirAll(filepath.Dir(dst), 0o755); err != nil {
755+
return fmt.Errorf("failed to create target dir: %w", err)
756+
}
757+
758+
if err := os.Rename(src, dst); err != nil {
759+
if err := copyFile(src, dst); err != nil {
760+
return fmt.Errorf("failed to copy during move fallback: %w", err)
761+
}
762+
if err := os.Remove(src); err != nil {
763+
return fmt.Errorf("failed to remove source after copy: %w", err)
764+
}
765+
return nil
766+
}
767+
return nil
768+
}
769+
770+
func copyFile(src, dst string) error {
771+
in, err := os.Open(src)
772+
if err != nil {
773+
return err
774+
}
775+
defer in.Close()
776+
777+
out, err := os.Create(dst)
778+
if err != nil {
779+
return err
780+
}
781+
defer func() {
782+
_ = out.Close()
783+
}()
784+
785+
if _, err = io.Copy(out, in); err != nil {
786+
return err
787+
}
788+
return out.Sync()
789+
}
790+
742791
// extractGzip decompresses a single gzip-compressed binary.
743792
func (i *Installer) extractGzip(gzPath, binaryPath string) error {
744793
log.Debug("Decompressing gzip binary", "filename", filepath.Base(gzPath))

0 commit comments

Comments
 (0)