Files
narng-cicd/.gitea/workflows/dev-deploy.yml
T

73 lines
2.7 KiB
YAML

name: Dev Deploy to Staging
on:
workflow_call: # این فایل فقط قابل فراخوانی توسط ریپوهای دیگر است
env:
REGISTRY: 192.168.1.8:8084
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine service metadata
id: meta
run: |
REPO_NAME=$(basename ${{ github.repository }})
case "$REPO_NAME" in
narng-api-laravel) SERVICE="laravel"; TAG_VAR="LARAVEL_TAG" ;;
narng-api | narng-api-gateway) SERVICE="api"; TAG_VAR="API_TAG" ;;
narng-web-app) SERVICE="web"; TAG_VAR="WEB_TAG" ;;
*) SERVICE=$(echo "$REPO_NAME" | sed 's/^narng-//'); TAG_VAR=$(echo "$SERVICE" | tr '[:lower:]' '[:upper:]')_TAG ;;
esac
echo "SERVICE=$SERVICE" >> $GITHUB_OUTPUT
echo "TAG_VAR=$TAG_VAR" >> $GITHUB_OUTPUT
echo "IMAGE=${{ env.REGISTRY }}/$REPO_NAME" >> $GITHUB_OUTPUT
- name: Generate version
id: version
run: echo "VERSION=1.0.0-dev.${{ github.run_number }}" >> $GITHUB_OUTPUT
- name: Build Docker image
env:
DOCKER_BUILDKIT: 1
run: |
IMAGE=${{ steps.meta.outputs.IMAGE }}
VERSION=${{ steps.version.outputs.VERSION }}
docker buildx build --builder default --tag "$IMAGE:$VERSION" --tag "$IMAGE:1.0.0-latest" --load . 2>&1 | tail -20
- name: Login to Nexus
env:
NEXUS_USER: ${{ secrets.NEXUS_USER }}
NEXUS_PASS: ${{ secrets.NEXUS_PASS }}
run: echo "$NEXUS_PASS" | docker login ${{ env.REGISTRY }} -u "$NEXUS_USER" --password-stdin
- name: Push to Nexus
run: |
IMAGE=${{ steps.meta.outputs.IMAGE }}
VERSION=${{ steps.version.outputs.VERSION }}
docker push "$IMAGE:$VERSION"
docker push "$IMAGE:1.0.0-latest"
- name: Deploy to staging via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.STAGING_HOST }}
username: ${{ secrets.STAGING_USER }}
key: ${{ secrets.STAGING_SSH_KEY }}
script: |
SERVICE=${{ steps.meta.outputs.SERVICE }}
VERSION=${{ steps.version.outputs.VERSION }}
TAG_VAR=${{ steps.meta.outputs.TAG_VAR }}
echo "Deploying $SERVICE:$VERSION"
sudo sed -i "s|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|" /srv/staging/narng-platform/compose/.env
cd /srv/staging/narng-platform/compose
sudo docker compose pull $SERVICE
sudo docker compose up -d --force-recreate --no-deps $SERVICE
sudo docker image prune -f