From deb1bb3dd352229579087581321ac509bbe182cd Mon Sep 17 00:00:00 2001
From: Kunal-kankriya <127090035+Kunal-kankriya@users.noreply.github.com>
Date: Tue, 16 Jan 2024 14:09:34 +0530
Subject: [PATCH 01/13] tests(navigation): Do not skip "type" filter tests
(#9630)
---
.../cypress/cypress/e2e/search/query_and_filter_search.js | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/smoke-test/tests/cypress/cypress/e2e/search/query_and_filter_search.js b/smoke-test/tests/cypress/cypress/e2e/search/query_and_filter_search.js
index a0bd4de2b8ed7b..4306ecfbcec283 100644
--- a/smoke-test/tests/cypress/cypress/e2e/search/query_and_filter_search.js
+++ b/smoke-test/tests/cypress/cypress/e2e/search/query_and_filter_search.js
@@ -33,7 +33,7 @@ describe("auto-complete dropdown, filter plus query search test", () => {
cy.visit('/');
});
- it.skip("Verify the 'filter by type' section + query", () => {
+ it("Verify the 'filter by type' section + query", () => {
//Dashboard
searchToExecute("*");
@@ -48,8 +48,7 @@ describe("auto-complete dropdown, filter plus query search test", () => {
//Piplines
searchToExecute("*");
selectFilteredEntity("Type", "Pipelines", "filter__entityType");
- clickAndVerifyEntity('Pipeline');
-
+ clickAndVerifyEntity('Pipeline');
});
it("Verify the 'filter by Glossary term' section + query", () => {
@@ -58,7 +57,6 @@ describe("auto-complete dropdown, filter plus query search test", () => {
searchToExecute("*");
selectFilteredEntity("Type", "Glossary Terms", "filter__entityType");
clickAndVerifyEntity('Glossary Term')
-
});
it("Verify the 'filter by platform' section + query", () => {
From d69ed9a321114a19949f89788174f1edaae6b539 Mon Sep 17 00:00:00 2001
From: Harshal Sheth
Date: Tue, 16 Jan 2024 04:34:13 -0500
Subject: [PATCH 02/13] feat(ingest/dbt): speed up dbt CLL (#9617)
---
.../src/datahub/ingestion/source/dbt/dbt_common.py | 1 +
.../src/datahub/utilities/sqlglot_lineage.py | 11 ++++++++---
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/metadata-ingestion/src/datahub/ingestion/source/dbt/dbt_common.py b/metadata-ingestion/src/datahub/ingestion/source/dbt/dbt_common.py
index 7bec07b40c4bdf..75fba6e9d426bf 100644
--- a/metadata-ingestion/src/datahub/ingestion/source/dbt/dbt_common.py
+++ b/metadata-ingestion/src/datahub/ingestion/source/dbt/dbt_common.py
@@ -902,6 +902,7 @@ def _infer_schemas_and_update_cll(self, all_nodes_map: Dict[str, DBTNode]) -> No
),
):
node = all_nodes_map[dbt_name]
+ logger.debug(f"Processing CLL/schemas for {node.dbt_name}")
target_node_urn = None
should_fetch_target_node_schema = False
diff --git a/metadata-ingestion/src/datahub/utilities/sqlglot_lineage.py b/metadata-ingestion/src/datahub/utilities/sqlglot_lineage.py
index 0f84871d6c96ac..46ca17609f3ea7 100644
--- a/metadata-ingestion/src/datahub/utilities/sqlglot_lineage.py
+++ b/metadata-ingestion/src/datahub/utilities/sqlglot_lineage.py
@@ -51,9 +51,14 @@
RULES_BEFORE_TYPE_ANNOTATION: tuple = tuple(
filter(
- # Skip pushdown_predicates because it sometimes throws exceptions, and we
- # don't actually need it for anything.
- lambda func: func.__name__ not in {"pushdown_predicates"},
+ lambda func: func.__name__
+ not in {
+ # Skip pushdown_predicates because it sometimes throws exceptions, and we
+ # don't actually need it for anything.
+ "pushdown_predicates",
+ # Skip normalize because it can sometimes be expensive.
+ "normalize",
+ },
itertools.takewhile(
lambda func: func != sqlglot.optimizer.annotate_types.annotate_types,
sqlglot.optimizer.optimizer.RULES,
From dc253571abdbdab189c5395ffebcf7b255ec49fa Mon Sep 17 00:00:00 2001
From: Kunal-kankriya <127090035+Kunal-kankriya@users.noreply.github.com>
Date: Tue, 16 Jan 2024 17:15:06 +0530
Subject: [PATCH 03/13] test(post): add Homepage Post smoke tests (#9620)
---
.../cypress/e2e/settings/homePagePost.js | 65 +++++++++++++++++++
.../tests/cypress/cypress/support/commands.js | 5 ++
2 files changed, 70 insertions(+)
create mode 100644 smoke-test/tests/cypress/cypress/e2e/settings/homePagePost.js
diff --git a/smoke-test/tests/cypress/cypress/e2e/settings/homePagePost.js b/smoke-test/tests/cypress/cypress/e2e/settings/homePagePost.js
new file mode 100644
index 00000000000000..cb67efe00b4841
--- /dev/null
+++ b/smoke-test/tests/cypress/cypress/e2e/settings/homePagePost.js
@@ -0,0 +1,65 @@
+const title = 'Test Link Title'
+const url = 'https://www.example.com'
+const imagesURL = 'https://www.example.com/images/example-image.jpg'
+
+const homePageRedirection = () => {
+ cy.visit('/')
+ cy.waitTextPresent("Welcome back,")
+}
+
+const addAnnouncement = () => {
+ cy.get('[id="posts-create-post"]').click({ force: true });
+ cy.waitTextPresent('Create new Post')
+ cy.enterTextInTestId("create-post-title", "Test Announcement Title");
+ cy.get('[id="description"]').type("Add Description to post announcement")
+ cy.get('[data-testid="create-post-button"]').click({ force: true });
+ cy.reload()
+ homePageRedirection();
+ cy.waitTextPresent("Test Announcement Title");
+}
+
+const addLink = (title,url,imagesURL) => {
+ cy.get('[id="posts-create-post"]').click({ force: true });
+ cy.waitTextPresent('Create new Post')
+ cy.clickOptionWithText('Link');
+ cy.enterTextInTestId('create-post-title', title);
+ cy.enterTextInTestId('create-post-link', url);
+ cy.enterTextInTestId('create-post-media-location', imagesURL)
+ cy.get('[data-testid="create-post-button"]').click({ force: true });
+ cy.reload()
+ homePageRedirection();
+ cy.waitTextPresent(title)
+}
+
+const deleteFromPostDropdown = () => {
+ cy.get('[aria-label="more"]').first().click()
+ cy.clickOptionWithText("Delete");
+ cy.clickOptionWithText("Yes");
+ cy.reload()
+ homePageRedirection();
+}
+
+describe("Create announcement and link posts", () => {
+ beforeEach(() => {
+ cy.loginWithCredentials();
+ cy.goToHomePagePostSettings();
+ });
+
+ it("Create and Verify Announcement Post", () => {
+ addAnnouncement();
+ })
+
+ it("Delete and Verify Announcement Post", () => {
+ deleteFromPostDropdown();
+ cy.ensureTextNotPresent("Test Announcement Title")
+ })
+
+ it("Create and Verify Link Post", () => {
+ addLink(title,url,imagesURL)
+ })
+
+ it("Delete and Verify Link Post", () => {
+ deleteFromPostDropdown();
+ cy.ensureTextNotPresent(title);
+ })
+})
\ No newline at end of file
diff --git a/smoke-test/tests/cypress/cypress/support/commands.js b/smoke-test/tests/cypress/cypress/support/commands.js
index e29e4b383ad895..ba5600b79f5f65 100644
--- a/smoke-test/tests/cypress/cypress/support/commands.js
+++ b/smoke-test/tests/cypress/cypress/support/commands.js
@@ -84,6 +84,11 @@ Cypress.Commands.add("goToOwnershipTypesSettings", () => {
cy.waitTextVisible("Manage Ownership");
});
+Cypress.Commands.add("goToHomePagePostSettings", () => {
+ cy.visit("/settings/posts");
+ cy.waitTextVisible("Home Page Posts");
+});
+
Cypress.Commands.add("goToAccessTokenSettings", () => {
cy.visit("/settings/tokens");
cy.waitTextVisible("Manage Access Tokens");
From 261fcb06bf040be9a61ee068867a55e1e2a3d502 Mon Sep 17 00:00:00 2001
From: Aseem Bansal
Date: Tue, 16 Jan 2024 17:44:21 +0530
Subject: [PATCH 04/13] feat(graphql): generate ToString method (#9634)
---
datahub-graphql-core/build.gradle | 1 +
1 file changed, 1 insertion(+)
diff --git a/datahub-graphql-core/build.gradle b/datahub-graphql-core/build.gradle
index 6e8cb939669226..3d5a961d6f7c7e 100644
--- a/datahub-graphql-core/build.gradle
+++ b/datahub-graphql-core/build.gradle
@@ -45,6 +45,7 @@ graphqlCodegen {
]
outputDir = new File("$projectDir/src/mainGeneratedGraphQL/java")
packageName = "com.linkedin.datahub.graphql.generated"
+ generateToString = true
generateApis = true
generateParameterizedFieldsResolvers = false
modelValidationAnnotation = "@javax.annotation.Nonnull"
From bcaa0caba2d017002b10bb48be1b8a110755e608 Mon Sep 17 00:00:00 2001
From: Davi Arnaut
Date: Tue, 16 Jan 2024 10:47:58 -0800
Subject: [PATCH 05/13] fix(internal schema): changes to make internal schema
registry more compatible with other schema registries (#9636)
---
.../registry/SchemaRegistryController.java | 50 ++++++++++++++++---
1 file changed, 44 insertions(+), 6 deletions(-)
diff --git a/metadata-service/schema-registry-servlet/src/main/java/io/datahubproject/openapi/schema/registry/SchemaRegistryController.java b/metadata-service/schema-registry-servlet/src/main/java/io/datahubproject/openapi/schema/registry/SchemaRegistryController.java
index 8b3eb40dc3203f..f4228e0d63633a 100644
--- a/metadata-service/schema-registry-servlet/src/main/java/io/datahubproject/openapi/schema/registry/SchemaRegistryController.java
+++ b/metadata-service/schema-registry-servlet/src/main/java/io/datahubproject/openapi/schema/registry/SchemaRegistryController.java
@@ -1,6 +1,7 @@
package io.datahubproject.openapi.schema.registry;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableSet;
import com.linkedin.gms.factory.kafka.schemaregistry.InternalSchemaRegistryFactory;
import com.linkedin.metadata.registry.SchemaRegistryService;
import io.datahubproject.schema_registry.openapi.generated.CompatibilityCheckResponse;
@@ -23,9 +24,11 @@
import io.swagger.api.V1Api;
import io.swagger.v3.oas.annotations.Operation;
import jakarta.servlet.http.HttpServletRequest;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Set;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -57,6 +60,8 @@ public class SchemaRegistryController
private final HttpServletRequest request;
+ private static final Set SCHEMA_VERSIONS = ImmutableSet.of("1", "latest");
+
@Qualifier("schemaRegistryService")
private final SchemaRegistryService _schemaRegistryService;
@@ -109,8 +114,30 @@ public ResponseEntity> getReferencedBy(String subject, String vers
@Override
public ResponseEntity getSchemaByVersion(
String subject, String version, Boolean deleted) {
- log.error("[SubjectsApi] getSchemaByVersion method not implemented");
- return SubjectsApi.super.getSchemaByVersion(subject, version, deleted);
+ final String topicName = subject.replaceFirst("-value", "");
+
+ if (!SCHEMA_VERSIONS.contains(version)) {
+ log.error(
+ "[SubjectsApi] getSchemaByVersion subject {} version {} not found.", subject, version);
+ return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+ }
+
+ return _schemaRegistryService
+ .getSchemaForTopic(topicName)
+ .map(
+ schema -> {
+ Schema result = new Schema();
+ result.setSubject(subject);
+ result.setVersion(1);
+ result.setId(_schemaRegistryService.getSchemaIdForTopic(topicName).get());
+ result.setSchema(schema.toString());
+ return new ResponseEntity<>(result, HttpStatus.OK);
+ })
+ .orElseGet(
+ () -> {
+ log.error("[SubjectsApi] getSchemaByVersion couldn't find topic {}.", topicName);
+ return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+ });
}
@Override
@@ -129,8 +156,18 @@ public ResponseEntity> list(
@Override
public ResponseEntity> listVersions(
String subject, Boolean deleted, Boolean deletedOnly) {
- log.error("[SubjectsApi] listVersions method not implemented");
- return SubjectsApi.super.listVersions(subject, deleted, deletedOnly);
+ final String topicName = subject.replaceFirst("-value", "");
+ return _schemaRegistryService
+ .getSchemaForTopic(topicName)
+ .map(
+ schema -> {
+ return new ResponseEntity<>(Arrays.asList(1), HttpStatus.OK);
+ })
+ .orElseGet(
+ () -> {
+ log.error("[SubjectsApi] listVersions couldn't find topic with name {}.", topicName);
+ return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+ });
}
@Override
@@ -274,8 +311,9 @@ public ResponseEntity getSchema(
.map(
schema -> {
SchemaString result = new SchemaString();
- result.setMaxId(id);
- result.setSchemaType("AVRO");
+ if (fetchMaxId) {
+ result.setMaxId(id);
+ }
result.setSchema(schema.toString());
return new ResponseEntity<>(result, HttpStatus.OK);
})
From 9f3d1258519d692a6e71426c47916be4b3860add Mon Sep 17 00:00:00 2001
From: John Joyce
Date: Tue, 16 Jan 2024 11:14:45 -0800
Subject: [PATCH 06/13] fix(autocomplete): Filter default entity types based on
those present in types map (#9625)
Co-authored-by: John Joyce
Co-authored-by: John Joyce
---
.../search/AutoCompleteForMultipleResolver.java | 11 +++++++++--
.../datahub/graphql/resolvers/search/SearchUtils.java | 1 -
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AutoCompleteForMultipleResolver.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AutoCompleteForMultipleResolver.java
index c3e843cefd5c84..6a01fa19867ad8 100644
--- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AutoCompleteForMultipleResolver.java
+++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/AutoCompleteForMultipleResolver.java
@@ -20,6 +20,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
@@ -67,7 +68,10 @@ public CompletableFuture get(DataFetchingEnvironmen
List types = getEntityTypes(input.getTypes(), maybeResolvedView);
if (types != null && types.size() > 0) {
return AutocompleteUtils.batchGetAutocompleteResults(
- types.stream().map(_typeToEntity::get).collect(Collectors.toList()),
+ types.stream()
+ .map(_typeToEntity::get)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList()),
sanitizedQuery,
input,
environment,
@@ -76,7 +80,10 @@ public CompletableFuture get(DataFetchingEnvironmen
// By default, autocomplete only against the Default Set of Autocomplete entities
return AutocompleteUtils.batchGetAutocompleteResults(
- AUTO_COMPLETE_ENTITY_TYPES.stream().map(_typeToEntity::get).collect(Collectors.toList()),
+ AUTO_COMPLETE_ENTITY_TYPES.stream()
+ .map(_typeToEntity::get)
+ .filter(Objects::nonNull)
+ .collect(Collectors.toList()),
sanitizedQuery,
input,
environment,
diff --git a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java
index 444ab4bcc3c3c9..6746c30a2edbcd 100644
--- a/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java
+++ b/datahub-graphql-core/src/main/java/com/linkedin/datahub/graphql/resolvers/search/SearchUtils.java
@@ -88,7 +88,6 @@ private SearchUtils() {}
EntityType.TAG,
EntityType.CORP_USER,
EntityType.CORP_GROUP,
- EntityType.ROLE,
EntityType.NOTEBOOK,
EntityType.DATA_PRODUCT);
From 63a9ace453ace5943fb3ff3dc240c57ee439e265 Mon Sep 17 00:00:00 2001
From: Hyejin Yoon <0327jane@gmail.com>
Date: Wed, 17 Jan 2024 05:55:02 +0900
Subject: [PATCH 07/13] feat: inital champions page (#9429)
---
docs-website/docusaurus.config.js | 21 +-
.../championqualitycardssection.module.scss | 7 +
.../ChampionQualityCardsSection/index.js | 44 ++
.../champion-section.module.scss | 87 ++++
.../_components/ChampionSection/index.js | 68 +++
docs-website/src/pages/champions/index.js | 400 ++++++++++++++++++
docs-website/src/pages/guild/index.js | 6 +
.../img/champions/champions-logo-light.png | Bin 0 -> 178375 bytes
docs-website/static/img/champions/github.svg | 4 +
.../static/img/champions/linkedin.svg | 3 +
docs-website/static/img/champions/twitter.svg | 4 +
docs-website/static/img/champions/web.svg | 4 +
docs-website/static/img/champions/wreath.svg | 1 +
13 files changed, 644 insertions(+), 5 deletions(-)
create mode 100644 docs-website/src/pages/champions/_components/ChampionQualityCardsSection/championqualitycardssection.module.scss
create mode 100644 docs-website/src/pages/champions/_components/ChampionQualityCardsSection/index.js
create mode 100644 docs-website/src/pages/champions/_components/ChampionSection/champion-section.module.scss
create mode 100644 docs-website/src/pages/champions/_components/ChampionSection/index.js
create mode 100644 docs-website/src/pages/champions/index.js
create mode 100644 docs-website/static/img/champions/champions-logo-light.png
create mode 100644 docs-website/static/img/champions/github.svg
create mode 100644 docs-website/static/img/champions/linkedin.svg
create mode 100644 docs-website/static/img/champions/twitter.svg
create mode 100644 docs-website/static/img/champions/web.svg
create mode 100644 docs-website/static/img/champions/wreath.svg
diff --git a/docs-website/docusaurus.config.js b/docs-website/docusaurus.config.js
index 506e263933394a..fef3d06aca7398 100644
--- a/docs-website/docusaurus.config.js
+++ b/docs-website/docusaurus.config.js
@@ -56,6 +56,21 @@ module.exports = {
label: "Integrations",
position: "right",
},
+ {
+ type: "dropdown",
+ label: "Community",
+ position: "right",
+ items: [
+ {
+ href: "https://slack.datahubproject.io",
+ label: "Slack",
+ },
+ {
+ to: "/champions",
+ label: "Champions",
+ },
+ ],
+ },
{
type: "dropdown",
label: "Resources",
@@ -66,17 +81,13 @@ module.exports = {
label: "Demo",
},
{
- href: "https://blog.datahubproject.io/",
+ href: "https://www.acryldata.io/blog",
label: "Blog",
},
{
href: "https://feature-requests.datahubproject.io/roadmap",
label: "Roadmap",
},
- {
- href: "https://slack.datahubproject.io",
- label: "Slack",
- },
{
href: "https://github.com/datahub-project/datahub",
label: "GitHub",
diff --git a/docs-website/src/pages/champions/_components/ChampionQualityCardsSection/championqualitycardssection.module.scss b/docs-website/src/pages/champions/_components/ChampionQualityCardsSection/championqualitycardssection.module.scss
new file mode 100644
index 00000000000000..9601938b077091
--- /dev/null
+++ b/docs-website/src/pages/champions/_components/ChampionQualityCardsSection/championqualitycardssection.module.scss
@@ -0,0 +1,7 @@
+.section {
+ margin: 2rem 3rem 3rem 3rem;
+}
+
+.card {
+ margin: 1rem;
+}
\ No newline at end of file
diff --git a/docs-website/src/pages/champions/_components/ChampionQualityCardsSection/index.js b/docs-website/src/pages/champions/_components/ChampionQualityCardsSection/index.js
new file mode 100644
index 00000000000000..9caed95973dc00
--- /dev/null
+++ b/docs-website/src/pages/champions/_components/ChampionQualityCardsSection/index.js
@@ -0,0 +1,44 @@
+import React from "react";
+import styles from "./championqualitycardssection.module.scss";
+import clsx from "clsx";
+import { CodeTwoTone, HeartTwoTone, SoundTwoTone } from "@ant-design/icons";
+
+const ChampionQualityCardsSection = () => {
+ return (
+
+
Our Champions...
+
+
+
+
+
+
+
Contribute to our code
+
Enhance our projects by contributing to our GitHub repositories.
+
+
+
+
+
+
+
+
Help out the community
+
Support our community by actively participating in our Slack channels
+
+
+
+
+
+
+
+
Share the exprience
+
Inspire others by sharing your adoption story through blogs or town hall sessions.
+
+
+
+
+ );
+
+};
+
+export default ChampionQualityCardsSection;
\ No newline at end of file
diff --git a/docs-website/src/pages/champions/_components/ChampionSection/champion-section.module.scss b/docs-website/src/pages/champions/_components/ChampionSection/champion-section.module.scss
new file mode 100644
index 00000000000000..d5f54abcef779a
--- /dev/null
+++ b/docs-website/src/pages/champions/_components/ChampionSection/champion-section.module.scss
@@ -0,0 +1,87 @@
+.section {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 3rem;
+ padding-bottom: 2rem;
+ margin-bottom: 2rem;
+ border-bottom: 1px solid var(--ifm-hr-border-color);
+ :global {
+ .heading {
+ font-weight: bold;
+ text-align: center;
+ p {
+ margin-bottom: 0;
+ line-height: 1.2em;
+ font-weight: 600 !important;
+ }
+ .badge {
+ margin: 10px auto;
+ max-width: 300px;
+ height: auto;
+ }
+ @media (min-width: 550px) {
+ grid-column-start: 1;
+ grid-column-end: 3;
+ }
+ }
+ }
+ @media (min-width: 550px) {
+ grid-template-columns: 1fr 1fr;
+ }
+
+ @media (min-width: 800px) {
+ grid-template-columns: 1fr 1fr 1fr;
+ }
+ @media (min-width: 1000px) {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+}
+
+.card {
+ padding: 2rem;
+ box-shadow: 0 0 10px 4px rgba(128, 128, 128, 0.1);
+ border: none;
+
+ &:hover {
+ transform: scale(1.03);
+ transition: transform .2s ease;
+ }
+
+ :global {
+ .avatar__photo {
+ padding: 0.5rem;
+ width: 100%;
+ max-width: 150px;
+ height: auto;
+ margin: 0 auto;
+ }
+ .card__header {
+ text-align: center;
+ }
+ .card__body {
+ text-align: center;
+ font-size: 13px;
+ line-height: 16px;
+ }
+ .card__footer {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ .logo:hover {
+ opacity: 0.7;
+ }
+
+ svg {
+ width: 26px;
+ height: 26px;
+ margin: 0.5rem 0.5rem;
+
+ path {
+ fill: var(--ifm-font-color-secondary);
+ }
+ }
+
+ }
+ }
+}
diff --git a/docs-website/src/pages/champions/_components/ChampionSection/index.js b/docs-website/src/pages/champions/_components/ChampionSection/index.js
new file mode 100644
index 00000000000000..b42caeaa06f45b
--- /dev/null
+++ b/docs-website/src/pages/champions/_components/ChampionSection/index.js
@@ -0,0 +1,68 @@
+import React from "react";
+import clsx from "clsx";
+import useBaseUrl from "@docusaurus/useBaseUrl";
+import styles from "./champion-section.module.scss";
+import { TwitterOutlined, LinkedinFilled, GithubFilled, GlobalOutlined } from "@ant-design/icons";
+
+const ChampionSection = ({ people }) => {
+ return (
+
+ {people.map((person, idx) => {
+ const { name, image, position, bio, social, location } = person;
+ return (
+
+ {image ? (
+
+ ) : (
+
+ )}
+
+
{name}
+ {position}
+
+
+
+ {social.linkedin && (
+
+
+
+
+ )}
+ {social.github && (
+
+
+
+
+
+
+ )}
+ {social.twitter && (
+
+
+
+
+
+ )}
+ {social.web && (
+
+
+
+
+
+ )}
+
+
+ );
+ })}
+
+ );
+};
+
+export default ChampionSection;
diff --git a/docs-website/src/pages/champions/index.js b/docs-website/src/pages/champions/index.js
new file mode 100644
index 00000000000000..ca161354ecbdcd
--- /dev/null
+++ b/docs-website/src/pages/champions/index.js
@@ -0,0 +1,400 @@
+import React from "react";
+import Layout from "@theme/Layout";
+import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
+import { useColorMode } from "@docusaurus/theme-common";
+import Link from "@docusaurus/Link";
+import ChampionQualityCardsSection from "./_components/ChampionQualityCardsSection"
+
+import ChampionSection from "./_components/ChampionSection";
+
+const championSections = [
+ {
+ people: [
+ {
+ name: "Siladitya Chakraborty",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/siladitya_chakraborty.jpeg",
+ position: "Data Engineer, Adevinta",
+ bio: (
+ <>
+
+ Submiitted 6 pull requests including improvements on graphQL and search API.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/aditya-0bab9a84/",
+ github: "https://github.com/siladitya2",
+ },
+ location: "Barcelona, Spain"
+ },
+ {
+ name: "Sergio Gómez Villamor",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/champ-img/imgs/datahub-champions/sergio_gomez_villamor.jpg",
+ position: "Tech Lead, Adevinta",
+ bio: (
+ <>
+
+ Submitted 26 pull requests and raised 4 issues, also featured in "Humans of DataHub."
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/sgomezvillamor/",
+ github: "https://github.com/sgomezvillamor/",
+ },
+ location: "Barcelona,Spain"
+ },
+ {
+ name: "Amanda Ng",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/data-practitioners-guild/amanda-ng.png",
+ position: "Lead Software Engineer, Grab",
+ bio: (
+ <>
+
+ Submitted 9 pull requests and shared Grab's experience adopting and implementing DataHub during the October 2022 Town Hall.
+
+ >
+ ),
+ social: {
+ linkedin: "https://sg.linkedin.com/in/amandang19",
+ github: "https://github.com/ngamanda",
+ web: "https://ngamanda.com/",
+ },
+ location: "Singapore"
+ },
+ {
+ name: "Patrick Braz",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/data-practitioners-guild/patrick-franco-braz.jpeg",
+ position: "Data Engineering Specialist, Grupo Boticário",
+ bio: (
+ <>
+
+ Submitted 16 pull requests and 3 issues and regularly provided guidance to Community Members in Slack channels.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/patrick-franco-braz/",
+ github: "https://github.com/PatrickfBraz",
+ },
+ location: "Rio de Janeiro, Brazil"
+ },
+ {
+ name: "Steve Pham",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/data-practitioners-guild/cuong-pham.jpeg",
+ bio: (
+ <>
+
+ Submitted 4 pull requests and reliably provided direction to Community Members across all support channels in Slack.
+
+ >
+ ),
+ social: {
+ },
+ },
+ {
+ name: "Piotr Skrydalewicz",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/data-practitioners-guild/initials/ps_white.jpg",
+ position: "Data Engineer",
+ bio: (
+ <>
+
+ Contributed 5 commits in 2022 to the main DataHub Project and Helm repositories, including Stateful Ingestion support for Presto-on-Hive.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/skrydal",
+ },
+ location: "Lodz, Poland"
+ },
+ {
+ name: "Harvey Li",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/data-practitioners-guild/initials/hl_black.jpg",
+ position: "Lead Data Engineer, Grab",
+ bio: (
+ <>
+
+ Shared Grab's experience adopting and implementing DataHub during the October 2022 Town Hall and featured in Humans of DataHub.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/li-haihui",
+ github: "https://github.com/HarveyLeo",
+ },
+ location: "Singapore"
+ },
+ {
+ name: "Fredrik Sannholm",
+ position: "Wolt",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/data-practitioners-guild/initials/fs_black.jpg",
+ position: "",
+ bio: (
+ <>
+
+ Drove DataHub adoption at Wolt and featured in Humans of DataHub.
+
+ >
+ ),
+ social: {
+ },
+ location: "Finland"
+ },
+ {
+ name: "Scott Maciej",
+ position: "Optum",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/champ-img/imgs/datahub-champions/initials/sm.jpg",
+ bio: (
+ <>
+
+ Drove DataHub's adaptation and implementation at Optum.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/scottmaciej/",
+ github: "https://github.com/sgm44",
+ web: "https://www.badhabitbeer.com/",
+ },
+ location: "USA"
+ },
+ {
+ name: "Tim Bossenmaier",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/champ-img/imgs/datahub-champions/tim_bossenmaier.jpeg",
+ position: "Data & Software Engineer, Bytefabrik.AI",
+ bio: (
+ <>
+
+ Reliably provided dirxection to Community Members across all support channels in Slack.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/tim-bossenmaier/",
+ github: "https://github.com/bossenti",
+ },
+ location: "Sigmaringen, Germany"
+ },
+ {
+ name: "Nikola Kasev",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/champ-img/imgs/datahub-champions/nikola_kasev.jpeg",
+ position: "Data Engineer, KPN",
+ bio: (
+ <>
+
+ Reliably provided direction to Community Members across all support channels in Slack.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/nikolakasev",
+ github: "https://github.com/nikolakasev",
+ },
+ location: "Haarlem, Noord-holland"
+ },
+ {
+ name: "Nidhin Nandhakumar",
+ position: "Coursera",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/nn.jpg",
+ bio: (
+ <>
+
+ Drove DataHub's adaptation and implementation on Coursera.
+
+ >
+ ),
+ social: {
+ },
+ },
+ {
+ name: "Wu Teng",
+ position: "CashApp",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/wt.jpg",
+ bio: (
+ <>
+
+ Reliably provided direction to Community Members across all support channels in Slack.
+
+ >
+ ),
+ social: {
+ },
+ location: "Australia"
+ },
+ {
+ name: "Felipe Gusmao",
+ position: "Zynga",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/fg.jpg",
+ bio: (
+ <>
+
+ Shared Zynga's experience adopting and implementing DataHub during the September 2023 Town Hall.
+
+ >
+ ),
+ social: {
+ },
+ location: "Toronto, Canada"
+ },
+ {
+ name: "Sudhakara ST",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/ss.jpg",
+ position: "Engineer, Zynga",
+ bio: (
+ <>
+
+ Reliably provided direction to Community Members across all support channels in Slack and shared Zynga's experience adopting and implementing DataHub during the September 2023 Town Hall.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/sudhakara-st/",
+ },
+ location: "Bengaluru, India"
+ },
+ {
+ name: "Bobbie-Jean Nowak",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/bn.jpg",
+ position: "Technical Product Manager, Optum ",
+ bio: (
+ <>
+
+ Drove DataHub's adaptation and implementation at Optum.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/bobbie-jean-nowak-a0076b77/",
+ },
+ location: "Minnesota, USA"
+ },
+ {
+ name: "Dima Korendovych",
+ position: "Optum",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/dk.jpg",
+ bio: (
+ <>
+
+ Drove DataHub's adaptation and implementation at Optum.
+
+ >
+ ),
+ social: {
+ },
+ location: "USA"
+ },
+ {
+ name: "Tim Drahn",
+ position: "Optum",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/td.jpg",
+ position: "Solution Architect, Optum Technologies",
+ bio: (
+ <>
+
+ Submitted 2 pull requests and 1 issue while reliably providing direction to Community Members across all support channels in Slack.
+
+ >
+ ),
+ social: {
+ linkedin: "https://www.linkedin.com/in/tim-drahn-a873532b/",
+ github: "https://github.com/tkdrahn",
+ },
+ location: "MA, USA"
+ },
+ {
+ name: "Kate Koy",
+ position: "Optum",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/kk.jpg",
+ bio: (
+ <>
+
+ Drove DataHub's adaptation and implementation at Optum.
+
+ >
+ ),
+ social: {
+ },
+ location: "USA"
+ },
+ {
+ name: "Anjali Arora",
+ position: "Optum",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/aa.jpg",
+ bio: (
+ <>
+
+ Drove DataHub's adaptation and implementation at Optum.
+
+ >
+ ),
+ social: {
+ },
+ location: "USA"
+ },
+ {
+ name: "Raj Tekal",
+ image: "https://raw.githubusercontent.com/datahub-project/static-assets/main/imgs/datahub-champions/initials/rt.jpg",
+ position: "Lead Software Engineer, Optum Technologies",
+ bio: (
+ <>
+
+ Submitted 4 pull requests.
+
+ >
+ ),
+ social: {
+ },
+ location: "PA, USA"
+ },
+ ],
+ },
+];
+
+const HeroImage = (props) => {
+ const { colorMode } = useColorMode();
+ return (
+ <>
+
+ >
+ );
+};
+
+function Champion() {
+ const context = useDocusaurusContext();
+ const { siteConfig = {} } = context;
+
+ return (
+
+
+
+ );
+}
+
+export default Champion;
diff --git a/docs-website/src/pages/guild/index.js b/docs-website/src/pages/guild/index.js
index 84470ef9445e36..c66f519128121c 100644
--- a/docs-website/src/pages/guild/index.js
+++ b/docs-website/src/pages/guild/index.js
@@ -2,6 +2,7 @@ import React from "react";
import Layout from "@theme/Layout";
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
import { useColorMode } from "@docusaurus/theme-common";
+import Link from "@docusaurus/Link";
import GuildSection from "./_components/GuildSection";
@@ -801,6 +802,11 @@ function Guild() {
Celebrating community members that have gone above and beyond to contribute to the collective success of DataHub
+
+
+ See the DataHub Champions (2023) →
+
+
{guildSections.map((section, idx) => (
diff --git a/docs-website/static/img/champions/champions-logo-light.png b/docs-website/static/img/champions/champions-logo-light.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e93f1160cd1fa67a6c150c75b6109e5edbf899d
GIT binary patch
literal 178375
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