97 lines
4.7 KiB
SQL
97 lines
4.7 KiB
SQL
-- Migration: Unify Runtimes (Remove runtime_type distinction)
|
|
-- Description: Removes the runtime_type field and consolidates sensor/action runtimes
|
|
-- into a single unified runtime system. Both sensors and actions use the
|
|
-- same binaries and verification logic, so the distinction is redundant.
|
|
-- Runtime metadata is now loaded from YAML files in packs/core/runtimes/
|
|
-- Version: 20260203000001
|
|
|
|
-- ============================================================================
|
|
-- STEP 1: Drop constraints that prevent unified runtime format
|
|
-- ============================================================================
|
|
|
|
-- Drop NOT NULL constraint from runtime_type to allow migration
|
|
ALTER TABLE runtime ALTER COLUMN runtime_type DROP NOT NULL;
|
|
|
|
-- Drop the runtime_ref_format constraint (expects pack.type.name, we want pack.name)
|
|
ALTER TABLE runtime DROP CONSTRAINT IF EXISTS runtime_ref_format;
|
|
|
|
-- Drop the runtime_ref_lowercase constraint (will recreate after migration)
|
|
ALTER TABLE runtime DROP CONSTRAINT IF EXISTS runtime_ref_lowercase;
|
|
|
|
-- ============================================================================
|
|
-- STEP 2: Drop runtime_type column and related objects
|
|
-- ============================================================================
|
|
|
|
-- Drop indexes that reference runtime_type
|
|
DROP INDEX IF EXISTS idx_runtime_type;
|
|
DROP INDEX IF EXISTS idx_runtime_pack_type;
|
|
DROP INDEX IF EXISTS idx_runtime_type_created;
|
|
DROP INDEX IF EXISTS idx_runtime_type_sensor;
|
|
|
|
-- Drop the runtime_type column
|
|
ALTER TABLE runtime DROP COLUMN IF EXISTS runtime_type;
|
|
|
|
-- Drop the enum type
|
|
DROP TYPE IF EXISTS runtime_type_enum;
|
|
|
|
-- ============================================================================
|
|
-- STEP 3: Clean up old runtime records (data will be reloaded from YAML)
|
|
-- ============================================================================
|
|
|
|
-- Remove all existing runtime records - they will be reloaded from YAML files
|
|
TRUNCATE TABLE runtime CASCADE;
|
|
|
|
-- ============================================================================
|
|
-- STEP 4: Update comments and create new indexes
|
|
-- ============================================================================
|
|
|
|
COMMENT ON TABLE runtime IS 'Runtime environments for executing actions and sensors (unified)';
|
|
COMMENT ON COLUMN runtime.ref IS 'Unique runtime reference (format: pack.name, e.g., core.python)';
|
|
COMMENT ON COLUMN runtime.name IS 'Runtime name (e.g., "Python", "Node.js", "Shell")';
|
|
COMMENT ON COLUMN runtime.distributions IS 'Runtime distribution metadata including verification commands, version requirements, and capabilities';
|
|
COMMENT ON COLUMN runtime.installation IS 'Installation requirements and instructions including package managers and setup steps';
|
|
|
|
-- Create new indexes for efficient queries
|
|
CREATE INDEX IF NOT EXISTS idx_runtime_name ON runtime(name);
|
|
CREATE INDEX IF NOT EXISTS idx_runtime_verification ON runtime USING gin ((distributions->'verification'));
|
|
|
|
-- ============================================================================
|
|
-- VERIFICATION METADATA STRUCTURE DOCUMENTATION
|
|
-- ============================================================================
|
|
|
|
COMMENT ON COLUMN runtime.distributions IS 'Runtime verification and capability metadata. Structure:
|
|
{
|
|
"verification": {
|
|
"commands": [ // Array of verification commands (in priority order)
|
|
{
|
|
"binary": "python3", // Binary name to execute
|
|
"args": ["--version"], // Arguments to pass
|
|
"exit_code": 0, // Expected exit code
|
|
"pattern": "Python 3\\.", // Optional regex pattern to match in output
|
|
"priority": 1, // Lower = higher priority
|
|
"optional": false // If true, failure is non-fatal
|
|
}
|
|
],
|
|
"always_available": false, // If true, skip verification (shell, native)
|
|
"check_required": true // If false, assume available without checking
|
|
},
|
|
"min_version": "3.8", // Minimum supported version
|
|
"recommended_version": "3.11" // Recommended version
|
|
}';
|
|
|
|
-- ============================================================================
|
|
-- SUMMARY
|
|
-- ============================================================================
|
|
|
|
-- Runtime records are now loaded from YAML files in packs/core/runtimes/:
|
|
-- 1. python.yaml - Python 3 runtime (unified)
|
|
-- 2. nodejs.yaml - Node.js runtime (unified)
|
|
-- 3. shell.yaml - Shell runtime (unified)
|
|
-- 4. native.yaml - Native runtime (unified)
|
|
-- 5. sensor_builtin.yaml - Built-in sensor runtime (sensor-specific timers, etc.)
|
|
|
|
DO $$
|
|
BEGIN
|
|
RAISE NOTICE 'Runtime unification complete. Runtime records will be loaded from YAML files.';
|
|
END $$;
|