internal/pkg/workspace/errors.go (70 lines of code) (raw):
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package workspace
import (
"errors"
"fmt"
"path/filepath"
"github.com/aws/copilot-cli/internal/pkg/term/color"
)
// ErrNoPipelineInWorkspace means there was no pipeline manifest in the workspace dir.
var ErrNoPipelineInWorkspace = errors.New("no pipeline manifest found in the workspace")
// ErrFileExists means we tried to create an existing file.
type ErrFileExists struct {
FileName string
}
func (e *ErrFileExists) Error() string {
return fmt.Sprintf("file %s already exists", e.FileName)
}
// ErrFileNotExists means we tried to read a non-existing file.
type ErrFileNotExists struct {
FileName string
}
func (e *ErrFileNotExists) Error() string {
return fmt.Sprintf("file %s does not exists", e.FileName)
}
// ErrTargetNotFound means that we couldn't locate the target file or the target directory.
type ErrTargetNotFound struct {
startDir string
numberOfLevelsChecked int
}
func (e *ErrTargetNotFound) Error() string {
return fmt.Sprintf("couldn't find a target up to %d levels up from %s",
e.numberOfLevelsChecked,
e.startDir)
}
// ErrWorkspaceNotFound means we couldn't locate a workspace root.
type ErrWorkspaceNotFound struct {
*ErrTargetNotFound
target string
}
func (e *ErrWorkspaceNotFound) Error() string {
return fmt.Sprintf("couldn't find a directory called %s up to %d levels up from %s",
e.target,
e.numberOfLevelsChecked,
e.startDir)
}
// RecommendActions suggests steps clients can take to mitigate the copilot/ directory not found error.
func (_ *ErrWorkspaceNotFound) RecommendActions() string {
return fmt.Sprintf("Run %s to create an application.", color.HighlightCode("copilot app init"))
}
// empty denotes that this error represents an empty workspace.
func (_ *ErrWorkspaceNotFound) empty() {}
// ErrNoAssociatedApplication means we couldn't locate a workspace summary file.
type ErrNoAssociatedApplication struct{}
func (e *ErrNoAssociatedApplication) Error() string {
return "couldn't find an application associated with this workspace"
}
// RecommendActions suggests steps clients can take to mitigate the .workspace file not found error.
func (_ *ErrNoAssociatedApplication) RecommendActions() string {
return fmt.Sprintf(`The "copilot" directory is not associated with an application.
Run %s to create or use an application.`, color.HighlightCode("copilot app init"))
}
// empty denotes that this error represents an empty workspace.
func (_ *ErrNoAssociatedApplication) empty() {}
// errHasExistingApplication means we tried to create a workspace that belongs to another application.
type errHasExistingApplication struct {
existingAppName string
basePath string
summaryPath string
}
func (e *errHasExistingApplication) Error() string {
relPath, _ := filepath.Rel(e.basePath, e.summaryPath)
if relPath == "" {
relPath = e.summaryPath
}
return fmt.Sprintf("workspace is already registered with application %s under %s", e.existingAppName, relPath)
}
// IsEmptyErr returns true if the error is related to an empty workspace.
func IsEmptyErr(err error) bool {
var emptyWs interface {
empty()
}
return errors.As(err, &emptyWs)
}