diff --git a/.ghaymah.json b/.ghaymah.json index 874fa79..bbbfbd8 100644 --- a/.ghaymah.json +++ b/.ghaymah.json @@ -1,11 +1,11 @@ { - "id": "eb1b607d-2f98-465c-a288-5523387c69ea", - "name": "Complete-CI-CD-Project-pipeline-on-Ghaymah-Cloud", - "projectId": "26de0c00-27bf-46fc-aa2d-6b83e595839d", + "id": "9071e5c5-d122-463c-93d9-86ec7622b39e", + "name": "bin", + "projectId": "811b5e36-3b8b-486a-81af-bef0f1980187", "ports": [ { "expose": true, - "number": 80 + "number": 5000 } ], "publicAccess": { @@ -13,8 +13,5 @@ "domain": "auto" }, "resourceTier": "t1", - "container": { - "image": "ahmedgamalyousef/weatherapp:latest", - "pullSecretName": "" - } -} \ No newline at end of file + "dockerFileName": "Dockerfile" +} diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index a998fda..b90030d 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -1,190 +1,36 @@ -name: Deploy to Ghaymah Cloud - on: push: - branches: [ main, master ] - workflow_dispatch: # Allow manual triggers - inputs: - project_name: - description: 'Ghaymah Project Name' - required: true - default: '' - app_name: - description: 'App Name' - required: true - default: '' - -env: - DOCKER_USERNAME: 'ahmedgamalyousef' - + pull_request: + jobs: - build-and-deploy: - name: Build and Deploy to Ghaymah - # runs-on: ubuntu-latest - + build_and_push_image: steps: - # Step 1: Checkout code - - name: Checkout repository - uses: actions/checkout@v4 + - name: checkout code + uses: actions/checkout@v5.0.0 - # Step 2: Get project and app names - - name: Get deployment names - id: names - run: | - # Use manual input or generate from repository name - if [ -n "${{ github.event.inputs.project_name }}" ]; then - PROJECT_NAME="${{ github.event.inputs.project_name }}" - APP_NAME="${{ github.event.inputs.app_name }}" - else - PROJECT_NAME="${{ github.event.repository.name }}-project" - APP_NAME="${{ github.event.repository.name }}-app" - fi - - echo "🔧 Using:" - echo " Project: $PROJECT_NAME" - echo " App: $APP_NAME" - echo "PROJECT_NAME=$PROJECT_NAME" >> $GITHUB_OUTPUT - echo "APP_NAME=$APP_NAME" >> $GITHUB_OUTPUT - echo "IMAGENAME=$APP_NAME" >> $GITHUB_OUTPUT + - name: login to dockerhub + uses: docker/login-action@v3.6.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} - # Step 3: Set up Docker Buildx - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + push: true + tags: ahmedgamalyousef/firstcicd:latest + + deploy: + needs: build_and_push_image + steps: + - name: checkout code + uses: actions/checkout@v5.0.0 + - name: install ghaymah cli + run: curl -sSl https://cli.ghaymah.systems/install.sh | bash - # Step 4: Login to Docker Hub - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ env.DOCKER_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: login to ghaymah + run: $HOME/ghaymah/bin/gy auth login --email "${{secrets.GHAYMAH_EMAIL}}" --password "${{secrets.GHAYMAH_PW}}" - # Step 5: Calculate new version - - name: Calculate new version - id: version - run: | - echo "📊 Calculating version..." - # Get short commit SHA and timestamp for unique version - SHORT_SHA=$(git rev-parse --short HEAD) - TIMESTAMP=$(date +%Y%m%d%H%M%S) - NEW_VERSION="${SHORT_SHA}-${TIMESTAMP}" - - echo "🆕 New version: $NEW_VERSION" - echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_OUTPUT - echo "IMAGE_TAG=${{ env.DOCKER_USERNAME }}/${{ steps.names.outputs.IMAGENAME }}:$NEW_VERSION" >> $GITHUB_OUTPUT - - # Step 6: Build Docker image - - name: Build Docker image - run: | - echo "🏗️ Building Docker image..." - docker build -t ${{ steps.version.outputs.IMAGE_TAG }} . - - # Step 7: Push versioned image to Docker Hub - - name: Push versioned image - run: | - echo "📤 Pushing versioned image to Docker Hub..." - docker push ${{ steps.version.outputs.IMAGE_TAG }} - echo "✅ Image pushed: ${{ steps.version.outputs.IMAGE_TAG }}" - - # Step 8: Push latest tag - - name: Push latest tag - run: | - echo "📤 Tagging and pushing as latest..." - docker tag ${{ steps.version.outputs.IMAGE_TAG }} ${{ env.DOCKER_USERNAME }}/${{ steps.names.outputs.IMAGENAME }}:latest - docker push ${{ env.DOCKER_USERNAME }}/${{ steps.names.outputs.IMAGENAME }}:latest - echo "✅ Latest tag pushed" - - # Step 9: Install Ghaymah CLI - - name: Install Ghaymah CLI - run: | - echo "📥 Installing Ghaymah CLI..." - curl -sSL https://cli.ghaymah.systems/install.sh | bash - echo "✅ Ghaymah CLI installed" - - # Step 10: Login to Ghaymah - - name: Login to Ghaymah - run: | - echo "🔐 Logging into Ghaymah..." - $HOME/ghaymah/bin/gy auth login --email "${{ secrets.GHAYMAH_EMAIL }}" --password "${{ secrets.GHAYMAH_PASSWORD }}" - echo "✅ Logged into Ghaymah" - - # Step 11: Create Ghaymah project - - name: Create Ghaymah project - id: project - run: | - echo "🔧 Creating project: ${{ steps.names.outputs.PROJECT_NAME }}" - - # Create project and capture output - PROJECT_OUTPUT=$($HOME/ghaymah/bin/gy resource project create --set .name="${{ steps.names.outputs.PROJECT_NAME }}" 2>&1) - echo "Project creation output: $PROJECT_OUTPUT" - - # Extract project ID - PROJECT_ID=$(echo "$PROJECT_OUTPUT" | awk '/ID:/ {print $NF}') - - if [ -z "$PROJECT_ID" ]; then - echo "❌ Failed to extract project ID" - exit 1 - fi - - echo "✅ Project created with ID: $PROJECT_ID" - echo "PROJECT_ID=$PROJECT_ID" >> $GITHUB_OUTPUT - - # Step 12: Create Ghaymah configuration - - name: Create Ghaymah configuration - run: | - echo "⚙️ Creating Ghaymah configuration..." - - cat > .ghaymah.json << EOF -{ - "container": { - "image": "${{ steps.version.outputs.IMAGE_TAG }}", - "pullSecretName": "" - }, - "name": "${{ steps.names.outputs.APP_NAME }}", - "ports": [ - { - "expose": true, - "number": 5000 - } - ], - "projectId": "${{ steps.project.outputs.PROJECT_ID }}", - "publicAccess": { - "baseDomain": "hosted.ghaymah.systems", - "domain": "auto", - "enabled": true - }, - "resourceTier": "t1" -} -EOF - - echo "✅ Configuration file created:" - echo " - Project: ${{ steps.names.outputs.PROJECT_NAME }} (ID: ${{ steps.project.outputs.PROJECT_ID }})" - echo " - App: ${{ steps.names.outputs.APP_NAME }}" - echo " - Image: ${{ steps.version.outputs.IMAGE_TAG }}" - - # Step 13: Deploy to Ghaymah - - name: Deploy to Ghaymah - run: | - echo "🚀 Deploying to Ghaymah..." - $HOME/ghaymah/bin/gy resource app launch - echo "✅ Deployment initiated" - - # Step 14: Wait for deployment - - name: Wait for deployment - run: | - echo "⏳ Waiting for deployment to complete..." - sleep 30 - - # Step 15: Show deployment summary - - name: Show deployment summary - run: | - echo "" - echo "🎉 DEPLOYMENT SUCCESSFUL!" - echo "================================" - echo "📱 Application: ${{ steps.names.outputs.APP_NAME }}" - echo "🏗️ Project: ${{ steps.names.outputs.PROJECT_NAME }}" - echo "🐳 Image: ${{ steps.version.outputs.IMAGE_TAG }}" - echo "🌐 URL: https://${{ steps.names.outputs.APP_NAME }}.hosted.ghaymah.systems" - echo "🔗 Commit: ${{ github.sha }}" - echo "👤 Deployed by: ${{ github.actor }}" - echo "================================" - echo "✨ Deployment process completed!" \ No newline at end of file + - name: deploy + run: $HOME/ghaymah/bin/gy resource app launch