diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index 208d1541e..7bb8cfc13 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -9,6 +9,7 @@ mod native_operations; use std::path::PathBuf; use clap::Subcommand; +use metadata::NativeToolchainDefinition; use tokio::fs; use ndc_postgres_configuration as configuration; @@ -134,6 +135,18 @@ async fn initialize(with_metadata: bool, context: Context) -> action: metadata::DockerComposeWatchAction::SyncAndRestart, ignore: vec![], }], + native_toolchain_definition: Some(NativeToolchainDefinition { + commands: vec![ + ("start".to_string(), metadata::CommandDefinition::ShellScript { + bash: "#!/usr/bin/env bash\nset -eu -o pipefail\nHASURA_CONFIGURATION_DIRECTORY=\"$HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH\" \"$HASURA_DDN_NATIVE_CONNECTOR_DIR/ndc-postgres\" serve".to_string(), + powershell: "$ErrorActionPreference = \"Stop\"\n$env:HASURA_CONFIGURATION_DIRECTORY=\"$env:HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH\"; & \"$env:HASURA_DDN_NATIVE_CONNECTOR_DIR\\ndc-postgres.exe\" serve".to_string(), + }), + ("update".to_string(), metadata::CommandDefinition::ShellScript { + bash: "#!/usr/bin/env bash\nset -eu -o pipefail\n\"$HASURA_DDN_NATIVE_CONNECTOR_PLUGIN_DIR/hasura-ndc-postgres\" update".to_string(), + powershell: "$ErrorActionPreference = \"Stop\"\n& \"$env:HASURA_DDN_NATIVE_CONNECTOR_PLUGIN_DIR\\hasura-ndc-postgres.exe\" update".to_string(), + }), + ].into_iter().collect(), + }) }; fs::write(metadata_file, serde_yaml::to_string(&metadata)?).await?; diff --git a/crates/cli/src/metadata.rs b/crates/cli/src/metadata.rs index 74d2c8d1c..756df3ff7 100644 --- a/crates/cli/src/metadata.rs +++ b/crates/cli/src/metadata.rs @@ -2,6 +2,8 @@ //! //! See https://github.com/hasura/ndc-hub/blob/main/rfcs/0001-packaging.md#connector-definition. +use std::collections::BTreeMap; + use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize)] @@ -14,6 +16,8 @@ pub struct ConnectorMetadataDefinition { pub cli_plugin: Option, #[serde(skip_serializing_if = "Vec::is_empty")] pub docker_compose_watch: DockerComposeWatch, + #[serde(skip_serializing_if = "Option::is_none")] + pub native_toolchain_definition: Option, } #[derive(Debug, Serialize, Deserialize)] @@ -75,3 +79,23 @@ pub enum DockerComposeWatchAction { #[serde(rename = "sync+restart")] SyncAndRestart, } + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct NativeToolchainDefinition { + pub commands: BTreeMap, +} + +pub type CommandName = String; + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "PascalCase", tag = "type")] +pub enum CommandDefinition { + #[serde(rename_all = "camelCase")] + ShellScript { bash: String, powershell: String }, + #[serde(rename_all = "camelCase")] + DockerizedCommand { + docker_image: String, + command_args: Vec, + }, +} diff --git a/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata.snap b/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata.snap index 1dc499fea..78d7bd254 100644 --- a/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata.snap +++ b/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata.snap @@ -27,3 +27,23 @@ dockerComposeWatch: - path: ./ target: /etc/connector action: sync+restart +nativeToolchainDefinition: + commands: + start: + type: ShellScript + bash: |- + #!/usr/bin/env bash + set -eu -o pipefail + HASURA_CONFIGURATION_DIRECTORY="$HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH" "$HASURA_DDN_NATIVE_CONNECTOR_DIR/ndc-postgres" serve + powershell: |- + $ErrorActionPreference = "Stop" + $env:HASURA_CONFIGURATION_DIRECTORY="$env:HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH"; & "$env:HASURA_DDN_NATIVE_CONNECTOR_DIR\ndc-postgres.exe" serve + update: + type: ShellScript + bash: |- + #!/usr/bin/env bash + set -eu -o pipefail + "$HASURA_DDN_NATIVE_CONNECTOR_PLUGIN_DIR/hasura-ndc-postgres" update + powershell: |- + $ErrorActionPreference = "Stop" + & "$env:HASURA_DDN_NATIVE_CONNECTOR_PLUGIN_DIR\hasura-ndc-postgres.exe" update diff --git a/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata_and_release_version.snap b/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata_and_release_version.snap index 1ee975a94..1420b3ebf 100644 --- a/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata_and_release_version.snap +++ b/crates/cli/tests/snapshots/initialize_tests__initialize_directory_with_metadata_and_release_version.snap @@ -27,3 +27,23 @@ dockerComposeWatch: - path: ./ target: /etc/connector action: sync+restart +nativeToolchainDefinition: + commands: + start: + type: ShellScript + bash: |- + #!/usr/bin/env bash + set -eu -o pipefail + HASURA_CONFIGURATION_DIRECTORY="$HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH" "$HASURA_DDN_NATIVE_CONNECTOR_DIR/ndc-postgres" serve + powershell: |- + $ErrorActionPreference = "Stop" + $env:HASURA_CONFIGURATION_DIRECTORY="$env:HASURA_PLUGIN_CONNECTOR_CONTEXT_PATH"; & "$env:HASURA_DDN_NATIVE_CONNECTOR_DIR\ndc-postgres.exe" serve + update: + type: ShellScript + bash: |- + #!/usr/bin/env bash + set -eu -o pipefail + "$HASURA_DDN_NATIVE_CONNECTOR_PLUGIN_DIR/hasura-ndc-postgres" update + powershell: |- + $ErrorActionPreference = "Stop" + & "$env:HASURA_DDN_NATIVE_CONNECTOR_PLUGIN_DIR\hasura-ndc-postgres.exe" update