From d995f73913565e9a9d009dc7ddb6abdf899b4fa6 Mon Sep 17 00:00:00 2001
From: Aditya <60684641+0x0elliot@users.noreply.github.com>
Date: Wed, 23 Oct 2024 16:40:26 +0530
Subject: [PATCH] feat: adding click to deploy features
---
README.md | 1 +
app.json | 15 ++++++++++
cloudbuild.yaml | 78 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 94 insertions(+)
create mode 100644 app.json
create mode 100644 cloudbuild.yaml
diff --git a/README.md b/README.md
index c1a214e2..ff08d91e 100755
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@ Shuffle Automation
[](https://github.com/Shuffle/Shuffle/actions/workflows/codeql-analysis.yml)
[](https://github.com/Shuffle/Shuffle/actions/workflows/dockerbuild.yaml)
+[](https://deploy.cloud.run/?git_repo=https://github.com/Shuffle/Shuffle&ref=2.0.0)
diff --git a/app.json b/app.json
new file mode 100644
index 00000000..e31846b1
--- /dev/null
+++ b/app.json
@@ -0,0 +1,15 @@
+{
+ "name": "Shuffle",
+ "description": "Security Automation Platform",
+ "repository": "https://github.com/shuffle/shuffle",
+ "env": {
+ "SERVICE_NAME": {
+ "description": "Name of the Cloud Run service",
+ "value": "shuffle-app"
+ },
+ "REGION": {
+ "description": "GCP region to deploy to",
+ "value": "us-central1"
+ }
+ }
+ }
\ No newline at end of file
diff --git a/cloudbuild.yaml b/cloudbuild.yaml
new file mode 100644
index 00000000..111178cf
--- /dev/null
+++ b/cloudbuild.yaml
@@ -0,0 +1,78 @@
+# cloudbuild.yaml
+steps:
+ # Create and set permissions for database directory
+ - name: 'gcr.io/cloud-builders/docker'
+ entrypoint: 'bash'
+ args:
+ - '-c'
+ - |
+ mkdir -p shuffle-database && chmod -R 777 shuffle-database
+
+ # Build images using docker-compose
+ - name: 'docker/compose'
+ args: ['build']
+
+ # Push images to Container Registry
+ - name: 'docker/compose'
+ args: ['push']
+
+ # Start services and perform health checks
+ - name: 'docker/compose'
+ entrypoint: 'bash'
+ args:
+ - '-c'
+ - |
+ # Start services
+ docker-compose up -d
+
+ # Initial wait for services to start
+ echo "Waiting 30 seconds for initial startup..."
+ sleep 30
+
+ # Check for restarting containers
+ ATTEMPTS=30
+ for i in $(seq 1 $ATTEMPTS); do
+ RESTARTING_CONTAINERS=$(docker ps --filter "status=restarting" --format "{{.Names}}")
+ if [ -n "$RESTARTING_CONTAINERS" ]; then
+ echo "The following containers are restarting:"
+ echo "$RESTARTING_CONTAINERS"
+ docker-compose logs
+ exit 1
+ fi
+ echo "No containers are restarting. Attempt $i/$ATTEMPTS."
+ sleep 1
+ done
+ echo "No containers were found in a restarting state after $ATTEMPTS checks."
+
+ # Health check via HTTP endpoint
+ echo "Performing HTTP health check..."
+ RESPONSE=$(curl -s http://localhost:3001)
+ if echo "$RESPONSE" | grep -q "Shuffle"; then
+ echo "Health check passed: 'Shuffle' found in response."
+ else
+ echo "Health check failed: 'Shuffle' not found in response."
+ echo "Response received:"
+ echo "$RESPONSE"
+ docker-compose logs
+ exit 1
+ fi
+
+ # Deploy to Cloud Run if all checks pass
+ - name: 'gcr.io/cloud-builders/gcloud'
+ args:
+ - 'run'
+ - 'deploy'
+ - '${_SERVICE_NAME}'
+ - '--image'
+ - 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}'
+ - '--platform'
+ - 'managed'
+ - '--region'
+ - '${_REGION}'
+ - '--allow-unauthenticated'
+
+# Timeouts and options
+timeout: '1800s'
+options:
+ machineType: 'E2_HIGHCPU_8'
+ logging: CLOUD_LOGGING_ONLY
\ No newline at end of file