*: export clients and related types
Export clients and related packages. The main rule is to not import internal packages from exported packages. The gateway client and related types are totally decoupled from the gateway service (not shared types between the client and the server). Instead the configstore and the runservice client currently share many types that are now exported (decoupling them will require that a lot of types must be duplicated and the need of functions to convert between them, this will be done in future when the APIs will be declared as stable).
This commit is contained in:
parent
a52b52865c
commit
c1ff28ef9f
|
@ -36,7 +36,7 @@ local task_build_go(version, arch) = {
|
||||||
{ type: 'run', command: 'golangci-lint run --deadline 5m' },
|
{ type: 'run', command: 'golangci-lint run --deadline 5m' },
|
||||||
{ type: 'run', name: 'build docker/k8s drivers tests binary', command: 'CGO_ENABLED=0 go test -c ./internal/services/executor/driver -o ./bin/docker-tests' },
|
{ type: 'run', name: 'build docker/k8s drivers tests binary', command: 'CGO_ENABLED=0 go test -c ./internal/services/executor/driver -o ./bin/docker-tests' },
|
||||||
{ type: 'run', name: 'build integration tests binary', command: 'go test -tags "sqlite_unlock_notify" -c ./tests -o ./bin/integration-tests' },
|
{ type: 'run', name: 'build integration tests binary', command: 'go test -tags "sqlite_unlock_notify" -c ./tests -o ./bin/integration-tests' },
|
||||||
{ type: 'run', name: 'run tests', command: 'SKIP_DOCKER_TESTS=1 SKIP_K8S_TESTS=1 go test -v -count 1 ./cmd/... ./internal/...' },
|
{ type: 'run', name: 'run tests', command: 'SKIP_DOCKER_TESTS=1 SKIP_K8S_TESTS=1 go test -v -count 1 $(go list ./... | grep -v /tests)' },
|
||||||
{ type: 'run', name: 'fetch gitea binary for integration tests', command: 'curl -L https://github.com/go-gitea/gitea/releases/download/v1.8.3/gitea-1.8.3-linux-amd64 -o ./bin/gitea && chmod +x ./bin/gitea' },
|
{ type: 'run', name: 'fetch gitea binary for integration tests', command: 'curl -L https://github.com/go-gitea/gitea/releases/download/v1.8.3/gitea-1.8.3-linux-amd64 -o ./bin/gitea && chmod +x ./bin/gitea' },
|
||||||
{ type: 'save_to_workspace', contents: [{ source_dir: './bin', dest_dir: '/bin/', paths: ['*'] }] },
|
{ type: 'save_to_workspace', contents: [{ source_dir: './bin', dest_dir: '/bin/', paths: ['*'] }] },
|
||||||
],
|
],
|
||||||
|
|
|
@ -20,8 +20,9 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
gitsave "agola.io/agola/internal/git-save"
|
gitsave "agola.io/agola/internal/git-save"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -62,7 +63,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func directRunStart(cmd *cobra.Command, args []string) error {
|
func directRunStart(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
user, _, err := gwclient.GetCurrentUser(context.TODO())
|
user, _, err := gwclient.GetCurrentUser(context.TODO())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -102,7 +103,7 @@ func directRunStart(cmd *cobra.Command, args []string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("starting direct run")
|
log.Infof("starting direct run")
|
||||||
req := &api.UserCreateRunRequest{
|
req := &gwapitypes.UserCreateRunRequest{
|
||||||
RepoUUID: repoUUID,
|
RepoUUID: repoUUID,
|
||||||
RepoPath: repoPath,
|
RepoPath: repoPath,
|
||||||
Branch: branch,
|
Branch: branch,
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -55,16 +55,16 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgCreate(cmd *cobra.Command, args []string) error {
|
func orgCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// TODO(sgotti) make this a custom pflag Value?
|
// TODO(sgotti) make this a custom pflag Value?
|
||||||
if !cstypes.IsValidVisibility(cstypes.Visibility(orgCreateOpts.visibility)) {
|
if !IsValidVisibility(orgCreateOpts.visibility) {
|
||||||
return errors.Errorf("invalid visibility %q", orgCreateOpts.visibility)
|
return errors.Errorf("invalid visibility %q", orgCreateOpts.visibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateOrgRequest{
|
req := &gwapitypes.CreateOrgRequest{
|
||||||
Name: orgCreateOpts.name,
|
Name: orgCreateOpts.name,
|
||||||
Visibility: cstypes.Visibility(orgCreateOpts.visibility),
|
Visibility: gwapitypes.Visibility(orgCreateOpts.visibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("creating org")
|
log.Infof("creating org")
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgDelete(cmd *cobra.Command, args []string) error {
|
func orgDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("deleting organization %q", orgDeleteOpts.name)
|
log.Infof("deleting organization %q", orgDeleteOpts.name)
|
||||||
if _, err := gwclient.DeleteOrg(context.TODO(), orgDeleteOpts.name); err != nil {
|
if _, err := gwclient.DeleteOrg(context.TODO(), orgDeleteOpts.name); err != nil {
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -60,10 +60,10 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgMemberAdd(cmd *cobra.Command, args []string) error {
|
func orgMemberAdd(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("adding/updating member %q to organization %q with role %q", orgMemberAddOpts.username, orgMemberAddOpts.orgname, orgMemberAddOpts.role)
|
log.Infof("adding/updating member %q to organization %q with role %q", orgMemberAddOpts.username, orgMemberAddOpts.orgname, orgMemberAddOpts.role)
|
||||||
_, _, err := gwclient.AddOrgMember(context.TODO(), orgMemberAddOpts.orgname, orgMemberAddOpts.username, cstypes.MemberRole(orgMemberAddOpts.role))
|
_, _, err := gwclient.AddOrgMember(context.TODO(), orgMemberAddOpts.orgname, orgMemberAddOpts.username, gwapitypes.MemberRole(orgMemberAddOpts.role))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("failed to add/update organization member: %w", err)
|
return errors.Errorf("failed to add/update organization member: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -54,7 +54,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgMemberList(cmd *cobra.Command, args []string) error {
|
func orgMemberList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
orgMembers, _, err := gwclient.GetOrgMembers(context.TODO(), orgMemberListOpts.orgname)
|
orgMembers, _, err := gwclient.GetOrgMembers(context.TODO(), orgMemberListOpts.orgname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func orgMemberRemove(cmd *cobra.Command, args []string) error {
|
func orgMemberRemove(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("removing member %q from organization %q", orgMemberRemoveOpts.username, orgMemberRemoveOpts.orgname)
|
log.Infof("removing member %q from organization %q", orgMemberRemoveOpts.username, orgMemberRemoveOpts.orgname)
|
||||||
_, err := gwclient.RemoveOrgMember(context.TODO(), orgMemberRemoveOpts.orgname, orgMemberRemoveOpts.username)
|
_, err := gwclient.RemoveOrgMember(context.TODO(), orgMemberRemoveOpts.orgname, orgMemberRemoveOpts.username)
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -71,18 +71,28 @@ func init() {
|
||||||
cmdProject.AddCommand(cmdProjectCreate)
|
cmdProject.AddCommand(cmdProjectCreate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsValidVisibility(v string) bool {
|
||||||
|
switch gwapitypes.Visibility(v) {
|
||||||
|
case gwapitypes.VisibilityPublic:
|
||||||
|
case gwapitypes.VisibilityPrivate:
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func projectCreate(cmd *cobra.Command, args []string) error {
|
func projectCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// TODO(sgotti) make this a custom pflag Value?
|
// TODO(sgotti) make this a custom pflag Value?
|
||||||
if !cstypes.IsValidVisibility(cstypes.Visibility(projectCreateOpts.visibility)) {
|
if !IsValidVisibility(projectCreateOpts.visibility) {
|
||||||
return errors.Errorf("invalid visibility %q", projectCreateOpts.visibility)
|
return errors.Errorf("invalid visibility %q", projectCreateOpts.visibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateProjectRequest{
|
req := &gwapitypes.CreateProjectRequest{
|
||||||
Name: projectCreateOpts.name,
|
Name: projectCreateOpts.name,
|
||||||
ParentRef: projectCreateOpts.parentPath,
|
ParentRef: projectCreateOpts.parentPath,
|
||||||
Visibility: cstypes.Visibility(projectCreateOpts.visibility),
|
Visibility: gwapitypes.Visibility(projectCreateOpts.visibility),
|
||||||
RepoPath: projectCreateOpts.repoPath,
|
RepoPath: projectCreateOpts.repoPath,
|
||||||
RemoteSourceName: projectCreateOpts.remoteSourceName,
|
RemoteSourceName: projectCreateOpts.remoteSourceName,
|
||||||
SkipSSHHostKeyCheck: projectCreateOpts.skipSSHHostKeyCheck,
|
SkipSSHHostKeyCheck: projectCreateOpts.skipSSHHostKeyCheck,
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectDelete(cmd *cobra.Command, args []string) error {
|
func projectDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("deleting project")
|
log.Infof("deleting project")
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -60,17 +60,17 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectGroupCreate(cmd *cobra.Command, args []string) error {
|
func projectGroupCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// TODO(sgotti) make this a custom pflag Value?
|
// TODO(sgotti) make this a custom pflag Value?
|
||||||
if !cstypes.IsValidVisibility(cstypes.Visibility(projectCreateOpts.visibility)) {
|
if !IsValidVisibility(projectGroupCreateOpts.visibility) {
|
||||||
return errors.Errorf("invalid visibility %q", projectCreateOpts.visibility)
|
return errors.Errorf("invalid visibility %q", projectGroupCreateOpts.visibility)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateProjectGroupRequest{
|
req := &gwapitypes.CreateProjectGroupRequest{
|
||||||
Name: projectGroupCreateOpts.name,
|
Name: projectGroupCreateOpts.name,
|
||||||
ParentRef: projectGroupCreateOpts.parentPath,
|
ParentRef: projectGroupCreateOpts.parentPath,
|
||||||
Visibility: cstypes.Visibility(projectCreateOpts.visibility),
|
Visibility: gwapitypes.Visibility(projectGroupCreateOpts.visibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Infof("creating project group")
|
log.Infof("creating project group")
|
||||||
|
|
|
@ -18,7 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -50,14 +52,14 @@ func init() {
|
||||||
cmdProject.AddCommand(cmdProjectList)
|
cmdProject.AddCommand(cmdProjectList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printProjects(projects []*api.ProjectResponse) {
|
func printProjects(projects []*gwapitypes.ProjectResponse) {
|
||||||
for _, project := range projects {
|
for _, project := range projects {
|
||||||
fmt.Printf("%s: Name: %s\n", project.ID, project.Name)
|
fmt.Printf("%s: Name: %s\n", project.ID, project.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectList(cmd *cobra.Command, args []string) error {
|
func projectList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
projects, _, err := gwclient.GetProjectGroupProjects(context.TODO(), projectListOpts.parentPath)
|
projects, _, err := gwclient.GetProjectGroupProjects(context.TODO(), projectListOpts.parentPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectReconfig(cmd *cobra.Command, args []string) error {
|
func projectReconfig(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("reconfiguring remote project")
|
log.Infof("reconfiguring remote project")
|
||||||
if _, err := gwclient.ReconfigProject(context.TODO(), projectReconfigOpts.name); err != nil {
|
if _, err := gwclient.ReconfigProject(context.TODO(), projectReconfigOpts.name); err != nil {
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -73,7 +73,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func secretCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
func secretCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -94,9 +94,9 @@ func secretCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
||||||
log.Fatalf("failed to unmarshal secret: %v", err)
|
log.Fatalf("failed to unmarshal secret: %v", err)
|
||||||
}
|
}
|
||||||
req := &api.CreateSecretRequest{
|
req := &gwapitypes.CreateSecretRequest{
|
||||||
Name: secretCreateOpts.name,
|
Name: secretCreateOpts.name,
|
||||||
Type: cstypes.SecretTypeInternal,
|
Type: gwapitypes.SecretTypeInternal,
|
||||||
Data: secretData,
|
Data: secretData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func secretDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
func secretDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
switch ownertype {
|
switch ownertype {
|
||||||
case "project":
|
case "project":
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -75,7 +75,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func secretUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
func secretUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -96,9 +96,9 @@ func secretUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
if err := yaml.Unmarshal(data, &secretData); err != nil {
|
||||||
log.Fatalf("failed to unmarshal secret: %v", err)
|
log.Fatalf("failed to unmarshal secret: %v", err)
|
||||||
}
|
}
|
||||||
req := &api.UpdateSecretRequest{
|
req := &gwapitypes.UpdateSecretRequest{
|
||||||
Name: secretUpdateOpts.name,
|
Name: secretUpdateOpts.name,
|
||||||
Type: cstypes.SecretTypeInternal,
|
Type: gwapitypes.SecretTypeInternal,
|
||||||
Data: secretData,
|
Data: secretData,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,9 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"agola.io/agola/internal/config"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -92,11 +91,11 @@ type VariableValue struct {
|
||||||
SecretName string `json:"secret_name,omitempty"`
|
SecretName string `json:"secret_name,omitempty"`
|
||||||
SecretVar string `json:"secret_var,omitempty"`
|
SecretVar string `json:"secret_var,omitempty"`
|
||||||
|
|
||||||
When *config.When `json:"when,omitempty"`
|
When *gwapitypes.When `json:"when,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func variableCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
func variableCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -117,15 +116,15 @@ func variableCreate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &values); err != nil {
|
if err := yaml.Unmarshal(data, &values); err != nil {
|
||||||
log.Fatalf("failed to unmarshal values: %v", err)
|
log.Fatalf("failed to unmarshal values: %v", err)
|
||||||
}
|
}
|
||||||
rvalues := []cstypes.VariableValue{}
|
rvalues := []gwapitypes.VariableValueRequest{}
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
rvalues = append(rvalues, cstypes.VariableValue{
|
rvalues = append(rvalues, gwapitypes.VariableValueRequest{
|
||||||
SecretName: value.SecretName,
|
SecretName: value.SecretName,
|
||||||
SecretVar: value.SecretVar,
|
SecretVar: value.SecretVar,
|
||||||
When: (*cstypes.When)(value.When),
|
When: value.When,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
req := &api.CreateVariableRequest{
|
req := &gwapitypes.CreateVariableRequest{
|
||||||
Name: variableCreateOpts.name,
|
Name: variableCreateOpts.name,
|
||||||
Values: rvalues,
|
Values: rvalues,
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func variableDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
func variableDelete(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
switch ownertype {
|
switch ownertype {
|
||||||
case "project":
|
case "project":
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -68,7 +68,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func variableUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
func variableUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
// "github.com/ghodss/yaml" doesn't provide a streaming decoder
|
||||||
var data []byte
|
var data []byte
|
||||||
|
@ -89,15 +89,15 @@ func variableUpdate(cmd *cobra.Command, ownertype string, args []string) error {
|
||||||
if err := yaml.Unmarshal(data, &values); err != nil {
|
if err := yaml.Unmarshal(data, &values); err != nil {
|
||||||
log.Fatalf("failed to unmarshall values: %v", err)
|
log.Fatalf("failed to unmarshall values: %v", err)
|
||||||
}
|
}
|
||||||
rvalues := []cstypes.VariableValue{}
|
rvalues := []gwapitypes.VariableValueRequest{}
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
rvalues = append(rvalues, cstypes.VariableValue{
|
rvalues = append(rvalues, gwapitypes.VariableValueRequest{
|
||||||
SecretName: value.SecretName,
|
SecretName: value.SecretName,
|
||||||
SecretVar: value.SecretVar,
|
SecretVar: value.SecretVar,
|
||||||
When: (*cstypes.When)(value.When),
|
When: value.When,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
req := &api.UpdateVariableRequest{
|
req := &gwapitypes.UpdateVariableRequest{
|
||||||
Name: variableUpdateOpts.name,
|
Name: variableUpdateOpts.name,
|
||||||
Values: rvalues,
|
Values: rvalues,
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/gitsources/github"
|
"agola.io/agola/internal/gitsources/github"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/util"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -81,10 +81,10 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteSourceCreate(cmd *cobra.Command, args []string) error {
|
func remoteSourceCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
// for github remote source type, set defaults for github.com
|
// for github remote source type, set defaults for github.com
|
||||||
if remoteSourceCreateOpts.rsType == string(cstypes.RemoteSourceTypeGithub) {
|
if remoteSourceCreateOpts.rsType == "github" {
|
||||||
remoteSourceCreateOpts.apiURL = github.GitHubAPIURL
|
remoteSourceCreateOpts.apiURL = github.GitHubAPIURL
|
||||||
remoteSourceCreateOpts.sshHostKey = github.GitHubSSHHostKey
|
remoteSourceCreateOpts.sshHostKey = github.GitHubSSHHostKey
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ func remoteSourceCreate(cmd *cobra.Command, args []string) error {
|
||||||
return errors.Errorf(`required flag "api-url" not set`)
|
return errors.Errorf(`required flag "api-url" not set`)
|
||||||
}
|
}
|
||||||
|
|
||||||
req := &api.CreateRemoteSourceRequest{
|
req := &gwapitypes.CreateRemoteSourceRequest{
|
||||||
Name: remoteSourceCreateOpts.name,
|
Name: remoteSourceCreateOpts.name,
|
||||||
Type: remoteSourceCreateOpts.rsType,
|
Type: remoteSourceCreateOpts.rsType,
|
||||||
AuthType: remoteSourceCreateOpts.authType,
|
AuthType: remoteSourceCreateOpts.authType,
|
||||||
|
|
|
@ -18,7 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,14 +50,14 @@ func init() {
|
||||||
cmdRemoteSource.AddCommand(cmdRemoteSourceList)
|
cmdRemoteSource.AddCommand(cmdRemoteSourceList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printRemoteSources(remoteSources []*api.RemoteSourceResponse) {
|
func printRemoteSources(remoteSources []*gwapitypes.RemoteSourceResponse) {
|
||||||
for _, rs := range remoteSources {
|
for _, rs := range remoteSources {
|
||||||
fmt.Printf("%s: Name: %s\n", rs.ID, rs.Name)
|
fmt.Printf("%s: Name: %s\n", rs.ID, rs.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteSourceList(cmd *cobra.Command, args []string) error {
|
func remoteSourceList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
remouteSources, _, err := gwclient.GetRemoteSources(context.TODO(), remoteSourceListOpts.start, remoteSourceListOpts.limit, false)
|
remouteSources, _, err := gwclient.GetRemoteSources(context.TODO(), remoteSourceListOpts.start, remoteSourceListOpts.limit, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -71,9 +72,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func remoteSourceUpdate(cmd *cobra.Command, args []string) error {
|
func remoteSourceUpdate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.UpdateRemoteSourceRequest{}
|
req := &gwapitypes.UpdateRemoteSourceRequest{}
|
||||||
|
|
||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
if flags.Changed("new-name") {
|
if flags.Changed("new-name") {
|
||||||
|
|
|
@ -19,7 +19,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
@ -59,7 +60,7 @@ func init() {
|
||||||
cmdRun.AddCommand(cmdRunList)
|
cmdRun.AddCommand(cmdRunList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printRuns(runs []*api.RunResponse) {
|
func printRuns(runs []*gwapitypes.RunResponse) {
|
||||||
for _, run := range runs {
|
for _, run := range runs {
|
||||||
fmt.Printf("%s: Phase: %s, Result: %s\n", run.ID, run.Phase, run.Result)
|
fmt.Printf("%s: Phase: %s, Result: %s\n", run.ID, run.Phase, run.Result)
|
||||||
for _, task := range run.Tasks {
|
for _, task := range run.Tasks {
|
||||||
|
@ -69,7 +70,7 @@ func printRuns(runs []*api.RunResponse) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func runList(cmd *cobra.Command, args []string) error {
|
func runList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
project, _, err := gwclient.GetProject(context.TODO(), runListOpts.projectRef)
|
project, _, err := gwclient.GetProject(context.TODO(), runListOpts.projectRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -81,7 +82,7 @@ func runList(cmd *cobra.Command, args []string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
runs := make([]*api.RunResponse, len(runsResp))
|
runs := make([]*gwapitypes.RunResponse, len(runsResp))
|
||||||
for i, runResponse := range runsResp {
|
for i, runResponse := range runsResp {
|
||||||
run, _, err := gwclient.GetRun(context.TODO(), runResponse.ID)
|
run, _, err := gwclient.GetRun(context.TODO(), runResponse.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -17,7 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,9 +53,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userCreate(cmd *cobra.Command, args []string) error {
|
func userCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.CreateUserRequest{
|
req := &gwapitypes.CreateUserRequest{
|
||||||
UserName: userCreateOpts.username,
|
UserName: userCreateOpts.username,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -52,7 +52,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userDelete(cmd *cobra.Command, args []string) error {
|
func userDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
log.Infof("deleting user %q", userDeleteOpts.username)
|
log.Infof("deleting user %q", userDeleteOpts.username)
|
||||||
if _, err := gwclient.DeleteUser(context.TODO(), userDeleteOpts.username); err != nil {
|
if _, err := gwclient.DeleteUser(context.TODO(), userDeleteOpts.username); err != nil {
|
||||||
|
|
|
@ -17,7 +17,8 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -61,9 +62,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userLACreate(cmd *cobra.Command, args []string) error {
|
func userLACreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.CreateUserLARequest{
|
req := &gwapitypes.CreateUserLARequest{
|
||||||
RemoteSourceName: userLACreateOpts.remoteSourceName,
|
RemoteSourceName: userLACreateOpts.remoteSourceName,
|
||||||
RemoteSourceLoginName: userLACreateOpts.remoteSourceLoginName,
|
RemoteSourceLoginName: userLACreateOpts.remoteSourceLoginName,
|
||||||
RemoteSourceLoginPassword: userLACreateOpts.remoteSourceLoginPassword,
|
RemoteSourceLoginPassword: userLACreateOpts.remoteSourceLoginPassword,
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userLADelete(cmd *cobra.Command, args []string) error {
|
func userLADelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
userName := userLADeleteOpts.userName
|
userName := userLADeleteOpts.userName
|
||||||
laID := userLADeleteOpts.laID
|
laID := userLADeleteOpts.laID
|
||||||
|
|
|
@ -18,7 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -48,14 +50,14 @@ func init() {
|
||||||
cmdUser.AddCommand(cmdUserList)
|
cmdUser.AddCommand(cmdUserList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func printUsers(users []*api.UserResponse) {
|
func printUsers(users []*gwapitypes.UserResponse) {
|
||||||
for _, user := range users {
|
for _, user := range users {
|
||||||
fmt.Printf("%s: Name: %s\n", user.ID, user.UserName)
|
fmt.Printf("%s: Name: %s\n", user.ID, user.UserName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func userList(cmd *cobra.Command, args []string) error {
|
func userList(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
users, _, err := gwclient.GetUsers(context.TODO(), userListOpts.start, userListOpts.limit, false)
|
users, _, err := gwclient.GetUsers(context.TODO(), userListOpts.start, userListOpts.limit, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -18,7 +18,8 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -58,9 +59,9 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userTokenCreate(cmd *cobra.Command, args []string) error {
|
func userTokenCreate(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
req := &api.CreateUserTokenRequest{
|
req := &gwapitypes.CreateUserTokenRequest{
|
||||||
TokenName: userTokenCreateOpts.tokenName,
|
TokenName: userTokenCreateOpts.tokenName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ package cmd
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
gwclient "agola.io/agola/services/gateway/client"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -57,7 +57,7 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func userTokenDelete(cmd *cobra.Command, args []string) error {
|
func userTokenDelete(cmd *cobra.Command, args []string) error {
|
||||||
gwclient := api.NewClient(gatewayURL, token)
|
gwclient := gwclient.NewClient(gatewayURL, token)
|
||||||
|
|
||||||
userName := userTokenDeleteOpts.userName
|
userName := userTokenDeleteOpts.userName
|
||||||
tokenName := userTokenDeleteOpts.tokenName
|
tokenName := userTokenDeleteOpts.tokenName
|
||||||
|
|
|
@ -20,9 +20,9 @@ import (
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
"github.com/google/go-jsonnet"
|
"github.com/google/go-jsonnet"
|
||||||
|
@ -83,7 +83,7 @@ type DockerRegistryAuth struct {
|
||||||
|
|
||||||
type Runtime struct {
|
type Runtime struct {
|
||||||
Type RuntimeType `json:"type,omitempty"`
|
Type RuntimeType `json:"type,omitempty"`
|
||||||
Arch common.Arch `json:"arch,omitempty"`
|
Arch types.Arch `json:"arch,omitempty"`
|
||||||
Containers []*Container `json:"containers,omitempty"`
|
Containers []*Container `json:"containers,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -702,7 +702,7 @@ func checkConfig(config *Config) error {
|
||||||
return errors.Errorf("task %q runtime: at least one container must be defined", task.Name)
|
return errors.Errorf("task %q runtime: at least one container must be defined", task.Name)
|
||||||
}
|
}
|
||||||
if r.Arch != "" {
|
if r.Arch != "" {
|
||||||
if !common.IsValidArch(r.Arch) {
|
if !types.IsValidArch(r.Arch) {
|
||||||
return errors.Errorf("task %q runtime: invalid arch %q", task.Name, r.Arch)
|
return errors.Errorf("task %q runtime: invalid arch %q", task.Name, r.Arch)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -35,7 +35,6 @@ var (
|
||||||
tagRefPrefix = "refs/tags/"
|
tagRefPrefix = "refs/tags/"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Client represents a Gogs API client.
|
|
||||||
type Client struct {
|
type Client struct {
|
||||||
url string
|
url string
|
||||||
client *http.Client
|
client *http.Client
|
||||||
|
|
|
@ -19,9 +19,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/config"
|
"agola.io/agola/internal/config"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,9 +20,9 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"agola.io/agola/internal/config"
|
"agola.io/agola/internal/config"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"agola.io/agola/internal/gitsources/gitea"
|
"agola.io/agola/internal/gitsources/gitea"
|
||||||
"agola.io/agola/internal/gitsources/github"
|
"agola.io/agola/internal/gitsources/github"
|
||||||
"agola.io/agola/internal/gitsources/gitlab"
|
"agola.io/agola/internal/gitsources/gitlab"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -15,20 +15,20 @@
|
||||||
package common
|
package common
|
||||||
|
|
||||||
import (
|
import (
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func FilterOverriddenVariables(variables []*csapi.Variable) []*csapi.Variable {
|
func FilterOverriddenVariables(variables []*csapitypes.Variable) []*csapitypes.Variable {
|
||||||
variablesMap := map[string]*csapi.Variable{}
|
variablesMap := map[string]*csapitypes.Variable{}
|
||||||
for _, v := range variables {
|
for _, v := range variables {
|
||||||
if _, ok := variablesMap[v.Name]; !ok {
|
if _, ok := variablesMap[v.Name]; !ok {
|
||||||
variablesMap[v.Name] = v
|
variablesMap[v.Name] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
filteredVariables := make([]*csapi.Variable, len(variablesMap))
|
filteredVariables := make([]*csapitypes.Variable, len(variablesMap))
|
||||||
i := 0
|
i := 0
|
||||||
// keep the original order
|
// keep the original order
|
||||||
for _, v := range variables {
|
for _, v := range variables {
|
||||||
|
@ -43,9 +43,9 @@ func FilterOverriddenVariables(variables []*csapi.Variable) []*csapi.Variable {
|
||||||
return filteredVariables
|
return filteredVariables
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetVarValueMatchingSecret(varval cstypes.VariableValue, varParentPath string, secrets []*csapi.Secret) *csapi.Secret {
|
func GetVarValueMatchingSecret(varval cstypes.VariableValue, varParentPath string, secrets []*csapitypes.Secret) *csapitypes.Secret {
|
||||||
// get the secret value referenced by the variable, it must be a secret at the same level or a lower level
|
// get the secret value referenced by the variable, it must be a secret at the same level or a lower level
|
||||||
var secret *csapi.Secret
|
var secret *csapitypes.Secret
|
||||||
for _, s := range secrets {
|
for _, s := range secrets {
|
||||||
// we assume the root path will be the same
|
// we assume the root path will be the same
|
||||||
if s.Name != varval.SecretName {
|
if s.Name != varval.SecretName {
|
||||||
|
|
|
@ -17,84 +17,85 @@ package common
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestFilterOverriddenVariables(t *testing.T) {
|
func TestFilterOverriddenVariables(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
variables []*csapi.Variable
|
variables []*csapitypes.Variable
|
||||||
out []*csapi.Variable
|
out []*csapitypes.Variable
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "test empty variables",
|
name: "test empty variables",
|
||||||
variables: []*csapi.Variable{},
|
variables: []*csapitypes.Variable{},
|
||||||
out: []*csapi.Variable{},
|
out: []*csapitypes.Variable{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "test variable overrides",
|
name: "test variable overrides",
|
||||||
variables: []*csapi.Variable{
|
variables: []*csapitypes.Variable{
|
||||||
// variables must be in depth (from leaves to root) order as returned by the
|
// variables must be in depth (from leaves to root) order as returned by the
|
||||||
// configstore apis
|
// configstore apis
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var04",
|
Name: "var04",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var03",
|
Name: "var03",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var02",
|
Name: "var02",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var02",
|
Name: "var02",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var01",
|
Name: "var01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var01",
|
Name: "var01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01",
|
ParentPath: "org/org01",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: []*csapi.Variable{
|
out: []*csapitypes.Variable{
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var04",
|
Name: "var04",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
ParentPath: "org/org01/projectgroup02/projectgroup03/project02",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var03",
|
Name: "var03",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var02",
|
Name: "var02",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/project01",
|
ParentPath: "org/org01/projectgroup01/project01",
|
||||||
},
|
},
|
||||||
&csapi.Variable{
|
&csapitypes.Variable{
|
||||||
Variable: &cstypes.Variable{
|
Variable: &cstypes.Variable{
|
||||||
Name: "var01",
|
Name: "var01",
|
||||||
},
|
},
|
||||||
|
@ -120,8 +121,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
varValue cstypes.VariableValue
|
varValue cstypes.VariableValue
|
||||||
varParentPath string
|
varParentPath string
|
||||||
secrets []*csapi.Secret
|
secrets []*csapitypes.Secret
|
||||||
out *csapi.Secret
|
out *csapitypes.Secret
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "test empty secrets",
|
name: "test empty secrets",
|
||||||
|
@ -130,7 +131,7 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/project01",
|
varParentPath: "org/org01/projectgroup01/project01",
|
||||||
secrets: []*csapi.Secret{},
|
secrets: []*csapitypes.Secret{},
|
||||||
out: nil,
|
out: nil,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -140,8 +141,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret02",
|
Name: "secret02",
|
||||||
},
|
},
|
||||||
|
@ -157,8 +158,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret02",
|
Name: "secret02",
|
||||||
},
|
},
|
||||||
|
@ -174,8 +175,8 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
@ -191,21 +192,21 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
||||||
},
|
},
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: &csapi.Secret{
|
out: &csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
@ -219,15 +220,15 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: &csapi.Secret{
|
out: &csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
@ -241,29 +242,29 @@ func TestGetVarValueMatchingSecret(t *testing.T) {
|
||||||
SecretVar: "secretvar01",
|
SecretVar: "secretvar01",
|
||||||
},
|
},
|
||||||
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
varParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
secrets: []*csapi.Secret{
|
secrets: []*csapitypes.Secret{
|
||||||
// secrets must be in depth (from leaves to root) order as returned by the
|
// secrets must be in depth (from leaves to root) order as returned by the
|
||||||
// configstore apis
|
// configstore apis
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
ParentPath: "org/org01/projectgroup01/projectgroup02/project01",
|
||||||
},
|
},
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
ParentPath: "org/org01/projectgroup01/projectgroup02",
|
||||||
},
|
},
|
||||||
&csapi.Secret{
|
&csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
ParentPath: "org/org01/projectgroup01",
|
ParentPath: "org/org01/projectgroup01",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
out: &csapi.Secret{
|
out: &csapitypes.Secret{
|
||||||
Secret: &cstypes.Secret{
|
Secret: &cstypes.Secret{
|
||||||
Name: "secret01",
|
Name: "secret01",
|
||||||
},
|
},
|
||||||
|
|
|
@ -23,8 +23,8 @@ import (
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -22,8 +22,8 @@ import (
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/datamanager"
|
"agola.io/agola/internal/datamanager"
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -19,8 +19,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,12 +22,13 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type OrgHandler struct {
|
type OrgHandler struct {
|
||||||
|
@ -180,10 +181,6 @@ func (h *OrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AddOrgMemberRequest struct {
|
|
||||||
Role types.MemberRole
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddOrgMemberHandler struct {
|
type AddOrgMemberHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -200,7 +197,7 @@ func (h *AddOrgMemberHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
orgRef := vars["orgref"]
|
orgRef := vars["orgref"]
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req AddOrgMemberRequest
|
var req csapitypes.AddOrgMemberRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -245,13 +242,8 @@ func (h *RemoveOrgMemberHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrgMemberResponse struct {
|
func orgMemberResponse(orgUser *action.OrgMemberResponse) *csapitypes.OrgMemberResponse {
|
||||||
User *types.User
|
return &csapitypes.OrgMemberResponse{
|
||||||
Role types.MemberRole
|
|
||||||
}
|
|
||||||
|
|
||||||
func orgMemberResponse(orgUser *action.OrgMemberResponse) *OrgMemberResponse {
|
|
||||||
return &OrgMemberResponse{
|
|
||||||
User: orgUser.User,
|
User: orgUser.User,
|
||||||
Role: orgUser.Role,
|
Role: orgUser.Role,
|
||||||
}
|
}
|
||||||
|
@ -277,7 +269,7 @@ func (h *OrgMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := make([]*OrgMemberResponse, len(orgUsers))
|
res := make([]*csapitypes.OrgMemberResponse, len(orgUsers))
|
||||||
for i, orgUser := range orgUsers {
|
for i, orgUser := range orgUsers {
|
||||||
res[i] = orgMemberResponse(orgUser)
|
res[i] = orgMemberResponse(orgUser)
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,27 +24,16 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Project augments types.Project with dynamic data
|
func projectResponse(ctx context.Context, readDB *readdb.ReadDB, project *types.Project) (*csapitypes.Project, error) {
|
||||||
type Project struct {
|
|
||||||
*types.Project
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
OwnerType types.ConfigType
|
|
||||||
OwnerID string
|
|
||||||
Path string
|
|
||||||
ParentPath string
|
|
||||||
GlobalVisibility types.Visibility
|
|
||||||
}
|
|
||||||
|
|
||||||
func projectResponse(ctx context.Context, readDB *readdb.ReadDB, project *types.Project) (*Project, error) {
|
|
||||||
r, err := projectsResponse(ctx, readDB, []*types.Project{project})
|
r, err := projectsResponse(ctx, readDB, []*types.Project{project})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -52,8 +41,8 @@ func projectResponse(ctx context.Context, readDB *readdb.ReadDB, project *types.
|
||||||
return r[0], nil
|
return r[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectsResponse(ctx context.Context, readDB *readdb.ReadDB, projects []*types.Project) ([]*Project, error) {
|
func projectsResponse(ctx context.Context, readDB *readdb.ReadDB, projects []*types.Project) ([]*csapitypes.Project, error) {
|
||||||
resProjects := make([]*Project, len(projects))
|
resProjects := make([]*csapitypes.Project, len(projects))
|
||||||
|
|
||||||
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
for i, project := range projects {
|
for i, project := range projects {
|
||||||
|
@ -75,7 +64,7 @@ func projectsResponse(ctx context.Context, readDB *readdb.ReadDB, projects []*ty
|
||||||
|
|
||||||
// we calculate the path here from parent path since the db could not yet be
|
// we calculate the path here from parent path since the db could not yet be
|
||||||
// updated on create
|
// updated on create
|
||||||
resProjects[i] = &Project{
|
resProjects[i] = &csapitypes.Project{
|
||||||
Project: project,
|
Project: project,
|
||||||
OwnerType: ownerType,
|
OwnerType: ownerType,
|
||||||
OwnerID: ownerID,
|
OwnerID: ownerID,
|
||||||
|
|
|
@ -24,27 +24,16 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProjectGroup augments types.ProjectGroup with dynamic data
|
func projectGroupResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroup *types.ProjectGroup) (*csapitypes.ProjectGroup, error) {
|
||||||
type ProjectGroup struct {
|
|
||||||
*types.ProjectGroup
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
OwnerType types.ConfigType
|
|
||||||
OwnerID string
|
|
||||||
Path string
|
|
||||||
ParentPath string
|
|
||||||
GlobalVisibility types.Visibility
|
|
||||||
}
|
|
||||||
|
|
||||||
func projectGroupResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroup *types.ProjectGroup) (*ProjectGroup, error) {
|
|
||||||
r, err := projectGroupsResponse(ctx, readDB, []*types.ProjectGroup{projectGroup})
|
r, err := projectGroupsResponse(ctx, readDB, []*types.ProjectGroup{projectGroup})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -52,8 +41,8 @@ func projectGroupResponse(ctx context.Context, readDB *readdb.ReadDB, projectGro
|
||||||
return r[0], nil
|
return r[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func projectGroupsResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroups []*types.ProjectGroup) ([]*ProjectGroup, error) {
|
func projectGroupsResponse(ctx context.Context, readDB *readdb.ReadDB, projectGroups []*types.ProjectGroup) ([]*csapitypes.ProjectGroup, error) {
|
||||||
resProjectGroups := make([]*ProjectGroup, len(projectGroups))
|
resProjectGroups := make([]*csapitypes.ProjectGroup, len(projectGroups))
|
||||||
|
|
||||||
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
err := readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
for i, projectGroup := range projectGroups {
|
for i, projectGroup := range projectGroups {
|
||||||
|
@ -75,7 +64,7 @@ func projectGroupsResponse(ctx context.Context, readDB *readdb.ReadDB, projectGr
|
||||||
|
|
||||||
// we calculate the path here from parent path since the db could not yet be
|
// we calculate the path here from parent path since the db could not yet be
|
||||||
// updated on create
|
// updated on create
|
||||||
resProjectGroups[i] = &ProjectGroup{
|
resProjectGroups[i] = &csapitypes.ProjectGroup{
|
||||||
ProjectGroup: projectGroup,
|
ProjectGroup: projectGroup,
|
||||||
OwnerType: ownerType,
|
OwnerType: ownerType,
|
||||||
OwnerID: ownerID,
|
OwnerID: ownerID,
|
||||||
|
|
|
@ -22,12 +22,12 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RemoteSourceHandler struct {
|
type RemoteSourceHandler struct {
|
||||||
|
|
|
@ -21,21 +21,14 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Secret augments types.Secret with dynamic data
|
|
||||||
type Secret struct {
|
|
||||||
*types.Secret
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
ParentPath string
|
|
||||||
}
|
|
||||||
|
|
||||||
type SecretHandler struct {
|
type SecretHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -89,9 +82,9 @@ func (h *SecretsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resSecrets := make([]*Secret, len(secrets))
|
resSecrets := make([]*csapitypes.Secret, len(secrets))
|
||||||
for i, s := range secrets {
|
for i, s := range secrets {
|
||||||
resSecrets[i] = &Secret{Secret: s}
|
resSecrets[i] = &csapitypes.Secret{Secret: s}
|
||||||
}
|
}
|
||||||
|
|
||||||
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
|
|
|
@ -18,17 +18,17 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
action "agola.io/agola/internal/services/configstore/action"
|
action "agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
errors "golang.org/x/xerrors"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserHandler struct {
|
type UserHandler struct {
|
||||||
|
@ -67,12 +67,6 @@ func (h *UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserRequest struct {
|
|
||||||
UserName string `json:"user_name"`
|
|
||||||
|
|
||||||
CreateUserLARequest *CreateUserLARequest `json:"create_user_la_request"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserHandler struct {
|
type CreateUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -85,7 +79,7 @@ func NewCreateUserHandler(logger *zap.Logger, ah *action.ActionHandler) *CreateU
|
||||||
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *CreateUserRequest
|
var req *csapitypes.CreateUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -118,10 +112,6 @@ func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateUserRequest struct {
|
|
||||||
UserName string `json:"user_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateUserHandler struct {
|
type UpdateUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -137,7 +127,7 @@ func (h *UpdateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req *UpdateUserRequest
|
var req *csapitypes.UpdateUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -305,16 +295,6 @@ func (h *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserLARequest struct {
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
RemoteUserID string `json:"remote_user_id"`
|
|
||||||
RemoteUserName string `json:"remote_user_name"`
|
|
||||||
UserAccessToken string `json:"user_access_token"`
|
|
||||||
Oauth2AccessToken string `json:"oauth2_access_token"`
|
|
||||||
Oauth2RefreshToken string `json:"oauth2_refresh_token"`
|
|
||||||
Oauth2AccessTokenExpiresAt time.Time `json:"oauth_2_access_token_expires_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserLAHandler struct {
|
type CreateUserLAHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -329,7 +309,7 @@ func (h *CreateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req CreateUserLARequest
|
var req csapitypes.CreateUserLARequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -381,15 +361,6 @@ func (h *DeleteUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateUserLARequest struct {
|
|
||||||
RemoteUserID string `json:"remote_user_id"`
|
|
||||||
RemoteUserName string `json:"remote_user_name"`
|
|
||||||
UserAccessToken string `json:"user_access_token"`
|
|
||||||
Oauth2AccessToken string `json:"oauth2_access_token"`
|
|
||||||
Oauth2RefreshToken string `json:"oauth2_refresh_token"`
|
|
||||||
Oauth2AccessTokenExpiresAt time.Time `json:"oauth_2_access_token_expires_at"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateUserLAHandler struct {
|
type UpdateUserLAHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -405,7 +376,7 @@ func (h *UpdateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
linkedAccountID := vars["laid"]
|
linkedAccountID := vars["laid"]
|
||||||
|
|
||||||
var req UpdateUserLARequest
|
var req csapitypes.UpdateUserLARequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -433,14 +404,6 @@ func (h *UpdateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserTokenRequest struct {
|
|
||||||
TokenName string `json:"token_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenResponse struct {
|
|
||||||
Token string `json:"token"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenHandler struct {
|
type CreateUserTokenHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -455,7 +418,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req CreateUserTokenRequest
|
var req csapitypes.CreateUserTokenRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -468,7 +431,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resp := &CreateUserTokenResponse{
|
resp := &csapitypes.CreateUserTokenResponse{
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
if err := httpResponse(w, http.StatusCreated, resp); err != nil {
|
if err := httpResponse(w, http.StatusCreated, resp); err != nil {
|
||||||
|
@ -501,13 +464,8 @@ func (h *DeleteUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserOrgsResponse struct {
|
func userOrgsResponse(userOrg *action.UserOrgsResponse) *csapitypes.UserOrgsResponse {
|
||||||
Organization *types.Organization
|
return &csapitypes.UserOrgsResponse{
|
||||||
Role types.MemberRole
|
|
||||||
}
|
|
||||||
|
|
||||||
func userOrgsResponse(userOrg *action.UserOrgsResponse) *UserOrgsResponse {
|
|
||||||
return &UserOrgsResponse{
|
|
||||||
Organization: userOrg.Organization,
|
Organization: userOrg.Organization,
|
||||||
Role: userOrg.Role,
|
Role: userOrg.Role,
|
||||||
}
|
}
|
||||||
|
@ -533,7 +491,7 @@ func (h *UserOrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := make([]*UserOrgsResponse, len(userOrgs))
|
res := make([]*csapitypes.UserOrgsResponse, len(userOrgs))
|
||||||
for i, userOrg := range userOrgs {
|
for i, userOrg := range userOrgs {
|
||||||
res[i] = userOrgsResponse(userOrg)
|
res[i] = userOrgsResponse(userOrg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,21 +21,14 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/action"
|
"agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Variable augments types.Variable with dynamic data
|
|
||||||
type Variable struct {
|
|
||||||
*types.Variable
|
|
||||||
|
|
||||||
// dynamic data
|
|
||||||
ParentPath string
|
|
||||||
}
|
|
||||||
|
|
||||||
type VariablesHandler struct {
|
type VariablesHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -63,9 +56,9 @@ func (h *VariablesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
resVariables := make([]*Variable, len(variables))
|
resVariables := make([]*csapitypes.Variable, len(variables))
|
||||||
for i, v := range variables {
|
for i, v := range variables {
|
||||||
resVariables[i] = &Variable{Variable: v}
|
resVariables[i] = &csapitypes.Variable{Variable: v}
|
||||||
}
|
}
|
||||||
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
err = h.readDB.Do(ctx, func(tx *db.Tx) error {
|
||||||
// populate parent path
|
// populate parent path
|
||||||
|
|
|
@ -32,8 +32,8 @@ import (
|
||||||
"agola.io/agola/internal/services/configstore/api"
|
"agola.io/agola/internal/services/configstore/api"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/readdb"
|
"agola.io/agola/internal/services/configstore/readdb"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
etcdclientv3 "go.etcd.io/etcd/clientv3"
|
etcdclientv3 "go.etcd.io/etcd/clientv3"
|
||||||
|
|
|
@ -30,9 +30,9 @@ import (
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
action "agola.io/agola/internal/services/configstore/action"
|
action "agola.io/agola/internal/services/configstore/action"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/testutil"
|
"agola.io/agola/internal/testutil"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -22,8 +22,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -22,8 +22,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -30,8 +30,8 @@ import (
|
||||||
"agola.io/agola/internal/objectstorage"
|
"agola.io/agola/internal/objectstorage"
|
||||||
ostypes "agola.io/agola/internal/objectstorage/types"
|
ostypes "agola.io/agola/internal/objectstorage/types"
|
||||||
"agola.io/agola/internal/sequence"
|
"agola.io/agola/internal/sequence"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -18,8 +18,8 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -20,8 +20,8 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/common"
|
"agola.io/agola/internal/services/configstore/common"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"agola.io/agola/internal/db"
|
"agola.io/agola/internal/db"
|
||||||
"agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
sq "github.com/Masterminds/squirrel"
|
sq "github.com/Masterminds/squirrel"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
"agola.io/agola/services/runservice/types"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -28,11 +28,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
"agola.io/agola/internal/services/executor/registry"
|
"agola.io/agola/internal/services/executor/registry"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types"
|
dockertypes "github.com/docker/docker/api/types"
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/api/types/filters"
|
"github.com/docker/docker/api/types/filters"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
|
@ -47,7 +47,7 @@ type DockerDriver struct {
|
||||||
initVolumeHostDir string
|
initVolumeHostDir string
|
||||||
toolboxPath string
|
toolboxPath string
|
||||||
executorID string
|
executorID string
|
||||||
arch common.Arch
|
arch types.Arch
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDockerDriver(logger *zap.Logger, executorID, initVolumeHostDir, toolboxPath string) (*DockerDriver, error) {
|
func NewDockerDriver(logger *zap.Logger, executorID, initVolumeHostDir, toolboxPath string) (*DockerDriver, error) {
|
||||||
|
@ -62,7 +62,7 @@ func NewDockerDriver(logger *zap.Logger, executorID, initVolumeHostDir, toolboxP
|
||||||
initVolumeHostDir: initVolumeHostDir,
|
initVolumeHostDir: initVolumeHostDir,
|
||||||
toolboxPath: toolboxPath,
|
toolboxPath: toolboxPath,
|
||||||
executorID: executorID,
|
executorID: executorID,
|
||||||
arch: common.ArchFromString(runtime.GOARCH),
|
arch: types.ArchFromString(runtime.GOARCH),
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ func (d *DockerDriver) Setup(ctx context.Context) error {
|
||||||
func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
// by default always try to pull the image so we are sure only authorized users can fetch them
|
// by default always try to pull the image so we are sure only authorized users can fetch them
|
||||||
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
||||||
reader, err := d.client.ImagePull(ctx, "busybox", types.ImagePullOptions{})
|
reader, err := d.client.ImagePull(ctx, "busybox", dockertypes.ImagePullOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -97,7 +97,7 @@ func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
|
|
||||||
containerID := resp.ID
|
containerID := resp.ID
|
||||||
|
|
||||||
if err := d.client.ContainerStart(ctx, containerID, types.ContainerStartOptions{}); err != nil {
|
if err := d.client.ContainerStart(ctx, containerID, dockertypes.ContainerStartOptions{}); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +117,7 @@ func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
defer srcArchive.Close()
|
defer srcArchive.Close()
|
||||||
|
|
||||||
options := types.CopyToContainerOptions{
|
options := dockertypes.CopyToContainerOptions{
|
||||||
AllowOverwriteDirWithFile: false,
|
AllowOverwriteDirWithFile: false,
|
||||||
CopyUIDGID: false,
|
CopyUIDGID: false,
|
||||||
}
|
}
|
||||||
|
@ -127,14 +127,14 @@ func (d *DockerDriver) CopyToolbox(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore remove error
|
// ignore remove error
|
||||||
_ = d.client.ContainerRemove(ctx, containerID, types.ContainerRemoveOptions{Force: true})
|
_ = d.client.ContainerRemove(ctx, containerID, dockertypes.ContainerRemoveOptions{Force: true})
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerDriver) Archs(ctx context.Context) ([]common.Arch, error) {
|
func (d *DockerDriver) Archs(ctx context.Context) ([]types.Arch, error) {
|
||||||
// since we are using the local docker driver we can return our go arch information
|
// since we are using the local docker driver we can return our go arch information
|
||||||
return []common.Arch{d.arch}, nil
|
return []types.Arch{d.arch}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.Writer) (Pod, error) {
|
func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.Writer) (Pod, error) {
|
||||||
|
@ -155,7 +155,7 @@ func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.
|
||||||
mainContainerID = containerID
|
mainContainerID = containerID
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := d.client.ContainerStart(ctx, containerID, types.ContainerStartOptions{}); err != nil {
|
if err := d.client.ContainerStart(ctx, containerID, dockertypes.ContainerStartOptions{}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -171,7 +171,7 @@ func (d *DockerDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.
|
||||||
}
|
}
|
||||||
|
|
||||||
containers, err := d.client.ContainerList(ctx,
|
containers, err := d.client.ContainerList(ctx,
|
||||||
types.ContainerListOptions{
|
dockertypes.ContainerListOptions{
|
||||||
Filters: args,
|
Filters: args,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -241,7 +241,7 @@ func (d *DockerDriver) fetchImage(ctx context.Context, image string, registryCon
|
||||||
|
|
||||||
// by default always try to pull the image so we are sure only authorized users can fetch them
|
// by default always try to pull the image so we are sure only authorized users can fetch them
|
||||||
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
// see https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages
|
||||||
reader, err := d.client.ImagePull(ctx, image, types.ImagePullOptions{RegistryAuth: registryAuthEnc})
|
reader, err := d.client.ImagePull(ctx, image, dockertypes.ImagePullOptions{RegistryAuth: registryAuthEnc})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -307,7 +307,7 @@ func (d *DockerDriver) GetPods(ctx context.Context, all bool) ([]Pod, error) {
|
||||||
args := filters.NewArgs()
|
args := filters.NewArgs()
|
||||||
|
|
||||||
containers, err := d.client.ContainerList(ctx,
|
containers, err := d.client.ContainerList(ctx,
|
||||||
types.ContainerListOptions{
|
dockertypes.ContainerListOptions{
|
||||||
Filters: args,
|
Filters: args,
|
||||||
All: all,
|
All: all,
|
||||||
})
|
})
|
||||||
|
@ -401,7 +401,7 @@ type DockerPod struct {
|
||||||
|
|
||||||
type DockerContainer struct {
|
type DockerContainer struct {
|
||||||
Index int
|
Index int
|
||||||
types.Container
|
dockertypes.Container
|
||||||
}
|
}
|
||||||
|
|
||||||
type ContainerSlice []*DockerContainer
|
type ContainerSlice []*DockerContainer
|
||||||
|
@ -439,7 +439,7 @@ func (dp *DockerPod) Stop(ctx context.Context) error {
|
||||||
func (dp *DockerPod) Remove(ctx context.Context) error {
|
func (dp *DockerPod) Remove(ctx context.Context) error {
|
||||||
errs := []error{}
|
errs := []error{}
|
||||||
for _, container := range dp.containers {
|
for _, container := range dp.containers {
|
||||||
if err := dp.client.ContainerRemove(ctx, container.ID, types.ContainerRemoveOptions{Force: true}); err != nil {
|
if err := dp.client.ContainerRemove(ctx, container.ID, dockertypes.ContainerRemoveOptions{Force: true}); err != nil {
|
||||||
errs = append(errs, err)
|
errs = append(errs, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -451,7 +451,7 @@ func (dp *DockerPod) Remove(ctx context.Context) error {
|
||||||
|
|
||||||
type DockerContainerExec struct {
|
type DockerContainerExec struct {
|
||||||
execID string
|
execID string
|
||||||
hresp *types.HijackedResponse
|
hresp *dockertypes.HijackedResponse
|
||||||
client *client.Client
|
client *client.Client
|
||||||
endCh chan error
|
endCh chan error
|
||||||
|
|
||||||
|
@ -461,7 +461,7 @@ type DockerContainerExec struct {
|
||||||
// Stdin is a wrapped HikackedResponse implementing io.WriteCloser so users can
|
// Stdin is a wrapped HikackedResponse implementing io.WriteCloser so users can
|
||||||
// easily close stdin. Internally it will close only the write side of the conn.
|
// easily close stdin. Internally it will close only the write side of the conn.
|
||||||
type Stdin struct {
|
type Stdin struct {
|
||||||
hresp *types.HijackedResponse
|
hresp *dockertypes.HijackedResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Stdin) Write(p []byte) (int, error) {
|
func (s *Stdin) Write(p []byte) (int, error) {
|
||||||
|
@ -475,7 +475,7 @@ func (s *Stdin) Close() error {
|
||||||
func (dp *DockerPod) Exec(ctx context.Context, execConfig *ExecConfig) (ContainerExec, error) {
|
func (dp *DockerPod) Exec(ctx context.Context, execConfig *ExecConfig) (ContainerExec, error) {
|
||||||
endCh := make(chan error)
|
endCh := make(chan error)
|
||||||
|
|
||||||
dockerExecConfig := types.ExecConfig{
|
dockerExecConfig := dockertypes.ExecConfig{
|
||||||
Cmd: execConfig.Cmd,
|
Cmd: execConfig.Cmd,
|
||||||
Env: makeEnvSlice(execConfig.Env),
|
Env: makeEnvSlice(execConfig.Env),
|
||||||
Tty: execConfig.Tty,
|
Tty: execConfig.Tty,
|
||||||
|
@ -490,7 +490,7 @@ func (dp *DockerPod) Exec(ctx context.Context, execConfig *ExecConfig) (Containe
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
execStartCheck := types.ExecStartCheck{
|
execStartCheck := dockertypes.ExecStartCheck{
|
||||||
Detach: dockerExecConfig.Detach,
|
Detach: dockerExecConfig.Detach,
|
||||||
Tty: dockerExecConfig.Tty,
|
Tty: dockerExecConfig.Tty,
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
"agola.io/agola/internal/services/executor/registry"
|
"agola.io/agola/internal/services/executor/registry"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -53,7 +53,7 @@ type Driver interface {
|
||||||
GetPods(ctx context.Context, all bool) ([]Pod, error)
|
GetPods(ctx context.Context, all bool) ([]Pod, error)
|
||||||
ExecutorGroup(ctx context.Context) (string, error)
|
ExecutorGroup(ctx context.Context) (string, error)
|
||||||
GetExecutors(ctx context.Context) ([]string, error)
|
GetExecutors(ctx context.Context) ([]string, error)
|
||||||
Archs(ctx context.Context) ([]common.Arch, error)
|
Archs(ctx context.Context) ([]types.Arch, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Pod interface {
|
type Pod interface {
|
||||||
|
@ -80,7 +80,7 @@ type PodConfig struct {
|
||||||
ID string
|
ID string
|
||||||
TaskID string
|
TaskID string
|
||||||
Containers []*ContainerConfig
|
Containers []*ContainerConfig
|
||||||
Arch common.Arch
|
Arch types.Arch
|
||||||
// The container dir where the init volume will be mounted
|
// The container dir where the init volume will be mounted
|
||||||
InitVolumeDir string
|
InitVolumeDir string
|
||||||
DockerConfig *registry.DockerConfig
|
DockerConfig *registry.DockerConfig
|
||||||
|
@ -106,7 +106,7 @@ type ExecConfig struct {
|
||||||
Tty bool
|
Tty bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func toolboxExecPath(toolboxDir string, arch common.Arch) (string, error) {
|
func toolboxExecPath(toolboxDir string, arch types.Arch) (string, error) {
|
||||||
toolboxPath := filepath.Join(toolboxDir, fmt.Sprintf("%s-linux-%s", toolboxPrefix, arch))
|
toolboxPath := filepath.Join(toolboxDir, fmt.Sprintf("%s-linux-%s", toolboxPrefix, arch))
|
||||||
_, err := os.Stat(toolboxPath)
|
_, err := os.Stat(toolboxPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -26,8 +26,8 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"agola.io/agola/internal/common"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/types"
|
||||||
|
|
||||||
"github.com/docker/docker/pkg/archive"
|
"github.com/docker/docker/pkg/archive"
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
|
@ -248,16 +248,16 @@ func (d *K8sDriver) Setup(ctx context.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *K8sDriver) Archs(ctx context.Context) ([]common.Arch, error) {
|
func (d *K8sDriver) Archs(ctx context.Context) ([]types.Arch, error) {
|
||||||
// TODO(sgotti) use go client listers instead of querying every time
|
// TODO(sgotti) use go client listers instead of querying every time
|
||||||
nodes, err := d.nodeLister.List(apilabels.SelectorFromSet(nil))
|
nodes, err := d.nodeLister.List(apilabels.SelectorFromSet(nil))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
archsMap := map[common.Arch]struct{}{}
|
archsMap := map[types.Arch]struct{}{}
|
||||||
archs := []common.Arch{}
|
archs := []types.Arch{}
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
archsMap[common.ArchFromString(node.Status.NodeInfo.Architecture)] = struct{}{}
|
archsMap[types.ArchFromString(node.Status.NodeInfo.Architecture)] = struct{}{}
|
||||||
}
|
}
|
||||||
for arch := range archsMap {
|
for arch := range archsMap {
|
||||||
archs = append(archs, arch)
|
archs = append(archs, arch)
|
||||||
|
@ -489,12 +489,12 @@ func (d *K8sDriver) NewPod(ctx context.Context, podConfig *PodConfig, out io.Wri
|
||||||
}
|
}
|
||||||
osArch := strings.TrimSpace(stdout.String())
|
osArch := strings.TrimSpace(stdout.String())
|
||||||
|
|
||||||
var arch common.Arch
|
var arch types.Arch
|
||||||
switch osArch {
|
switch osArch {
|
||||||
case "x86_64":
|
case "x86_64":
|
||||||
arch = common.ArchAMD64
|
arch = types.ArchAMD64
|
||||||
case "aarch64":
|
case "aarch64":
|
||||||
arch = common.ArchARM64
|
arch = types.ArchARM64
|
||||||
default:
|
default:
|
||||||
return nil, errors.Errorf("unsupported pod arch %q", osArch)
|
return nil, errors.Errorf("unsupported pod arch %q", osArch)
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,9 +35,9 @@ import (
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
"agola.io/agola/internal/services/executor/driver"
|
"agola.io/agola/internal/services/executor/driver"
|
||||||
"agola.io/agola/internal/services/executor/registry"
|
"agola.io/agola/internal/services/executor/registry"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
"agola.io/agola/services/runservice/types"
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
@ -1304,7 +1304,7 @@ func (e *Executor) saveExecutorID(id string) error {
|
||||||
|
|
||||||
type Executor struct {
|
type Executor struct {
|
||||||
c *config.Executor
|
c *config.Executor
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
id string
|
id string
|
||||||
runningTasks *runningTasks
|
runningTasks *runningTasks
|
||||||
driver driver.Driver
|
driver driver.Driver
|
||||||
|
@ -1325,7 +1325,7 @@ func NewExecutor(c *config.Executor) (*Executor, error) {
|
||||||
|
|
||||||
e := &Executor{
|
e := &Executor{
|
||||||
c: c,
|
c: c,
|
||||||
runserviceClient: rsapi.NewClient(c.RunserviceURL),
|
runserviceClient: rsclient.NewClient(c.RunserviceURL),
|
||||||
runningTasks: &runningTasks{
|
runningTasks: &runningTasks{
|
||||||
tasks: make(map[string]*runningTask),
|
tasks: make(map[string]*runningTask),
|
||||||
},
|
},
|
||||||
|
|
|
@ -19,7 +19,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
"agola.io/agola/services/runservice/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/google/go-containerregistry/pkg/name"
|
"github.com/google/go-containerregistry/pkg/name"
|
||||||
|
|
|
@ -18,9 +18,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
@ -28,14 +28,14 @@ import (
|
||||||
type ActionHandler struct {
|
type ActionHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
sd *common.TokenSigningData
|
sd *common.TokenSigningData
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
agolaID string
|
agolaID string
|
||||||
apiExposedURL string
|
apiExposedURL string
|
||||||
webExposedURL string
|
webExposedURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewActionHandler(logger *zap.Logger, sd *common.TokenSigningData, configstoreClient *csapi.Client, runserviceClient *rsapi.Client, agolaID, apiExposedURL, webExposedURL string) *ActionHandler {
|
func NewActionHandler(logger *zap.Logger, sd *common.TokenSigningData, configstoreClient *csclient.Client, runserviceClient *rsclient.Client, agolaID, apiExposedURL, webExposedURL string) *ActionHandler {
|
||||||
return &ActionHandler{
|
return &ActionHandler{
|
||||||
log: logger.Sugar(),
|
log: logger.Sugar(),
|
||||||
sd: sd,
|
sd: sd,
|
||||||
|
|
|
@ -18,7 +18,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetBadge return a badge for a project branch
|
// GetBadge return a badge for a project branch
|
||||||
|
|
|
@ -17,8 +17,8 @@ package action
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,15 +22,15 @@ import (
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *ActionHandler) GetProject(ctx context.Context, projectRef string) (*csapi.Project, error) {
|
func (h *ActionHandler) GetProject(ctx context.Context, projectRef string) (*csapitypes.Project, error) {
|
||||||
project, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
project, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -59,7 +59,7 @@ type CreateProjectRequest struct {
|
||||||
SkipSSHHostKeyCheck bool
|
SkipSSHHostKeyCheck bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateProject(ctx context.Context, req *CreateProjectRequest) (*csapi.Project, error) {
|
func (h *ActionHandler) CreateProject(ctx context.Context, req *CreateProjectRequest) (*csapitypes.Project, error) {
|
||||||
curUserID := h.CurrentUserID(ctx)
|
curUserID := h.CurrentUserID(ctx)
|
||||||
|
|
||||||
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
||||||
|
@ -184,7 +184,7 @@ type UpdateProjectRequest struct {
|
||||||
Visibility cstypes.Visibility
|
Visibility cstypes.Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateProject(ctx context.Context, projectRef string, req *UpdateProjectRequest) (*csapi.Project, error) {
|
func (h *ActionHandler) UpdateProject(ctx context.Context, projectRef string, req *UpdateProjectRequest) (*csapitypes.Project, error) {
|
||||||
p, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
p, resp, err := h.configstoreClient.GetProject(ctx, projectRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to get project %q: %w", projectRef, ErrFromRemote(resp, err))
|
return nil, errors.Errorf("failed to get project %q: %w", projectRef, ErrFromRemote(resp, err))
|
||||||
|
@ -211,7 +211,7 @@ func (h *ActionHandler) UpdateProject(ctx context.Context, projectRef string, re
|
||||||
return rp, nil
|
return rp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) ProjectUpdateRepoLinkedAccount(ctx context.Context, projectRef string) (*csapi.Project, error) {
|
func (h *ActionHandler) ProjectUpdateRepoLinkedAccount(ctx context.Context, projectRef string) (*csapitypes.Project, error) {
|
||||||
curUserID := h.CurrentUserID(ctx)
|
curUserID := h.CurrentUserID(ctx)
|
||||||
|
|
||||||
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
user, resp, err := h.configstoreClient.GetUser(ctx, curUserID)
|
||||||
|
@ -270,7 +270,7 @@ func (h *ActionHandler) ProjectUpdateRepoLinkedAccount(ctx context.Context, proj
|
||||||
return rp, nil
|
return rp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) setupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapi.Project) error {
|
func (h *ActionHandler) setupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapitypes.Project) error {
|
||||||
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("failed to create gitsource client: %w", err)
|
return errors.Errorf("failed to create gitsource client: %w", err)
|
||||||
|
@ -306,7 +306,7 @@ func (h *ActionHandler) setupGitSourceRepo(ctx context.Context, rs *cstypes.Remo
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) cleanupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapi.Project) error {
|
func (h *ActionHandler) cleanupGitSourceRepo(ctx context.Context, rs *cstypes.RemoteSource, user *cstypes.User, la *cstypes.LinkedAccount, project *csapitypes.Project) error {
|
||||||
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
gitsource, err := h.GetGitSource(ctx, rs, user.Name, la)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Errorf("failed to create gitsource client: %w", err)
|
return errors.Errorf("failed to create gitsource client: %w", err)
|
||||||
|
@ -333,7 +333,7 @@ func (h *ActionHandler) cleanupGitSourceRepo(ctx context.Context, rs *cstypes.Re
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) genWebhookURL(project *csapi.Project) (string, error) {
|
func (h *ActionHandler) genWebhookURL(project *csapitypes.Project) (string, error) {
|
||||||
baseWebhookURL := fmt.Sprintf("%s/webhooks", h.apiExposedURL)
|
baseWebhookURL := fmt.Sprintf("%s/webhooks", h.apiExposedURL)
|
||||||
webhookURL, err := url.Parse(baseWebhookURL)
|
webhookURL, err := url.Parse(baseWebhookURL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -18,14 +18,14 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *ActionHandler) GetProjectGroup(ctx context.Context, projectGroupRef string) (*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) GetProjectGroup(ctx context.Context, projectGroupRef string) (*csapitypes.ProjectGroup, error) {
|
||||||
projectGroup, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
projectGroup, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -33,7 +33,7 @@ func (h *ActionHandler) GetProjectGroup(ctx context.Context, projectGroupRef str
|
||||||
return projectGroup, nil
|
return projectGroup, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetProjectGroupSubgroups(ctx context.Context, projectGroupRef string) ([]*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) GetProjectGroupSubgroups(ctx context.Context, projectGroupRef string) ([]*csapitypes.ProjectGroup, error) {
|
||||||
projectGroups, resp, err := h.configstoreClient.GetProjectGroupSubgroups(ctx, projectGroupRef)
|
projectGroups, resp, err := h.configstoreClient.GetProjectGroupSubgroups(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -41,7 +41,7 @@ func (h *ActionHandler) GetProjectGroupSubgroups(ctx context.Context, projectGro
|
||||||
return projectGroups, nil
|
return projectGroups, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetProjectGroupProjects(ctx context.Context, projectGroupRef string) ([]*csapi.Project, error) {
|
func (h *ActionHandler) GetProjectGroupProjects(ctx context.Context, projectGroupRef string) ([]*csapitypes.Project, error) {
|
||||||
projects, resp, err := h.configstoreClient.GetProjectGroupProjects(ctx, projectGroupRef)
|
projects, resp, err := h.configstoreClient.GetProjectGroupProjects(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -56,7 +56,7 @@ type CreateProjectGroupRequest struct {
|
||||||
Visibility cstypes.Visibility
|
Visibility cstypes.Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateProjectGroup(ctx context.Context, req *CreateProjectGroupRequest) (*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) CreateProjectGroup(ctx context.Context, req *CreateProjectGroupRequest) (*csapitypes.ProjectGroup, error) {
|
||||||
if !util.ValidateName(req.Name) {
|
if !util.ValidateName(req.Name) {
|
||||||
return nil, util.NewErrBadRequest(errors.Errorf("invalid projectGroup name %q", req.Name))
|
return nil, util.NewErrBadRequest(errors.Errorf("invalid projectGroup name %q", req.Name))
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ type UpdateProjectGroupRequest struct {
|
||||||
Visibility cstypes.Visibility
|
Visibility cstypes.Visibility
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateProjectGroup(ctx context.Context, projectGroupRef string, req *UpdateProjectGroupRequest) (*csapi.ProjectGroup, error) {
|
func (h *ActionHandler) UpdateProjectGroup(ctx context.Context, projectGroupRef string, req *UpdateProjectGroupRequest) (*csapitypes.ProjectGroup, error) {
|
||||||
pg, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
pg, resp, err := h.configstoreClient.GetProjectGroup(ctx, projectGroupRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to get project group %q: %w", projectGroupRef, ErrFromRemote(resp, err))
|
return nil, errors.Errorf("failed to get project group %q: %w", projectGroupRef, ErrFromRemote(resp, err))
|
||||||
|
|
|
@ -17,8 +17,8 @@ package action
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -24,11 +24,11 @@ import (
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
"agola.io/agola/internal/runconfig"
|
"agola.io/agola/internal/runconfig"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
rsapitypes "agola.io/agola/services/runservice/api/types"
|
||||||
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
@ -65,7 +65,7 @@ const (
|
||||||
AnnotationPullRequestLink = "pull_request_link"
|
AnnotationPullRequestLink = "pull_request_link"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (h *ActionHandler) GetRun(ctx context.Context, runID string) (*rsapi.RunResponse, error) {
|
func (h *ActionHandler) GetRun(ctx context.Context, runID string) (*rsapitypes.RunResponse, error) {
|
||||||
runResp, resp, err := h.runserviceClient.GetRun(ctx, runID, nil)
|
runResp, resp, err := h.runserviceClient.GetRun(ctx, runID, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -92,7 +92,7 @@ type GetRunsRequest struct {
|
||||||
Asc bool
|
Asc bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetRuns(ctx context.Context, req *GetRunsRequest) (*rsapi.GetRunsResponse, error) {
|
func (h *ActionHandler) GetRuns(ctx context.Context, req *GetRunsRequest) (*rsapitypes.GetRunsResponse, error) {
|
||||||
canGetRun, err := h.CanGetRun(ctx, req.Group)
|
canGetRun, err := h.CanGetRun(ctx, req.Group)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to determine permissions: %w", err)
|
return nil, errors.Errorf("failed to determine permissions: %w", err)
|
||||||
|
@ -155,7 +155,7 @@ type RunActionsRequest struct {
|
||||||
FromStart bool
|
FromStart bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (*rsapi.RunResponse, error) {
|
func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (*rsapitypes.RunResponse, error) {
|
||||||
runResp, resp, err := h.runserviceClient.GetRun(ctx, req.RunID, nil)
|
runResp, resp, err := h.runserviceClient.GetRun(ctx, req.RunID, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, ErrFromRemote(resp, err)
|
return nil, ErrFromRemote(resp, err)
|
||||||
|
@ -170,7 +170,7 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (
|
||||||
|
|
||||||
switch req.ActionType {
|
switch req.ActionType {
|
||||||
case RunActionTypeRestart:
|
case RunActionTypeRestart:
|
||||||
rsreq := &rsapi.RunCreateRequest{
|
rsreq := &rsapitypes.RunCreateRequest{
|
||||||
RunID: req.RunID,
|
RunID: req.RunID,
|
||||||
FromStart: req.FromStart,
|
FromStart: req.FromStart,
|
||||||
}
|
}
|
||||||
|
@ -181,8 +181,8 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (
|
||||||
}
|
}
|
||||||
|
|
||||||
case RunActionTypeCancel:
|
case RunActionTypeCancel:
|
||||||
rsreq := &rsapi.RunActionsRequest{
|
rsreq := &rsapitypes.RunActionsRequest{
|
||||||
ActionType: rsapi.RunActionTypeChangePhase,
|
ActionType: rsapitypes.RunActionTypeChangePhase,
|
||||||
Phase: rstypes.RunPhaseCancelled,
|
Phase: rstypes.RunPhaseCancelled,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,8 +192,8 @@ func (h *ActionHandler) RunAction(ctx context.Context, req *RunActionsRequest) (
|
||||||
}
|
}
|
||||||
|
|
||||||
case RunActionTypeStop:
|
case RunActionTypeStop:
|
||||||
rsreq := &rsapi.RunActionsRequest{
|
rsreq := &rsapitypes.RunActionsRequest{
|
||||||
ActionType: rsapi.RunActionTypeStop,
|
ActionType: rsapitypes.RunActionTypeStop,
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err = h.runserviceClient.RunActions(ctx, req.RunID, rsreq)
|
resp, err = h.runserviceClient.RunActions(ctx, req.RunID, rsreq)
|
||||||
|
@ -271,8 +271,8 @@ func (h *ActionHandler) RunTaskAction(ctx context.Context, req *RunTaskActionsRe
|
||||||
|
|
||||||
annotations[common.ApproversAnnotation] = string(approversj)
|
annotations[common.ApproversAnnotation] = string(approversj)
|
||||||
|
|
||||||
rsreq := &rsapi.RunTaskActionsRequest{
|
rsreq := &rsapitypes.RunTaskActionsRequest{
|
||||||
ActionType: rsapi.RunTaskActionTypeSetAnnotations,
|
ActionType: rsapitypes.RunTaskActionTypeSetAnnotations,
|
||||||
Annotations: annotations,
|
Annotations: annotations,
|
||||||
ChangeGroupsUpdateToken: runResp.ChangeGroupsUpdateToken,
|
ChangeGroupsUpdateToken: runResp.ChangeGroupsUpdateToken,
|
||||||
}
|
}
|
||||||
|
@ -461,7 +461,7 @@ func (h *ActionHandler) CreateRuns(ctx context.Context, req *CreateRunRequest) e
|
||||||
// create a run (per config file) with a generic error since we cannot parse
|
// create a run (per config file) with a generic error since we cannot parse
|
||||||
// it and know how many runs are defined
|
// it and know how many runs are defined
|
||||||
setupErrors = append(setupErrors, err.Error())
|
setupErrors = append(setupErrors, err.Error())
|
||||||
createRunReq := &rsapi.RunCreateRequest{
|
createRunReq := &rsapitypes.RunCreateRequest{
|
||||||
RunConfigTasks: nil,
|
RunConfigTasks: nil,
|
||||||
Group: runGroup,
|
Group: runGroup,
|
||||||
SetupErrors: setupErrors,
|
SetupErrors: setupErrors,
|
||||||
|
@ -480,7 +480,7 @@ func (h *ActionHandler) CreateRuns(ctx context.Context, req *CreateRunRequest) e
|
||||||
for _, run := range config.Runs {
|
for _, run := range config.Runs {
|
||||||
rcts := runconfig.GenRunConfigTasks(util.DefaultUUIDGenerator{}, config, run.Name, variables, req.Branch, req.Tag, req.Ref)
|
rcts := runconfig.GenRunConfigTasks(util.DefaultUUIDGenerator{}, config, run.Name, variables, req.Branch, req.Tag, req.Ref)
|
||||||
|
|
||||||
createRunReq := &rsapi.RunCreateRequest{
|
createRunReq := &rsapitypes.RunCreateRequest{
|
||||||
RunConfigTasks: rcts,
|
RunConfigTasks: rcts,
|
||||||
Group: runGroup,
|
Group: runGroup,
|
||||||
SetupErrors: setupErrors,
|
SetupErrors: setupErrors,
|
||||||
|
|
|
@ -18,9 +18,9 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
@ -32,8 +32,8 @@ type GetSecretsRequest struct {
|
||||||
Tree bool
|
Tree bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetSecrets(ctx context.Context, req *GetSecretsRequest) ([]*csapi.Secret, error) {
|
func (h *ActionHandler) GetSecrets(ctx context.Context, req *GetSecretsRequest) ([]*csapitypes.Secret, error) {
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var err error
|
var err error
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
|
@ -65,7 +65,7 @@ type CreateSecretRequest struct {
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateSecret(ctx context.Context, req *CreateSecretRequest) (*csapi.Secret, error) {
|
func (h *ActionHandler) CreateSecret(ctx context.Context, req *CreateSecretRequest) (*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -85,7 +85,7 @@ func (h *ActionHandler) CreateSecret(ctx context.Context, req *CreateSecretReque
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var rs *csapi.Secret
|
var rs *csapitypes.Secret
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
h.log.Infof("creating project group secret")
|
h.log.Infof("creating project group secret")
|
||||||
|
@ -120,7 +120,7 @@ type UpdateSecretRequest struct {
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateSecret(ctx context.Context, req *UpdateSecretRequest) (*csapi.Secret, error) {
|
func (h *ActionHandler) UpdateSecret(ctx context.Context, req *UpdateSecretRequest) (*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -140,7 +140,7 @@ func (h *ActionHandler) UpdateSecret(ctx context.Context, req *UpdateSecretReque
|
||||||
}
|
}
|
||||||
|
|
||||||
var resp *http.Response
|
var resp *http.Response
|
||||||
var rs *csapi.Secret
|
var rs *csapitypes.Secret
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
h.log.Infof("updating project group secret")
|
h.log.Infof("updating project group secret")
|
||||||
|
|
|
@ -24,10 +24,10 @@ import (
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
"agola.io/agola/internal/gitsources/agolagit"
|
"agola.io/agola/internal/gitsources/agolagit"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
jwt "github.com/dgrijalva/jwt-go"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -90,7 +90,7 @@ func (h *ActionHandler) CreateUser(ctx context.Context, req *CreateUserRequest)
|
||||||
return nil, util.NewErrBadRequest(errors.Errorf("invalid user name %q", req.UserName))
|
return nil, util.NewErrBadRequest(errors.Errorf("invalid user name %q", req.UserName))
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.CreateUserRequest{
|
creq := &csapitypes.CreateUserRequest{
|
||||||
UserName: req.UserName,
|
UserName: req.UserName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ func (h *ActionHandler) CreateUserToken(ctx context.Context, req *CreateUserToke
|
||||||
}
|
}
|
||||||
|
|
||||||
h.log.Infof("creating user token")
|
h.log.Infof("creating user token")
|
||||||
creq := &csapi.CreateUserTokenRequest{
|
creq := &csapitypes.CreateUserTokenRequest{
|
||||||
TokenName: req.TokenName,
|
TokenName: req.TokenName,
|
||||||
}
|
}
|
||||||
res, resp, err := h.configstoreClient.CreateUserToken(ctx, userRef, creq)
|
res, resp, err := h.configstoreClient.CreateUserToken(ctx, userRef, creq)
|
||||||
|
@ -197,7 +197,7 @@ func (h *ActionHandler) CreateUserLA(ctx context.Context, req *CreateUserLAReque
|
||||||
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.CreateUserLARequest{
|
creq := &csapitypes.CreateUserLARequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
RemoteUserID: remoteUserInfo.ID,
|
RemoteUserID: remoteUserInfo.ID,
|
||||||
RemoteUserName: remoteUserInfo.LoginName,
|
RemoteUserName: remoteUserInfo.LoginName,
|
||||||
|
@ -233,7 +233,7 @@ func (h *ActionHandler) UpdateUserLA(ctx context.Context, userRef string, la *cs
|
||||||
return util.NewErrBadRequest(errors.Errorf("user %q doesn't have a linked account with id %q", userRef, la.ID))
|
return util.NewErrBadRequest(errors.Errorf("user %q doesn't have a linked account with id %q", userRef, la.ID))
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.UpdateUserLARequest{
|
creq := &csapitypes.UpdateUserLARequest{
|
||||||
RemoteUserID: la.RemoteUserID,
|
RemoteUserID: la.RemoteUserID,
|
||||||
RemoteUserName: la.RemoteUserName,
|
RemoteUserName: la.RemoteUserName,
|
||||||
UserAccessToken: la.UserAccessToken,
|
UserAccessToken: la.UserAccessToken,
|
||||||
|
@ -333,9 +333,9 @@ func (h *ActionHandler) RegisterUser(ctx context.Context, req *RegisterUserReque
|
||||||
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
return nil, errors.Errorf("empty remote user id for remote source %q", rs.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
creq := &csapi.CreateUserRequest{
|
creq := &csapitypes.CreateUserRequest{
|
||||||
UserName: req.UserName,
|
UserName: req.UserName,
|
||||||
CreateUserLARequest: &csapi.CreateUserLARequest{
|
CreateUserLARequest: &csapitypes.CreateUserLARequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
RemoteUserID: remoteUserInfo.ID,
|
RemoteUserID: remoteUserInfo.ID,
|
||||||
RemoteUserName: remoteUserInfo.LoginName,
|
RemoteUserName: remoteUserInfo.LoginName,
|
||||||
|
@ -420,7 +420,7 @@ func (h *ActionHandler) LoginUser(ctx context.Context, req *LoginUserRequest) (*
|
||||||
la.Oauth2RefreshToken = req.Oauth2RefreshToken
|
la.Oauth2RefreshToken = req.Oauth2RefreshToken
|
||||||
la.UserAccessToken = req.UserAccessToken
|
la.UserAccessToken = req.UserAccessToken
|
||||||
|
|
||||||
creq := &csapi.UpdateUserLARequest{
|
creq := &csapitypes.UpdateUserLARequest{
|
||||||
RemoteUserID: la.RemoteUserID,
|
RemoteUserID: la.RemoteUserID,
|
||||||
RemoteUserName: la.RemoteUserName,
|
RemoteUserName: la.RemoteUserName,
|
||||||
UserAccessToken: la.UserAccessToken,
|
UserAccessToken: la.UserAccessToken,
|
||||||
|
|
|
@ -19,9 +19,9 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -33,9 +33,9 @@ type GetVariablesRequest struct {
|
||||||
RemoveOverridden bool
|
RemoveOverridden bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) GetVariables(ctx context.Context, req *GetVariablesRequest) ([]*csapi.Variable, []*csapi.Secret, error) {
|
func (h *ActionHandler) GetVariables(ctx context.Context, req *GetVariablesRequest) ([]*csapitypes.Variable, []*csapitypes.Secret, error) {
|
||||||
var csvars []*csapi.Variable
|
var csvars []*csapitypes.Variable
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
|
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
|
@ -79,7 +79,7 @@ type CreateVariableRequest struct {
|
||||||
Values []cstypes.VariableValue
|
Values []cstypes.VariableValue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) CreateVariable(ctx context.Context, req *CreateVariableRequest) (*csapi.Variable, []*csapi.Secret, error) {
|
func (h *ActionHandler) CreateVariable(ctx context.Context, req *CreateVariableRequest) (*csapitypes.Variable, []*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -105,8 +105,8 @@ func (h *ActionHandler) CreateVariable(ctx context.Context, req *CreateVariableR
|
||||||
Values: req.Values,
|
Values: req.Values,
|
||||||
}
|
}
|
||||||
|
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
var rv *csapi.Variable
|
var rv *csapitypes.Variable
|
||||||
|
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
|
@ -152,7 +152,7 @@ type UpdateVariableRequest struct {
|
||||||
Values []cstypes.VariableValue
|
Values []cstypes.VariableValue
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ActionHandler) UpdateVariable(ctx context.Context, req *UpdateVariableRequest) (*csapi.Variable, []*csapi.Secret, error) {
|
func (h *ActionHandler) UpdateVariable(ctx context.Context, req *UpdateVariableRequest) (*csapitypes.Variable, []*csapitypes.Secret, error) {
|
||||||
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
isVariableOwner, err := h.IsVariableOwner(ctx, req.ParentType, req.ParentRef)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
return nil, nil, errors.Errorf("failed to determine ownership: %w", err)
|
||||||
|
@ -178,8 +178,8 @@ func (h *ActionHandler) UpdateVariable(ctx context.Context, req *UpdateVariableR
|
||||||
Values: req.Values,
|
Values: req.Values,
|
||||||
}
|
}
|
||||||
|
|
||||||
var cssecrets []*csapi.Secret
|
var cssecrets []*csapitypes.Secret
|
||||||
var rv *csapi.Variable
|
var rv *csapitypes.Variable
|
||||||
|
|
||||||
switch req.ParentType {
|
switch req.ParentType {
|
||||||
case cstypes.ConfigTypeProjectGroup:
|
case cstypes.ConfigTypeProjectGroup:
|
||||||
|
|
|
@ -19,8 +19,8 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
util "agola.io/agola/internal/util"
|
||||||
"agola.io/agola/internal/util"
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -24,10 +24,6 @@ import (
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type BadgeRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type BadgeHandler struct {
|
type BadgeHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
|
|
@ -19,6 +19,7 @@ import (
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
@ -28,11 +29,6 @@ type OAuth2CallbackHandler struct {
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteSourceAuthResult struct {
|
|
||||||
RequestType string `json:"request_type,omitempty"`
|
|
||||||
Response interface{} `json:"response,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewOAuth2CallbackHandler(logger *zap.Logger, ah *action.ActionHandler) *OAuth2CallbackHandler {
|
func NewOAuth2CallbackHandler(logger *zap.Logger, ah *action.ActionHandler) *OAuth2CallbackHandler {
|
||||||
return &OAuth2CallbackHandler{log: logger.Sugar(), ah: ah}
|
return &OAuth2CallbackHandler{log: logger.Sugar(), ah: ah}
|
||||||
}
|
}
|
||||||
|
@ -54,29 +50,39 @@ func (h *OAuth2CallbackHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
switch cresp.RequestType {
|
switch cresp.RequestType {
|
||||||
case action.RemoteSourceRequestTypeCreateUserLA:
|
case action.RemoteSourceRequestTypeCreateUserLA:
|
||||||
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
||||||
response = &CreateUserLAResponse{
|
response = &gwapitypes.CreateUserLAResponse{
|
||||||
LinkedAccount: authresp.LinkedAccount,
|
LinkedAccount: &gwapitypes.LinkedAccount{
|
||||||
|
ID: authresp.LinkedAccount.ID,
|
||||||
|
RemoteUserID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
RemoteUserName: authresp.LinkedAccount.RemoteUserName,
|
||||||
|
RemoteUserAvatarURL: authresp.LinkedAccount.RemoteUserAvatarURL,
|
||||||
|
RemoteSourceID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
case action.RemoteSourceRequestTypeLoginUser:
|
case action.RemoteSourceRequestTypeLoginUser:
|
||||||
authresp := cresp.Response.(*action.LoginUserResponse)
|
authresp := cresp.Response.(*action.LoginUserResponse)
|
||||||
response = &LoginUserResponse{
|
response = &gwapitypes.LoginUserResponse{
|
||||||
Token: authresp.Token,
|
Token: authresp.Token,
|
||||||
User: createUserResponse(authresp.User),
|
User: createUserResponse(authresp.User),
|
||||||
}
|
}
|
||||||
|
|
||||||
case action.RemoteSourceRequestTypeAuthorize:
|
case action.RemoteSourceRequestTypeAuthorize:
|
||||||
authresp := cresp.Response.(*action.AuthorizeResponse)
|
authresp := cresp.Response.(*action.AuthorizeResponse)
|
||||||
response = &AuthorizeResponse{
|
response = &gwapitypes.AuthorizeResponse{
|
||||||
RemoteUserInfo: authresp.RemoteUserInfo,
|
RemoteUserInfo: &gwapitypes.UserInfo{
|
||||||
|
ID: authresp.RemoteUserInfo.ID,
|
||||||
|
LoginName: authresp.RemoteUserInfo.LoginName,
|
||||||
|
Email: authresp.RemoteUserInfo.Email,
|
||||||
|
},
|
||||||
RemoteSourceName: authresp.RemoteSourceName,
|
RemoteSourceName: authresp.RemoteSourceName,
|
||||||
}
|
}
|
||||||
|
|
||||||
case action.RemoteSourceRequestTypeRegisterUser:
|
case action.RemoteSourceRequestTypeRegisterUser:
|
||||||
response = &RegisterUserResponse{}
|
response = &gwapitypes.RegisterUserResponse{}
|
||||||
}
|
}
|
||||||
|
|
||||||
res := RemoteSourceAuthResult{
|
res := gwapitypes.RemoteSourceAuthResult{
|
||||||
RequestType: string(cresp.RequestType),
|
RequestType: string(cresp.RequestType),
|
||||||
Response: response,
|
Response: response,
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,20 +19,16 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateOrgRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateOrgHandler struct {
|
type CreateOrgHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -51,7 +47,7 @@ func (h *CreateOrgHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
userID = userIDVal.(string)
|
userID = userIDVal.(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateOrgRequest
|
var req gwapitypes.CreateOrgRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -60,7 +56,7 @@ func (h *CreateOrgHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
creq := &action.CreateOrgRequest{
|
creq := &action.CreateOrgRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
CreatorUserID: userID,
|
CreatorUserID: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,17 +123,11 @@ func (h *OrgHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrgResponse struct {
|
func createOrgResponse(o *cstypes.Organization) *gwapitypes.OrgResponse {
|
||||||
ID string `json:"id"`
|
org := &gwapitypes.OrgResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createOrgResponse(o *cstypes.Organization) *OrgResponse {
|
|
||||||
org := &OrgResponse{
|
|
||||||
ID: o.ID,
|
ID: o.ID,
|
||||||
Name: o.Name,
|
Name: o.Name,
|
||||||
Visibility: o.Visibility,
|
Visibility: gwapitypes.Visibility(o.Visibility),
|
||||||
}
|
}
|
||||||
return org
|
return org
|
||||||
}
|
}
|
||||||
|
@ -190,7 +180,7 @@ func (h *OrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
orgs := make([]*OrgResponse, len(csorgs))
|
orgs := make([]*gwapitypes.OrgResponse, len(csorgs))
|
||||||
for i, p := range csorgs {
|
for i, p := range csorgs {
|
||||||
orgs[i] = createOrgResponse(p)
|
orgs[i] = createOrgResponse(p)
|
||||||
}
|
}
|
||||||
|
@ -199,20 +189,10 @@ func (h *OrgsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type OrgMembersResponse struct {
|
func createOrgMemberResponse(user *cstypes.User, role cstypes.MemberRole) *gwapitypes.OrgMemberResponse {
|
||||||
Organization *OrgResponse `json:"organization"`
|
return &gwapitypes.OrgMemberResponse{
|
||||||
Members []*OrgMemberResponse `json:"members"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OrgMemberResponse struct {
|
|
||||||
User *UserResponse `json:"user"`
|
|
||||||
Role cstypes.MemberRole `json:"role"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createOrgMemberResponse(user *cstypes.User, role cstypes.MemberRole) *OrgMemberResponse {
|
|
||||||
return &OrgMemberResponse{
|
|
||||||
User: createUserResponse(user),
|
User: createUserResponse(user),
|
||||||
Role: role,
|
Role: gwapitypes.MemberRole(role),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,9 +217,9 @@ func (h *OrgMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := &OrgMembersResponse{
|
res := &gwapitypes.OrgMembersResponse{
|
||||||
Organization: createOrgResponse(ares.Organization),
|
Organization: createOrgResponse(ares.Organization),
|
||||||
Members: make([]*OrgMemberResponse, len(ares.Members)),
|
Members: make([]*gwapitypes.OrgMemberResponse, len(ares.Members)),
|
||||||
}
|
}
|
||||||
for i, m := range ares.Members {
|
for i, m := range ares.Members {
|
||||||
res.Members[i] = createOrgMemberResponse(m.User, m.Role)
|
res.Members[i] = createOrgMemberResponse(m.User, m.Role)
|
||||||
|
@ -249,25 +229,16 @@ func (h *OrgMembersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AddOrgMemberResponse struct {
|
func createAddOrgMemberResponse(org *cstypes.Organization, user *cstypes.User, role cstypes.MemberRole) *gwapitypes.AddOrgMemberResponse {
|
||||||
Organization *OrgResponse `json:"organization"`
|
return &gwapitypes.AddOrgMemberResponse{
|
||||||
OrgMemberResponse
|
|
||||||
}
|
|
||||||
|
|
||||||
func createAddOrgMemberResponse(org *cstypes.Organization, user *cstypes.User, role cstypes.MemberRole) *AddOrgMemberResponse {
|
|
||||||
return &AddOrgMemberResponse{
|
|
||||||
Organization: createOrgResponse(org),
|
Organization: createOrgResponse(org),
|
||||||
OrgMemberResponse: OrgMemberResponse{
|
OrgMemberResponse: gwapitypes.OrgMemberResponse{
|
||||||
User: createUserResponse(user),
|
User: createUserResponse(user),
|
||||||
Role: role,
|
Role: gwapitypes.MemberRole(role),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type AddOrgMemberRequest struct {
|
|
||||||
Role cstypes.MemberRole `json:"role"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type AddOrgMemberHandler struct {
|
type AddOrgMemberHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -284,14 +255,14 @@ func (h *AddOrgMemberHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
orgRef := vars["orgref"]
|
orgRef := vars["orgref"]
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req AddOrgMemberRequest
|
var req gwapitypes.AddOrgMemberRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ares, err := h.ah.AddOrgMember(ctx, orgRef, userRef, req.Role)
|
ares, err := h.ah.AddOrgMember(ctx, orgRef, userRef, cstypes.MemberRole(req.Role))
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
h.log.Errorf("err: %+v", err)
|
h.log.Errorf("err: %+v", err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -19,24 +19,16 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateProjectRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
ParentRef string `json:"parent_ref,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
RepoPath string `json:"repo_path,omitempty"`
|
|
||||||
RemoteSourceName string `json:"remote_source_name,omitempty"`
|
|
||||||
SkipSSHHostKeyCheck bool `json:"skip_ssh_host_key_check,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateProjectHandler struct {
|
type CreateProjectHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -49,7 +41,7 @@ func NewCreateProjectHandler(logger *zap.Logger, ah *action.ActionHandler) *Crea
|
||||||
func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateProjectRequest
|
var req gwapitypes.CreateProjectRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -59,7 +51,7 @@ func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
areq := &action.CreateProjectRequest{
|
areq := &action.CreateProjectRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentRef: req.ParentRef,
|
ParentRef: req.ParentRef,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
RepoPath: req.RepoPath,
|
RepoPath: req.RepoPath,
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
SkipSSHHostKeyCheck: req.SkipSSHHostKeyCheck,
|
SkipSSHHostKeyCheck: req.SkipSSHHostKeyCheck,
|
||||||
|
@ -77,11 +69,6 @@ func (h *CreateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateProjectRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateProjectHandler struct {
|
type UpdateProjectHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -100,7 +87,7 @@ func (h *UpdateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateProjectRequest
|
var req gwapitypes.UpdateProjectRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -109,7 +96,7 @@ func (h *UpdateProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
|
|
||||||
areq := &action.UpdateProjectRequest{
|
areq := &action.UpdateProjectRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
}
|
}
|
||||||
project, err := h.ah.UpdateProject(ctx, projectRef, areq)
|
project, err := h.ah.UpdateProject(ctx, projectRef, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -239,35 +226,19 @@ func (h *ProjectHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProjectResponse struct {
|
func createProjectResponse(r *csapitypes.Project) *gwapitypes.ProjectResponse {
|
||||||
ID string `json:"id,omitempty"`
|
res := &gwapitypes.ProjectResponse{
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
ParentPath string `json:"parent_path,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
GlobalVisibility string `json:"global_visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createProjectResponse(r *csapi.Project) *ProjectResponse {
|
|
||||||
res := &ProjectResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
Path: r.Path,
|
Path: r.Path,
|
||||||
ParentPath: r.ParentPath,
|
ParentPath: r.ParentPath,
|
||||||
Visibility: r.Visibility,
|
Visibility: gwapitypes.Visibility(r.Visibility),
|
||||||
GlobalVisibility: string(r.GlobalVisibility),
|
GlobalVisibility: string(r.GlobalVisibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
return res
|
return res
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProjectCreateRunRequest struct {
|
|
||||||
Branch string `json:"branch,omitempty"`
|
|
||||||
Tag string `json:"tag,omitempty"`
|
|
||||||
Ref string `json:"ref,omitempty"`
|
|
||||||
CommitSHA string `json:"commit_sha,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type ProjectCreateRunHandler struct {
|
type ProjectCreateRunHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -286,7 +257,7 @@ func (h *ProjectCreateRunHandler) ServeHTTP(w http.ResponseWriter, r *http.Reque
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req ProjectCreateRunRequest
|
var req gwapitypes.ProjectCreateRunRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
|
|
@ -19,22 +19,17 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateProjectGroupRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
ParentRef string `json:"parent_ref"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateProjectGroupHandler struct {
|
type CreateProjectGroupHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -47,7 +42,7 @@ func NewCreateProjectGroupHandler(logger *zap.Logger, ah *action.ActionHandler)
|
||||||
func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateProjectGroupRequest
|
var req gwapitypes.CreateProjectGroupRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -64,7 +59,7 @@ func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
creq := &action.CreateProjectGroupRequest{
|
creq := &action.CreateProjectGroupRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentRef: req.ParentRef,
|
ParentRef: req.ParentRef,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
CurrentUserID: userID,
|
CurrentUserID: userID,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,11 +75,6 @@ func (h *CreateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateProjectGroupRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateProjectGroupHandler struct {
|
type UpdateProjectGroupHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -103,7 +93,7 @@ func (h *UpdateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateProjectGroupRequest
|
var req gwapitypes.UpdateProjectGroupRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -112,7 +102,7 @@ func (h *UpdateProjectGroupHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
|
|
||||||
areq := &action.UpdateProjectGroupRequest{
|
areq := &action.UpdateProjectGroupRequest{
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
Visibility: req.Visibility,
|
Visibility: cstypes.Visibility(req.Visibility),
|
||||||
}
|
}
|
||||||
projectGroup, err := h.ah.UpdateProjectGroup(ctx, projectGroupRef, areq)
|
projectGroup, err := h.ah.UpdateProjectGroup(ctx, projectGroupRef, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -209,7 +199,7 @@ func (h *ProjectGroupProjectsHandler) ServeHTTP(w http.ResponseWriter, r *http.R
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
projects := make([]*ProjectResponse, len(csprojects))
|
projects := make([]*gwapitypes.ProjectResponse, len(csprojects))
|
||||||
for i, p := range csprojects {
|
for i, p := range csprojects {
|
||||||
projects[i] = createProjectResponse(p)
|
projects[i] = createProjectResponse(p)
|
||||||
}
|
}
|
||||||
|
@ -243,7 +233,7 @@ func (h *ProjectGroupSubgroupsHandler) ServeHTTP(w http.ResponseWriter, r *http.
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
subgroups := make([]*ProjectGroupResponse, len(cssubgroups))
|
subgroups := make([]*gwapitypes.ProjectGroupResponse, len(cssubgroups))
|
||||||
for i, g := range cssubgroups {
|
for i, g := range cssubgroups {
|
||||||
subgroups[i] = createProjectGroupResponse(g)
|
subgroups[i] = createProjectGroupResponse(g)
|
||||||
}
|
}
|
||||||
|
@ -253,22 +243,13 @@ func (h *ProjectGroupSubgroupsHandler) ServeHTTP(w http.ResponseWriter, r *http.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type ProjectGroupResponse struct {
|
func createProjectGroupResponse(r *csapitypes.ProjectGroup) *gwapitypes.ProjectGroupResponse {
|
||||||
ID string `json:"id"`
|
run := &gwapitypes.ProjectGroupResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
Path string `json:"path"`
|
|
||||||
ParentPath string `json:"parent_path"`
|
|
||||||
Visibility cstypes.Visibility `json:"visibility"`
|
|
||||||
GlobalVisibility string `json:"global_visibility"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createProjectGroupResponse(r *csapi.ProjectGroup) *ProjectGroupResponse {
|
|
||||||
run := &ProjectGroupResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
Path: r.Path,
|
Path: r.Path,
|
||||||
ParentPath: r.ParentPath,
|
ParentPath: r.ParentPath,
|
||||||
Visibility: r.Visibility,
|
Visibility: gwapitypes.Visibility(r.Visibility),
|
||||||
GlobalVisibility: string(r.GlobalVisibility),
|
GlobalVisibility: string(r.GlobalVisibility),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,23 +18,19 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RemoteRepoResponse struct {
|
func createRemoteRepoResponse(r *gitsource.RepoInfo) *gwapitypes.RemoteRepoResponse {
|
||||||
ID string `json:"id,omitempty"`
|
rr := &gwapitypes.RemoteRepoResponse{
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createRemoteRepoResponse(r *gitsource.RepoInfo) *RemoteRepoResponse {
|
|
||||||
rr := &RemoteRepoResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Path: r.Path,
|
Path: r.Path,
|
||||||
}
|
}
|
||||||
|
@ -45,10 +41,10 @@ func createRemoteRepoResponse(r *gitsource.RepoInfo) *RemoteRepoResponse {
|
||||||
type UserRemoteReposHandler struct {
|
type UserRemoteReposHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserRemoteReposHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csapi.Client) *UserRemoteReposHandler {
|
func NewUserRemoteReposHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csclient.Client) *UserRemoteReposHandler {
|
||||||
return &UserRemoteReposHandler{log: logger.Sugar(), ah: ah, configstoreClient: configstoreClient}
|
return &UserRemoteReposHandler{log: logger.Sugar(), ah: ah, configstoreClient: configstoreClient}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +101,7 @@ func (h *UserRemoteReposHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
repos := make([]*RemoteRepoResponse, len(remoteRepos))
|
repos := make([]*gwapitypes.RemoteRepoResponse, len(remoteRepos))
|
||||||
for i, r := range remoteRepos {
|
for i, r := range remoteRepos {
|
||||||
repos[i] = createRemoteRepoResponse(r)
|
repos[i] = createRemoteRepoResponse(r)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,29 +19,16 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateRemoteSourceRequest struct {
|
|
||||||
Name string `json:"name"`
|
|
||||||
APIURL string `json:"apiurl"`
|
|
||||||
Type string `json:"type"`
|
|
||||||
AuthType string `json:"auth_type"`
|
|
||||||
SkipVerify bool `json:"skip_verify"`
|
|
||||||
Oauth2ClientID string `json:"oauth_2_client_id"`
|
|
||||||
Oauth2ClientSecret string `json:"oauth_2_client_secret"`
|
|
||||||
SSHHostKey string `json:"ssh_host_key"`
|
|
||||||
SkipSSHHostKeyCheck bool `json:"skip_ssh_host_key_check"`
|
|
||||||
RegistrationEnabled *bool `json:"registration_enabled"`
|
|
||||||
LoginEnabled *bool `json:"login_enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateRemoteSourceHandler struct {
|
type CreateRemoteSourceHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -54,7 +41,7 @@ func NewCreateRemoteSourceHandler(logger *zap.Logger, ah *action.ActionHandler)
|
||||||
func (h *CreateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateRemoteSourceRequest
|
var req gwapitypes.CreateRemoteSourceRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -86,18 +73,6 @@ func (h *CreateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateRemoteSourceRequest struct {
|
|
||||||
Name *string `json:"name"`
|
|
||||||
APIURL *string `json:"apiurl"`
|
|
||||||
SkipVerify *bool `json:"skip_verify"`
|
|
||||||
Oauth2ClientID *string `json:"oauth_2_client_id"`
|
|
||||||
Oauth2ClientSecret *string `json:"oauth_2_client_secret"`
|
|
||||||
SSHHostKey *string `json:"ssh_host_key"`
|
|
||||||
SkipSSHHostKeyCheck *bool `json:"skip_ssh_host_key_check"`
|
|
||||||
RegistrationEnabled *bool `json:"registration_enabled"`
|
|
||||||
LoginEnabled *bool `json:"login_enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateRemoteSourceHandler struct {
|
type UpdateRemoteSourceHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -112,7 +87,7 @@ func (h *UpdateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
rsRef := vars["remotesourceref"]
|
rsRef := vars["remotesourceref"]
|
||||||
|
|
||||||
var req UpdateRemoteSourceRequest
|
var req gwapitypes.UpdateRemoteSourceRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -144,16 +119,8 @@ func (h *UpdateRemoteSourceHandler) ServeHTTP(w http.ResponseWriter, r *http.Req
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RemoteSourceResponse struct {
|
func createRemoteSourceResponse(r *cstypes.RemoteSource) *gwapitypes.RemoteSourceResponse {
|
||||||
ID string `json:"id"`
|
rs := &gwapitypes.RemoteSourceResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
AuthType string `json:"auth_type"`
|
|
||||||
RegistrationEnabled bool `json:"registration_enabled"`
|
|
||||||
LoginEnabled bool `json:"login_enabled"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createRemoteSourceResponse(r *cstypes.RemoteSource) *RemoteSourceResponse {
|
|
||||||
rs := &RemoteSourceResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
AuthType: string(r.AuthType),
|
AuthType: string(r.AuthType),
|
||||||
|
@ -237,7 +204,7 @@ func (h *RemoteSourcesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
remoteSources := make([]*RemoteSourceResponse, len(csRemoteSources))
|
remoteSources := make([]*gwapitypes.RemoteSourceResponse, len(csRemoteSources))
|
||||||
for i, rs := range csRemoteSources {
|
for i, rs := range csRemoteSources {
|
||||||
remoteSources[i] = createRemoteSourceResponse(rs)
|
remoteSources[i] = createRemoteSourceResponse(rs)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,103 +19,19 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
"go.uber.org/zap"
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
errors "golang.org/x/xerrors"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type RunsResponse struct {
|
func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *gwapitypes.RunResponse {
|
||||||
ID string `json:"id"`
|
run := &gwapitypes.RunResponse{
|
||||||
Counter uint64 `json:"counter"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Annotations map[string]string `json:"annotations"`
|
|
||||||
Phase rstypes.RunPhase `json:"phase"`
|
|
||||||
Result rstypes.RunResult `json:"result"`
|
|
||||||
|
|
||||||
TasksWaitingApproval []string `json:"tasks_waiting_approval"`
|
|
||||||
|
|
||||||
EnqueueTime *time.Time `json:"enqueue_time"`
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Counter uint64 `json:"counter"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Annotations map[string]string `json:"annotations"`
|
|
||||||
Phase rstypes.RunPhase `json:"phase"`
|
|
||||||
Result rstypes.RunResult `json:"result"`
|
|
||||||
SetupErrors []string `json:"setup_errors"`
|
|
||||||
Stopping bool `json:"stopping"`
|
|
||||||
|
|
||||||
Tasks map[string]*RunResponseTask `json:"tasks"`
|
|
||||||
TasksWaitingApproval []string `json:"tasks_waiting_approval"`
|
|
||||||
|
|
||||||
EnqueueTime *time.Time `json:"enqueue_time"`
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
|
|
||||||
CanRestartFromScratch bool `json:"can_restart_from_scratch"`
|
|
||||||
CanRestartFromFailedTasks bool `json:"can_restart_from_failed_tasks"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunResponseTask struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Status rstypes.RunTaskStatus `json:"status"`
|
|
||||||
Level int `json:"level"`
|
|
||||||
Depends map[string]*rstypes.RunConfigTaskDepend `json:"depends"`
|
|
||||||
|
|
||||||
WaitingApproval bool `json:"waiting_approval"`
|
|
||||||
Approved bool `json:"approved"`
|
|
||||||
ApprovalAnnotations map[string]string `json:"approval_annotations"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Status rstypes.RunTaskStatus `json:"status"`
|
|
||||||
|
|
||||||
WaitingApproval bool `json:"waiting_approval"`
|
|
||||||
Approved bool `json:"approved"`
|
|
||||||
ApprovalAnnotations map[string]string `json:"approval_annotations"`
|
|
||||||
|
|
||||||
SetupStep *RunTaskResponseSetupStep `json:"setup_step"`
|
|
||||||
Steps []*RunTaskResponseStep `json:"steps"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskResponseSetupStep struct {
|
|
||||||
Phase rstypes.ExecutorTaskPhase `json:"phase"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskResponseStep struct {
|
|
||||||
Phase rstypes.ExecutorTaskPhase `json:"phase"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Command string `json:"command"`
|
|
||||||
|
|
||||||
StartTime *time.Time `json:"start_time"`
|
|
||||||
EndTime *time.Time `json:"end_time"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *RunResponse {
|
|
||||||
run := &RunResponse{
|
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Counter: r.Counter,
|
Counter: r.Counter,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
|
@ -125,7 +41,7 @@ func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *RunResponse {
|
||||||
Stopping: r.Stop,
|
Stopping: r.Stop,
|
||||||
SetupErrors: rc.SetupErrors,
|
SetupErrors: rc.SetupErrors,
|
||||||
|
|
||||||
Tasks: make(map[string]*RunResponseTask),
|
Tasks: make(map[string]*gwapitypes.RunResponseTask),
|
||||||
TasksWaitingApproval: r.TasksWaitingApproval(),
|
TasksWaitingApproval: r.TasksWaitingApproval(),
|
||||||
|
|
||||||
EnqueueTime: r.EnqueueTime,
|
EnqueueTime: r.EnqueueTime,
|
||||||
|
@ -144,8 +60,8 @@ func createRunResponse(r *rstypes.Run, rc *rstypes.RunConfig) *RunResponse {
|
||||||
return run
|
return run
|
||||||
}
|
}
|
||||||
|
|
||||||
func createRunResponseTask(r *rstypes.Run, rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *RunResponseTask {
|
func createRunResponseTask(r *rstypes.Run, rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *gwapitypes.RunResponseTask {
|
||||||
t := &RunResponseTask{
|
t := &gwapitypes.RunResponseTask{
|
||||||
ID: rt.ID,
|
ID: rt.ID,
|
||||||
Name: rct.Name,
|
Name: rct.Name,
|
||||||
Status: rt.Status,
|
Status: rt.Status,
|
||||||
|
@ -164,8 +80,8 @@ func createRunResponseTask(r *rstypes.Run, rt *rstypes.RunTask, rct *rstypes.Run
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *RunTaskResponse {
|
func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *gwapitypes.RunTaskResponse {
|
||||||
t := &RunTaskResponse{
|
t := &gwapitypes.RunTaskResponse{
|
||||||
ID: rt.ID,
|
ID: rt.ID,
|
||||||
Name: rct.Name,
|
Name: rct.Name,
|
||||||
Status: rt.Status,
|
Status: rt.Status,
|
||||||
|
@ -174,13 +90,13 @@ func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *Run
|
||||||
Approved: rt.Approved,
|
Approved: rt.Approved,
|
||||||
ApprovalAnnotations: rt.Annotations,
|
ApprovalAnnotations: rt.Annotations,
|
||||||
|
|
||||||
Steps: make([]*RunTaskResponseStep, len(rt.Steps)),
|
Steps: make([]*gwapitypes.RunTaskResponseStep, len(rt.Steps)),
|
||||||
|
|
||||||
StartTime: rt.StartTime,
|
StartTime: rt.StartTime,
|
||||||
EndTime: rt.EndTime,
|
EndTime: rt.EndTime,
|
||||||
}
|
}
|
||||||
|
|
||||||
t.SetupStep = &RunTaskResponseSetupStep{
|
t.SetupStep = &gwapitypes.RunTaskResponseSetupStep{
|
||||||
Name: "Task setup",
|
Name: "Task setup",
|
||||||
Phase: rt.SetupStep.Phase,
|
Phase: rt.SetupStep.Phase,
|
||||||
StartTime: rt.SetupStep.StartTime,
|
StartTime: rt.SetupStep.StartTime,
|
||||||
|
@ -188,7 +104,7 @@ func createRunTaskResponse(rt *rstypes.RunTask, rct *rstypes.RunConfigTask) *Run
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < len(t.Steps); i++ {
|
for i := 0; i < len(t.Steps); i++ {
|
||||||
s := &RunTaskResponseStep{
|
s := &gwapitypes.RunTaskResponseStep{
|
||||||
Phase: rt.Steps[i].Phase,
|
Phase: rt.Steps[i].Phase,
|
||||||
StartTime: rt.Steps[i].StartTime,
|
StartTime: rt.Steps[i].StartTime,
|
||||||
EndTime: rt.Steps[i].EndTime,
|
EndTime: rt.Steps[i].EndTime,
|
||||||
|
@ -282,8 +198,8 @@ const (
|
||||||
MaxRunsLimit = 40
|
MaxRunsLimit = 40
|
||||||
)
|
)
|
||||||
|
|
||||||
func createRunsResponse(r *rstypes.Run) *RunsResponse {
|
func createRunsResponse(r *rstypes.Run) *gwapitypes.RunsResponse {
|
||||||
run := &RunsResponse{
|
run := &gwapitypes.RunsResponse{
|
||||||
ID: r.ID,
|
ID: r.ID,
|
||||||
Counter: r.Counter,
|
Counter: r.Counter,
|
||||||
Name: r.Name,
|
Name: r.Name,
|
||||||
|
@ -368,7 +284,7 @@ func (h *RunsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
runs := make([]*RunsResponse, len(runsResp.Runs))
|
runs := make([]*gwapitypes.RunsResponse, len(runsResp.Runs))
|
||||||
for i, r := range runsResp.Runs {
|
for i, r := range runsResp.Runs {
|
||||||
runs[i] = createRunsResponse(r)
|
runs[i] = createRunsResponse(r)
|
||||||
}
|
}
|
||||||
|
@ -377,13 +293,6 @@ func (h *RunsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RunActionsRequest struct {
|
|
||||||
ActionType action.RunActionType `json:"action_type"`
|
|
||||||
|
|
||||||
// Restart
|
|
||||||
FromStart bool `json:"from_start"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunActionsHandler struct {
|
type RunActionsHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -398,7 +307,7 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
runID := vars["runid"]
|
runID := vars["runid"]
|
||||||
|
|
||||||
var req RunActionsRequest
|
var req gwapitypes.RunActionsRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -407,7 +316,7 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
areq := &action.RunActionsRequest{
|
areq := &action.RunActionsRequest{
|
||||||
RunID: runID,
|
RunID: runID,
|
||||||
ActionType: req.ActionType,
|
ActionType: action.RunActionType(req.ActionType),
|
||||||
FromStart: req.FromStart,
|
FromStart: req.FromStart,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -423,10 +332,6 @@ func (h *RunActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RunTaskActionsRequest struct {
|
|
||||||
ActionType action.RunTaskActionType `json:"action_type"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type RunTaskActionsHandler struct {
|
type RunTaskActionsHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -442,7 +347,7 @@ func (h *RunTaskActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
runID := vars["runid"]
|
runID := vars["runid"]
|
||||||
taskID := vars["taskid"]
|
taskID := vars["taskid"]
|
||||||
|
|
||||||
var req RunTaskActionsRequest
|
var req gwapitypes.RunTaskActionsRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -452,7 +357,7 @@ func (h *RunTaskActionsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
areq := &action.RunTaskActionsRequest{
|
areq := &action.RunTaskActionsRequest{
|
||||||
RunID: runID,
|
RunID: runID,
|
||||||
TaskID: taskID,
|
TaskID: taskID,
|
||||||
ActionType: req.ActionType,
|
ActionType: action.RunTaskActionType(req.ActionType),
|
||||||
}
|
}
|
||||||
|
|
||||||
err := h.ah.RunTaskAction(ctx, areq)
|
err := h.ah.RunTaskAction(ctx, areq)
|
||||||
|
|
|
@ -18,23 +18,18 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SecretResponse struct {
|
func createSecretResponse(s *csapitypes.Secret) *gwapitypes.SecretResponse {
|
||||||
ID string `json:"id"`
|
return &gwapitypes.SecretResponse{
|
||||||
Name string `json:"name"`
|
|
||||||
ParentPath string `json:"parent_path"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createSecretResponse(s *csapi.Secret) *SecretResponse {
|
|
||||||
return &SecretResponse{
|
|
||||||
ID: s.ID,
|
ID: s.ID,
|
||||||
Name: s.Name,
|
Name: s.Name,
|
||||||
ParentPath: s.ParentPath,
|
ParentPath: s.ParentPath,
|
||||||
|
@ -72,7 +67,7 @@ func (h *SecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
secrets := make([]*SecretResponse, len(cssecrets))
|
secrets := make([]*gwapitypes.SecretResponse, len(cssecrets))
|
||||||
for i, s := range cssecrets {
|
for i, s := range cssecrets {
|
||||||
secrets[i] = createSecretResponse(s)
|
secrets[i] = createSecretResponse(s)
|
||||||
}
|
}
|
||||||
|
@ -82,19 +77,6 @@ func (h *SecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateSecretRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Type cstypes.SecretType `json:"type,omitempty"`
|
|
||||||
|
|
||||||
// internal secret
|
|
||||||
Data map[string]string `json:"data,omitempty"`
|
|
||||||
|
|
||||||
// external secret
|
|
||||||
SecretProviderID string `json:"secret_provider_id,omitempty"`
|
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateSecretHandler struct {
|
type CreateSecretHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -111,7 +93,7 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateSecretRequest
|
var req gwapitypes.CreateSecretRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -122,7 +104,7 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Type: req.Type,
|
Type: cstypes.SecretType(req.Type),
|
||||||
Data: req.Data,
|
Data: req.Data,
|
||||||
SecretProviderID: req.SecretProviderID,
|
SecretProviderID: req.SecretProviderID,
|
||||||
Path: req.Path,
|
Path: req.Path,
|
||||||
|
@ -139,19 +121,6 @@ func (h *CreateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateSecretRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Type cstypes.SecretType `json:"type,omitempty"`
|
|
||||||
|
|
||||||
// internal secret
|
|
||||||
Data map[string]string `json:"data,omitempty"`
|
|
||||||
|
|
||||||
// external secret
|
|
||||||
SecretProviderID string `json:"secret_provider_id,omitempty"`
|
|
||||||
Path string `json:"path,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateSecretHandler struct {
|
type UpdateSecretHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -172,7 +141,7 @@ func (h *UpdateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateSecretRequest
|
var req gwapitypes.UpdateSecretRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -184,7 +153,7 @@ func (h *UpdateSecretHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Type: req.Type,
|
Type: cstypes.SecretType(req.Type),
|
||||||
Data: req.Data,
|
Data: req.Data,
|
||||||
SecretProviderID: req.SecretProviderID,
|
SecretProviderID: req.SecretProviderID,
|
||||||
Path: req.Path,
|
Path: req.Path,
|
||||||
|
|
|
@ -21,20 +21,16 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type CreateUserRequest struct {
|
|
||||||
UserName string `json:"username"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserHandler struct {
|
type CreateUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -47,7 +43,7 @@ func NewCreateUserHandler(logger *zap.Logger, ah *action.ActionHandler) *CreateU
|
||||||
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *CreateUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req CreateUserRequest
|
var req gwapitypes.CreateUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -152,26 +148,12 @@ func (h *UserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserResponse struct {
|
func createUserResponse(u *cstypes.User) *gwapitypes.UserResponse {
|
||||||
ID string `json:"id"`
|
user := &gwapitypes.UserResponse{
|
||||||
UserName string `json:"username"`
|
|
||||||
Tokens []string `json:"tokens"`
|
|
||||||
LinkedAccounts []*LinkedAccountResponse `json:"linked_accounts"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LinkedAccountResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
RemoteSourceID string `json:"remote_source_id"`
|
|
||||||
RemoteUserName string `json:"remote_user_name"`
|
|
||||||
RemoteUserAvatarURL string `json:"remote_user_avatar_url"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createUserResponse(u *cstypes.User) *UserResponse {
|
|
||||||
user := &UserResponse{
|
|
||||||
ID: u.ID,
|
ID: u.ID,
|
||||||
UserName: u.Name,
|
UserName: u.Name,
|
||||||
Tokens: make([]string, 0, len(u.Tokens)),
|
Tokens: make([]string, 0, len(u.Tokens)),
|
||||||
LinkedAccounts: make([]*LinkedAccountResponse, 0, len(u.LinkedAccounts)),
|
LinkedAccounts: make([]*gwapitypes.LinkedAccountResponse, 0, len(u.LinkedAccounts)),
|
||||||
}
|
}
|
||||||
for tokenName := range u.Tokens {
|
for tokenName := range u.Tokens {
|
||||||
user.Tokens = append(user.Tokens, tokenName)
|
user.Tokens = append(user.Tokens, tokenName)
|
||||||
|
@ -179,7 +161,7 @@ func createUserResponse(u *cstypes.User) *UserResponse {
|
||||||
sort.Strings(user.Tokens)
|
sort.Strings(user.Tokens)
|
||||||
|
|
||||||
for _, la := range u.LinkedAccounts {
|
for _, la := range u.LinkedAccounts {
|
||||||
user.LinkedAccounts = append(user.LinkedAccounts, &LinkedAccountResponse{
|
user.LinkedAccounts = append(user.LinkedAccounts, &gwapitypes.LinkedAccountResponse{
|
||||||
ID: la.ID,
|
ID: la.ID,
|
||||||
RemoteSourceID: la.RemoteSourceID,
|
RemoteSourceID: la.RemoteSourceID,
|
||||||
RemoteUserName: la.RemoteUserName,
|
RemoteUserName: la.RemoteUserName,
|
||||||
|
@ -239,7 +221,7 @@ func (h *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
users := make([]*UserResponse, len(csusers))
|
users := make([]*gwapitypes.UserResponse, len(csusers))
|
||||||
for i, p := range csusers {
|
for i, p := range csusers {
|
||||||
users[i] = createUserResponse(p)
|
users[i] = createUserResponse(p)
|
||||||
}
|
}
|
||||||
|
@ -249,17 +231,6 @@ func (h *UsersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserLARequest struct {
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
RemoteSourceLoginName string `json:"remote_source_login_name"`
|
|
||||||
RemoteSourceLoginPassword string `json:"remote_source_login_password"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserLAResponse struct {
|
|
||||||
LinkedAccount *cstypes.LinkedAccount `json:"linked_account"`
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserLAHandler struct {
|
type CreateUserLAHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -274,7 +245,7 @@ func (h *CreateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req *CreateUserLARequest
|
var req *gwapitypes.CreateUserLARequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -292,7 +263,7 @@ func (h *CreateUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *CreateUserLAHandler) createUserLA(ctx context.Context, userRef string, req *CreateUserLARequest) (*CreateUserLAResponse, error) {
|
func (h *CreateUserLAHandler) createUserLA(ctx context.Context, userRef string, req *gwapitypes.CreateUserLARequest) (*gwapitypes.CreateUserLAResponse, error) {
|
||||||
creq := &action.CreateUserLARequest{
|
creq := &action.CreateUserLARequest{
|
||||||
UserRef: userRef,
|
UserRef: userRef,
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
|
@ -304,14 +275,20 @@ func (h *CreateUserLAHandler) createUserLA(ctx context.Context, userRef string,
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &CreateUserLAResponse{
|
return &gwapitypes.CreateUserLAResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
authresp := cresp.Response.(*action.CreateUserLAResponse)
|
||||||
|
|
||||||
resp := &CreateUserLAResponse{
|
resp := &gwapitypes.CreateUserLAResponse{
|
||||||
LinkedAccount: authresp.LinkedAccount,
|
LinkedAccount: &gwapitypes.LinkedAccount{
|
||||||
|
ID: authresp.LinkedAccount.ID,
|
||||||
|
RemoteUserID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
RemoteUserName: authresp.LinkedAccount.RemoteUserName,
|
||||||
|
RemoteUserAvatarURL: authresp.LinkedAccount.RemoteUserAvatarURL,
|
||||||
|
RemoteSourceID: authresp.LinkedAccount.RemoteUserID,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
h.log.Infof("linked account %q for user %q created", resp.LinkedAccount.ID, userRef)
|
h.log.Infof("linked account %q for user %q created", resp.LinkedAccount.ID, userRef)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
@ -343,14 +320,6 @@ func (h *DeleteUserLAHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateUserTokenRequest struct {
|
|
||||||
TokenName string `json:"token_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenResponse struct {
|
|
||||||
Token string `json:"token"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateUserTokenHandler struct {
|
type CreateUserTokenHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -365,7 +334,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
vars := mux.Vars(r)
|
vars := mux.Vars(r)
|
||||||
userRef := vars["userref"]
|
userRef := vars["userref"]
|
||||||
|
|
||||||
var req CreateUserTokenRequest
|
var req gwapitypes.CreateUserTokenRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -383,7 +352,7 @@ func (h *CreateUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
res := &CreateUserTokenResponse{
|
res := &gwapitypes.CreateUserTokenResponse{
|
||||||
Token: token,
|
Token: token,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,20 +388,11 @@ func (h *DeleteUserTokenHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type RegisterUserRequest struct {
|
|
||||||
CreateUserRequest
|
|
||||||
CreateUserLARequest
|
|
||||||
}
|
|
||||||
|
|
||||||
type RegisterUserHandler struct {
|
type RegisterUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type RegisterUserResponse struct {
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewRegisterUserHandler(logger *zap.Logger, ah *action.ActionHandler) *RegisterUserHandler {
|
func NewRegisterUserHandler(logger *zap.Logger, ah *action.ActionHandler) *RegisterUserHandler {
|
||||||
return &RegisterUserHandler{log: logger.Sugar(), ah: ah}
|
return &RegisterUserHandler{log: logger.Sugar(), ah: ah}
|
||||||
}
|
}
|
||||||
|
@ -440,7 +400,7 @@ func NewRegisterUserHandler(logger *zap.Logger, ah *action.ActionHandler) *Regis
|
||||||
func (h *RegisterUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *RegisterUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *RegisterUserRequest
|
var req *gwapitypes.RegisterUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -458,7 +418,7 @@ func (h *RegisterUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *RegisterUserHandler) registerUser(ctx context.Context, req *RegisterUserRequest) (*RegisterUserResponse, error) {
|
func (h *RegisterUserHandler) registerUser(ctx context.Context, req *gwapitypes.RegisterUserRequest) (*gwapitypes.RegisterUserResponse, error) {
|
||||||
creq := &action.RegisterUserRequest{
|
creq := &action.RegisterUserRequest{
|
||||||
UserName: req.CreateUserRequest.UserName,
|
UserName: req.CreateUserRequest.UserName,
|
||||||
RemoteSourceName: req.CreateUserLARequest.RemoteSourceName,
|
RemoteSourceName: req.CreateUserLARequest.RemoteSourceName,
|
||||||
|
@ -469,13 +429,13 @@ func (h *RegisterUserHandler) registerUser(ctx context.Context, req *RegisterUse
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &RegisterUserResponse{
|
return &gwapitypes.RegisterUserResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
//authresp := cresp.Response.(*action.RegisterUserResponse)
|
//authresp := cresp.Response.(*action.RegisterUserResponse)
|
||||||
|
|
||||||
resp := &RegisterUserResponse{}
|
resp := &gwapitypes.RegisterUserResponse{}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -484,12 +444,6 @@ type AuthorizeHandler struct {
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
type AuthorizeResponse struct {
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
RemoteUserInfo *gitsource.UserInfo `json:"remote_user_info"`
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAuthorizeHandler(logger *zap.Logger, ah *action.ActionHandler) *AuthorizeHandler {
|
func NewAuthorizeHandler(logger *zap.Logger, ah *action.ActionHandler) *AuthorizeHandler {
|
||||||
return &AuthorizeHandler{log: logger.Sugar(), ah: ah}
|
return &AuthorizeHandler{log: logger.Sugar(), ah: ah}
|
||||||
}
|
}
|
||||||
|
@ -497,7 +451,7 @@ func NewAuthorizeHandler(logger *zap.Logger, ah *action.ActionHandler) *Authoriz
|
||||||
func (h *AuthorizeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *AuthorizeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *LoginUserRequest
|
var req *gwapitypes.LoginUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -515,7 +469,7 @@ func (h *AuthorizeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *AuthorizeHandler) authorize(ctx context.Context, req *LoginUserRequest) (*AuthorizeResponse, error) {
|
func (h *AuthorizeHandler) authorize(ctx context.Context, req *gwapitypes.LoginUserRequest) (*gwapitypes.AuthorizeResponse, error) {
|
||||||
creq := &action.LoginUserRequest{
|
creq := &action.LoginUserRequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
}
|
}
|
||||||
|
@ -525,31 +479,23 @@ func (h *AuthorizeHandler) authorize(ctx context.Context, req *LoginUserRequest)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &AuthorizeResponse{
|
return &gwapitypes.AuthorizeResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
authresp := cresp.Response.(*action.AuthorizeResponse)
|
authresp := cresp.Response.(*action.AuthorizeResponse)
|
||||||
|
|
||||||
resp := &AuthorizeResponse{
|
resp := &gwapitypes.AuthorizeResponse{
|
||||||
RemoteUserInfo: authresp.RemoteUserInfo,
|
RemoteUserInfo: &gwapitypes.UserInfo{
|
||||||
|
ID: authresp.RemoteUserInfo.ID,
|
||||||
|
LoginName: authresp.RemoteUserInfo.LoginName,
|
||||||
|
Email: authresp.RemoteUserInfo.Email,
|
||||||
|
},
|
||||||
RemoteSourceName: authresp.RemoteSourceName,
|
RemoteSourceName: authresp.RemoteSourceName,
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type LoginUserRequest struct {
|
|
||||||
RemoteSourceName string `json:"remote_source_name"`
|
|
||||||
LoginName string `json:"login_name"`
|
|
||||||
LoginPassword string `json:"password"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LoginUserResponse struct {
|
|
||||||
Oauth2Redirect string `json:"oauth2_redirect"`
|
|
||||||
Token string `json:"token"`
|
|
||||||
User *UserResponse `json:"user"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type LoginUserHandler struct {
|
type LoginUserHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -562,7 +508,7 @@ func NewLoginUserHandler(logger *zap.Logger, ah *action.ActionHandler) *LoginUse
|
||||||
func (h *LoginUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *LoginUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req *LoginUserRequest
|
var req *gwapitypes.LoginUserRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -580,7 +526,7 @@ func (h *LoginUserHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *LoginUserHandler) loginUser(ctx context.Context, req *LoginUserRequest) (*LoginUserResponse, error) {
|
func (h *LoginUserHandler) loginUser(ctx context.Context, req *gwapitypes.LoginUserRequest) (*gwapitypes.LoginUserResponse, error) {
|
||||||
creq := &action.LoginUserRequest{
|
creq := &action.LoginUserRequest{
|
||||||
RemoteSourceName: req.RemoteSourceName,
|
RemoteSourceName: req.RemoteSourceName,
|
||||||
}
|
}
|
||||||
|
@ -591,27 +537,19 @@ func (h *LoginUserHandler) loginUser(ctx context.Context, req *LoginUserRequest)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if cresp.Oauth2Redirect != "" {
|
if cresp.Oauth2Redirect != "" {
|
||||||
return &LoginUserResponse{
|
return &gwapitypes.LoginUserResponse{
|
||||||
Oauth2Redirect: cresp.Oauth2Redirect,
|
Oauth2Redirect: cresp.Oauth2Redirect,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
authresp := cresp.Response.(*action.LoginUserResponse)
|
authresp := cresp.Response.(*action.LoginUserResponse)
|
||||||
|
|
||||||
resp := &LoginUserResponse{
|
resp := &gwapitypes.LoginUserResponse{
|
||||||
Token: authresp.Token,
|
Token: authresp.Token,
|
||||||
User: createUserResponse(authresp.User),
|
User: createUserResponse(authresp.User),
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserCreateRunRequest struct {
|
|
||||||
RepoUUID string `json:"repo_uuid,omitempty"`
|
|
||||||
RepoPath string `json:"repo_path,omitempty"`
|
|
||||||
Branch string `json:"branch,omitempty"`
|
|
||||||
CommitSHA string `json:"commit_sha,omitempty"`
|
|
||||||
Message string `json:"message,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserCreateRunHandler struct {
|
type UserCreateRunHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -624,7 +562,7 @@ func NewUserCreateRunHandler(logger *zap.Logger, ah *action.ActionHandler) *User
|
||||||
func (h *UserCreateRunHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
func (h *UserCreateRunHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
ctx := r.Context()
|
ctx := r.Context()
|
||||||
|
|
||||||
var req UserCreateRunRequest
|
var req gwapitypes.UserCreateRunRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
|
|
@ -19,43 +19,29 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
cstypes "agola.io/agola/internal/services/configstore/types"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
"go.uber.org/zap"
|
csapitypes "agola.io/agola/services/configstore/api/types"
|
||||||
|
cstypes "agola.io/agola/services/configstore/types"
|
||||||
|
gwapitypes "agola.io/agola/services/gateway/api/types"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
type VariableValue struct {
|
func createVariableResponse(v *csapitypes.Variable, secrets []*csapitypes.Secret) *gwapitypes.VariableResponse {
|
||||||
SecretName string `json:"secret_name"`
|
nv := &gwapitypes.VariableResponse{
|
||||||
SecretVar string `json:"secret_var"`
|
|
||||||
MatchingSecretParentPath string `json:"matching_secret_parent_path"`
|
|
||||||
|
|
||||||
When *cstypes.When `json:"when"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type VariableResponse struct {
|
|
||||||
ID string `json:"id"`
|
|
||||||
Name string `json:"name"`
|
|
||||||
Values []VariableValue `json:"values"`
|
|
||||||
ParentPath string `json:"parent_path"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func createVariableResponse(v *csapi.Variable, secrets []*csapi.Secret) *VariableResponse {
|
|
||||||
nv := &VariableResponse{
|
|
||||||
ID: v.ID,
|
ID: v.ID,
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Values: make([]VariableValue, len(v.Values)),
|
Values: make([]gwapitypes.VariableValue, len(v.Values)),
|
||||||
ParentPath: v.ParentPath,
|
ParentPath: v.ParentPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, varvalue := range v.Values {
|
for i, varvalue := range v.Values {
|
||||||
nv.Values[i] = VariableValue{
|
nv.Values[i] = gwapitypes.VariableValue{
|
||||||
SecretName: varvalue.SecretName,
|
SecretName: varvalue.SecretName,
|
||||||
SecretVar: varvalue.SecretVar,
|
SecretVar: varvalue.SecretVar,
|
||||||
When: varvalue.When,
|
When: fromCsWhen(varvalue.When),
|
||||||
}
|
}
|
||||||
// get matching secret for var value
|
// get matching secret for var value
|
||||||
secret := common.GetVarValueMatchingSecret(varvalue, v.ParentPath, secrets)
|
secret := common.GetVarValueMatchingSecret(varvalue, v.ParentPath, secrets)
|
||||||
|
@ -100,7 +86,7 @@ func (h *VariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
variables := make([]*VariableResponse, len(csvars))
|
variables := make([]*gwapitypes.VariableResponse, len(csvars))
|
||||||
for i, v := range csvars {
|
for i, v := range csvars {
|
||||||
variables[i] = createVariableResponse(v, cssecrets)
|
variables[i] = createVariableResponse(v, cssecrets)
|
||||||
}
|
}
|
||||||
|
@ -110,12 +96,6 @@ func (h *VariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreateVariableRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Values []cstypes.VariableValue `json:"values,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type CreateVariableHandler struct {
|
type CreateVariableHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -133,7 +113,7 @@ func (h *CreateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req CreateVariableRequest
|
var req gwapitypes.CreateVariableRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
|
@ -143,7 +123,7 @@ func (h *CreateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Values: req.Values,
|
Values: fromApiVariableValues(req.Values),
|
||||||
}
|
}
|
||||||
csvar, cssecrets, err := h.ah.CreateVariable(ctx, areq)
|
csvar, cssecrets, err := h.ah.CreateVariable(ctx, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -157,12 +137,6 @@ func (h *CreateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type UpdateVariableRequest struct {
|
|
||||||
Name string `json:"name,omitempty"`
|
|
||||||
|
|
||||||
Values []cstypes.VariableValue `json:"values,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type UpdateVariableHandler struct {
|
type UpdateVariableHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
|
@ -183,19 +157,20 @@ func (h *UpdateVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var req UpdateVariableRequest
|
var req gwapitypes.UpdateVariableRequest
|
||||||
d := json.NewDecoder(r.Body)
|
d := json.NewDecoder(r.Body)
|
||||||
if err := d.Decode(&req); err != nil {
|
if err := d.Decode(&req); err != nil {
|
||||||
httpError(w, util.NewErrBadRequest(err))
|
httpError(w, util.NewErrBadRequest(err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
areq := &action.UpdateVariableRequest{
|
areq := &action.UpdateVariableRequest{
|
||||||
VariableName: variableName,
|
VariableName: variableName,
|
||||||
|
|
||||||
Name: req.Name,
|
Name: req.Name,
|
||||||
ParentType: parentType,
|
ParentType: parentType,
|
||||||
ParentRef: parentRef,
|
ParentRef: parentRef,
|
||||||
Values: req.Values,
|
Values: fromApiVariableValues(req.Values),
|
||||||
}
|
}
|
||||||
csvar, cssecrets, err := h.ah.UpdateVariable(ctx, areq)
|
csvar, cssecrets, err := h.ah.UpdateVariable(ctx, areq)
|
||||||
if httpError(w, err) {
|
if httpError(w, err) {
|
||||||
|
@ -239,3 +214,75 @@ func (h *DeleteVariableHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
|
||||||
h.log.Errorf("err: %+v", err)
|
h.log.Errorf("err: %+v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func fromApiVariableValues(apivalues []gwapitypes.VariableValueRequest) []cstypes.VariableValue {
|
||||||
|
values := make([]cstypes.VariableValue, len(apivalues))
|
||||||
|
for i, v := range apivalues {
|
||||||
|
values[i] = cstypes.VariableValue{
|
||||||
|
SecretName: v.SecretName,
|
||||||
|
SecretVar: v.SecretVar,
|
||||||
|
When: fromApiWhen(v.When),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromApiWhenCondition(apiwc gwapitypes.WhenCondition) cstypes.WhenCondition {
|
||||||
|
return cstypes.WhenCondition{
|
||||||
|
Type: cstypes.WhenConditionType(apiwc.Type),
|
||||||
|
Match: apiwc.Match,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromApiWhenConditions(apiwcs *gwapitypes.WhenConditions) *cstypes.WhenConditions {
|
||||||
|
wcs := &cstypes.WhenConditions{
|
||||||
|
Include: make([]cstypes.WhenCondition, len(apiwcs.Include)),
|
||||||
|
Exclude: make([]cstypes.WhenCondition, len(apiwcs.Exclude)),
|
||||||
|
}
|
||||||
|
for i, include := range apiwcs.Include {
|
||||||
|
wcs.Include[i] = fromApiWhenCondition(include)
|
||||||
|
}
|
||||||
|
for i, exclude := range apiwcs.Exclude {
|
||||||
|
wcs.Exclude[i] = fromApiWhenCondition(exclude)
|
||||||
|
}
|
||||||
|
|
||||||
|
return wcs
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromApiWhen(apiwhen *gwapitypes.When) *cstypes.When {
|
||||||
|
return &cstypes.When{
|
||||||
|
Branch: fromApiWhenConditions(apiwhen.Branch),
|
||||||
|
Tag: fromApiWhenConditions(apiwhen.Tag),
|
||||||
|
Ref: fromApiWhenConditions(apiwhen.Ref),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromCsWhenCondition(apiwc cstypes.WhenCondition) gwapitypes.WhenCondition {
|
||||||
|
return gwapitypes.WhenCondition{
|
||||||
|
Type: gwapitypes.WhenConditionType(apiwc.Type),
|
||||||
|
Match: apiwc.Match,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromCsWhenConditions(apiwcs *cstypes.WhenConditions) *gwapitypes.WhenConditions {
|
||||||
|
wcs := &gwapitypes.WhenConditions{
|
||||||
|
Include: make([]gwapitypes.WhenCondition, len(apiwcs.Include)),
|
||||||
|
Exclude: make([]gwapitypes.WhenCondition, len(apiwcs.Exclude)),
|
||||||
|
}
|
||||||
|
for i, include := range apiwcs.Include {
|
||||||
|
wcs.Include[i] = fromCsWhenCondition(include)
|
||||||
|
}
|
||||||
|
for i, exclude := range apiwcs.Exclude {
|
||||||
|
wcs.Exclude[i] = fromCsWhenCondition(exclude)
|
||||||
|
}
|
||||||
|
|
||||||
|
return wcs
|
||||||
|
}
|
||||||
|
|
||||||
|
func fromCsWhen(apiwhen *cstypes.When) *gwapitypes.When {
|
||||||
|
return &gwapitypes.When{
|
||||||
|
Branch: fromCsWhenConditions(apiwhen.Branch),
|
||||||
|
Tag: fromCsWhenConditions(apiwhen.Tag),
|
||||||
|
Ref: fromCsWhenConditions(apiwhen.Ref),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -18,11 +18,11 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/services/types"
|
"agola.io/agola/internal/services/types"
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
@ -31,12 +31,12 @@ import (
|
||||||
type webhooksHandler struct {
|
type webhooksHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
apiExposedURL string
|
apiExposedURL string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWebhooksHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csapi.Client, runserviceClient *rsapi.Client, apiExposedURL string) *webhooksHandler {
|
func NewWebhooksHandler(logger *zap.Logger, ah *action.ActionHandler, configstoreClient *csclient.Client, runserviceClient *rsclient.Client, apiExposedURL string) *webhooksHandler {
|
||||||
return &webhooksHandler{
|
return &webhooksHandler{
|
||||||
log: logger.Sugar(),
|
log: logger.Sugar(),
|
||||||
ah: ah,
|
ah: ah,
|
||||||
|
|
|
@ -25,12 +25,12 @@ import (
|
||||||
"agola.io/agola/internal/objectstorage"
|
"agola.io/agola/internal/objectstorage"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
"agola.io/agola/internal/services/gateway/api"
|
"agola.io/agola/internal/services/gateway/api"
|
||||||
"agola.io/agola/internal/services/gateway/handlers"
|
"agola.io/agola/internal/services/gateway/handlers"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
jwt "github.com/dgrijalva/jwt-go"
|
||||||
ghandlers "github.com/gorilla/handlers"
|
ghandlers "github.com/gorilla/handlers"
|
||||||
|
@ -52,8 +52,8 @@ type Gateway struct {
|
||||||
c *config.Gateway
|
c *config.Gateway
|
||||||
|
|
||||||
ost *objectstorage.ObjStorage
|
ost *objectstorage.ObjStorage
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
ah *action.ActionHandler
|
ah *action.ActionHandler
|
||||||
sd *common.TokenSigningData
|
sd *common.TokenSigningData
|
||||||
}
|
}
|
||||||
|
@ -121,8 +121,8 @@ func NewGateway(gc *config.Config) (*Gateway, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
configstoreClient := csapi.NewClient(c.ConfigstoreURL)
|
configstoreClient := csclient.NewClient(c.ConfigstoreURL)
|
||||||
runserviceClient := rsapi.NewClient(c.RunserviceURL)
|
runserviceClient := rsclient.NewClient(c.RunserviceURL)
|
||||||
|
|
||||||
ah := action.NewActionHandler(logger, sd, configstoreClient, runserviceClient, gc.ID, c.APIExposedURL, c.WebExposedURL)
|
ah := action.NewActionHandler(logger, sd, configstoreClient, runserviceClient, gc.ID, c.APIExposedURL, c.WebExposedURL)
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
|
|
||||||
jwt "github.com/dgrijalva/jwt-go"
|
jwt "github.com/dgrijalva/jwt-go"
|
||||||
jwtrequest "github.com/dgrijalva/jwt-go/request"
|
jwtrequest "github.com/dgrijalva/jwt-go/request"
|
||||||
|
@ -32,7 +32,7 @@ type AuthHandler struct {
|
||||||
log *zap.SugaredLogger
|
log *zap.SugaredLogger
|
||||||
next http.Handler
|
next http.Handler
|
||||||
|
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
adminToken string
|
adminToken string
|
||||||
|
|
||||||
sd *common.TokenSigningData
|
sd *common.TokenSigningData
|
||||||
|
@ -40,7 +40,7 @@ type AuthHandler struct {
|
||||||
required bool
|
required bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAuthHandler(logger *zap.Logger, configstoreClient *csapi.Client, adminToken string, sd *common.TokenSigningData, required bool) func(http.Handler) http.Handler {
|
func NewAuthHandler(logger *zap.Logger, configstoreClient *csclient.Client, adminToken string, sd *common.TokenSigningData, required bool) func(http.Handler) http.Handler {
|
||||||
return func(h http.Handler) http.Handler {
|
return func(h http.Handler) http.Handler {
|
||||||
return &AuthHandler{
|
return &AuthHandler{
|
||||||
log: logger.Sugar(),
|
log: logger.Sugar(),
|
||||||
|
|
|
@ -22,7 +22,7 @@ import (
|
||||||
gitsource "agola.io/agola/internal/gitsources"
|
gitsource "agola.io/agola/internal/gitsources"
|
||||||
"agola.io/agola/internal/services/common"
|
"agola.io/agola/internal/services/common"
|
||||||
"agola.io/agola/internal/services/gateway/action"
|
"agola.io/agola/internal/services/gateway/action"
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
)
|
)
|
||||||
|
|
|
@ -21,8 +21,8 @@ import (
|
||||||
"agola.io/agola/internal/etcd"
|
"agola.io/agola/internal/etcd"
|
||||||
slog "agola.io/agola/internal/log"
|
slog "agola.io/agola/internal/log"
|
||||||
"agola.io/agola/internal/services/config"
|
"agola.io/agola/internal/services/config"
|
||||||
csapi "agola.io/agola/internal/services/configstore/api"
|
csclient "agola.io/agola/services/configstore/client"
|
||||||
rsapi "agola.io/agola/internal/services/runservice/api"
|
rsclient "agola.io/agola/services/runservice/client"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
"go.uber.org/zap/zapcore"
|
"go.uber.org/zap/zapcore"
|
||||||
|
@ -38,8 +38,8 @@ type NotificationService struct {
|
||||||
|
|
||||||
e *etcd.Store
|
e *etcd.Store
|
||||||
|
|
||||||
runserviceClient *rsapi.Client
|
runserviceClient *rsclient.Client
|
||||||
configstoreClient *csapi.Client
|
configstoreClient *csclient.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNotificationService(gc *config.Config) (*NotificationService, error) {
|
func NewNotificationService(gc *config.Config) (*NotificationService, error) {
|
||||||
|
@ -53,8 +53,8 @@ func NewNotificationService(gc *config.Config) (*NotificationService, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
configstoreClient := csapi.NewClient(c.ConfigstoreURL)
|
configstoreClient := csclient.NewClient(c.ConfigstoreURL)
|
||||||
runserviceClient := rsapi.NewClient(c.RunserviceURL)
|
runserviceClient := rsclient.NewClient(c.RunserviceURL)
|
||||||
|
|
||||||
return &NotificationService{
|
return &NotificationService{
|
||||||
gc: gc,
|
gc: gc,
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
rstypes "agola.io/agola/internal/services/runservice/types"
|
rstypes "agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"go.etcd.io/etcd/clientv3/concurrency"
|
"go.etcd.io/etcd/clientv3/concurrency"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -29,8 +29,8 @@ import (
|
||||||
"agola.io/agola/internal/services/runservice/common"
|
"agola.io/agola/internal/services/runservice/common"
|
||||||
"agola.io/agola/internal/services/runservice/readdb"
|
"agola.io/agola/internal/services/runservice/readdb"
|
||||||
"agola.io/agola/internal/services/runservice/store"
|
"agola.io/agola/internal/services/runservice/store"
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/runservice/types"
|
||||||
|
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
errors "golang.org/x/xerrors"
|
errors "golang.org/x/xerrors"
|
||||||
|
|
|
@ -17,8 +17,8 @@ package action
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"agola.io/agola/internal/services/runservice/types"
|
|
||||||
"agola.io/agola/internal/util"
|
"agola.io/agola/internal/util"
|
||||||
|
"agola.io/agola/services/runservice/types"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue