diff --git a/.gitea/workflows/dad-mehr-gitea-deploy.yml b/.gitea/workflows/dad-mehr-gitea-deploy.yml new file mode 100644 index 00000000..fcfebdf9 --- /dev/null +++ b/.gitea/workflows/dad-mehr-gitea-deploy.yml @@ -0,0 +1,91 @@ +name: Build and Deploy (.NET) + +on: + push: + tags: + - 'v*' + +env: + IMAGE_NAME: my-project + DEPLOY_PATH: /home/${{ secrets.SSH_USERNAME }}/deployments/my-project + +jobs: + build-push: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Login to Private Registry + uses: docker/login-action@v3 + with: + registry: ${{ secrets.DOCKER_REGISTRY }} + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and Push + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ${{ secrets.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ gitea.ref_name }} + ${{ secrets.DOCKER_REGISTRY }}/${{ env.IMAGE_NAME }}:latest + + deploy: + needs: build-push + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + # فقط فایل docker-compose.yml را آپدیت می‌کنیم (فایل .env روی سرور دست نمی‌خورد) + - name: Copy docker-compose to Server + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_KEY }} + port: 22 + source: "docker-compose.yml" + target: ${{ env.DEPLOY_PATH }} + + # اجرا روی سرور + - name: Remote SSH Commands + uses: appleboy/ssh-action@v1.0.3 + env: + # تعریف متغیرهایی که می‌خواهیم به سرور پاس دهیم + DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }} + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + APP_VERSION: ${{ gitea.ref_name }} # ورژن تگ شده + APP_PORT: ${{ secrets.APP_PORT }} + IMAGE_NAME: ${{ env.IMAGE_NAME }} + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_KEY }} + port: 22 + # لیست متغیرهایی که باید به نشست SSH منتقل شوند + envs: DOCKER_REGISTRY,DOCKER_USERNAME,DOCKER_PASSWORD,APP_VERSION,APP_PORT,IMAGE_NAME + script: | + cd ${{ env.DEPLOY_PATH }} + + # لاگین داکر + echo "$DOCKER_PASSWORD" | docker login $DOCKER_REGISTRY -u $DOCKER_USERNAME --password-stdin + + # نکته مهم: + # الان متغیرهای APP_VERSION و ... در حافظه این Session موجود هستند. + # وقتی دستور docker compose اجرا شود، مقادیر ${APP_VERSION} در فایل yml + # را با مقادیر موجود در حافظه جایگزین می‌کند. + # و فایل .env موجود روی دیسک را هم برای سایر متغیرها می‌خواند. + + echo "Deploying version: $APP_VERSION" + + # پول کردن با استفاده از متغیرهای حافظه + docker compose pull + + # اجرای کانتینر + docker compose up -d --remove-orphans + + docker image prune -f