AgentSkillsCN

firebase-deployer

自动部署Firebase Firestore安全规则和索引。在Firestore查询错误提及“需要索引”、修改firestore.rules或firestore.indexes.json,或用户请求Firebase部署时使用。

SKILL.md
--- frontmatter
name: firebase-deployer
description: Deploy Firebase Firestore security rules and indexes automatically. Use when Firestore query errors mention "requires an index", when firestore.rules or firestore.indexes.json are modified, or when user requests Firebase deployment.
allowed-tools: Bash, Read, Edit

Firebase Deployer

When to Use

Activate this skill when:

  • Firestore query errors indicate missing indexes
  • User modifies firestore.rules or firestore.indexes.json
  • User requests "deploy firebase rules" or "deploy indexes"
  • Error messages mention "FAILED_PRECONDITION" or "composite index"
  • User says "deploy firebase", "push rules", or "update firestore"
  • New Firestore queries need composite indexes
  • Security rules need updating for new features

Instructions

Step 1: Identify What Needs Deployment

  1. Check for modified files:
bash
git status | grep -E "(firestore.rules|firestore.indexes.json)"
  1. If query error occurred, extract index requirements from error message:
    • Collection name
    • Fields being queried
    • Order direction (ASCENDING/DESCENDING)
    • Query filters (array-contains, etc.)

Step 2: Update Index Configuration (if needed)

If missing index detected:

  1. Read current indexes:
bash
cat firestore.indexes.json
  1. Add new index to firestore.indexes.json:
json
{
  "indexes": [
    {
      "collectionGroup": "collection_name",
      "queryScope": "COLLECTION",
      "fields": [
        {
          "fieldPath": "field1",
          "order": "ASCENDING"
        },
        {
          "fieldPath": "field2",
          "order": "DESCENDING"
        }
      ]
    }
  ]
}

Step 3: Verify Firebase Project

  1. Check current project:
bash
firebase use
  1. If project not set or wrong project:
bash
firebase use project-id
  1. Verify configuration:
bash
firebase projects:list

Step 4: Deploy Rules and Indexes

Deploy both rules and indexes together:

bash
firebase deploy --only firestore:rules,firestore:indexes

Or deploy separately:

bash
# Deploy only indexes
firebase deploy --only firestore:indexes

# Deploy only rules
firebase deploy --only firestore:rules

Step 5: Verify Deployment

  1. Check index status:
bash
firebase firestore:indexes
  1. Monitor index building (can take several minutes):

    • Indexes show as "Building" initially
    • Check Firebase Console for progress
    • Wait for "Ready" status before querying
  2. Test the query that triggered the error

Examples

Example 1: Deploy After Query Error

bash
# Error received:
# "The query requires an index. You can create it here: https://console.firebase.google.com/..."

# Step 1: Extract index requirements from error URL
# Collection: posts
# Fields: userId (ASCENDING), createdAt (DESCENDING)

# Step 2: Update firestore.indexes.json
# (use Edit tool to add index)

# Step 3: Deploy
firebase deploy --only firestore:indexes

# Step 4: Verify
firebase firestore:indexes

Example 2: Deploy Modified Security Rules

bash
# User modified firestore.rules to add new collection rules

# Step 1: Verify changes
cat firestore.rules

# Step 2: Deploy rules only
firebase deploy --only firestore:rules

# Step 3: Verify in console
# Check Firebase Console > Firestore > Rules

Example 3: Deploy Both Rules and Indexes

bash
# User updated both rules and indexes

# Deploy together for consistency
firebase deploy --only firestore:rules,firestore:indexes

# Verify both
firebase firestore:indexes
# Check console for rules

Example 4: Multi-Project Deployment

bash
# Deploy to specific project
firebase deploy --only firestore:rules,firestore:indexes --project production-id

# Switch project for subsequent deploys
firebase use staging-id
firebase deploy --only firestore:rules,firestore:indexes

Best Practices

✅ DO:

  • Always verify current Firebase project before deploying
  • Deploy rules and indexes together when both changed
  • Test queries after index deployment completes
  • Check index status after deployment
  • Read error messages carefully to extract index requirements
  • Deploy to staging environment first (if available)
  • Wait for indexes to finish building before testing
  • Keep firestore.indexes.json in version control

❌ DON'T:

  • Don't deploy without checking current project
  • Don't assume indexes are ready immediately (they build asynchronously)
  • Don't deploy rules that could break production
  • Don't ignore index URL in error messages (contains exact requirements)
  • Don't delete indexes still in use by queries
  • Don't deploy without reviewing changes first
  • Don't forget to commit firestore.indexes.json after adding indexes

Index Configuration Tips:

  1. Query Scope:

    • COLLECTION: Index for specific collection
    • COLLECTION_GROUP: Index across all collections with same name
  2. Field Order:

    • List fields in query order
    • Use ASCENDING or DESCENDING to match query
    • Array-contains queries need special handling
  3. Compound Indexes:

    • Required for queries with multiple filters
    • Required for orderBy on different field than filter
    • Required for inequality filters on multiple fields
  4. Index Exemptions:

    • Single field ascending/descending: Auto-indexed
    • Simple equality queries: Usually auto-indexed
    • Check Firestore docs for exemption list

Security Rules Best Practices:

  1. Default Deny:
javascript
match /{document=**} {
  allow read, write: if false;
}
  1. Authenticated Users:
javascript
match /users/{userId} {
  allow read, write: if request.auth != null && request.auth.uid == userId;
}
  1. Field Validation:
javascript
match /posts/{postId} {
  allow create: if request.auth != null
    && request.resource.data.title is string
    && request.resource.data.title.size() <= 100;
}

Deployment Checklist

Before deploying:

  • Verified correct Firebase project
  • Reviewed changes to rules/indexes
  • Tested rules in Firebase Console simulator (if changed)
  • No breaking changes to production queries
  • Index configuration matches query requirements
  • Have backup of previous rules (git history)

After deploying:

  • Verified deployment success message
  • Checked index status (building/ready)
  • Tested queries that use new indexes
  • Monitored for errors in Firebase Console
  • Committed firestore.indexes.json changes

Troubleshooting

Issue: "Project not found" error Solution: Run firebase use project-id or firebase projects:list

Issue: "Permission denied" during deployment Solution: Re-authenticate with firebase login or check IAM roles

Issue: Index still showing as "Building" after long time Solution: Normal for large collections. Check Firebase Console for progress.

Issue: Query still failing after index deployment Solution: Verify index matches exact query requirements (field order, direction)

Issue: Rules deployment breaks existing queries Solution: Review rules for overly restrictive conditions. Test in simulator first.

Issue: Multiple index errors for same query Solution: Create single composite index with all required fields

Firebase CLI Commands Reference

bash
# Project management
firebase projects:list                    # List all projects
firebase use project-id                   # Switch to project
firebase use --add                        # Add project alias

# Deployment
firebase deploy --only firestore:rules    # Deploy rules only
firebase deploy --only firestore:indexes  # Deploy indexes only
firebase deploy --only firestore          # Deploy both

# Index management
firebase firestore:indexes                # List all indexes
firebase firestore:indexes --status       # Show build status

# Verification
firebase use                              # Show current project
firebase projects:list                    # Verify project access

# Authentication
firebase login                            # Re-authenticate
firebase logout                           # Sign out
firebase login:list                       # List authenticated accounts

Integration with Development Workflow

  1. During Development:

    • Write Firestore queries
    • Note index errors
    • Add indexes to firestore.indexes.json
    • Deploy immediately
  2. Before Committing:

    • Ensure all indexes deployed
    • Verify rules match new features
    • Test queries in development
  3. Before Production Deploy:

    • Deploy indexes to production first
    • Wait for indexes to build
    • Then deploy application code
    • Verify queries work in production

Error Message Patterns

Common error messages that trigger this skill:

  1. Missing Index:
code
The query requires an index. You can create it here: https://...
  1. Failed Precondition:
code
FAILED_PRECONDITION: The query requires an index...
  1. Permission Denied (rules issue):
code
Missing or insufficient permissions
  1. Invalid Argument:
code
Cannot have inequality filters on multiple properties

Extract index requirements and deploy accordingly.