الملفات
ghaymah-exam-noran-sre/q3-cicd/workflow.yml

136 أسطر
4.0 KiB
YAML

name: Build and Deploy to Ghaymah
on:
# Run automatically when code is pushed to the main branch
push:
branches:
- main
# Allow manual workflow execution from GitHub Actions
workflow_dispatch:
env:
# Replace with the official Ghaymah Container Registry URL
REGISTRY: registry.ghaymah.systems
# Docker image name
IMAGE_NAME: ghaymah-api
jobs:
# -------------------------------------------------------
# Build the Docker image and push it to the registry
# -------------------------------------------------------
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
# Check out the repository source code
- name: Checkout code
uses: actions/checkout@v4
# Enable Docker Buildx for advanced builds and caching
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# Authenticate with the container registry
- name: Log in to Ghaymah Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.GHAYMAH_USERNAME }}
password: ${{ secrets.GHAYMAH_TOKEN }}
# Build the Docker image and push it to the registry
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
# Path containing the Dockerfile
context: ./q1-deploy-monitor
# Push the image after a successful build
push: true
# Publish two image tags:
# - latest
# - commit SHA for traceability
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
# Enable Docker layer caching
cache-from: type=gha
cache-to: type=gha,mode=max
# -------------------------------------------------------
# Deploy the application to the staging environment
# -------------------------------------------------------
deploy-staging:
needs: build-and-push
runs-on: ubuntu-latest
# GitHub Environment
environment: staging
steps:
# Install the Ghaymah CLI
# Replace with the official installation command if different
- name: Install Ghaymah CLI
run: |
curl -sSL https://get.ghaymah.systems/cli/install.sh | sh
echo "$HOME/.ghaymah/bin" >> $GITHUB_PATH
# Deploy the application to staging
# Replace the commands below with the official CLI syntax if needed
- name: Deploy to Staging
env:
GHAYMAH_TOKEN: ${{ secrets.GHAYMAH_TOKEN }}
run: |
ghaymah login --token $GHAYMAH_TOKEN
ghaymah deploy \
--image ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
--name api-staging \
--port 5000 \
--env FLASK_ENV=staging \
--replicas 1
# -------------------------------------------------------
# Deploy the application to the production environment
# -------------------------------------------------------
deploy-production:
needs: deploy-staging
runs-on: ubuntu-latest
# Configure this environment with required reviewers
# to enable manual approval before deployment
environment: production
steps:
# Install the Ghaymah CLI
- name: Install Ghaymah CLI
run: |
curl -sSL https://get.ghaymah.systems/cli/install.sh | sh
echo "$HOME/.ghaymah/bin" >> $GITHUB_PATH
# Deploy the application to production
# This job runs only after manual approval
- name: Deploy to Production
env:
GHAYMAH_TOKEN: ${{ secrets.GHAYMAH_TOKEN }}
run: |
ghaymah login --token $GHAYMAH_TOKEN
ghaymah deploy \
--image ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} \
--name api-production \
--port 5000 \
--env FLASK_ENV=production \
--replicas 3 \
--health-check /health