feat: Add CI/CD workflows for testing and publishing SAL crates
Some checks failed
Test Publishing Setup / Test Publishing Setup (pull_request) Has been cancelled

- Add a workflow for testing the publishing setup
- Add a workflow for publishing SAL crates to crates.io
- Improve crate metadata and version management
- Add optional dependencies for modularity
- Improve documentation for publishing and usage
This commit is contained in:
Mahmoud-Emad
2025-07-01 08:34:20 +03:00
parent 52f2f7e3c4
commit e01b83f12a
29 changed files with 2823 additions and 35 deletions

View File

@@ -0,0 +1,152 @@
#!/usr/bin/env rhai
// Test 1: Namespace Operations
// This test covers namespace creation, existence checking, and listing
// Helper function to generate timestamp for unique names
fn timestamp() {
let now = 1640995200; // Base timestamp
let random = (now % 1000000).to_string();
random
}
print("=== Kubernetes Namespace Operations Test ===");
print("");
// Test namespace creation and existence checking
print("Test 1: Namespace Creation and Existence");
print("----------------------------------------");
// Create a test namespace
let test_namespace = "sal-test-ns-" + timestamp();
print("Creating test namespace: " + test_namespace);
try {
let km = kubernetes_manager_new("default");
// Check if namespace exists before creation
let exists_before = km.namespace_exists(test_namespace);
print("Namespace exists before creation: " + exists_before);
if exists_before {
print("⚠️ Namespace already exists, this is unexpected");
} else {
print("✅ Namespace doesn't exist yet (expected)");
}
// Create the namespace
print("Creating namespace...");
km.create_namespace(test_namespace);
print("✅ Namespace created successfully");
// Check if namespace exists after creation
let exists_after = km.namespace_exists(test_namespace);
print("Namespace exists after creation: " + exists_after);
if exists_after {
print("✅ Namespace exists after creation (expected)");
} else {
print("❌ Namespace doesn't exist after creation (unexpected)");
throw "Namespace creation verification failed";
}
// Test idempotent creation (should not error)
print("Testing idempotent creation...");
km.create_namespace(test_namespace);
print("✅ Idempotent creation successful");
} catch (error) {
print("❌ Namespace creation test failed: " + error);
throw error;
}
print("");
// Test namespace listing
print("Test 2: Namespace Listing");
print("-------------------------");
try {
let km = kubernetes_manager_new("default");
// List all namespaces
let namespaces = km.namespaces_list();
print("Found " + namespaces.len() + " namespaces");
if namespaces.len() == 0 {
print("⚠️ No namespaces found, this might indicate a connection issue");
} else {
print("✅ Successfully retrieved namespace list");
// Check if our test namespace is in the list
let found_test_ns = false;
for ns in namespaces {
if ns.name == test_namespace {
found_test_ns = true;
break;
}
}
if found_test_ns {
print("✅ Test namespace found in namespace list");
} else {
print("⚠️ Test namespace not found in list (might be propagation delay)");
}
}
} catch (error) {
print("❌ Namespace listing test failed: " + error);
throw error;
}
print("");
// Test namespace manager creation
print("Test 3: Namespace Manager Creation");
print("----------------------------------");
try {
// Create manager for our test namespace
let test_km = kubernetes_manager_new(test_namespace);
// Verify the manager's namespace
let manager_namespace = namespace(test_km);
print("Manager namespace: " + manager_namespace);
if manager_namespace == test_namespace {
print("✅ Manager created for correct namespace");
} else {
print("❌ Manager namespace mismatch");
throw "Manager namespace verification failed";
}
} catch (error) {
print("❌ Namespace manager creation test failed: " + error);
throw error;
}
print("");
// Cleanup
print("Test 4: Namespace Cleanup");
print("-------------------------");
try {
let km = kubernetes_manager_new("default");
// Delete the test namespace
print("Deleting test namespace: " + test_namespace);
km.delete_namespace(test_namespace);
print("✅ Namespace deletion initiated");
// Note: Namespace deletion is asynchronous, so we don't immediately check existence
print(" Namespace deletion is asynchronous and may take time to complete");
} catch (error) {
print("❌ Namespace cleanup failed: " + error);
// Don't throw here as this is cleanup
}
print("");
print("=== Namespace Operations Test Complete ===");
print("✅ All namespace operation tests passed");