| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/bin/bash
- # Copyright 2019 Google LLC
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- # USAGE: run_firestore_emulator.sh { run | start | stop }
- #
- # Downloads and runs the Firestore emulator
- set -euo pipefail
- VERSION='1.10.4'
- FILENAME="cloud-firestore-emulator-v${VERSION}.jar"
- URL="https://storage.googleapis.com/firebase-preview-drop/emulator/${FILENAME}"
- cache_dir="${HOME}/.cache/firebase/emulators"
- jar="${cache_dir}/${FILENAME}"
- cd $(git rev-parse --show-toplevel)
- pid_file="cloud-firestore-emulator.pid"
- log_file="cloud-firestore-emulator.log"
- function help() {
- cat 1>&2 <<EOF
- run_firestore_emulator.sh {run|start|stop}
- EOF
- }
- # Downloads the emulator jar if it doesn't already exist
- function ensure_exists() {
- if [[ ! -f "$jar" ]]; then
- echo "Downloading Firestore emulator" 1>&2
- mkdir -p "${cache_dir}"
- curl -s -o "${jar}" "${URL}"
- fi
- }
- # Runs the emulator synchronously
- function run() {
- exec java -jar "$jar" "$@"
- }
- # Verifies the emulator isn't already running at the PID in the pid_file
- function check_not_running() {
- if [[ -f "${pid_file}" ]]; then
- pid=$(cat "${pid_file}")
- if kill -0 "${pid}" >& /dev/null; then
- echo "Firestore emulator already running as PID ${pid}" 1>&2
- return 1
- fi
- echo "Removing stale PID file" 1>&2
- rm "${pid_file}"
- fi
- }
- # Starts the emulator in the background
- function start() {
- check_not_running
- run "$@" >& "${log_file}" &
- pid="$!"
- echo "$pid" > "${pid_file}"
- echo "Firestore emulator running as PID ${pid}" 1>&2
- }
- # Stops the emulator if it's running
- function stop() {
- if [[ -f "${pid_file}" ]]; then
- pid=$(cat "${pid_file}")
- kill "${pid}" || true
- rm "${pid_file}"
- fi
- }
- command=run
- if [[ $# -gt 0 ]]; then
- command="$1"
- shift
- fi
- case "${command}" in
- run)
- ensure_exists
- run "$@"
- ;;
- start)
- ensure_exists
- start
- ;;
- stop)
- stop
- ;;
- download)
- ensure_exists
- ;;
- *)
- help
- exit 1
- ;;
- esac
|