From 02e38e435bfc70ff0d9c0a25b6988488e0e5debb Mon Sep 17 00:00:00 2001 From: parseh negar Date: Fri, 2 Oct 2026 13:40:39 +0330 Subject: [PATCH] Center Cicd --- .gitea/workflows/deploy-staging.yml | 88 +++++++++++++++++++++++++++++ .gitignore | 5 ++ README.md | 18 ++++++ 3 files changed, 111 insertions(+) create mode 100644 .gitea/workflows/deploy-staging.yml create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitea/workflows/deploy-staging.yml b/.gitea/workflows/deploy-staging.yml new file mode 100644 index 0000000..1879209 --- /dev/null +++ b/.gitea/workflows/deploy-staging.yml @@ -0,0 +1,88 @@ +name: Deploy to Staging + +on: + push: + branches: [ dev ] + +concurrency: + group: staging-${{ github.repository }} + cancel-in-progress: false + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver-opts: network=host + + - name: Generate Version + id: version + run: echo "VERSION=1.0.0-dev.${{ github.run_number }}" >> $GITHUB_OUTPUT + + - name: Build Docker Image + env: + IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }} + VERSION: ${{ steps.version.outputs.VERSION }} + run: | + docker build \ + --tag ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:$VERSION \ + --tag ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:1.0.0-latest \ + --build-arg NEXUS_REGISTRY=${{ secrets.NEXUS_REGISTRY }} \ + . + + - name: Login to Nexus + uses: docker/login-action@v3 + with: + registry: ${{ secrets.NEXUS_REGISTRY }} + username: ${{ secrets.NEXUS_USER }} + password: ${{ secrets.NEXUS_PASS }} + + - name: Push to Nexus + env: + IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }} + VERSION: ${{ steps.version.outputs.VERSION }} + run: | + docker push ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:$VERSION + docker push ${{ secrets.NEXUS_REGISTRY }}/$IMAGE_NAME:1.0.0-latest + + - name: Deploy to Staging + env: + SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} + STAGING_HOST: ${{ secrets.STAGING_HOST }} + STAGING_USER: ${{ secrets.STAGING_USER }} + IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }} + VERSION: ${{ steps.version.outputs.VERSION }} + run: | + mkdir -p ~/.ssh + echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + ssh-keyscan -H $STAGING_HOST >> ~/.ssh/known_hosts + + ssh $STAGING_USER@$STAGING_HOST " + cd /srv/staging/narng-platform/compose + docker compose pull $IMAGE_NAME + export ${IMAGE_NAME}_TAG=$VERSION + docker compose up -d $IMAGE_NAME + " + + - name: Wait for Health Check + env: + IMAGE_NAME: ${{ vars.SERVICE_NAME || github.event.repository.name }} + run: sleep 15 + + - name: Run Smoke Test + env: + STAGING_HOST: ${{ secrets.STAGING_HOST }} + run: | + STATUS=$(curl -sk -o /dev/null -w "%{http_code}" https://api.$STAGING_HOST/api/categories || echo "000") + if [ "$STATUS" != "200" ]; then + echo "Smoke test failed with status $STATUS" + exit 1 + fi + echo "Smoke test passed!" + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c0f5f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +test-results/ +playwright-report/ +.env +*.log \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7eee9cf --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +Narng CI/CD +این ریپو حاوی کانفیگ‌ها و اسکریپت‌های مرکزی CI/CD برای پروژه Narng است. + +ساختار +.gitea/workflows/deploy-staging.yml: Pipeline اصلی برای Deploy به Staging (شاخه dev). +scripts/: اسکریپت‌های کمکی برای Deploy. +نحوه استفاده +برای فعال‌سازی این Pipeline در یک سرویس (مثلاً narng-auth): + +فایل .gitea/workflows/deploy-staging.yml را در ریپو سرویس ایجاد کنید. +در صورت نیاز، متغیر SERVICE_NAME را در تنظیمات ریپو سرویس تنظیم کنید. +در صورت نیاز، Secrets زیر را در ریپو سرویس تنظیم کنید: +NEXUS_REGISTRY: آدرس Registry (مثلاً 192.168.1.8:8084) +NEXUS_USER: کاربری Nexus +NEXUS_PASS: پسورد Nexus +SSH_PRIVATE_KEY: کلید خصوصی SSH برای دسترسی به سرور +STAGING_HOST: آدرس سرور Staging +STAGING_USER: کاربری سرور (مثلاً root)