name: Deploy to Production on: push: branches: - main env: PROJECT_NAME: taxi-auth permissions: contents: write jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Copy env run: | cp .env.example .env - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: false load: true tags: ${{ env.PROJECT_NAME }}:test no-cache: true - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Tag and push to Docker Hub run: | docker tag ${{ env.PROJECT_NAME }}:test ${{ secrets.DOCKER_USERNAME }}/${{ env.PROJECT_NAME }}:latest docker tag ${{ env.PROJECT_NAME }}:test ${{ secrets.DOCKER_USERNAME }}/${{ env.PROJECT_NAME }}:${{ github.run_number }} docker push ${{ secrets.DOCKER_USERNAME }}/${{ env.PROJECT_NAME }}:latest docker push ${{ secrets.DOCKER_USERNAME }}/${{ env.PROJECT_NAME }}:${{ github.run_number }} echo "SUCCESS TAGS: latest, ${{ github.run_number }}" - name: Update stack.yaml and version run: | sed -i 's|image: ${{ secrets.DOCKER_USERNAME }}/${{ env.PROJECT_NAME }}:.*|image: ${{ secrets.DOCKER_USERNAME }}/${{ env.PROJECT_NAME }}:${{ github.run_number }}|' stack.yaml - name: Commit and push updated version run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add . git commit -m "🔄 Update image to ${{ github.run_number }} [CI SKIP]" || echo "No changes" git pull origin main --rebase git push origin main - name: Deploy to server via SSH uses: appleboy/ssh-action@v1.2.2 with: host: ${{ secrets.HOST }} username: ${{ secrets.USERNAME }} password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | PROJECTS=/opt/projects/ DIR=/opt/projects/${{ env.PROJECT_NAME }}/ if [ -d "$PROJECTS" ]; then echo "projects papkasi mavjud" else mkdir -p $PROJECTS echo "projects papkasi yaratildi" fi if [ -d "$DIR" ]; then echo "loyiha mavjud" else cd $PROJECTS git clone git@gitea.felixits.uz:${{ github.repository }}.git ${{ env.PROJECT_NAME }} echo "Clone qilindi"; fi cd $DIR git fetch origin main git reset --hard origin/main cp .env.example .env update_env() { local env_file=".env" cp .env.example "$env_file" for kv in "$@"; do local key="${kv%%=*}" local value="${kv#*=}" sed -i "s|^$key=.*|$key=$value|" "$env_file" done } export PORT=${{ vars.PORT }} docker stack deploy -c stack.yaml ${{ env.PROJECT_NAME }}