ci: central dev-deploy workflow
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
name: Dev Deploy to Staging
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
workflow_dispatch:
|
||||
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 "REPO_NAME=$REPO_NAME" >> $GITHUB_OUTPUT
|
||||
echo "IMAGE=${{ env.REGISTRY }}/$REPO_NAME" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Generate version
|
||||
id: version
|
||||
run: |
|
||||
VERSION="1.0.0-dev.${{ github.run_number }}"
|
||||
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Build Docker image
|
||||
env:
|
||||
DOCKER_BUILDKIT: 1
|
||||
run: |
|
||||
IMAGE=${{ steps.meta.outputs.IMAGE }}
|
||||
VERSION=${{ steps.version.outputs.VERSION }}
|
||||
export DOCKER_BUILDKIT=1
|
||||
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 (Host-level)
|
||||
run: |
|
||||
SERVICE=${{ steps.meta.outputs.SERVICE }}
|
||||
VERSION=${{ steps.version.outputs.VERSION }}
|
||||
TAG_VAR=${{ steps.meta.outputs.TAG_VAR }}
|
||||
echo "Deploying $SERVICE:$VERSION"
|
||||
|
||||
# آپدیت فایل .env در مسیر صحیح سرور
|
||||
docker run --rm -v /srv/staging/narng-platform:/srv/staging/narng-platform alpine sh -c "sed -i 's|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|' /srv/staging/narng-platform/compose/.env"
|
||||
|
||||
# ریاستارت کانتینر با استفاده از فایل .env صحیح
|
||||
docker run --rm \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v /srv/staging/narng-platform:/srv/staging/narng-platform:ro \
|
||||
-w /srv/staging/narng-platform/compose \
|
||||
docker:24-cli \
|
||||
sh -c "docker compose --env-file .env up -d --no-deps $SERVICE"
|
||||
|
||||
- name: Verify
|
||||
run: |
|
||||
SERVICE=${{ steps.meta.outputs.SERVICE }}
|
||||
CONTAINER="staging-narng-${SERVICE}"
|
||||
sleep 10
|
||||
STATUS=$(docker inspect --format='{{.State.Status}}' "$CONTAINER" 2>/dev/null || echo "not found")
|
||||
echo "Container: $CONTAINER - Status: $STATUS"
|
||||
Reference in New Issue
Block a user