diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index d3db03e4..2d8ace2e 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -79,7 +79,7 @@ jobs: sudo apt-get update sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf libssl-dev libxdo-dev unzip protobuf-compiler libprotobuf-dev rpm - name: Build packages - uses: tauri-apps/tauri-action@v0 + uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -117,7 +117,7 @@ jobs: sudo apt-get install -y ruby gem install deb-s3 echo "$(ruby -r rubygems -e 'puts Gem.user_dir')/bin" >> $GITHUB_PATH - - name: Upload DEB to APT repository #Add this to ubuntu 22.04 job (on merge dev -> main) with --codename=bookworm + - name: Upload DEB to APT repository #Add this to ubuntu 22.04 job (on merge dev -> main) with --codename=bookworm run: | COMPONENT=$([[ "${{ github.ref_name }}" == *"-"* ]] && echo "pre-release" || echo "release") # if tag contain "-" assume it's pre-release. @@ -207,7 +207,7 @@ jobs: asset_content_type: application/octet-stream apt-sign: - needs: #Add needs: -ubuntu-22-04-build (on merge dev -> main) + needs: #Add needs: -ubuntu-22-04-build (on merge dev -> main) - build-linux runs-on: - self-hosted @@ -289,9 +289,9 @@ jobs: echo "Updating to version: $VERSION" sed -i "s/^pkgver=.*/pkgver=$VERSION/" PKGBUILD - + AMD64_SHA="${{ needs.build-linux.outputs.deb_sha256_amd64 }}" - + echo "AMD64 DEB SHA256: $AMD64_SHA" sed -i "s/^sha256sums_x86_64=.*/sha256sums_x86_64=('$AMD64_SHA')/" PKGBUILD - name: Update .SRCINFO @@ -361,7 +361,7 @@ jobs: - name: Unlock keychain run: security -v unlock-keychain -p "${{ secrets.KEYCHAIN_PASSWORD }}" /Users/admin/Library/Keychains/login.keychain - name: Build app - uses: tauri-apps/tauri-action@v0 + uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} APPLE_SIGNING_IDENTITY: ${{ env.APPLE_SIGNING_IDENTITY_APPLICATION }} @@ -429,7 +429,7 @@ jobs: run: | Set-Content -Path ".\src-tauri\Cargo.toml" -Value (get-content -Path ".\src-tauri\Cargo.toml" | Select-String -Pattern 'default-run =' -NotMatch) - name: Build packages - uses: tauri-apps/tauri-action@v0 + uses: tauri-apps/tauri-action@v0.5.23 # .24 seems broken, TODO: update when fixed env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload unsigned bundle @@ -468,4 +468,3 @@ jobs: asset_path: defguard-client-signed.msi asset_name: defguard-client_${{ env.VERSION }}_x64_en-US.msi asset_content_type: application/octet-stream - diff --git a/src-tauri/src/service/windows.rs b/src-tauri/src/service/windows.rs index 5efd258f..512c623c 100644 --- a/src-tauri/src/service/windows.rs +++ b/src-tauri/src/service/windows.rs @@ -7,7 +7,7 @@ use std::{ use clap::Parser; use error; -use tokio::{runtime::Runtime, select}; +use tokio::runtime::Runtime; use windows_service::{ define_windows_service, service::{ @@ -108,69 +108,57 @@ fn run_service() -> Result<(), DaemonError> { let service_location_manager = Arc::new(RwLock::new(service_location_manager)); + // Spawn service location management task let service_location_manager_clone = service_location_manager.clone(); runtime.spawn(async move { - let manager = service_location_manager_clone.clone(); + let manager = service_location_manager_clone; - let service_location_task = async move { - info!("Starting service location management task"); + info!("Starting service location management task"); - info!("Attempting to auto-connect to service locations"); - match manager.write().unwrap().connect_to_service_locations() { + info!("Attempting to auto-connect to service locations"); + match manager.write().unwrap().connect_to_service_locations() { + Ok(_) => { + info!("Auto-connect to service locations completed successfully"); + } + Err(e) => { + warn!( + "Error while trying to auto-connect to service locations: {e}. \ + Will continue monitoring for login/logoff events.", + ); + } + } + + info!("Starting login/logoff event monitoring"); + loop { + match watch_for_login_logoff( + manager.clone(), + ).await { Ok(_) => { - info!("Auto-connect to service locations completed successfully"); + warn!("Login/logoff event monitoring ended unexpectedly. Restarting in {LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS:?}..."); + tokio::time::sleep(LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS).await; } Err(e) => { - warn!( - "Error while trying to auto-connect to service locations: {e}. \ - Will continue monitoring for login/logoff events.", + error!( + "Error in login/logoff event monitoring: {e}. Restarting in {LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS:?}...", ); + tokio::time::sleep(LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS).await; + info!("Restarting login/logoff event monitoring"); } } + } - info!("Starting login/logoff event monitoring"); - loop { - match watch_for_login_logoff( - manager.clone(), - ).await { - Ok(_) => { - warn!("Login/logoff event monitoring ended unexpectedly"); - break; - } - Err(e) => { - error!( - "Error in login/logoff event monitoring: {e}. Restarting in {LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS:?} seconds...", - ); - tokio::time::sleep(LOGIN_LOGOFF_MONITORING_RESTART_DELAY_SECS).await; - info!("Restarting login/logoff event monitoring"); - } - } - } - - warn!("Service location management task terminated"); - Ok::<(), ServiceLocationError>(()) - }; - - let server_task = async move { - run_server(config, service_location_manager_clone).await - }; + }); - let result = select! { - result = service_location_task => { - warn!("Service location task completed"); - result.map_err(|e| format!("Service location error: {e}")) - } - result = server_task => { - warn!("Server task completed"); - result.map_err(|e| format!("Server error: {e}")) - } - }; + // Spawn the main gRPC server task + let service_location_manager_clone = service_location_manager.clone(); + runtime.spawn(async move { + let result = run_server(config, service_location_manager_clone).await; let signal = if result.is_err() { - error!("Task ended with error: {:?}", result.err()); + error!("Server task ended with error: {:?}", result.err()); 2 } else { - info!("Task ended without an error."); + warn!("Server task ended without an error."); 1 };