Go Async SDK (clients/go/async/): - Fixed case-sensitive language detection bug (.R for R language) - Created go.mod for module management - Added comprehensive test suite - Created 3 examples with expected output comments - Added README with full documentation Java Sync SDK (clients/java/sync/): - RENAMED: Unsandbox.java -> Un.java (matches naming convention) - Updated class name from Unsandbox to Un - Created pom.xml for Maven build - Added 6 examples (simple + SDK client versions) - Created test suite with JUnit 5 - Added README with API documentation JavaScript Async SDK (clients/javascript/async/): - Fixed unused import - Created package.json with ES module support - Added 5 examples covering all async patterns - Created 71 tests (all passing) - Added comprehensive README PHP Sync SDK (clients/php/sync/): - RENAMED: Unsandbox.php -> un.php (matches naming convention) - Created composer.json with PSR-4 autoloading - Created phpunit.xml for testing - Added 4 examples with expected output comments - Created 54 tests across 4 test files - Added README with full documentation Ruby Sync SDK (clients/ruby/sync/): - Created Gemfile and un.gemspec - Created Rakefile with test task - Updated examples to actually use the SDK - Added 4 examples (hello_world, async_job, language_detection, snapshots) - Created comprehensive test suite with 30+ tests - Added README with documentation Rust Sync SDK (clients/rust/sync/): - Updated Cargo.toml with example declarations - Created 4 examples (hello_world, fibonacci, multi_language, async_polling) - Added comprehensive README with API reference - All dependencies verified correct All SDKs verified: - HMAC-SHA256 authentication implemented - 4-tier credential system (args > env > ~/.unsandbox > ./accounts.csv) - Expected output comments for pipeline validation - Proper error handling - Language detection support
65 lines
1.8 KiB
Go
65 lines
1.8 KiB
Go
/*
|
|
Hello World example for unsandbox Go SDK - Asynchronous Version
|
|
|
|
This example demonstrates basic async execution with the unsandbox SDK.
|
|
Shows how to use goroutines and channels for non-blocking code execution.
|
|
|
|
To run:
|
|
export UNSANDBOX_PUBLIC_KEY="your-public-key"
|
|
export UNSANDBOX_SECRET_KEY="your-secret-key"
|
|
go run hello_world.go
|
|
|
|
Expected output:
|
|
Executing code asynchronously...
|
|
Result status: completed
|
|
Output: Hello from async unsandbox!
|
|
*/
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
|
|
un_async "github.com/unsandbox/un-go-async/src"
|
|
)
|
|
|
|
func main() {
|
|
// The code to execute
|
|
code := `print("Hello from async unsandbox!")`
|
|
|
|
// Resolve credentials from environment
|
|
creds, err := un_async.ResolveCredentials("", "")
|
|
if err != nil {
|
|
log.Printf("Error: UNSANDBOX_PUBLIC_KEY and UNSANDBOX_SECRET_KEY environment variables required")
|
|
log.Printf("Run with: export UNSANDBOX_PUBLIC_KEY=your-key UNSANDBOX_SECRET_KEY=your-key")
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Execute the code asynchronously (returns channel)
|
|
fmt.Println("Executing code asynchronously...")
|
|
resultChan := un_async.ExecuteCode(creds, "python", code)
|
|
|
|
// Wait for result from channel
|
|
result := <-resultChan
|
|
|
|
// Check for errors
|
|
if result.Err != nil {
|
|
log.Fatalf("Execution error: %v", result.Err)
|
|
}
|
|
|
|
// Check status
|
|
if status, ok := result.Data["status"].(string); ok && status == "completed" {
|
|
fmt.Printf("Result status: %s\n", status)
|
|
if stdout, ok := result.Data["stdout"].(string); ok {
|
|
fmt.Printf("Output: %s", stdout)
|
|
}
|
|
if stderr, ok := result.Data["stderr"].(string); ok && stderr != "" {
|
|
fmt.Printf("Errors: %s", stderr)
|
|
}
|
|
} else {
|
|
status := result.Data["status"]
|
|
errMsg := result.Data["error"]
|
|
log.Fatalf("Execution failed with status: %v, error: %v", status, errMsg)
|
|
}
|
|
}
|