Vendoring improved
* update dagger init with package manager downloading stdlib Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * split mod get and update functions Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * write to package checksum to dagger.sum when installing/updating Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * encure checksums are valid when compiling input Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * remove references to github.com/tjovicic in docs 1010 and 1011 Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * refactor mod get command Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * update logic of moving dir when installing packages Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * fix linting errors Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * revert changes to 1010 docs Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * updating error log line in mod/get Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * fix ci tests when using vendoring Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * update alpha.dagger.io version to v0.1 Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * fix mod repo test Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * return error if package already installed Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * remove already installed packages when installing Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * fix issue when vendoring stdlib Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * update mod command with filelock while installing Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * fix linting errors Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> * fix path of mod lock file Signed-off-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> Co-authored-by: Tihomir Jovicic <tihomir.jovicic.develop@gmail.com> Signed-off-by: Sam Alba <sam.alba@gmail.com>
This commit is contained in:
90
mod/require.go
Normal file
90
mod/require.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package mod
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Require struct {
|
||||
repo string
|
||||
path string
|
||||
|
||||
cloneRepo string
|
||||
clonePath string
|
||||
|
||||
version string
|
||||
checksum string
|
||||
}
|
||||
|
||||
func newRequire(repoName string) (*Require, error) {
|
||||
switch {
|
||||
case strings.HasPrefix(repoName, "github.com"):
|
||||
return parseGithubRepoName(repoName)
|
||||
case strings.HasPrefix(repoName, "alpha.dagger.io"):
|
||||
return parseDaggerRepoName(repoName)
|
||||
default:
|
||||
return nil, fmt.Errorf("repo name does not match suported providers")
|
||||
}
|
||||
}
|
||||
|
||||
var githubRepoNameRegex = regexp.MustCompile(`(github.com/[a-zA-Z0-9_.-]+/[a-zA-Z0-9_.-]+)([a-zA-Z0-9/_.-]*)@?([0-9a-zA-Z.-]*)`)
|
||||
|
||||
func parseGithubRepoName(repoName string) (*Require, error) {
|
||||
repoMatches := githubRepoNameRegex.FindStringSubmatch(repoName)
|
||||
|
||||
if len(repoMatches) < 4 {
|
||||
return nil, fmt.Errorf("issue when parsing github repo")
|
||||
}
|
||||
|
||||
return &Require{
|
||||
repo: repoMatches[1],
|
||||
path: repoMatches[2],
|
||||
version: repoMatches[3],
|
||||
|
||||
cloneRepo: repoMatches[1],
|
||||
clonePath: repoMatches[2],
|
||||
}, nil
|
||||
}
|
||||
|
||||
var daggerRepoNameRegex = regexp.MustCompile(`alpha.dagger.io([a-zA-Z0-9/_.-]*)@?([0-9a-zA-Z.-]*)`)
|
||||
|
||||
func parseDaggerRepoName(repoName string) (*Require, error) {
|
||||
repoMatches := daggerRepoNameRegex.FindStringSubmatch(repoName)
|
||||
|
||||
if len(repoMatches) < 3 {
|
||||
return nil, fmt.Errorf("issue when parsing dagger repo")
|
||||
}
|
||||
|
||||
return &Require{
|
||||
repo: "alpha.dagger.io",
|
||||
path: repoMatches[1],
|
||||
version: repoMatches[2],
|
||||
|
||||
cloneRepo: "github.com/dagger/universe",
|
||||
clonePath: path.Join("/stdlib", repoMatches[1]),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *Require) String() string {
|
||||
return fmt.Sprintf("%s@%s", r.fullPath(), r.version)
|
||||
}
|
||||
|
||||
func (r *Require) fullPath() string {
|
||||
return path.Join(r.repo, r.path)
|
||||
}
|
||||
|
||||
func replace(r *Require, sourceRepoPath, destPath string) error {
|
||||
// remove previous package directory
|
||||
if err := os.RemoveAll(destPath); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := os.Rename(path.Join(sourceRepoPath, r.clonePath), destPath); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user