From 7cf11c5bef6178c8cf763012ef346b53d7b1865b Mon Sep 17 00:00:00 2001 From: parseh negar Date: Sat, 19 Sep 2026 19:40:16 +0330 Subject: [PATCH] ci: central dev-deploy workflow --- gitea/workflows/dev-deploy.yml | 106 +++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 gitea/workflows/dev-deploy.yml diff --git a/gitea/workflows/dev-deploy.yml b/gitea/workflows/dev-deploy.yml new file mode 100644 index 0000000..f4b8f5c --- /dev/null +++ b/gitea/workflows/dev-deploy.yml @@ -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" \ No newline at end of file