github.com/supabase/cli@v1.168.1/internal/projects/delete/delete.go (about) 1 package delete 2 3 import ( 4 "context" 5 "fmt" 6 "net/http" 7 "os" 8 9 "github.com/go-errors/errors" 10 "github.com/spf13/afero" 11 "github.com/supabase/cli/internal/utils" 12 "github.com/supabase/cli/internal/utils/credentials" 13 "github.com/zalando/go-keyring" 14 ) 15 16 func PreRun(ref string) error { 17 if err := utils.AssertProjectRefIsValid(ref); err != nil { 18 return err 19 } 20 title := fmt.Sprintf("Do you want to delete project %s? This action is irreversible.", utils.Aqua(ref)) 21 if shouldDelete := utils.NewConsole().PromptYesNo(title, false); !shouldDelete { 22 return errors.New("Not deleting project: " + utils.Aqua(ref)) 23 } 24 return nil 25 } 26 27 func Run(ctx context.Context, ref string, fsys afero.Fs) error { 28 resp, err := utils.GetSupabase().DeleteProjectWithResponse(ctx, ref) 29 if err != nil { 30 return errors.Errorf("failed to delete project: %w", err) 31 } 32 33 switch resp.StatusCode() { 34 case http.StatusNotFound: 35 return errors.New("Project does not exist:" + utils.Aqua(ref)) 36 case http.StatusOK: 37 break 38 default: 39 return errors.Errorf("Failed to delete project %s: %s", utils.Aqua(ref), string(resp.Body)) 40 } 41 42 // Unlink project 43 if err := credentials.Delete(ref); err != nil && !errors.Is(err, keyring.ErrNotFound) { 44 fmt.Fprintln(os.Stderr, err) 45 } 46 if match, err := afero.FileContainsBytes(fsys, utils.ProjectRefPath, []byte(ref)); match { 47 tmpFiles := []string{ 48 utils.ProjectRefPath, 49 utils.PostgresVersionPath, 50 utils.GotrueVersionPath, 51 utils.RestVersionPath, 52 utils.StorageVersionPath, 53 } 54 for _, path := range tmpFiles { 55 if err := fsys.Remove(path); err != nil && !errors.Is(err, os.ErrNotExist) { 56 fmt.Fprintln(os.Stderr, err) 57 } 58 } 59 } else if err != nil { 60 logger := utils.GetDebugLogger() 61 fmt.Fprintln(logger, err) 62 } 63 64 fmt.Println("Deleted project: " + utils.Aqua(resp.JSON200.Name)) 65 return nil 66 }