name: Dev Deploy to Staging on: 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 }} port: 2222 envs: NEXUS_USER, NEXUS_PASS script: | SERVICE=${{ steps.meta.outputs.SERVICE }} VERSION=${{ steps.version.outputs.VERSION }} TAG_VAR=${{ steps.meta.outputs.TAG_VAR }} echo "Deploying $SERVICE:$VERSION" # لاگین به نکسوس برای یوزر deployer echo "$NEXUS_PASS" | sudo docker login ${{ env.REGISTRY }} -u "$NEXUS_USER" --password-stdin sudo sed -i "s|^${TAG_VAR}=.*|${TAG_VAR}=${VERSION}|" /srv/staging/narng-platform/compose/.env cd /srv/staging/narng-platform/compose sudo docker compose pull $SERVICE sudo docker compose up -d --force-recreate --no-deps $SERVICE sudo docker image prune -f env: NEXUS_USER: ${{ secrets.NEXUS_USER }} NEXUS_PASS: ${{ secrets.NEXUS_PASS }}