feature/kubernetes-management #70

Merged
sarman merged 4 commits from feature/kubernetes-management into master 2026-06-06 17:28:29 +00:00
5 changed files with 17 additions and 25 deletions

View File

@ -134,14 +134,17 @@ jobs:
exit 1 exit 1
fi fi
git-cliff --config cliff.toml --output CHANGELOG.md # Generate changelog for current tag only
PREV_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \ PREV_TAG=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' \
| grep -v "^${CURRENT_TAG}$" | head -1 || echo "") | grep -v "^${CURRENT_TAG}$" | head -1 || echo "")
if [ -n "$PREV_TAG" ]; then if [ -n "$PREV_TAG" ]; then
git-cliff --config cliff.toml --tag "$CURRENT_TAG" --strip all > /tmp/release_body.md || true git-cliff --config cliff.toml --tag "$CURRENT_TAG" --strip all > /tmp/release_body.md || true
# Generate full CHANGELOG.md from all tags
git-cliff --config cliff.toml --output CHANGELOG.md
else else
echo "No previous tag found, generating from git commits" echo "No previous tag found, generating from git commits"
git log --pretty=format:"- %s" > /tmp/release_body.md || true git log --pretty=format:"- %s" > /tmp/release_body.md || true
git-cliff --config cliff.toml --output CHANGELOG.md
fi fi
echo "=== Release body preview ===" echo "=== Release body preview ==="
cat /tmp/release_body.md cat /tmp/release_body.md

View File

@ -337,7 +337,9 @@ pub async fn initiate_oauth(
pending_approvals, pending_approvals,
clusters: Arc::new(tokio::sync::Mutex::new(std::collections::HashMap::new())), clusters: Arc::new(tokio::sync::Mutex::new(std::collections::HashMap::new())),
port_forwards: Arc::new(tokio::sync::Mutex::new(std::collections::HashMap::new())), port_forwards: Arc::new(tokio::sync::Mutex::new(std::collections::HashMap::new())),
refresh_registry: Arc::new(tokio::sync::Mutex::new(crate::kube::RefreshRegistry::new())), refresh_registry: Arc::new(tokio::sync::Mutex::new(
crate::kube::RefreshRegistry::new(),
)),
}; };
while let Some(callback) = callback_rx.recv().await { while let Some(callback) = callback_rx.recv().await {
tracing::info!("Received OAuth callback for state: {}", callback.state); tracing::info!("Received OAuth callback for state: {}", callback.state);

View File

@ -61,12 +61,9 @@ pub async fn add_cluster(
} }
#[tauri::command] #[tauri::command]
pub async fn remove_cluster( pub async fn remove_cluster(id: String, state: State<'_, AppState>) -> Result<(), String> {
id: String,
state: State<'_, AppState>,
) -> Result<(), String> {
let mut clusters = state.clusters.lock().await; let mut clusters = state.clusters.lock().await;
if clusters.remove(&id).is_none() { if clusters.remove(&id).is_none() {
return Err(format!("Cluster {id} not found")); return Err(format!("Cluster {id} not found"));
} }
@ -75,11 +72,9 @@ pub async fn remove_cluster(
} }
#[tauri::command] #[tauri::command]
pub async fn list_clusters( pub async fn list_clusters(state: State<'_, AppState>) -> Result<Vec<ClusterInfo>, String> {
state: State<'_, AppState>,
) -> Result<Vec<ClusterInfo>, String> {
let clusters = state.clusters.lock().await; let clusters = state.clusters.lock().await;
let cluster_list: Vec<ClusterInfo> = clusters let cluster_list: Vec<ClusterInfo> = clusters
.values() .values()
.map(|c| ClusterInfo { .map(|c| ClusterInfo {
@ -99,7 +94,7 @@ pub async fn start_port_forward(
state: State<'_, AppState>, state: State<'_, AppState>,
) -> Result<PortForwardResponse, String> { ) -> Result<PortForwardResponse, String> {
let session_id = uuid::Uuid::now_v7().to_string(); let session_id = uuid::Uuid::now_v7().to_string();
let session = crate::kube::PortForwardSession::new( let session = crate::kube::PortForwardSession::new(
session_id.clone(), session_id.clone(),
request.cluster_id.clone(), request.cluster_id.clone(),
@ -127,12 +122,9 @@ pub async fn start_port_forward(
} }
#[tauri::command] #[tauri::command]
pub async fn stop_port_forward( pub async fn stop_port_forward(id: String, state: State<'_, AppState>) -> Result<(), String> {
id: String,
state: State<'_, AppState>,
) -> Result<(), String> {
let mut port_forwards = state.port_forwards.lock().await; let mut port_forwards = state.port_forwards.lock().await;
if let Some(session) = port_forwards.get_mut(&id) { if let Some(session) = port_forwards.get_mut(&id) {
session.stop(); session.stop();
Ok(()) Ok(())
@ -146,7 +138,7 @@ pub async fn list_port_forwards(
state: State<'_, AppState>, state: State<'_, AppState>,
) -> Result<Vec<PortForwardResponse>, String> { ) -> Result<Vec<PortForwardResponse>, String> {
let port_forwards = state.port_forwards.lock().await; let port_forwards = state.port_forwards.lock().await;
let forwards: Vec<PortForwardResponse> = port_forwards let forwards: Vec<PortForwardResponse> = port_forwards
.values() .values()
.map(|s| PortForwardResponse { .map(|s| PortForwardResponse {

View File

@ -6,12 +6,7 @@ pub struct ClusterClient {
} }
impl ClusterClient { impl ClusterClient {
pub fn new( pub fn new(id: String, name: String, context: String, server_url: String) -> Self {
id: String,
name: String,
context: String,
server_url: String,
) -> Self {
Self { Self {
id, id,
name, name,

View File

@ -1,6 +1,6 @@
use std::collections::HashMap; use std::collections::HashMap;
use tokio::sync::RwLock;
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::RwLock;
pub struct RefreshRegistry { pub struct RefreshRegistry {
domains: HashMap<String, Domain>, domains: HashMap<String, Domain>,