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