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 [![CodeQL](https://github.com/Shuffle/Shuffle/actions/workflows/codeql-analysis.yml/badge.svg?branch=launch)](https://github.com/Shuffle/Shuffle/actions/workflows/codeql-analysis.yml) [![Autobuild](https://github.com/Shuffle/Shuffle/actions/workflows/dockerbuild.yaml/badge.svg?branch=launch)](https://github.com/Shuffle/Shuffle/actions/workflows/dockerbuild.yaml) +[![Deploy to Google Cloud](https://deploy.cloud.run/button.svg)](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