Properly abstract deployment asset downlod
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
package gitprovider
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewProvider(serverType, protocol, baseUrl string) (GitProvider, error) {
|
||||||
|
switch strings.ToLower(serverType) {
|
||||||
|
case "github":
|
||||||
|
return &GitHubProvider{
|
||||||
|
protocol: protocol,
|
||||||
|
baseUrl: baseUrl,
|
||||||
|
}, nil
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unsupported git provider: %s", serverType)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package github
|
package gitprovider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
@@ -12,19 +12,23 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DeployResult holds metadata about the deployed commit.
|
type GitHubProvider struct {
|
||||||
type DeployResult struct {
|
protocol string
|
||||||
CommitHash string `json:"commit_hash"`
|
baseUrl string
|
||||||
CommitMessage string `json:"commit_message"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func FetchAndDeployBranch(repoOwner, repoName, branch, pat, destDir string) (*DeployResult, error) {
|
var _ GitProvider = (*GitHubProvider)(nil)
|
||||||
result, err := fetchBranchHead(repoOwner, repoName, branch, pat)
|
|
||||||
|
func (p *GitHubProvider) FetchAndDeployBranch(owner, repo, branch, authToken, destPath string) (*DeployResult, error) {
|
||||||
|
baseUrl := strings.TrimSuffix(p.baseUrl, "/")
|
||||||
|
apiUrl := fmt.Sprintf("%s://api.%s/", p.protocol, baseUrl)
|
||||||
|
|
||||||
|
result, err := fetchBranchHead(apiUrl, owner, repo, branch, authToken)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("fetching branch head: %w", err)
|
return nil, fmt.Errorf("fetching branch head: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = downloadAndExtract(repoOwner, repoName, branch, pat, destDir); err != nil {
|
if err = downloadAndExtract(owner, repo, branch, authToken, destPath); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,10 +36,10 @@ func FetchAndDeployBranch(repoOwner, repoName, branch, pat, destDir string) (*De
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fetchBranchHead returns the SHA and commit message for the tip of the given branch.
|
// fetchBranchHead returns the SHA and commit message for the tip of the given branch.
|
||||||
func fetchBranchHead(owner, repo, branch, pat string) (*DeployResult, error) {
|
func fetchBranchHead(apiUrl, owner, repo, branch, pat string) (*DeployResult, error) {
|
||||||
url := fmt.Sprintf(
|
url := fmt.Sprintf(
|
||||||
"https://api.github.com/repos/%s/%s/commits/%s",
|
"%srepos/%s/%s/commits/%s",
|
||||||
owner, repo, branch,
|
apiUrl, owner, repo, branch,
|
||||||
)
|
)
|
||||||
|
|
||||||
req, err := http.NewRequest(http.MethodGet, url, nil)
|
req, err := http.NewRequest(http.MethodGet, url, nil)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package gitprovider
|
||||||
|
|
||||||
|
type DeployResult struct {
|
||||||
|
CommitHash string
|
||||||
|
CommitMessage string
|
||||||
|
}
|
||||||
|
|
||||||
|
type GitProvider interface {
|
||||||
|
FetchAndDeployBranch(owner, repo, branch, authToken, destPath string) (*DeployResult, error)
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"log"
|
"log"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"quay/app/github"
|
"quay/app/gitprovider"
|
||||||
"quay/app/models"
|
"quay/app/models"
|
||||||
"quay/app/repository"
|
"quay/app/repository"
|
||||||
"quay/internal/envconfig"
|
"quay/internal/envconfig"
|
||||||
@@ -129,7 +129,14 @@ func (h *DeploySiteHandler) PostDeploy(c fiber.Ctx) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := github.FetchAndDeployBranch(
|
provider, err := gitprovider.NewProvider(gitServer.Type, gitServer.Protocol, gitServer.BaseUrl)
|
||||||
|
if err != nil {
|
||||||
|
return c.Status(400).JSON(models.APIError{
|
||||||
|
Message: "Unsupported git provider: " + gitServer.Type,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := provider.FetchAndDeployBranch(
|
||||||
site.Owner,
|
site.Owner,
|
||||||
site.Repository,
|
site.Repository,
|
||||||
site.Branch,
|
site.Branch,
|
||||||
|
|||||||
Reference in New Issue
Block a user