From b1fbd6f33f30e4ecb31a02677079a6bc2c08c942 Mon Sep 17 00:00:00 2001 From: Lake Mossman Date: Wed, 22 Mar 2023 11:56:17 -0700 Subject: [PATCH] Simplify Github and Postgres forms #2 (#24255) * add grouping and collapsing fields to postgres source * add auth group to github source connector * revert postgres field order changes and adjust group of schemas field * inject group into ssh tunnel spec for postgres only, through overloaded methods * Automated Change * bump Dockerfile versions and update changelogs * bump strict encrypt version as well * fix postgres acceptance test * fix acceptance test again * fix all postgres acceptance tests * add newline * undo other changes to postgres readme file * add security group to tunnel_method in expected_spec.json * bump version of strict encrypt * manually bump versions in seed files --------- Co-authored-by: lmossman --- .../resources/seed/source_definitions.yaml | 4 +- .../src/main/resources/seed/source_specs.yaml | 29 +- .../integrations/base/ssh/SshHelpers.java | 18 +- .../base/ssh/SshWrappedSource.java | 12 +- .../connectors/source-github/Dockerfile | 2 +- .../source-github/source_github/spec.json | 1 + .../source-postgres-strict-encrypt/Dockerfile | 2 +- .../connectors/source-postgres/Dockerfile | 2 +- .../source/postgres/PostgresSource.java | 2 +- .../src/main/resources/spec.json | 55 ++- .../AbstractPostgresSourceAcceptanceTest.java | 18 + ...resSourceSSLCertificateAcceptanceTest.java | 12 +- ...stractSshPostgresSourceAcceptanceTest.java | 12 +- .../CdcPostgresSourceAcceptanceTest.java | 12 +- .../sources/PostgresSourceAcceptanceTest.java | 13 +- ...gresSourceStrictEncryptAcceptanceTest.java | 13 +- .../resources/expected_spec.json | 56 ++- .../expected_strict_encrypt_spec.json | 51 ++- .../src/test/resources/expected_spec.json | 383 ------------------ connectors.md | 4 +- docs/integrations/sources/github.md | 1 + docs/integrations/sources/postgres.md | 1 + 22 files changed, 218 insertions(+), 485 deletions(-) create mode 100644 airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceAcceptanceTest.java delete mode 100644 airbyte-integrations/connectors/source-postgres/src/test/resources/expected_spec.json diff --git a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml index 9401676cf27c..9e6055d874be 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -691,7 +691,7 @@ - name: GitHub sourceDefinitionId: ef69ef6e-aa7f-4af1-a01d-ef775033524e dockerRepository: airbyte/source-github - dockerImageTag: 0.4.3 + dockerImageTag: 0.4.4 documentationUrl: https://docs.airbyte.com/integrations/sources/github icon: github.svg sourceType: api @@ -1565,7 +1565,7 @@ - name: Postgres sourceDefinitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 dockerRepository: airbyte/source-postgres - dockerImageTag: 2.0.7 + dockerImageTag: 2.0.8 documentationUrl: https://docs.airbyte.com/integrations/sources/postgres icon: postgresql.svg sourceType: database diff --git a/airbyte-config/init/src/main/resources/seed/source_specs.yaml b/airbyte-config/init/src/main/resources/seed/source_specs.yaml index ba5945e8fe5c..41469fa8b78e 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -4938,7 +4938,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-github:0.4.3" +- dockerImage: "airbyte/source-github:0.4.4" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/github" connectionSpecification: @@ -4955,6 +4955,7 @@ description: "Choose how to authenticate to GitHub" type: "object" order: 0 + group: "auth" oneOf: - type: "object" title: "OAuth" @@ -11911,7 +11912,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-postgres:2.0.7" +- dockerImage: "airbyte/source-postgres:2.0.8" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/postgres" connectionSpecification: @@ -11929,6 +11930,7 @@ description: "Hostname of the database." type: "string" order: 0 + group: "db" port: title: "Port" description: "Port of the database." @@ -11939,11 +11941,13 @@ examples: - "5432" order: 1 + group: "db" database: title: "Database Name" description: "Name of the database." type: "string" order: 2 + group: "db" schemas: title: "Schemas" description: "The list of schemas (case sensitive) to sync from. Defaults\ @@ -11956,17 +11960,21 @@ default: - "public" order: 3 + group: "db" username: title: "Username" description: "Username to access the database." type: "string" order: 4 + group: "auth" password: title: "Password" description: "Password associated with the username." type: "string" airbyte_secret: true order: 5 + group: "auth" + always_show: true jdbc_url_params: description: "Additional properties to pass to the JDBC URL string when\ \ connecting to the database formatted as 'key=value' pairs separated\ @@ -11976,6 +11984,7 @@ title: "JDBC URL Parameters (Advanced)" type: "string" order: 6 + group: "advanced" ssl: title: "Connect using SSL" description: "Encrypt data using SSL. When activating SSL, please select\ @@ -11983,12 +11992,15 @@ type: "boolean" default: false order: 7 + group: "security" + always_show: true ssl_mode: title: "SSL Modes" description: "SSL connection modes. \n Read more in the docs." type: "object" - order: 7 + order: 8 + group: "security" oneOf: - title: "disable" additionalProperties: true @@ -12117,7 +12129,8 @@ type: "object" title: "Replication Method" description: "Replication method for extracting data from the database." - order: 8 + order: 9 + group: "advanced" oneOf: - title: "Standard" description: "Standard replication requires no setup on the DB side but\ @@ -12294,6 +12307,14 @@ type: "string" airbyte_secret: true order: 4 + group: "security" + groups: + - id: "db" + - id: "auth" + - id: "security" + title: "Security" + - id: "advanced" + title: "Advanced" supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshHelpers.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshHelpers.java index 91069091fd68..39957ef99051 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshHelpers.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshHelpers.java @@ -9,18 +9,32 @@ import io.airbyte.commons.resources.MoreResources; import io.airbyte.protocol.models.v0.ConnectorSpecification; import java.io.IOException; +import java.util.Optional; public class SshHelpers { public static ConnectorSpecification getSpecAndInjectSsh() throws IOException { + return getSpecAndInjectSsh(Optional.empty()); + } + + public static ConnectorSpecification getSpecAndInjectSsh(final Optional group) throws IOException { final ConnectorSpecification originalSpec = Jsons.deserialize(MoreResources.readResource("spec.json"), ConnectorSpecification.class); - return injectSshIntoSpec(originalSpec); + return injectSshIntoSpec(originalSpec, group); } public static ConnectorSpecification injectSshIntoSpec(final ConnectorSpecification connectorSpecification) throws IOException { + return injectSshIntoSpec(connectorSpecification, Optional.empty()); + } + + public static ConnectorSpecification injectSshIntoSpec(final ConnectorSpecification connectorSpecification, final Optional group) + throws IOException { final ConnectorSpecification originalSpec = Jsons.clone(connectorSpecification); final ObjectNode propNode = (ObjectNode) originalSpec.getConnectionSpecification().get("properties"); - propNode.set("tunnel_method", Jsons.deserialize(MoreResources.readResource("ssh-tunnel-spec.json"))); + final ObjectNode tunnelMethod = (ObjectNode) Jsons.deserialize(MoreResources.readResource("ssh-tunnel-spec.json")); + if (group.isPresent()) { + tunnelMethod.put("group", group.get()); + } + propNode.set("tunnel_method", tunnelMethod); return originalSpec; } diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshWrappedSource.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshWrappedSource.java index dfda8879b93a..bb3b7de21fe2 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshWrappedSource.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshWrappedSource.java @@ -16,6 +16,7 @@ import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; import io.airbyte.protocol.models.v0.ConnectorSpecification; import java.util.List; +import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -25,16 +26,25 @@ public class SshWrappedSource implements Source { private final Source delegate; private final List hostKey; private final List portKey; + private final Optional sshGroup; public SshWrappedSource(final Source delegate, final List hostKey, final List portKey) { this.delegate = delegate; this.hostKey = hostKey; this.portKey = portKey; + this.sshGroup = Optional.empty(); + } + + public SshWrappedSource(final Source delegate, final List hostKey, final List portKey, final String sshGroup) { + this.delegate = delegate; + this.hostKey = hostKey; + this.portKey = portKey; + this.sshGroup = Optional.of(sshGroup); } @Override public ConnectorSpecification spec() throws Exception { - return SshHelpers.injectSshIntoSpec(delegate.spec()); + return SshHelpers.injectSshIntoSpec(delegate.spec(), sshGroup); } @Override diff --git a/airbyte-integrations/connectors/source-github/Dockerfile b/airbyte-integrations/connectors/source-github/Dockerfile index f92bd0ceadd1..5508c860a883 100644 --- a/airbyte-integrations/connectors/source-github/Dockerfile +++ b/airbyte-integrations/connectors/source-github/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.4.3 +LABEL io.airbyte.version=0.4.4 LABEL io.airbyte.name=airbyte/source-github diff --git a/airbyte-integrations/connectors/source-github/source_github/spec.json b/airbyte-integrations/connectors/source-github/source_github/spec.json index 419bcdd42bc7..3e4f72e0aeff 100644 --- a/airbyte-integrations/connectors/source-github/source_github/spec.json +++ b/airbyte-integrations/connectors/source-github/source_github/spec.json @@ -12,6 +12,7 @@ "description": "Choose how to authenticate to GitHub", "type": "object", "order": 0, + "group": "auth", "oneOf": [ { "type": "object", diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile index fa12e6f12af2..9fb1be84a92c 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-postgres-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.7 +LABEL io.airbyte.version=2.0.8 LABEL io.airbyte.name=airbyte/source-postgres-strict-encrypt diff --git a/airbyte-integrations/connectors/source-postgres/Dockerfile b/airbyte-integrations/connectors/source-postgres/Dockerfile index 5fe7d004122d..783fa6f2b8dd 100644 --- a/airbyte-integrations/connectors/source-postgres/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-postgres COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.7 +LABEL io.airbyte.version=2.0.8 LABEL io.airbyte.name=airbyte/source-postgres diff --git a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java index 2329f99610cb..29236eef54f3 100644 --- a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java +++ b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java @@ -117,7 +117,7 @@ public class PostgresSource extends AbstractJdbcSource implements private static final Set INVALID_CDC_SSL_MODES = ImmutableSet.of("allow", "prefer"); public static Source sshWrappedSource() { - return new SshWrappedSource(new PostgresSource(), JdbcUtils.HOST_LIST_KEY, JdbcUtils.PORT_LIST_KEY); + return new SshWrappedSource(new PostgresSource(), JdbcUtils.HOST_LIST_KEY, JdbcUtils.PORT_LIST_KEY, "security"); } PostgresSource() { diff --git a/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json b/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json index 3f2c05c974b1..930ab5cc1cd1 100644 --- a/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json @@ -10,7 +10,8 @@ "title": "Host", "description": "Hostname of the database.", "type": "string", - "order": 0 + "order": 0, + "group": "db" }, "port": { "title": "Port", @@ -20,13 +21,15 @@ "maximum": 65536, "default": 5432, "examples": ["5432"], - "order": 1 + "order": 1, + "group": "db" }, "database": { "title": "Database Name", "description": "Name of the database.", "type": "string", - "order": 2 + "order": 2, + "group": "db" }, "schemas": { "title": "Schemas", @@ -38,39 +41,47 @@ "minItems": 0, "uniqueItems": true, "default": ["public"], - "order": 3 + "order": 3, + "group": "db" }, "username": { "title": "Username", "description": "Username to access the database.", "type": "string", - "order": 4 + "order": 4, + "group": "auth" }, "password": { "title": "Password", "description": "Password associated with the username.", "type": "string", "airbyte_secret": true, - "order": 5 + "order": 5, + "group": "auth", + "always_show": true }, "jdbc_url_params": { "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", "title": "JDBC URL Parameters (Advanced)", "type": "string", - "order": 6 + "order": 6, + "group": "advanced" }, "ssl": { "title": "Connect using SSL", "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", "type": "boolean", "default": false, - "order": 7 + "order": 7, + "group": "security", + "always_show": true }, "ssl_mode": { "title": "SSL Modes", "description": "SSL connection modes. \n Read more in the docs.", "type": "object", - "order": 7, + "order": 8, + "group": "security", "oneOf": [ { "title": "disable", @@ -218,7 +229,8 @@ "type": "object", "title": "Replication Method", "description": "Replication method for extracting data from the database.", - "order": 8, + "order": 9, + "group": "advanced", "oneOf": [ { "title": "Standard", @@ -276,7 +288,10 @@ "type": "string", "title": "LSN commit behaviour", "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": ["While reading Data", "After loading Data in the destination"], + "enum": [ + "While reading Data", + "After loading Data in the destination" + ], "default": "After loading Data in the destination", "order": 6 } @@ -284,6 +299,22 @@ } ] } - } + }, + "groups": [ + { + "id": "db" + }, + { + "id": "auth" + }, + { + "id": "security", + "title": "Security" + }, + { + "id": "advanced", + "title": "Advanced" + } + ] } } diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceAcceptanceTest.java new file mode 100644 index 000000000000..3b9b024d5fc4 --- /dev/null +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceAcceptanceTest.java @@ -0,0 +1,18 @@ +package io.airbyte.integrations.io.airbyte.integration_tests.sources; + +import io.airbyte.integrations.base.ssh.SshHelpers; +import io.airbyte.integrations.standardtest.source.SourceAcceptanceTest; +import io.airbyte.protocol.models.v0.ConnectorSpecification; +import java.util.Optional; + +public abstract class AbstractPostgresSourceAcceptanceTest extends SourceAcceptanceTest { + @Override + protected String getImageName() { + return "airbyte/source-postgres:dev"; + } + + @Override + protected ConnectorSpecification getSpec() throws Exception { + return SshHelpers.getSpecAndInjectSsh(Optional.of("security")); + } +} diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceSSLCertificateAcceptanceTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceSSLCertificateAcceptanceTest.java index e02d4621f76c..077828075dd4 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceSSLCertificateAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractPostgresSourceSSLCertificateAcceptanceTest.java @@ -38,7 +38,7 @@ import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension; @ExtendWith(SystemStubsExtension.class) -public abstract class AbstractPostgresSourceSSLCertificateAcceptanceTest extends SourceAcceptanceTest { +public abstract class AbstractPostgresSourceSSLCertificateAcceptanceTest extends AbstractPostgresSourceAcceptanceTest { private static final String STREAM_NAME = "id_and_name"; private static final String STREAM_NAME2 = "starships"; @@ -103,16 +103,6 @@ protected void tearDown(final TestDestinationEnv testEnv) { container.close(); } - @Override - protected String getImageName() { - return "airbyte/source-postgres:dev"; - } - - @Override - protected ConnectorSpecification getSpec() throws Exception { - return SshHelpers.getSpecAndInjectSsh(); - } - @Override protected JsonNode getConfig() { return config; diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshPostgresSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshPostgresSourceAcceptanceTest.java index 31c07378bd23..ae4ba25e1f75 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshPostgresSourceAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshPostgresSourceAcceptanceTest.java @@ -37,7 +37,7 @@ import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension; @ExtendWith(SystemStubsExtension.class) -public abstract class AbstractSshPostgresSourceAcceptanceTest extends SourceAcceptanceTest { +public abstract class AbstractSshPostgresSourceAcceptanceTest extends AbstractPostgresSourceAcceptanceTest { private static final String STREAM_NAME = "id_and_name"; private static final String STREAM_NAME2 = "starships"; @@ -105,16 +105,6 @@ protected void tearDown(final TestDestinationEnv testEnv) { bastion.stopAndCloseContainers(db); } - @Override - protected String getImageName() { - return "airbyte/source-postgres:dev"; - } - - @Override - protected ConnectorSpecification getSpec() throws Exception { - return SshHelpers.getSpecAndInjectSsh(); - } - @Override protected JsonNode getConfig() { return config; diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcPostgresSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcPostgresSourceAcceptanceTest.java index 50ec2de2b5dd..6bb5c4a1c69d 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcPostgresSourceAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/CdcPostgresSourceAcceptanceTest.java @@ -41,7 +41,7 @@ // todo (cgardens) - Sanity check that when configured for CDC that postgres performs like any other // incremental source. As we have more sources support CDC we will find a more reusable way of doing // this, but for now this is a solid sanity check. -public class CdcPostgresSourceAcceptanceTest extends SourceAcceptanceTest { +public class CdcPostgresSourceAcceptanceTest extends AbstractPostgresSourceAcceptanceTest { protected static final String SLOT_NAME_BASE = "debezium_slot"; protected static final String NAMESPACE = "public"; @@ -106,16 +106,6 @@ protected void tearDown(final TestDestinationEnv testEnv) { container.close(); } - @Override - protected String getImageName() { - return "airbyte/source-postgres:dev"; - } - - @Override - protected ConnectorSpecification getSpec() throws Exception { - return SshHelpers.getSpecAndInjectSsh(); - } - @Override protected JsonNode getConfig() { return config; diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceAcceptanceTest.java index d232fb0e389f..160686d16f09 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceAcceptanceTest.java @@ -33,6 +33,7 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.List; +import java.util.Optional; import org.jooq.DSLContext; import org.jooq.SQLDialect; import org.junit.jupiter.api.Test; @@ -43,7 +44,7 @@ import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension; @ExtendWith(SystemStubsExtension.class) -public class PostgresSourceAcceptanceTest extends SourceAcceptanceTest { +public class PostgresSourceAcceptanceTest extends AbstractPostgresSourceAcceptanceTest { private static final String STREAM_NAME = "id_and_name"; private static final String STREAM_NAME2 = "starships"; @@ -114,16 +115,6 @@ protected void tearDown(final TestDestinationEnv testEnv) { container.close(); } - @Override - protected String getImageName() { - return "airbyte/source-postgres:dev"; - } - - @Override - protected ConnectorSpecification getSpec() throws Exception { - return SshHelpers.getSpecAndInjectSsh(); - } - @Override protected JsonNode getConfig() { return config; diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceStrictEncryptAcceptanceTest.java b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceStrictEncryptAcceptanceTest.java index 87c6e533b898..2a83b300b73a 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceStrictEncryptAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/PostgresSourceStrictEncryptAcceptanceTest.java @@ -30,6 +30,7 @@ import io.airbyte.protocol.models.v0.SyncMode; import java.util.HashMap; import java.util.List; +import java.util.Optional; import org.jooq.DSLContext; import org.jooq.SQLDialect; import org.junit.jupiter.api.extension.ExtendWith; @@ -44,7 +45,7 @@ * completely once the migration of multi-variant connector is done. */ @ExtendWith(SystemStubsExtension.class) -public class PostgresSourceStrictEncryptAcceptanceTest extends SourceAcceptanceTest { +public class PostgresSourceStrictEncryptAcceptanceTest extends AbstractPostgresSourceAcceptanceTest { private static final String STREAM_NAME = "id_and_name"; private static final String STREAM_NAME2 = "starships"; @@ -110,15 +111,11 @@ protected void tearDown(final TestDestinationEnv testEnv) { container.close(); } - @Override - protected String getImageName() { - return "airbyte/source-postgres:dev"; - } - @Override protected ConnectorSpecification getSpec() throws Exception { - return SshHelpers - .injectSshIntoSpec(Jsons.deserialize(MoreResources.readResource("expected_strict_encrypt_spec.json"), ConnectorSpecification.class)); + return SshHelpers.injectSshIntoSpec( + Jsons.deserialize(MoreResources.readResource("expected_strict_encrypt_spec.json"), ConnectorSpecification.class), + Optional.of("security")); } @Override diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json b/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json index b585f6ca2b1d..e1a092a2bff1 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json @@ -10,7 +10,8 @@ "title": "Host", "description": "Hostname of the database.", "type": "string", - "order": 0 + "order": 0, + "group": "db" }, "port": { "title": "Port", @@ -20,13 +21,15 @@ "maximum": 65536, "default": 5432, "examples": ["5432"], - "order": 1 + "order": 1, + "group": "db" }, "database": { "title": "Database Name", "description": "Name of the database.", "type": "string", - "order": 2 + "order": 2, + "group": "db" }, "schemas": { "title": "Schemas", @@ -38,39 +41,47 @@ "minItems": 0, "uniqueItems": true, "default": ["public"], - "order": 3 + "order": 3, + "group": "db" }, "username": { "title": "Username", "description": "Username to access the database.", "type": "string", - "order": 4 + "order": 4, + "group": "auth" }, "password": { "title": "Password", "description": "Password associated with the username.", "type": "string", "airbyte_secret": true, - "order": 5 + "order": 5, + "group": "auth", + "always_show": true }, "jdbc_url_params": { "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", "title": "JDBC URL Parameters (Advanced)", "type": "string", - "order": 6 + "order": 6, + "group": "advanced" }, "ssl": { "title": "Connect using SSL", "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", "type": "boolean", "default": false, - "order": 7 + "order": 7, + "group": "security", + "always_show": true }, "ssl_mode": { "title": "SSL Modes", "description": "SSL connection modes. \n Read more in the docs.", "type": "object", - "order": 7, + "order": 8, + "group": "security", "oneOf": [ { "title": "disable", @@ -218,7 +229,8 @@ "type": "object", "title": "Replication Method", "description": "Replication method for extracting data from the database.", - "order": 8, + "order": 9, + "group": "advanced", "oneOf": [ { "title": "Standard", @@ -276,7 +288,10 @@ "type": "string", "title": "LSN commit behaviour", "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": ["While reading Data", "After loading Data in the destination"], + "enum": [ + "While reading Data", + "After loading Data in the destination" + ], "default": "After loading Data in the destination", "order": 6 } @@ -288,6 +303,7 @@ "type": "object", "title": "SSH Tunnel Method", "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "group": "security", "oneOf": [ { "title": "No Tunnel", @@ -398,7 +414,23 @@ } ] } - } + }, + "groups": [ + { + "id": "db" + }, + { + "id": "auth" + }, + { + "id": "security", + "title": "Security" + }, + { + "id": "advanced", + "title": "Advanced" + } + ] }, "supported_destination_sync_modes": [] } diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_strict_encrypt_spec.json b/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_strict_encrypt_spec.json index 564c05f7d2f3..ef69abd725d9 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_strict_encrypt_spec.json +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_strict_encrypt_spec.json @@ -10,7 +10,8 @@ "title": "Host", "description": "Hostname of the database.", "type": "string", - "order": 0 + "order": 0, + "group": "db" }, "port": { "title": "Port", @@ -20,13 +21,15 @@ "maximum": 65536, "default": 5432, "examples": ["5432"], - "order": 1 + "order": 1, + "group": "db" }, "database": { "title": "Database Name", "description": "Name of the database.", "type": "string", - "order": 2 + "order": 2, + "group": "db" }, "schemas": { "title": "Schemas", @@ -38,32 +41,38 @@ "minItems": 0, "uniqueItems": true, "default": ["public"], - "order": 3 + "order": 3, + "group": "db" }, "username": { "title": "Username", "description": "Username to access the database.", "type": "string", - "order": 4 + "order": 4, + "group": "auth" }, "password": { "title": "Password", "description": "Password associated with the username.", "type": "string", "airbyte_secret": true, - "order": 5 + "order": 5, + "group": "auth", + "always_show": true }, "jdbc_url_params": { "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", "title": "JDBC URL Parameters (Advanced)", "type": "string", - "order": 6 + "order": 6, + "group": "advanced" }, "ssl_mode": { "title": "SSL Modes", "description": "SSL connection modes. \n Read more in the docs.", "type": "object", - "order": 7, + "order": 8, + "group": "security", "oneOf": [ { "title": "allow", @@ -198,7 +207,8 @@ "type": "object", "title": "Replication Method", "description": "Replication method for extracting data from the database.", - "order": 8, + "order": 9, + "group": "advanced", "oneOf": [ { "title": "Standard", @@ -256,7 +266,10 @@ "type": "string", "title": "LSN commit behaviour", "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": ["While reading Data", "After loading Data in the destination"], + "enum": [ + "While reading Data", + "After loading Data in the destination" + ], "default": "After loading Data in the destination", "order": 6 } @@ -378,7 +391,23 @@ } ] } - } + }, + "groups": [ + { + "id": "db" + }, + { + "id": "auth" + }, + { + "id": "security", + "title": "Security" + }, + { + "id": "advanced", + "title": "Advanced" + } + ] }, "supported_destination_sync_modes": [] } diff --git a/airbyte-integrations/connectors/source-postgres/src/test/resources/expected_spec.json b/airbyte-integrations/connectors/source-postgres/src/test/resources/expected_spec.json deleted file mode 100644 index 2425013ebe14..000000000000 --- a/airbyte-integrations/connectors/source-postgres/src/test/resources/expected_spec.json +++ /dev/null @@ -1,383 +0,0 @@ -{ - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Source Spec", - "type": "object", - "required": ["host", "port", "database", "username"], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": ["5432"], - "order": 1 - }, - "database": { - "title": "Database Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": ["public"], - "order": 3 - }, - "username": { - "title": "Username", - "description": "Username to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 6 - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n Read more in the docs.", - "type": "object", - "order": 7, - "oneOf": [ - { - "title": "allow", - "additionalProperties": true, - "description": "Enables encryption only when required by the source database.", - "required": ["mode"], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, - { - "title": "prefer", - "additionalProperties": true, - "description": "Allows unencrypted connection only if the source database does not support encryption.", - "required": ["mode"], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, - { - "title": "require", - "additionalProperties": true, - "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", - "required": ["mode"], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, - { - "title": "verify-ca", - "additionalProperties": true, - "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", - "required": ["mode", "ca_certificate"], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2 - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, - { - "title": "verify-full", - "additionalProperties": true, - "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", - "required": ["mode", "ca_certificate"], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2 - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } - ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method for extracting data from the database.", - "order": 8, - "oneOf": [ - { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": ["method"], - "properties": { - "method": { - "type": "string", - "const": "Standard", - "order": 0 - } - } - }, - { - "title": "Logical Replication (CDC)", - "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", - "required": ["method", "replication_slot", "publication"], - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 1 - }, - "plugin": { - "type": "string", - "title": "Plugin", - "description": "A logical decoding plugin installed on the PostgreSQL server. The `pgoutput` plugin is used by default. The `wal2json` plugin is deprecated and will soon be removed so it's not recommended to use. Read more about selecting replication plugins.", - "enum": ["pgoutput", "wal2json"], - "default": "pgoutput", - "order": 2 - }, - "replication_slot": { - "type": "string", - "title": "Replication Slot", - "description": "A plugin logical replication slot. Read about replication slots.", - "order": 3 - }, - "publication": { - "type": "string", - "title": "Publication", - "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", - "order": 4 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "order": 5, - "min": 120, - "max": 1200 - }, - "lsn_commit_behaviour": { - "type": "string", - "title": "LSN commit behaviour", - "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": ["While reading Data", "After loading Data in the destination"], - "default": "After loading Data in the destination", - "order": 6 - } - } - } - ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ - { - "title": "No Tunnel", - "required": ["tunnel_method"], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, - { - "title": "SSH Key Authentication", - "required": [ - "tunnel_method", - "tunnel_host", - "tunnel_port", - "tunnel_user", - "ssh_key" - ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": ["22"], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, - { - "title": "Password Authentication", - "required": [ - "tunnel_method", - "tunnel_host", - "tunnel_port", - "tunnel_user", - "tunnel_user_password" - ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": ["22"], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } - ] - } - } - }, - "supported_destination_sync_modes": [] -} diff --git a/connectors.md b/connectors.md index aaee91ba2a01..7ae6aae72427 100644 --- a/connectors.md +++ b/connectors.md @@ -83,7 +83,7 @@ | **GNews** | GNews icon | Source | airbyte/source-gnews:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/gnews) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gnews) | `ce38aec4-5a77-439a-be29-9ca44fd4e811` | | **Genesys** | Genesys icon | Source | airbyte/source-genesys:0.1.0 | unknown | [link](https://docs.airbyte.com/integrations/sources/genesys) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-genesys) | `5ea4459a-8f1a-452a-830f-a65c38cc438d` | | **GetLago** | GetLago icon | Source | airbyte/source-getlago:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/getlago) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-getlago) | `e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f` | -| **GitHub** | GitHub icon | Source | airbyte/source-github:0.4.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/github) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-github) | `ef69ef6e-aa7f-4af1-a01d-ef775033524e` | +| **GitHub** | GitHub icon | Source | airbyte/source-github:0.4.4 | generally_available | [link](https://docs.airbyte.com/integrations/sources/github) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-github) | `ef69ef6e-aa7f-4af1-a01d-ef775033524e` | | **Gitlab** | Gitlab icon | Source | airbyte/source-gitlab:1.0.3 | beta | [link](https://docs.airbyte.com/integrations/sources/gitlab) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gitlab) | `5e6175e5-68e1-4c17-bff9-56103bbb0d80` | | **Glassfrog** | Glassfrog icon | Source | airbyte/source-glassfrog:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/glassfrog) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-glassfrog) | `cf8ff320-6272-4faa-89e6-4402dc17e5d5` | | **GoCardless** | GoCardless icon | Source | airbyte/source-gocardless:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/gocardless) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gocardless) | `ba15ac82-5c6a-4fb2-bf24-925c23a1180c` | @@ -178,7 +178,7 @@ | **PokeAPI** | PokeAPI icon | Source | airbyte/source-pokeapi:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/sources/pokeapi) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pokeapi) | `6371b14b-bc68-4236-bfbd-468e8df8e968` | | **Polygon Stock API** | Polygon Stock API icon | Source | airbyte/source-polygon-stock-api:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/polygon-stock-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-polygon-stock-api) | `5807d72f-0abc-49f9-8fa5-ae820007032b` | | **PostHog** | PostHog icon | Source | airbyte/source-posthog:0.1.8 | beta | [link](https://docs.airbyte.com/integrations/sources/posthog) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-posthog) | `af6d50ee-dddf-4126-a8ee-7faee990774f` | -| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.7 | generally_available | [link](https://docs.airbyte.com/integrations/sources/postgres) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | +| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.8 | generally_available | [link](https://docs.airbyte.com/integrations/sources/postgres) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | | **Postmark App** | Postmark App icon | Source | airbyte/source-postmarkapp:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/postmarkapp) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postmarkapp) | `cde75ca1-1e28-4a0f-85bb-90c546de9f1f` | | **PrestaShop** | PrestaShop icon | Source | airbyte/source-prestashop:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/prestashop) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-prestashop) | `d60a46d4-709f-4092-a6b7-2457f7d455f5` | | **Primetric** | Primetric icon | Source | airbyte/source-primetric:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/primetric) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-primetric) | `f636c3c6-4077-45ac-b109-19fc62a283c1` | diff --git a/docs/integrations/sources/github.md b/docs/integrations/sources/github.md index fb9317dc1ca3..231f49d1735c 100644 --- a/docs/integrations/sources/github.md +++ b/docs/integrations/sources/github.md @@ -163,6 +163,7 @@ The GitHub connector should not run into GitHub API limitations under normal usa | Version | Date | Pull Request | Subject | |:--------|:-----------|:------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.4.4 | 2023-03-17 | [24255](https://github.com/airbytehq/airbyte/pull/24255) | Add field groups and titles to improve display of connector setup form | | 0.4.3 | 2023-03-04 | [22993](https://github.com/airbytehq/airbyte/pull/22993) | Specified date formatting in specification | | | | 0.4.2 | 2023-03-03 | [23467](https://github.com/airbytehq/airbyte/pull/23467) | added user friendly messages, added AirbyteTracedException config_error, updated SAT | | | | 0.4.1 | 2023-01-27 | [22039](https://github.com/airbytehq/airbyte/pull/22039) | Set `AvailabilityStrategy` for streams explicitly to `None` | | | diff --git a/docs/integrations/sources/postgres.md b/docs/integrations/sources/postgres.md index d12aa3e15c16..c342acbf4a4f 100644 --- a/docs/integrations/sources/postgres.md +++ b/docs/integrations/sources/postgres.md @@ -396,6 +396,7 @@ The root causes is that the WALs needed for the incremental sync has been remove | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.8 | 2023-03-22 | [24255](https://github.com/airbytehq/airbyte/pull/24255) | Add field groups and titles to improve display of connector setup form | | 2.0.7 | 2022-03-21 | [24207](https://github.com/airbytehq/airbyte/pull/24207) | Fix incorrect schema change warning in CDC mode | | 2.0.6 | 2022-03-21 | [24271](https://github.com/airbytehq/airbyte/pull/24271) | Fix NPE in CDC mode | | 2.0.5 | 2022-03-21 | [21533](https://github.com/airbytehq/airbyte/pull/21533) | Add integration with datadog |