diff --git a/README.md b/README.md index e1ecaf5..79af8a4 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,16 @@ gcloud emulators firestore start export FIRESTORE_EMULATOR_HOST="HOST:PORT" ``` +## Deployment + +Deployments are automated via **Cloud Build** when changes are pushed or merged into specific branches. + +| Branch | Environment | +| :--- | :--- | +| `dev` | **Development** | +| `stage` | **Staging(Testnet)** | +| `main` | **Production(Mainnet)** | + ## Docker Build and run the project in a Docker container: diff --git a/cloudbuild.yaml b/cloudbuild.yaml new file mode 100644 index 0000000..9dbf312 --- /dev/null +++ b/cloudbuild.yaml @@ -0,0 +1,82 @@ +substitutions: + _REGION: "default-region" + _AR_REPO: "default-repo" + _IMAGE_NAME: "default-image" + _SERVICE_NAMES: "default-service-1 default-service-2" + _JOB_NAMES: "default-job-1 default-job-2" + +options: + machineType: 'E2_HIGHCPU_8' + logging: CLOUD_LOGGING_ONLY + +steps: + - name: 'gcr.io/cloud-builders/docker' + id: 'build-docker-image' + args: + - 'build' + - '-t' + - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:$SHORT_SHA' + - '-t' + - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:latest' + - '-f' + - 'docker/Dockerfile' + - '.' + + - name: 'gcr.io/cloud-builders/docker' + id: 'push-image-sha' + waitFor: ['build-docker-image'] + args: + - 'push' + - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:$SHORT_SHA' + + - name: 'gcr.io/cloud-builders/docker' + id: 'push-image-latest' + waitFor: ['build-docker-image'] + args: + - 'push' + - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:latest' + + - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim' + id: 'deploy-services' + waitFor: ['push-image-sha'] + entrypoint: bash + args: + - -c + - | + if [ -n "${_SERVICE_NAMES}" ]; then + for service in ${_SERVICE_NAMES}; do + echo "Deploying to Service: $service" + gcloud run deploy $service \ + --image=${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:$SHORT_SHA \ + --region=${_REGION} \ + --platform=managed \ + --quiet + done + else + echo "No services to deploy." + fi + + - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk:slim' + id: 'deploy-jobs' + waitFor: ['push-image-sha'] + entrypoint: bash + args: + - -c + - | + if [ -n "${_JOB_NAMES}" ]; then + for job in ${_JOB_NAMES}; do + echo "Deploying/Updating Job: $job" + gcloud run jobs deploy $job \ + --image=${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:$SHORT_SHA \ + --region=${_REGION} \ + --quiet + done + else + echo "No jobs to deploy." + fi + +images: + - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:$SHORT_SHA' + - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_AR_REPO}/${_IMAGE_NAME}:latest' + +timeout: '1200s' \ No newline at end of file