diff --git a/.github/workflows/ddn-assets.yaml b/.github/workflows/ddn-assets.yaml deleted file mode 100644 index 30d0220b..00000000 --- a/.github/workflows/ddn-assets.yaml +++ /dev/null @@ -1,57 +0,0 @@ -name: DDN Assets - -on: - push: - branches: - - "main" - -env: - DATA_TAG: data.${{ github.sha }} - DATA_SERVER_TAG: data-server.${{ github.sha }} - DDN_ASSETS_VERSION: v0.2.1 - -jobs: - generate: - runs-on: ubuntu-latest - permissions: - contents: read - packages: write - attestations: write - id-token: write - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push data image - run: | - export NDC_HUB_GIT_REPO_FILE_PATH=$PWD - echo "NDC_HUB_GIT_REPO_FILE_PATH = $NDC_HUB_GIT_REPO_FILE_PATH" - export CONN_HUB_DATA_SERVER_URL="https://storage.googleapis.com/staging-connector-platform-registry/assets" - echo "CONN_HUB_DATA_SERVER_URL = $CONN_HUB_DATA_SERVER_URL" - - pushd docker/data - echo "Downloading ddn-assets" - wget https://github.com/hasura/ddn-assets/releases/download/$DDN_ASSETS_VERSION/ddn-assets - chmod +x ddn-assets - - # TODO: get rid of this after fixing https://github.com/hasura/ddn-assets/issues/7 - mkdir assets - - echo "Running ddn-assets" - ./ddn-assets generate - - docker build -t ghcr.io/hasura/ndc-hub:$DATA_TAG . --push - popd - - - name: Build and push data server image - run: | - pushd docker/server - docker build --build-arg DATA_TAG=$DATA_TAG -t ghcr.io/hasura/ndc-hub:$DATA_SERVER_TAG . --push - popd diff --git a/.github/workflows/validate.yaml b/.github/workflows/validate.yaml new file mode 100644 index 00000000..18fdf4f8 --- /dev/null +++ b/.github/workflows/validate.yaml @@ -0,0 +1,25 @@ +name: Validate + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + contents: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Setup Go + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + + - name: Run Validations + run: | + export NDC_HUB_GIT_REPO_FILE_PATH=$(pwd) + cd registry-automation + go run main.go validate diff --git a/docker/data/Dockerfile b/docker/data/Dockerfile deleted file mode 100644 index 78ffe6ea..00000000 --- a/docker/data/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM scratch - -COPY assets/outputs /assets \ No newline at end of file diff --git a/docker/server/Caddyfile b/docker/server/Caddyfile deleted file mode 100644 index c17ddb16..00000000 --- a/docker/server/Caddyfile +++ /dev/null @@ -1,3 +0,0 @@ -localhost - -file_server \ No newline at end of file diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile deleted file mode 100644 index 58aee4e7..00000000 --- a/docker/server/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -ARG DATA_TAG - -FROM ghcr.io/hasura/ndc-hub:$DATA_TAG as data - -FROM caddy:alpine - -COPY --from=data /assets /srv - -EXPOSE 80 - -CMD ["caddy", "file-server", "--browse", "--root", "/srv"] \ No newline at end of file diff --git a/registry-automation/cmd/validate.go b/registry-automation/cmd/validate.go new file mode 100644 index 00000000..be7ec68c --- /dev/null +++ b/registry-automation/cmd/validate.go @@ -0,0 +1,89 @@ +package cmd + +import ( + "fmt" + "io/fs" + "os" + "path/filepath" + + "github.com/hasura/ndc-hub/registry-automation/pkg/ndchub" + "github.com/hasura/ndc-hub/registry-automation/pkg/validate" + "github.com/spf13/cobra" +) + +var validateCmd = &cobra.Command{ + Use: "validate", + Short: "Validate the contents of ndc-hub", + Run: executeValidateCmd, +} + +func init() { + rootCmd.AddCommand(validateCmd) +} + +func executeValidateCmd(cmd *cobra.Command, args []string) { + ndcHubGitRepoFilePath := os.Getenv("NDC_HUB_GIT_REPO_FILE_PATH") + if ndcHubGitRepoFilePath == "" { + fmt.Println("please set a value for NDC_HUB_GIT_REPO_FILE_PATH env var") + os.Exit(1) + return + } + + registryFolder := filepath.Join(ndcHubGitRepoFilePath, "registry") + _, err := os.Stat(registryFolder) + if err != nil { + fmt.Println("error while finding the registry folder", err) + os.Exit(1) + return + } + if os.IsNotExist(err) { + fmt.Println("registry folder does not exist") + os.Exit(1) + return + } + + type connectorPackaging struct { + filePath string + connectorPackage *ndchub.ConnectorPackaging + } + var connectorPkgs []connectorPackaging + err = filepath.WalkDir(registryFolder, func(path string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + + if filepath.Base(path) == ndchub.ConnectorPackagingJSON { + cp, err := ndchub.GetConnectorPackaging(path) + if err != nil { + return err + } + if cp != nil { + connectorPkgs = append(connectorPkgs, connectorPackaging{filePath: path, connectorPackage: cp}) + } + } + + return nil + }) + if err != nil { + fmt.Println("error while walking the registry folder", err) + os.Exit(1) + return + } + + hasError := false + + fmt.Println("Validating `connector-packaging.json` contents") + for _, cp := range connectorPkgs { + err := validate.ConnectorPackaging(cp.connectorPackage) + if err != nil { + fmt.Println("error validating connector packaging", cp.filePath, err) + hasError = true + } + } + fmt.Println("Completed validating `connector-packaging.json` contents") + + if hasError { + fmt.Println("Exiting with a non-zero error code due to the error(s) in validation") + os.Exit(1) + } +} diff --git a/registry-automation/go.mod b/registry-automation/go.mod index 2c03147d..e45613fd 100644 --- a/registry-automation/go.mod +++ b/registry-automation/go.mod @@ -1,6 +1,8 @@ module github.com/hasura/ndc-hub/registry-automation -go 1.21.4 +go 1.22.0 + +toolchain go1.23.2 require ( github.com/cloudinary/cloudinary-go/v2 v2.8.0 @@ -9,12 +11,14 @@ require ( ) require ( + github.com/Masterminds/semver/v3 v3.3.1 // indirect github.com/creasty/defaults v1.7.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/gorilla/schema v1.4.1 // indirect github.com/matryer/is v1.4.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.5.2 // indirect + golang.org/x/mod v0.22.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/registry-automation/go.sum b/registry-automation/go.sum index f44c7142..ccfd4422 100644 --- a/registry-automation/go.sum +++ b/registry-automation/go.sum @@ -14,6 +14,8 @@ cloud.google.com/go/longrunning v0.5.9/go.mod h1:HD+0l9/OOW0za6UWdKJtXoFAX/BGg/3 cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4= +github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudinary/cloudinary-go/v2 v2.8.0 h1:6o2mL5Obm92Q0TuX6yXfdpXSImbsYVYlOPOnpwjfobo= @@ -121,6 +123,8 @@ golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= +golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= diff --git a/registry-automation/pkg/ndchub/ndchub.go b/registry-automation/pkg/ndchub/ndchub.go new file mode 100644 index 00000000..94e8fd90 --- /dev/null +++ b/registry-automation/pkg/ndchub/ndchub.go @@ -0,0 +1,61 @@ +package ndchub + +import ( + "encoding/json" + "os" + "path/filepath" + "strings" +) + +const ( + MetadataJSON = "metadata.json" + ConnectorPackagingJSON = "connector-packaging.json" +) + +type Checksum struct { + Type string `json:"type"` + Value string `json:"value"` +} + +type Source struct { + Hash string `json:"hash"` +} + +type ConnectorPackaging struct { + Namespace string `json:"-"` + Name string `json:"-"` + + Version string `json:"version"` + URI string `json:"uri"` + Checksum Checksum `json:"checksum"` + Source Source `json:"source"` +} + +func GetConnectorPackaging(path string) (*ConnectorPackaging, error) { + if strings.Contains(path, "aliased_connectors") { + // It should be safe to ignore aliased_connectors + // as their slug is not used in the connector init process + return nil, nil + } + + // path looks like this: /some/folder/ndc-hub/registry/hasura/turso/releases/v0.1.0/connector-packaging.json + versionFolder := filepath.Dir(path) + releasesFolder := filepath.Dir(versionFolder) + connectorFolder := filepath.Dir(releasesFolder) + namespaceFolder := filepath.Dir(connectorFolder) + + connectorPackagingContent, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + var connectorPackaging ConnectorPackaging + err = json.Unmarshal(connectorPackagingContent, &connectorPackaging) + if err != nil { + return nil, err + } + connectorPackaging.Namespace = filepath.Base(namespaceFolder) + connectorPackaging.Name = filepath.Base(connectorFolder) + + return &connectorPackaging, nil +} diff --git a/registry-automation/pkg/validate/connector_packaging.go b/registry-automation/pkg/validate/connector_packaging.go new file mode 100644 index 00000000..988d1335 --- /dev/null +++ b/registry-automation/pkg/validate/connector_packaging.go @@ -0,0 +1,21 @@ +package validate + +import ( + "fmt" + "strings" + + "github.com/hasura/ndc-hub/registry-automation/pkg/ndchub" + "golang.org/x/mod/semver" +) + +func ConnectorPackaging(cp *ndchub.ConnectorPackaging) error { + // validate version field + if !strings.HasPrefix(cp.Version, "v") { + return fmt.Errorf("version must start with 'v': but got %s", cp.Version) + } + if !semver.IsValid(cp.Version) { + return fmt.Errorf("invalid semantic version: %s", cp.Version) + } + + return nil +} diff --git a/registry-automation/pkg/validate/connector_packaging_test.go b/registry-automation/pkg/validate/connector_packaging_test.go new file mode 100644 index 00000000..143a8b05 --- /dev/null +++ b/registry-automation/pkg/validate/connector_packaging_test.go @@ -0,0 +1,39 @@ +package validate + +import ( + "testing" + + "github.com/hasura/ndc-hub/registry-automation/pkg/ndchub" +) + +func TestConnectorPackaging(t *testing.T) { + testCases := []struct { + name string + version string + wantErr bool + }{ + {"Valid version", "v1.0.0", false}, + {"Valid version with pre-release", "v1.0.0-alpha.1", false}, + {"Valid version with build metadata", "v1.0.0+build.1", false}, + {"Missing v prefix", "1.0.0", true}, + {"Empty version", "", true}, + {"Invalid characters", "vabc.1.0", true}, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + cp := &ndchub.ConnectorPackaging{ + Version: tc.version, + } + + err := ConnectorPackaging(cp) + + if tc.wantErr && err == nil { + t.Errorf("ConnectorPackaging() error = nil, wantErr %v", tc.wantErr) + } + if !tc.wantErr && err != nil { + t.Errorf("ConnectorPackaging() error = %v, wantErr %v", err, tc.wantErr) + } + }) + } +} diff --git a/registry/hasura/bigquery/README.md b/registry/hasura/bigquery/README.md index 06b74283..5a13eb62 100644 --- a/registry/hasura/bigquery/README.md +++ b/registry/hasura/bigquery/README.md @@ -43,6 +43,7 @@ Below, you'll find a matrix of all supported features for the BigQuery connector | Naming Conventions | ❌ | | | Default Values | ❌ | | | User-defined Functions | ❌ | | +| Variables | ❌ | | ## Prerequisites @@ -54,7 +55,7 @@ Below, you'll find a matrix of all supported features for the BigQuery connector The steps below explain how to initialize and configure a connector on your local machine (typically for development purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured — -[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector). +[here](https://hasura.io/docs/3.0/deployment/ddn/deploy-a-connector). ## Using the BigQuery connector diff --git a/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json b/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json index 4d10f659..ebf8fcc1 100644 --- a/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json +++ b/registry/hasura/cassandra/releases/v1.0.7/connector-packaging.json @@ -1,5 +1,5 @@ { - "version": "1.0.7", + "version": "v1.0.7", "uri": "https://github.com/hasura/ndc-cassandra/releases/download/v1.0.7/connector-definition.tgz", "checksum": { "type": "sha256", diff --git a/registry/hasura/clickhouse/releases/v1.0.5/connector-packaging.json b/registry/hasura/clickhouse/releases/v1.0.5/connector-packaging.json index 5fd0351d..e73ebcfb 100644 --- a/registry/hasura/clickhouse/releases/v1.0.5/connector-packaging.json +++ b/registry/hasura/clickhouse/releases/v1.0.5/connector-packaging.json @@ -1,5 +1,5 @@ { - "version": "1.0.5", + "version": "v1.0.5", "uri": "https://github.com/hasura/ndc-clickhouse/releases/download/v1.0.5/connector-definition.tgz", "checksum": { "type": "sha256", diff --git a/registry/hasura/duckdb/README.md b/registry/hasura/duckdb/README.md index 00e60f11..4d1a7347 100644 --- a/registry/hasura/duckdb/README.md +++ b/registry/hasura/duckdb/README.md @@ -1,5 +1,4 @@ # Hasura DuckDB Connector - [![Docs](https://img.shields.io/badge/docs-v3.x-brightgreen.svg?style=flat)](https://hasura.io/connectors/duckdb) @@ -7,11 +6,9 @@ [![License](https://img.shields.io/badge/license-Apache--2.0-purple.svg?style=flat)](https://github.com/hasura/ndc-duckdb/blob/main/LICENSE.txt) [![Status](https://img.shields.io/badge/status-alpha-yellow.svg?style=flat)](https://github.com/hasura/ndc-duckdb/blob/main/README.md) -The Hasura DuckDB Connector allows for connecting to a DuckDB database or a MotherDuck hosted DuckDB database to give -you an instant GraphQL API on top of your DuckDB data. +The Hasura DuckDB Connector allows for connecting to a DuckDB database or a MotherDuck hosted DuckDB database to give you an instant GraphQL API on top of your DuckDB data. -This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and -implements the [Data Connector Spec](https://github.com/hasura/ndc-spec). +This connector is built using the [Typescript Data Connector SDK](https://github.com/hasura/ndc-sdk-typescript) and implements the [Data Connector Spec](https://github.com/hasura/ndc-spec). - [See the listing in the Hasura Hub](https://hasura.io/connectors/duckdb) - [Hasura V3 Documentation](https://hasura.io/docs/3.0/index/) @@ -22,74 +19,113 @@ Below, you'll find a matrix of all supported features for the DuckDB connector: | Feature | Supported | Notes | | ------------------------------- | --------- | ----- | -| Native Queries + Logical Models | ❌ | | -| Simple Object Query | ✅ | | -| Filter / Search | ✅ | | -| Simple Aggregation | ❌ | | -| Sort | ✅ | | -| Paginate | ✅ | | -| Table Relationships | ✅ | | -| Views | ❌ | | -| Distinct | ❌ | | -| Remote Relationships | ✅ | | -| Custom Fields | ❌ | | -| Mutations | ❌ | | - -## Prerequisites - -1. Create a [Hasura Cloud account](https://console.hasura.io) -2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and - [Docker](https://docs.docker.com/engine/install/) installed -3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph) -4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph) -5. Have a [MotherDuck](https://motherduck.com/) hosted DuckDB database, or a persitent DuckDB database file — for - supplying data to your API. - -The steps below explain how to initialize and configure a connector on your local machine (typically for development -purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured — -[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector). +| Native Queries + Logical Models | ❌ | | +| Simple Object Query | ✅ | | +| Filter / Search | ✅ | | +| Simple Aggregation | ❌ | | +| Sort | ✅ | | +| Paginate | ✅ | | +| Table Relationships | ✅ | | +| Views | ❌ | | +| Distinct | ❌ | | +| Remote Relationships | ✅ | | +| Custom Fields | ❌ | | +| Mutations | ❌ | | + +## Before you get Started + +1. The [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and [Docker](https://docs.docker.com/engine/install/) installed +2. A [supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph) +3. A [subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph) +4. Have a [MotherDuck](https://motherduck.com/) hosted DuckDB database, or a persitent DuckDB database file — for supplying data to your API. + +The steps below explain how to Initialize and configure a connector for local development. You can learn how to deploy a +connector — after it's been configured — [here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector). ## Using the DuckDB connector -With the [context set](https://hasura.io/docs/3.0/cli/commands/ddn_context_set/) for an existing subgraph, initialize -the connector: +### Step 1: Authenticate your CLI session + +```bash +ddn auth login +``` + +### Step 2: Configure the connector + +Once you have an initialized supergraph and subgraph, run the initialization command in interactive mode while providing a name for the connector in the prompt: + +```bash +ddn connector init duckdb -i +``` + +#### Step 2.1: Choose the `hasura/duckdb` option from the list + +#### Step 2.2: Choose a port for the connector + +The CLI will ask for a specific port to run the connector on. Choose a port that is not already in use or use the default suggested port. + +#### Step 2.3: Provide the env var(s) for the connector + +| Name | Description | +|-|-| +| DUCKDB_URL | The connection string for the DuckDB database, or the file path to the DuckDB database file | -```sh -ddn connector init -i +You'll find the environment variables in the `.env` file and they will be in the format: + +`__` + +Here is an example of what your `.env` file might look like: + +``` +APP_DUCKDB_AUTHORIZATION_HEADER="Bearer SPHZWfL7P3Jdc9mDMF9ZNA==" +APP_DUCKDB_DUCKDB_URL="md:?motherduck_token=ey..." +APP_DUCKDB_HASURA_SERVICE_TOKEN_SECRET="SPHZWfL7P3Jdc9mDMF9ZNA==" +APP_DUCKDB_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://local.hasura.dev:4317" +APP_DUCKDB_OTEL_SERVICE_NAME="app_duckdb" +APP_DUCKDB_READ_URL="http://local.hasura.dev:7525" +APP_DUCKDB_WRITE_URL="http://local.hasura.dev:7525" +``` + +If you are attaching to a local DuckDB file, first make sure that the file is located inside the connector directory. For example, if you had a `data.duckdb` file you could place it at `/app/connector/duckdb/data.duckdb`. Files in the connector directory get mounted to `/etc/connector/`. + +In this instance, you would set the `DUCKDB_URL=/etc/connector/data.duckdb`. Now your `.env` might look like this: + +``` +APP_DUCKDB_AUTHORIZATION_HEADER="Bearer SPHZWfL7P3Jdc9mDMF9ZNA==" +APP_DUCKDB_DUCKDB_URL="/etc/connector/data.duckdb" +APP_DUCKDB_HASURA_SERVICE_TOKEN_SECRET="SPHZWfL7P3Jdc9mDMF9ZNA==" +APP_DUCKDB_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://local.hasura.dev:4317" +APP_DUCKDB_OTEL_SERVICE_NAME="app_duckdb" +APP_DUCKDB_READ_URL="http://local.hasura.dev:7525" +APP_DUCKDB_WRITE_URL="http://local.hasura.dev:7525" ``` -When the wizard runs, you'll be prompted to enter the following env vars necessary for your connector to function: +Your experience mounting files may vary, and while useful to explore a file locally, it's not recommended to attempt to deploy a connector using a locally mounted file. -| Name | Description | -| ---------- | ------------------------------------------------------------------------------------------- | -| DUCKDB_URL | The connection string for the DuckDB database, or the file path to the DuckDB database file | +### Step 3: Introspect the connector -If you are attaching to a local DuckDB file, first make sure that the file is located inside the connector directory. -For example, if you had a `data.duckdb` file you could place it at `/app/connector/duckdb/data.duckdb`. Files in the -connector directory get mounted to `/etc/connector/`. +Introspecting the connector will generate a `config.json` file and a `duckdb.hml` file. -**Your experience mounting files may vary, and while useful to explore a file locally, it's not recommended to attempt -to deploy a connector using a locally mounted file.** +```bash +ddn connector introspect duckdb +``` + +### Step 4: Add your resources -After the CLI initializes the connector, you'll need to: +You can add the models, commands, and relationships to your API by tracking them which generates the HML files. -- [Introspect](https://hasura.io/docs/3.0/cli/commands/ddn_connector_introspect) the source. -- Add your [models](https://hasura.io/docs/3.0/cli/commands/ddn_model_add), - [commands](https://hasura.io/docs/3.0/cli/commands/ddn_command_add), and - [relationships](https://hasura.io/docs/3.0/cli/commands/ddn_relationship_add). -- Create a [new build](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_build_local). -- Test it by [running your project along with the connector](https://hasura.io/docs/3.0/cli/commands/ddn_run#examples). +```bash +ddn connector-link add-resources duckdb +``` ## Documentation -View the full documentation for the DuckDB connector -[here](https://github.com/hasura/ndc-duckdb/blob/main/docs/index.md). +View the full documentation for the DuckDB connector [here](https://github.com/hasura/ndc-duckdb/blob/main/docs/index.md). ## Contributing -Check out our [contributing guide](https://github.com/hasura/ndc-duckdb/blob/main/docs/contributing.md) for more -details. +Check out our [contributing guide](https://github.com/hasura/ndc-duckdb/blob/main/docs/contributing.md) for more details. ## License -The DuckDB connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). +The DuckDB connector is available under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). \ No newline at end of file diff --git a/registry/hasura/duckdb/metadata.json b/registry/hasura/duckdb/metadata.json index 9231638a..3758a1db 100644 --- a/registry/hasura/duckdb/metadata.json +++ b/registry/hasura/duckdb/metadata.json @@ -7,7 +7,7 @@ "tags": [ "database" ], - "latest_version": "v0.1.0" + "latest_version": "v0.1.4" }, "author": { "support_email": "Community Supported", @@ -29,6 +29,21 @@ "tag": "v0.1.0", "hash": "580d059cf6250da21e7fdb9bcfc78f6803c626f5", "is_verified": false + }, + { + "tag": "v0.1.2", + "hash": "97b4ebdc58870ba4aaa6b30f154e8a15ed2b4040", + "is_verified": false + }, + { + "tag": "v0.1.3", + "hash": "77ee12cef21cd4231c3f6a6433d9249da180e59e", + "is_verified": false + }, + { + "tag": "v0.1.4", + "hash": "f9a04ce7a9b30c26f0141bbe23a4d2ee1a3e0d00", + "is_verified": false } ] } diff --git a/registry/hasura/duckdb/releases/v0.1.2/connector-packaging.json b/registry/hasura/duckdb/releases/v0.1.2/connector-packaging.json new file mode 100644 index 00000000..9f9adfb4 --- /dev/null +++ b/registry/hasura/duckdb/releases/v0.1.2/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "v0.1.2", + "uri": "https://github.com/hasura/ndc-duckdb/releases/download/v0.1.2/connector-definition.tgz", + "checksum": { + "type": "sha256", + "value": "93a9dc7200858bb3a1370a879ac0a4766b4e136d9071c28e602d88d3e95ad972" + }, + "source": { + "hash": "97b4ebdc58870ba4aaa6b30f154e8a15ed2b4040" + } + } \ No newline at end of file diff --git a/registry/hasura/duckdb/releases/v0.1.3/connector-packaging.json b/registry/hasura/duckdb/releases/v0.1.3/connector-packaging.json new file mode 100644 index 00000000..c5d519a6 --- /dev/null +++ b/registry/hasura/duckdb/releases/v0.1.3/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "v0.1.3", + "uri": "https://github.com/hasura/ndc-duckdb/releases/download/v0.1.3/connector-definition.tgz", + "checksum": { + "type": "sha256", + "value": "28c88754f42de46154357ace1d97fef4e96ea4c0c6a2d84671a1872e8b27070a" + }, + "source": { + "hash": "77ee12cef21cd4231c3f6a6433d9249da180e59e" + } +} diff --git a/registry/hasura/duckdb/releases/v0.1.4/connector-packaging.json b/registry/hasura/duckdb/releases/v0.1.4/connector-packaging.json new file mode 100644 index 00000000..3f433eed --- /dev/null +++ b/registry/hasura/duckdb/releases/v0.1.4/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "v0.1.4", + "uri": "https://github.com/hasura/ndc-duckdb/releases/download/v0.1.4/connector-definition.tgz", + "checksum": { + "type": "sha256", + "value": "dc238b7180da416f1a51dabf1ecb42fe5e2f7e99e47cfe5eeddf13c7bcaf646b" + }, + "source": { + "hash": "f9a04ce7a9b30c26f0141bbe23a4d2ee1a3e0d00" + } +} diff --git a/registry/hasura/mysql/metadata.json b/registry/hasura/mysql/metadata.json index a7f34a34..08657096 100644 --- a/registry/hasura/mysql/metadata.json +++ b/registry/hasura/mysql/metadata.json @@ -55,6 +55,10 @@ "hash": "72b6f529b79e4fc5e96d49ab76760bd7fd3af063", "is_verified": true }, + { + "tag": "mysql/v1.0.8", + "hash": "1abb4d0a7972fc806c711fd18e0a73b95b023b47" + }, { "tag": "mysql/v1.0.9", "hash": "aea3288551386d8b83500d5316ee1a085c5227b4", diff --git a/registry/hasura/mysql/releases/v1.0.8/connector-packaging.json b/registry/hasura/mysql/releases/v1.0.8/connector-packaging.json new file mode 100644 index 00000000..5286abf2 --- /dev/null +++ b/registry/hasura/mysql/releases/v1.0.8/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "v1.0.8", + "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/mysql%2Fv1.0.8/package.tar.gz", + "checksum": { + "type": "sha256", + "value": "a85e9375b59c65af37d9be5848ee72b991d75a776c8e93abd4c7f6c4583ecbeb" + }, + "source": { + "hash": "1abb4d0a7972fc806c711fd18e0a73b95b023b47" + } +} diff --git a/registry/hasura/oracle/metadata.json b/registry/hasura/oracle/metadata.json index 1b9f90f1..fbd8f714 100644 --- a/registry/hasura/oracle/metadata.json +++ b/registry/hasura/oracle/metadata.json @@ -4,10 +4,8 @@ "description": "Connect to an Oracle database and expose it to Hasura v3 Project", "title": "Oracle Connector", "logo": "logo.svg", - "tags": [ - "database" - ], - "latest_version": "v1.0.5" + "tags": ["database"], + "latest_version": "v1.0.6" }, "author": { "support_email": "support@hasura.io", @@ -82,6 +80,17 @@ "source": { "hash": "ab66004e7a0671cd1af7b84cd930d9c042fadb77" } + }, + { + "version": "v1.0.6", + "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv1.0.6/package.tar.gz", + "checksum": { + "type": "sha256", + "value": "9e360d3e049b8e26315a79559fc1c5ccf3f71ff3021c3e6ea01762da5ff22913" + }, + "source": { + "hash": "1abb4d0a7972fc806c711fd18e0a73b95b023b47" + } } ], "source_code": { @@ -117,6 +126,11 @@ "tag": "oracle/v1.0.5", "hash": "ab66004e7a0671cd1af7b84cd930d9c042fadb77", "is_verified": true + }, + { + "tag": "oracle/v1.0.6", + "hash": "1abb4d0a7972fc806c711fd18e0a73b95b023b47", + "is_verified": true } ] } diff --git a/registry/hasura/oracle/releases/v1.0.6/connector-packaging.json b/registry/hasura/oracle/releases/v1.0.6/connector-packaging.json new file mode 100644 index 00000000..f8584512 --- /dev/null +++ b/registry/hasura/oracle/releases/v1.0.6/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "v1.0.6", + "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/oracle%2Fv1.0.6/package.tar.gz", + "checksum": { + "type": "sha256", + "value": "9e360d3e049b8e26315a79559fc1c5ccf3f71ff3021c3e6ea01762da5ff22913" + }, + "source": { + "hash": "1abb4d0a7972fc806c711fd18e0a73b95b023b47" + } +} diff --git a/registry/hasura/postgres/README.md b/registry/hasura/postgres/README.md index ceb7944d..5e21dddb 100644 --- a/registry/hasura/postgres/README.md +++ b/registry/hasura/postgres/README.md @@ -16,7 +16,7 @@ The connector is hosted by Hasura and can be used from the [Hasura v3 Console](h ## Usage -The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/connectors/deployment). +The Hasura PostgreSQL connector can be deployed using the [Hasura CLI](https://hasura.io/docs/3.0/cli/overview) by following either the [Quick Start Guide](https://hasura.io/docs/3.0/getting-started/overview/) or [deploying the connector](https://hasura.io/docs/3.0/deployment/ddn/deploy-a-connector?db=PostgreSQL). ## Troubleshooting diff --git a/registry/hasura/postgres/releases/v1.2.0/connector-packaging.json b/registry/hasura/postgres/releases/v1.2.0/connector-packaging.json index 33b8bb6f..59e6b858 100644 --- a/registry/hasura/postgres/releases/v1.2.0/connector-packaging.json +++ b/registry/hasura/postgres/releases/v1.2.0/connector-packaging.json @@ -1,5 +1,5 @@ { - "version": "1.2.0", + "version": "v1.2.0", "uri": "https://github.com/hasura/ndc-postgres/releases/download/v1.2.0/package.tar.gz", "checksum": { "type": "sha256", diff --git a/registry/hasura/snowflake/releases/v1.0.4/connector-packaging.json b/registry/hasura/snowflake/releases/v1.0.4/connector-packaging.json new file mode 100644 index 00000000..e27a688a --- /dev/null +++ b/registry/hasura/snowflake/releases/v1.0.4/connector-packaging.json @@ -0,0 +1,11 @@ +{ + "version": "v1.0.4", + "uri": "https://github.com/hasura/ndc-jvm-mono/releases/download/snowflake%2Fv1.0.4/package.tar.gz", + "checksum": { + "type": "sha256", + "value": "51f8b5339d89959b7be427f0016454c3b5fd8f7563ada738e38d6d2f5fbfdebb" + }, + "source": { + "hash": "5cd7850ffd963c85bf7c99826f8dca4fe00422ab" + } +} diff --git a/registry/hasura/sqlserver/README.md b/registry/hasura/sqlserver/README.md index a091b41a..e9878295 100644 --- a/registry/hasura/sqlserver/README.md +++ b/registry/hasura/sqlserver/README.md @@ -50,12 +50,11 @@ Below, you'll find a matrix of all supported features for the SQL Server connect 1. Create a [Hasura Cloud account](https://console.hasura.io) 2. Please ensure you have the [DDN CLI](https://hasura.io/docs/3.0/cli/installation) and [Docker](https://docs.docker.com/engine/install/) installed -3. [Create a supergraph](https://hasura.io/docs/3.0/getting-started/init-supergraph) -4. [Create a subgraph](https://hasura.io/docs/3.0/getting-started/init-subgraph) +3. [Create a supergraph](https://hasura.io/docs/3.0/cli/commands/ddn_supergraph_init) The steps below explain how to initialize and configure a connector on your local machine (typically for development purposes).You can learn how to deploy a connector to Hasura DDN — after it's been configured — -[here](https://hasura.io/docs/3.0/getting-started/deployment/deploy-a-connector). +[here](https://hasura.io/docs/3.0/deployment/ddn/deploy-a-connector). ## Using the SQLServer connector