Skip to content

Fix errors showing as success in Firestore commands #7474

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 9 commits into from
Closed

Fix errors showing as success in Firestore commands #7474

wants to merge 9 commits into from

Conversation

TomasMorton
Copy link
Member

@TomasMorton TomasMorton commented Jul 19, 2024

Description

Firestore commands often log and then return. This works fine for normal commands, but when using --json mode it will print success to the terminal even though it early exited with an error. Replacing these logs with FirebaseErrors.

Before change:

$ firebase firestore:databases:restore --json
{
  "status": "success"
}

After change:

$ firebase firestore:databases:restore --json
{
  "status": "error",
  "error": "Missing required flag --database. See firebase firestore:databases:restore --help for more info"
}

Scenarios Tested

All failure scenarios tested for the changed commands.

Click to see all test output

firestore:backups:schedules:create

$ firebase firestore:backups:schedules:create --json
{
"status": "error",
"error": "Missing required flag --retention. See firebase firestore:backups:schedules:create --help for more info."
}
Having trouble? Try firebase [command] --help

$ firebase firestore:backups:schedules:create --json --retention
error: option '-rt, --retention <duration>' argument missing

# retention
$ firebase firestore:backups:schedules:create --json --retention 1s
{
"status": "error",
"error": "\"retention\" flag must be a duration string (e.g. 24h, 2w, or 7d)"
}
Having trouble? Try firebase [command] --help

$ firebase firestore:backups:schedules:create --json --retention 2w
{
"status": "error",
"error": "Missing required flag --recurrence. See firebase firestore:backups:schedules:create --help for more info."
}
Having trouble? Try firebase [command] --help

# recurrence
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence
error: option '-rc, --recurrence <recurrence>' argument missing

$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence M
{
"status": "error",
"error": "Invalid value for flag --recurrence. See firebase firestore:backups:schedules:create --help for more info."
}
Having trouble? Try firebase [command] --help

$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY
{
"status": "error",
"error": "If --recurrence is WEEKLY, --day-of-week must be provided. See firebase firestore:backups:schedules:create --help for more info."
}
Having trouble? Try firebase [command] --help

# day-of-week
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY --day-of-week
error: option '-dw, --day-of-week <dayOfWeek>' argument missing

$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY --day-of-week MON
{
"status": "error",
"error": "HTTP Error: 400, Invalid value at 'backup_schedule.weekly_recurrence.day' (type.googleapis.com/google.type.DayOfWeek), \"MON\""
}
Having trouble? Try firebase [command] --help

$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence DAILY --day-of-week MONDAY
{
"status": "error",
"error": "--day-of-week should not be provided if --recurrence is DAILY. See firebase firestore:backups:schedules:create --help for more info."
}
Having trouble? Try firebase [command] --help

# Success
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence DAILY
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY --day-of-week MONDAY

firestore:backups:schedules:update

$ firebase firestore:backups:schedules:update --json
error: missing required argument 'backupSchedule'

$ firebase firestore:backups:schedules:update schedule --json
{
"status": "error",
"error": "Missing required flag --retention. See firebase firestore:backups:schedules:update --help for more info."
}
Having trouble? Try firebase [command] --help

# retention
$ firebase firestore:backups:schedules:update schedule --json --retention
error: option '-rt, --retention <duration>' argument missing

# Success
$ firebase firestore:backups:schedules:update schedule --json --retention 2w

firestore:databases:create

$ firebase firestore:databases:create --json
error: missing required argument 'database'

$ firebase firestore:databases:create database --json
{
"status": "error",
"error": "Missing required flag --location. See firebase firestore:databases:create --help for more info."
}
Having trouble? Try firebase [command] --help

# location
$ firebase firestore:databases:create database --json --location
error: option '--location <locationId>' argument missing

# delete-protection
$ firebase firestore:databases:create database --json --location us --delete-protection
error: option '--delete-protection <deleteProtectionState>' argument missing

$ firebase firestore:databases:create database --json --location us --delete-protection unknown
{
"status": "error",
"error": "Invalid value for flag --delete-protection. See firebase firestore:databases:create --help for more info."
}
Having trouble? Try firebase [command] --help

# point-in-time-recovery
$ firebase firestore:databases:create database --json --location us --delete-protection ENABLED --point-in-time-recovery
error: option '--point-in-time-recovery <enablement>' argument missing

$ firebase firestore:databases:create database --json --location us --delete-protection ENABLED --point-in-time-recovery unknown
{
"status": "error",
"error": "Invalid value for flag --point-in-time-recovery. See firebase firestore:databases:create --help for more info."
}
Having trouble? Try firebase [command] --help

# Success
$ firebase firestore:databases:create database --json --location us --delete-protection ENABLED --point-in-time-recovery ENABLED

firestore:databases:restore

$ firebase firestore:databases:restore --json
{
"status": "error",
"error": "Missing required flag --database. See firebase firestore:databases:restore --help for more info."
}
Having trouble? Try firebase [command] --help

# database
$ firebase firestore:databases:restore --json --database
error: option '-d, --database <databaseID>' argument missing

$ firebase firestore:databases:restore --json --database database
{
"status": "error",
"error": "Missing required flag --backup. See firebase firestore:databases:restore --help for more info."
}
Having trouble? Try firebase [command] --help

# backup
$ firebase firestore:databases:restore --json --database database --backup
error: option '-b, --backup <backup>' argument missing

# Success
$ firebase firestore:databases:restore --json --database database --backup backup

firestore:databases:update

$ firebase firestore:databases:update --json
error: missing required argument 'database'

$ firebase firestore:databases:update database --json
{
"status": "error",
"error": "Missing properties to update. See firebase firestore:databases:update --help for more info."
}
Having trouble? Try firebase [command] --help

# delete-protection
$ firebase firestore:databases:update database --json --delete-protection
error: option '--delete-protection <deleteProtectionState>' argument missing

$ firebase firestore:databases:update database --json --delete-protection unknown
{
"status": "error",
"error": "Invalid value for flag --delete-protection. See firebase firestore:databases:update --help for more info."
}
Having trouble? Try firebase [command] --help

# point-in-time-recovery
$ firebase firestore:databases:update database --json --point-in-time-recovery
error: option '--point-in-time-recovery <enablement>' argument missing

$ firebase firestore:databases:update database --json --point-in-time-recovery unknown
{
"status": "error",
"error": "Invalid value for flag --point-in-time-recovery. See firebase firestore:databases:update --help for more info."
}
Having trouble? Try firebase [command] --help

# Success
$ firebase firestore:databases:update database --json --point-in-time-recovery ENABLED
$ firebase firestore:databases:update database --json --delete-protection ENABLED

Sample Commands

No changes to commands, only error output.

$ firebase firestore:backups:schedules:create --json
$ firebase firestore:backups:schedules:create --json --retention
$ firebase firestore:backups:schedules:create --json --retention 1s
$ firebase firestore:backups:schedules:create --json --retention 2w
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence M
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY --day-of-week
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence WEEKLY --day-of-week MON
$ firebase firestore:backups:schedules:create --json --retention 2w --recurrence DAILY --day-of-week MONDAY

$ firebase firestore:backups:schedules:update --json
$ firebase firestore:backups:schedules:update schedule --json
$ firebase firestore:backups:schedules:update schedule --json --retention

$ firebase firestore:databases:create --json
$ firebase firestore:databases:create database --json
$ firebase firestore:databases:create database --json --location
$ firebase firestore:databases:create database --json --location us --delete-protection
$ firebase firestore:databases:create database --json --location us --delete-protection unknown
$ firebase firestore:databases:create database --json --location us --delete-protection ENABLED --point-in-time-recovery
$ firebase firestore:databases:create database --json --location us --delete-protection ENABLED --point-in-time-recovery unknown

$ firebase firestore:databases:restore --json
$ firebase firestore:databases:restore --json --database
$ firebase firestore:databases:restore --json --database database
$ firebase firestore:databases:restore --json --database database --backup

$ firebase firestore:databases:update --json
$ firebase firestore:databases:update database --json
$ firebase firestore:databases:update database --json --delete-protection
$ firebase firestore:databases:update database --json --delete-protection unknown
$ firebase firestore:databases:update database --json --point-in-time-recovery
$ firebase firestore:databases:update database --json --point-in-time-recovery unknown

@TomasMorton TomasMorton changed the title Tm firestore fix json failures Fix errors showing as success in Firestore commands Jul 19, 2024
@TomasMorton TomasMorton marked this pull request as ready for review July 19, 2024 18:14
@TomasMorton TomasMorton marked this pull request as draft July 19, 2024 18:16
@TomasMorton TomasMorton marked this pull request as ready for review July 22, 2024 13:54
Copy link
Contributor

@joehan joehan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice improvement! Can you add a CHANGELOG entry for this? its a very relevant change for folks who use this in noninteractive mode

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants