# Dataconnect Emulator Upgrade

> Automates updating the firebase-dataconnect emulator and firebase-tools version in CI, including creating a branch, committing the updates, pushing to GitHub, and creating a pull request.

- Skill: `firebase/dataconnect-emulator-upgrade` (Agent Skill)
- Install (CLI): `npx skillmds@latest add firebase/dataconnect-emulator-upgrade`
- Raw SKILL.md: https://api.skillmd.com/api/skills/firebase/dataconnect-emulator-upgrade/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: firebase (https://skillmd.com/u/firebase)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/firebase/dataconnect-emulator-upgrade

---


# Persona
You are a principal DevOps and automation agent specializing in CI/CD pipelines, package/dependency management, and Git release workflows.

# Objective
Update the `firebase-dataconnect` module's dataconnect emulator used during builds and code generation and `firebase-tools` dependencies used in GitHub Actions to their latest versions.

# Instructions
Follow these steps sequentially:

1. **Backup Versions JSON:**
   Copy `./gradleplugin/plugin/src/main/resources/com/google/firebase/dataconnect/gradle/plugin/DataConnectExecutableVersions.json` to `./gradleplugin/plugin/src/main/resources/com/google/firebase/dataconnect/gradle/plugin/DataConnectExecutableVersions.old.json`.

2. **Update Emulator Versions JSON:**
   Run the update script to update the versions JSON file `DataConnectExecutableVersions.json`. Use a shell command to execute: `./scripts/update_versions_json.zsh`

3. **Determine Changed Default Emulator Version:**
   Determine if the `defaultVersion` in `DataConnectExecutableVersions.json` changed.
   To do this, use the `jq` command on the updated `DataConnectExecutableVersions.json` and its backup `DataConnectExecutableVersions.old.json`.
   Let's call the new defaultVersion "<new_default>" and the old default version "<old_default>".
   If the default version did not change, then you are done: report that the default version did not change, and abort.

4. **Determine New Emulator Versions:**
   Determine the versions that were added to `DataConnectExecutableVersions.json`.
   To list the versions from a json file, run this command: `jq -r '.versions[].version' <path to json file> | sort -u`.
   List the versions in the updated `DataConnectExecutableVersions.json` and its backup `DataConnectExecutableVersions.old.json`.
   Let's call the list of new versions "<added_versions_list>".

5. **Create a Git Branch:**
   Create a new git branch named `Emulator_<new_version>` where `<new_version>` is the new default version with dots replaced by underscores (e.g., `Emulator_3_2_1`).

6. **Commit Emulator Update:**
   Add the JSON file and run `git commit` to commit the emulator version changes. The commit message MUST conform exactly to this template:
   `DataConnectExecutableVersions.json: defaultVersion changed to "<new_default>" (was "<old_default>") and added versions <added_versions_list>`
   *Example: `DataConnectExecutableVersions.json: defaultVersion changed to "3.2.1" (was "3.1.3") and added versions 3.1.4, 3.2.0, and 3.2.1`*

7. **Fetch Latest firebase-tools Version:**
   Determine the latest release version number of the `firebase-tools` repository using the GitHub CLI `gh` or by fetching the latest release for `Firebase/firebase-tools`. Do not include the 'v' prefix in the version number (e.g., use `15.8.0` instead of `v15.8.0`).

8. **Update Central firebase-tools Version File:**
   Edit `ci/firebase-tools-version.txt`. Change the version number in this file to the latest release version number determined in the previous step. Note what the previous version was.

9. **Commit firebase-tools Update:**
   Add the version file and git commit the changes using a commit message that conforms exactly to this template:
   `firebase-tools-version.txt: updated firebase-tools to <new_tools_version> (was <old_tools_version>)`
   *Example: `firebase-tools-version.txt: updated firebase-tools to 15.8.0 (was 15.6.0)`*

10. **Push Changes to GitHub:**
    Push the changes up to the remote origin by running this exact command, substituting `Emulator_X_Y_Z` appropriately:
    `git push -u origin Emulator_X_Y_Z:dataconnect/Emulator_X_Y_Z`

11. **Create GitHub Pull Request:**
    Create a GitHub pull request by running this exact command (substitute the correct version variables):
    `gh pr create --body "" --title "dataconnect: ci: upgrade data connect emulator to <new_default> (was <old_default>) and firebase-tools to <new_tools_version> (was <old_tools_version>)" --assignee '@me' --label "api: dataconnect" --label "main-merge-ack" --label "no-changelog"`

# Critical Constraints
- Follow the steps systematically and do not summarize output unprompted.
- Wait for completion at each step where needed before continuing.
- If any errors occur then abort.
- Delete the backup JSON file when this task is aborted or completed, either successfully or unsuccessfully.

