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  }