name: Backup archive env: BACKUP_BUCKET: "gs://example-prod-backups" FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} on: schedule: # First of every month at some time when your app is least active - cron: "0 3 1 * *" jobs: backup-firestore: runs-on: ubuntu-latest steps: - name: Setup gcloud environment uses: GoogleCloudPlatform/github-actions@0.1.2 with: project_id: example-prod service_account_key: ${{ secrets.GCLOUD_AUTH_KEY_PROD }} - name: Select project run: gcloud config set project example-prod - name: Export Firestore run: gcloud firestore export ${{ env.BACKUP_BUCKET }}/firestore/$(date '+%Y-%m-%d') --async backup-rtdb: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup gcloud environment uses: GoogleCloudPlatform/github-actions@0.1.2 with: project_id: example-prod service_account_key: ${{ secrets.GCLOUD_AUTH_KEY_PROD }} - name: Select project run: gcloud config set project example-prod - name: Select Firebase project uses: w9jds/firebase-action@v1.3.0 with: args: use production - name: Generate backup file name run: | echo "::set-env name=BACKUP_FILE::$(date '+%Y-%m-%d').json" - name: Download RTDB data uses: w9jds/firebase-action@v1.3.0 with: args: database:get --output ${{ env.BACKUP_FILE }} / - name: Upload to Cloud Storage Bucket run: gsutil cp ${{ env.BACKUP_FILE }} ${{ env.BACKUP_BUCKET }}/rtdb