name: Deploy to IIS on: workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest env: LOCAL_PUBLISH: ${{ github.workspace }}/publish MOUNT_POINT: /mnt/iis-deploy SHARE: //10.0.0.148/wwwroot TARGET_SUBDIR: approval_route steps: - name: Checkout uses: actions/checkout@v4 - name: Setup .NET uses: actions/setup-dotnet@v4 with: dotnet-version: '10.0.x' - name: Restore run: dotnet restore backend/Tnsu.ApprovalRoute.sln - name: Publish (local) run: dotnet publish backend/src/Tnsu.ApprovalRoute.Api/Tnsu.ApprovalRoute.Api.csproj -c Release -o "$LOCAL_PUBLISH" - name: Install cifs-utils run: | if command -v mount.cifs >/dev/null 2>&1 && command -v rsync >/dev/null 2>&1; then echo "cifs-utils and rsync already installed, skipping apt-get" else sudo apt-get update && sudo apt-get install -y cifs-utils rsync fi - name: Mount IIS share env: DEPLOY_CREDS_B64: ${{ secrets.DEPLOY_CREDS_B64 }} run: | echo "$DEPLOY_CREDS_B64" | base64 -d > /tmp/creds chmod 600 /tmp/creds echo "Credentials file created" sudo mkdir -p "$MOUNT_POINT" sudo mount -t cifs "$SHARE" "$MOUNT_POINT" \ -o credentials=/tmp/creds,vers=3.0,sec=ntlmssp,uid=$(id -u),gid=$(id -g),file_mode=0777,dir_mode=0777 - name: Take site offline run: | sudo mkdir -p "$MOUNT_POINT/$TARGET_SUBDIR" echo "

Deploying, please wait...

" > "$MOUNT_POINT/$TARGET_SUBDIR/app_offline.htm" sleep 20 - name: Sync files to IIS run: | rsync -a --delete \ --exclude 'app_offline.htm' \ --exclude 'logs/' \ --exclude 'inventory/' \ "$LOCAL_PUBLISH/" "$MOUNT_POINT/$TARGET_SUBDIR/" - name: Bring site online if: always() run: | rm -f "$MOUNT_POINT/$TARGET_SUBDIR/app_offline.htm" || true - name: Unmount share if: always() run: | sudo umount "$MOUNT_POINT" || true - name: Final check if: always() run: | echo "=== FINAL ===" exit 0