28 lines
772 B
Go
28 lines
772 B
Go
package buildpacks
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
func validBuildpackURL(buildpack string) (string, error) {
|
|
if buildpack == "" {
|
|
return buildpack, errors.New("Must specify a buildpack to add")
|
|
}
|
|
|
|
reHerokuValue := regexp.MustCompile(`(?m)^([\w]+\/[\w]+)$`)
|
|
if found := reHerokuValue.Find([]byte(buildpack)); found != nil {
|
|
parts := strings.SplitN(buildpack, "/", 2)
|
|
return fmt.Sprintf("https://github.com/%s/heroku-buildpack-%s.git", parts[0], parts[1]), nil
|
|
}
|
|
|
|
reString := regexp.MustCompile(`(?m)^(http|https|git)(:\/\/|@)([^\/:]+)[\/:]([^\/:]+)\/(.+)(.git(#derp)?)?$`)
|
|
if found := reString.Find([]byte(buildpack)); found != nil {
|
|
return buildpack, nil
|
|
}
|
|
|
|
return buildpack, fmt.Errorf("Invalid buildpack specified: %v", buildpack)
|
|
}
|