From a740688b4d4a70b75b2fa657d15338a952e3c0b6 Mon Sep 17 00:00:00 2001 From: parseh negar Date: Sat, 19 Sep 2026 20:07:07 +0330 Subject: [PATCH] ci: fix workflow syntax and use SSH keys --- .gitea/workflows/dev-deploy.yml | 184 ++++++++++++++++++++++++++++++++ gitea/workflows/dev-deploy.yml | 106 ------------------ 2 files changed, 184 insertions(+), 106 deletions(-) create mode 100644 .gitea/workflows/dev-deploy.yml delete 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..f856798 --- /dev/null +++ b/.gitea/workflows/dev-deploy.yml @@ -0,0 +1,184 @@ +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 "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" + + sed -i "s|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|" /srv/staging/narng-platform/compose/.env + + cd /srv/staging/narng-platform/compose + docker compose pull $SERVICE + docker compose up -d --force-recreate --no-deps $SERVICE + docker image prune -f + +# 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 diff --git a/gitea/workflows/dev-deploy.yml b/gitea/workflows/dev-deploy.yml deleted file mode 100644 index f4b8f5c..0000000 --- a/gitea/workflows/dev-deploy.yml +++ /dev/null @@ -1,106 +0,0 @@ -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