You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by bl...@apache.org on 2021/11/07 18:58:27 UTC

[iceberg] branch master updated: Flink: Separate the 1.13 code from 1.12 (#3476)

This is an automated email from the ASF dual-hosted git repository.

blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/master by this push:
     new 1d81643  Flink: Separate the 1.13 code from 1.12 (#3476)
1d81643 is described below

commit 1d8164383baf0e343ade13b21ed0e4d4d02c56cd
Author: openinx <op...@gmail.com>
AuthorDate: Mon Nov 8 02:58:16 2021 +0800

    Flink: Separate the 1.13 code from 1.12 (#3476)
---
 .github/workflows/flink-ci.yml                     | 26 -------
 flink/build.gradle                                 | 89 ----------------------
 flink/v1.12/build.gradle                           | 13 ----
 .../org/apache/iceberg/flink/CatalogLoader.java    |  0
 .../org/apache/iceberg/flink/FlinkCatalog.java     |  0
 .../apache/iceberg/flink/FlinkCatalogFactory.java  |  0
 .../apache/iceberg/flink/FlinkConfigOptions.java   |  0
 .../iceberg/flink/FlinkDynamicTableFactory.java    |  0
 .../org/apache/iceberg/flink/FlinkFilters.java     |  0
 .../org/apache/iceberg/flink/FlinkFixupTypes.java  |  0
 .../org/apache/iceberg/flink/FlinkSchemaUtil.java  |  0
 .../org/apache/iceberg/flink/FlinkTypeToType.java  |  0
 .../org/apache/iceberg/flink/FlinkTypeVisitor.java |  0
 .../org/apache/iceberg/flink/IcebergTableSink.java |  0
 .../apache/iceberg/flink/IcebergTableSource.java   |  0
 .../org/apache/iceberg/flink/RowDataWrapper.java   |  0
 .../java/org/apache/iceberg/flink/TableLoader.java |  0
 .../org/apache/iceberg/flink/TypeToFlinkType.java  |  0
 .../org/apache/iceberg/flink/actions/Actions.java  |  0
 .../flink/actions/RewriteDataFilesAction.java      |  0
 .../flink/data/AvroWithFlinkSchemaVisitor.java     |  0
 .../apache/iceberg/flink/data/FlinkAvroReader.java |  0
 .../apache/iceberg/flink/data/FlinkAvroWriter.java |  0
 .../apache/iceberg/flink/data/FlinkOrcReader.java  |  0
 .../apache/iceberg/flink/data/FlinkOrcReaders.java |  0
 .../apache/iceberg/flink/data/FlinkOrcWriter.java  |  0
 .../apache/iceberg/flink/data/FlinkOrcWriters.java |  0
 .../iceberg/flink/data/FlinkParquetReaders.java    |  0
 .../iceberg/flink/data/FlinkParquetWriters.java    |  0
 .../iceberg/flink/data/FlinkSchemaVisitor.java     |  0
 .../iceberg/flink/data/FlinkValueReaders.java      |  0
 .../iceberg/flink/data/FlinkValueWriters.java      |  0
 .../flink/data/ParquetWithFlinkSchemaVisitor.java  |  0
 .../iceberg/flink/data/RowDataProjection.java      |  0
 .../org/apache/iceberg/flink/data/RowDataUtil.java |  0
 .../iceberg/flink/sink/BaseDeltaTaskWriter.java    |  0
 .../apache/iceberg/flink/sink/DeltaManifests.java  |  0
 .../flink/sink/DeltaManifestsSerializer.java       |  0
 .../iceberg/flink/sink/FlinkAppenderFactory.java   |  0
 .../iceberg/flink/sink/FlinkFileWriterFactory.java |  0
 .../iceberg/flink/sink/FlinkManifestUtil.java      |  0
 .../org/apache/iceberg/flink/sink/FlinkSink.java   |  0
 .../iceberg/flink/sink/IcebergFilesCommitter.java  |  0
 .../iceberg/flink/sink/IcebergStreamWriter.java    |  0
 .../flink/sink/ManifestOutputFileFactory.java      |  0
 .../iceberg/flink/sink/PartitionKeySelector.java   |  0
 .../iceberg/flink/sink/PartitionedDeltaWriter.java |  0
 .../flink/sink/RowDataTaskWriterFactory.java       |  0
 .../iceberg/flink/sink/TaskWriterFactory.java      |  0
 .../flink/sink/UnpartitionedDeltaWriter.java       |  0
 .../apache/iceberg/flink/source/DataIterator.java  |  0
 .../iceberg/flink/source/FileScanTaskReader.java   |  0
 .../iceberg/flink/source/FlinkInputFormat.java     |  0
 .../iceberg/flink/source/FlinkInputSplit.java      |  0
 .../apache/iceberg/flink/source/FlinkSource.java   |  0
 .../iceberg/flink/source/FlinkSplitGenerator.java  |  0
 .../flink/source/RowDataFileScanTaskReader.java    |  0
 .../iceberg/flink/source/RowDataRewriter.java      |  0
 .../apache/iceberg/flink/source/ScanContext.java   |  0
 .../flink/source/StreamingMonitorFunction.java     |  0
 .../flink/source/StreamingReaderOperator.java      |  0
 .../iceberg/flink/util/FlinkCompatibilityUtil.java |  0
 .../org.apache.flink.table.factories.Factory       |  0
 .../org.apache.flink.table.factories.TableFactory  |  0
 .../apache/iceberg/flink/FlinkCatalogTestBase.java |  0
 .../org/apache/iceberg/flink/FlinkTestBase.java    |  0
 .../apache/iceberg/flink/MiniClusterResource.java  |  0
 .../org/apache/iceberg/flink/RowDataConverter.java |  0
 .../org/apache/iceberg/flink/SimpleDataUtil.java   |  0
 .../iceberg/flink/TestCatalogTableLoader.java      |  0
 .../apache/iceberg/flink/TestChangeLogTable.java   |  0
 .../iceberg/flink/TestDataFileSerialization.java   |  0
 .../org/apache/iceberg/flink/TestFixtures.java     |  0
 .../iceberg/flink/TestFlinkCatalogDatabase.java    |  0
 .../iceberg/flink/TestFlinkCatalogFactory.java     |  0
 .../iceberg/flink/TestFlinkCatalogTable.java       |  0
 .../flink/TestFlinkCatalogTablePartitions.java     |  0
 .../org/apache/iceberg/flink/TestFlinkFilters.java |  0
 .../apache/iceberg/flink/TestFlinkHiveCatalog.java |  0
 .../apache/iceberg/flink/TestFlinkSchemaUtil.java  |  0
 .../apache/iceberg/flink/TestFlinkTableSink.java   |  0
 .../apache/iceberg/flink/TestFlinkTableSource.java |  0
 .../java/org/apache/iceberg/flink/TestHelpers.java |  0
 .../apache/iceberg/flink/TestIcebergConnector.java |  0
 .../flink/TestManifestFileSerialization.java       |  0
 .../apache/iceberg/flink/TestRowDataWrapper.java   |  0
 .../org/apache/iceberg/flink/TestTableLoader.java  |  0
 .../flink/actions/TestRewriteDataFilesAction.java  |  0
 .../apache/iceberg/flink/data/RandomRowData.java   |  0
 .../flink/data/TestFlinkAvroReaderWriter.java      |  0
 .../flink/data/TestFlinkOrcReaderWriter.java       |  0
 .../iceberg/flink/data/TestFlinkParquetReader.java |  0
 .../iceberg/flink/data/TestFlinkParquetWriter.java |  0
 .../iceberg/flink/data/TestRowDataProjection.java  |  0
 .../iceberg/flink/data/TestRowProjection.java      |  0
 .../iceberg/flink/sink/TestDeltaTaskWriter.java    |  0
 .../flink/sink/TestFlinkAppenderFactory.java       |  0
 .../flink/sink/TestFlinkFileWriterFactory.java     |  0
 .../iceberg/flink/sink/TestFlinkIcebergSink.java   |  0
 .../iceberg/flink/sink/TestFlinkIcebergSinkV2.java |  0
 .../iceberg/flink/sink/TestFlinkManifest.java      |  0
 .../flink/sink/TestFlinkPartitioningWriters.java   |  0
 .../flink/sink/TestFlinkPositionDeltaWriters.java  |  0
 .../flink/sink/TestFlinkRollingFileWriters.java    |  0
 .../iceberg/flink/sink/TestFlinkWriterMetrics.java |  0
 .../flink/sink/TestIcebergFilesCommitter.java      |  0
 .../flink/sink/TestIcebergStreamWriter.java        |  0
 .../flink/sink/TestRowDataPartitionKey.java        |  0
 .../apache/iceberg/flink/sink/TestTaskWriters.java |  0
 .../iceberg/flink/source/BoundedTableFactory.java  |  0
 .../iceberg/flink/source/BoundedTestSource.java    |  0
 .../flink/source/ChangeLogTableTestBase.java       |  0
 .../flink/source/TestBoundedTableFactory.java      |  0
 .../iceberg/flink/source/TestFlinkInputFormat.java |  0
 .../source/TestFlinkInputFormatReaderDeletes.java  |  0
 .../flink/source/TestFlinkMergingMetrics.java      |  0
 .../flink/source/TestFlinkReaderDeletesBase.java   |  0
 .../apache/iceberg/flink/source/TestFlinkScan.java |  0
 .../iceberg/flink/source/TestFlinkScanSql.java     |  0
 .../iceberg/flink/source/TestFlinkSource.java      |  0
 .../iceberg/flink/source/TestStreamScanSql.java    |  0
 .../flink/source/TestStreamingMonitorFunction.java |  0
 .../flink/source/TestStreamingReaderOperator.java  |  0
 .../org.apache.flink.table.factories.Factory       |  0
 flink/v1.13/build.gradle                           | 13 ----
 .../org/apache/iceberg/flink/CatalogLoader.java    |  0
 .../org/apache/iceberg/flink/FlinkCatalog.java     |  0
 .../apache/iceberg/flink/FlinkCatalogFactory.java  |  0
 .../apache/iceberg/flink/FlinkConfigOptions.java   |  0
 .../iceberg/flink/FlinkDynamicTableFactory.java    |  0
 .../org/apache/iceberg/flink/FlinkFilters.java     |  0
 .../org/apache/iceberg/flink/FlinkFixupTypes.java  |  0
 .../org/apache/iceberg/flink/FlinkSchemaUtil.java  |  0
 .../org/apache/iceberg/flink/FlinkTypeToType.java  |  0
 .../org/apache/iceberg/flink/FlinkTypeVisitor.java |  0
 .../org/apache/iceberg/flink/IcebergTableSink.java |  0
 .../apache/iceberg/flink/IcebergTableSource.java   |  0
 .../org/apache/iceberg/flink/RowDataWrapper.java   |  0
 .../java/org/apache/iceberg/flink/TableLoader.java |  0
 .../org/apache/iceberg/flink/TypeToFlinkType.java  |  0
 .../org/apache/iceberg/flink/actions/Actions.java  |  0
 .../flink/actions/RewriteDataFilesAction.java      |  0
 .../flink/data/AvroWithFlinkSchemaVisitor.java     |  0
 .../apache/iceberg/flink/data/FlinkAvroReader.java |  0
 .../apache/iceberg/flink/data/FlinkAvroWriter.java |  0
 .../apache/iceberg/flink/data/FlinkOrcReader.java  |  0
 .../apache/iceberg/flink/data/FlinkOrcReaders.java |  0
 .../apache/iceberg/flink/data/FlinkOrcWriter.java  |  0
 .../apache/iceberg/flink/data/FlinkOrcWriters.java |  0
 .../iceberg/flink/data/FlinkParquetReaders.java    |  0
 .../iceberg/flink/data/FlinkParquetWriters.java    |  0
 .../iceberg/flink/data/FlinkSchemaVisitor.java     |  0
 .../iceberg/flink/data/FlinkValueReaders.java      |  0
 .../iceberg/flink/data/FlinkValueWriters.java      |  0
 .../flink/data/ParquetWithFlinkSchemaVisitor.java  |  0
 .../iceberg/flink/data/RowDataProjection.java      |  0
 .../org/apache/iceberg/flink/data/RowDataUtil.java |  0
 .../iceberg/flink/sink/BaseDeltaTaskWriter.java    |  0
 .../apache/iceberg/flink/sink/DeltaManifests.java  |  0
 .../flink/sink/DeltaManifestsSerializer.java       |  0
 .../iceberg/flink/sink/FlinkAppenderFactory.java   |  0
 .../iceberg/flink/sink/FlinkFileWriterFactory.java |  0
 .../iceberg/flink/sink/FlinkManifestUtil.java      |  0
 .../org/apache/iceberg/flink/sink/FlinkSink.java   |  0
 .../iceberg/flink/sink/IcebergFilesCommitter.java  |  0
 .../iceberg/flink/sink/IcebergStreamWriter.java    |  0
 .../flink/sink/ManifestOutputFileFactory.java      |  0
 .../iceberg/flink/sink/PartitionKeySelector.java   |  0
 .../iceberg/flink/sink/PartitionedDeltaWriter.java |  0
 .../flink/sink/RowDataTaskWriterFactory.java       |  0
 .../iceberg/flink/sink/TaskWriterFactory.java      |  0
 .../flink/sink/UnpartitionedDeltaWriter.java       |  0
 .../apache/iceberg/flink/source/DataIterator.java  |  0
 .../iceberg/flink/source/FileScanTaskReader.java   |  0
 .../iceberg/flink/source/FlinkInputFormat.java     |  0
 .../iceberg/flink/source/FlinkInputSplit.java      |  0
 .../apache/iceberg/flink/source/FlinkSource.java   |  0
 .../iceberg/flink/source/FlinkSplitGenerator.java  |  0
 .../flink/source/RowDataFileScanTaskReader.java    |  0
 .../iceberg/flink/source/RowDataRewriter.java      |  0
 .../apache/iceberg/flink/source/ScanContext.java   |  0
 .../flink/source/StreamingMonitorFunction.java     |  0
 .../flink/source/StreamingReaderOperator.java      |  0
 .../iceberg/flink/util/FlinkCompatibilityUtil.java |  0
 .../org.apache.flink.table.factories.Factory       |  0
 .../org.apache.flink.table.factories.TableFactory  |  0
 .../apache/iceberg/flink/FlinkCatalogTestBase.java |  0
 .../org/apache/iceberg/flink/FlinkTestBase.java    |  0
 .../apache/iceberg/flink/MiniClusterResource.java  |  0
 .../org/apache/iceberg/flink/RowDataConverter.java |  0
 .../org/apache/iceberg/flink/SimpleDataUtil.java   |  0
 .../iceberg/flink/TestCatalogTableLoader.java      |  0
 .../apache/iceberg/flink/TestChangeLogTable.java   |  0
 .../iceberg/flink/TestDataFileSerialization.java   |  0
 .../org/apache/iceberg/flink/TestFixtures.java     |  0
 .../iceberg/flink/TestFlinkCatalogDatabase.java    |  0
 .../iceberg/flink/TestFlinkCatalogFactory.java     |  0
 .../iceberg/flink/TestFlinkCatalogTable.java       |  0
 .../flink/TestFlinkCatalogTablePartitions.java     |  0
 .../org/apache/iceberg/flink/TestFlinkFilters.java |  0
 .../apache/iceberg/flink/TestFlinkHiveCatalog.java |  0
 .../apache/iceberg/flink/TestFlinkSchemaUtil.java  |  0
 .../apache/iceberg/flink/TestFlinkTableSink.java   |  0
 .../apache/iceberg/flink/TestFlinkTableSource.java |  0
 .../java/org/apache/iceberg/flink/TestHelpers.java |  0
 .../apache/iceberg/flink/TestIcebergConnector.java |  0
 .../flink/TestManifestFileSerialization.java       |  0
 .../apache/iceberg/flink/TestRowDataWrapper.java   |  0
 .../org/apache/iceberg/flink/TestTableLoader.java  |  0
 .../flink/actions/TestRewriteDataFilesAction.java  |  0
 .../apache/iceberg/flink/data/RandomRowData.java   |  0
 .../flink/data/TestFlinkAvroReaderWriter.java      |  0
 .../flink/data/TestFlinkOrcReaderWriter.java       |  0
 .../iceberg/flink/data/TestFlinkParquetReader.java |  0
 .../iceberg/flink/data/TestFlinkParquetWriter.java |  0
 .../iceberg/flink/data/TestRowDataProjection.java  |  0
 .../iceberg/flink/data/TestRowProjection.java      |  0
 .../iceberg/flink/sink/TestDeltaTaskWriter.java    |  0
 .../flink/sink/TestFlinkAppenderFactory.java       |  0
 .../flink/sink/TestFlinkFileWriterFactory.java     |  0
 .../iceberg/flink/sink/TestFlinkIcebergSink.java   |  0
 .../iceberg/flink/sink/TestFlinkIcebergSinkV2.java |  0
 .../iceberg/flink/sink/TestFlinkManifest.java      |  0
 .../flink/sink/TestFlinkPartitioningWriters.java   |  0
 .../flink/sink/TestFlinkPositionDeltaWriters.java  |  0
 .../flink/sink/TestFlinkRollingFileWriters.java    |  0
 .../iceberg/flink/sink/TestFlinkWriterMetrics.java |  0
 .../flink/sink/TestIcebergFilesCommitter.java      |  0
 .../flink/sink/TestIcebergStreamWriter.java        |  0
 .../flink/sink/TestRowDataPartitionKey.java        |  0
 .../apache/iceberg/flink/sink/TestTaskWriters.java |  0
 .../iceberg/flink/source/BoundedTableFactory.java  |  0
 .../iceberg/flink/source/BoundedTestSource.java    |  0
 .../flink/source/ChangeLogTableTestBase.java       |  0
 .../flink/source/TestBoundedTableFactory.java      |  0
 .../iceberg/flink/source/TestFlinkInputFormat.java |  0
 .../source/TestFlinkInputFormatReaderDeletes.java  |  0
 .../flink/source/TestFlinkMergingMetrics.java      |  0
 .../flink/source/TestFlinkReaderDeletesBase.java   |  0
 .../apache/iceberg/flink/source/TestFlinkScan.java |  0
 .../iceberg/flink/source/TestFlinkScanSql.java     |  0
 .../iceberg/flink/source/TestFlinkSource.java      |  0
 .../iceberg/flink/source/TestStreamScanSql.java    |  0
 .../flink/source/TestStreamingMonitorFunction.java |  0
 .../flink/source/TestStreamingReaderOperator.java  |  0
 .../org.apache.flink.table.factories.Factory       |  0
 246 files changed, 141 deletions(-)

diff --git a/.github/workflows/flink-ci.yml b/.github/workflows/flink-ci.yml
index e703370..3edd270 100644
--- a/.github/workflows/flink-ci.yml
+++ b/.github/workflows/flink-ci.yml
@@ -52,32 +52,6 @@ on:
     - 'site/**'
 
 jobs:
-  flink-common-tests:
-    runs-on: ubuntu-latest
-    strategy:
-      matrix:
-        jvm: [8, 11]
-    env:
-      SPARK_LOCAL_IP: localhost
-    steps:
-    - uses: actions/checkout@v2
-    - uses: actions/setup-java@v1
-      with:
-        java-version: ${{ matrix.jvm }}
-    - uses: actions/cache@v2
-      with:
-        path: ~/.gradle/caches
-        key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
-        restore-keys: ${{ runner.os }}-gradle
-    - run: echo -e "$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)\t$(hostname -f) $(hostname -s)" | sudo tee -a /etc/hosts
-    - run: ./gradlew -DsparkVersions= -DhiveVersions= :iceberg-flink:check -Pquick=true -x javadoc
-    - uses: actions/upload-artifact@v2
-      if: failure()
-      with:
-        name: test logs
-        path: |
-          **/build/testlogs
-
   flink-tests:
     runs-on: ubuntu-latest
     strategy:
diff --git a/flink/build.gradle b/flink/build.gradle
index bbf6517..41b9e63 100644
--- a/flink/build.gradle
+++ b/flink/build.gradle
@@ -17,95 +17,6 @@
  * under the License.
  */
 
-project(':iceberg-flink') {
-  dependencies {
-    implementation project(path: ':iceberg-bundled-guava', configuration: 'shadow')
-    api project(':iceberg-api')
-    implementation project(':iceberg-common')
-    implementation project(':iceberg-core')
-    api project(':iceberg-data')
-    implementation project(':iceberg-orc')
-    implementation project(':iceberg-parquet')
-    implementation project(':iceberg-hive-metastore')
-
-    compileOnly "org.apache.flink:flink-streaming-java_2.12"
-    compileOnly "org.apache.flink:flink-streaming-java_2.12::tests"
-    compileOnly "org.apache.flink:flink-table-api-java-bridge_2.12"
-    compileOnly "org.apache.flink:flink-table-planner-blink_2.12"
-    compileOnly "org.apache.flink:flink-table-planner_2.12"
-    compileOnly "org.apache.hadoop:hadoop-hdfs"
-    compileOnly "org.apache.hadoop:hadoop-common"
-    compileOnly("org.apache.hadoop:hadoop-minicluster") {
-      exclude group: 'org.apache.avro', module: 'avro'
-    }
-
-    implementation("org.apache.parquet:parquet-avro") {
-      exclude group: 'org.apache.avro', module: 'avro'
-      // already shaded by Parquet
-      exclude group: 'it.unimi.dsi'
-      exclude group: 'org.codehaus.jackson'
-    }
-
-    compileOnly "org.apache.avro:avro"
-
-    implementation("org.apache.orc:orc-core::nohive") {
-      exclude group: 'org.apache.hadoop'
-      exclude group: 'commons-lang'
-      // These artifacts are shaded and included in the orc-core fat jar
-      exclude group: 'com.google.protobuf', module: 'protobuf-java'
-      exclude group: 'org.apache.hive', module: 'hive-storage-api'
-    }
-
-    testImplementation "org.apache.flink:flink-core"
-    testImplementation "org.apache.flink:flink-runtime_2.12"
-    testImplementation "org.apache.flink:flink-table-planner-blink_2.12"
-    testImplementation("org.apache.flink:flink-test-utils-junit") {
-      exclude group: 'junit'
-    }
-    testImplementation("org.apache.flink:flink-test-utils_2.12") {
-      exclude group: "org.apache.curator", module: 'curator-test'
-      exclude group: 'junit'
-    }
-
-    testImplementation project(path: ':iceberg-hive-metastore', configuration: 'testArtifacts')
-    testImplementation project(path: ':iceberg-api', configuration: 'testArtifacts')
-    testImplementation project(path: ':iceberg-core', configuration: 'testArtifacts')
-    testImplementation project(path: ':iceberg-data', configuration: 'testArtifacts')
-
-    // By default, hive-exec is a fat/uber jar and it exports a guava library
-    // that's really old. We use the core classifier to be able to override our guava
-    // version. Luckily, hive-exec seems to work okay so far with this version of guava
-    // See: https://github.com/apache/hive/blob/master/ql/pom.xml#L911 for more context.
-    testImplementation("org.apache.hive:hive-exec::core") {
-      exclude group: 'org.apache.avro', module: 'avro'
-      exclude group: 'org.slf4j', module: 'slf4j-log4j12'
-      exclude group: 'org.pentaho' // missing dependency
-      exclude group: 'org.apache.hive', module: 'hive-llap-tez'
-      exclude group: 'org.apache.logging.log4j'
-      exclude group: 'com.google.protobuf', module: 'protobuf-java'
-      exclude group: 'org.apache.calcite'
-      exclude group: 'org.apache.calcite.avatica'
-      exclude group: 'com.google.code.findbugs', module: 'jsr305'
-    }
-
-    testImplementation("org.apache.hive:hive-metastore") {
-      exclude group: 'org.apache.avro', module: 'avro'
-      exclude group: 'org.slf4j', module: 'slf4j-log4j12'
-      exclude group: 'org.pentaho' // missing dependency
-      exclude group: 'org.apache.hbase'
-      exclude group: 'org.apache.logging.log4j'
-      exclude group: 'co.cask.tephra'
-      exclude group: 'com.google.code.findbugs', module: 'jsr305'
-      exclude group: 'org.eclipse.jetty.aggregate', module: 'jetty-all'
-      exclude group: 'org.eclipse.jetty.orbit', module: 'javax.servlet'
-      exclude group: 'org.apache.parquet', module: 'parquet-hadoop-bundle'
-      exclude group: 'com.tdunning', module: 'json'
-      exclude group: 'javax.transaction', module: 'transaction-api'
-      exclude group: 'com.zaxxer', module: 'HikariCP'
-    }
-  }
-}
-
 def flinkVersions = (System.getProperty("flinkVersions") != null ? System.getProperty("flinkVersions") : System.getProperty("defaultFlinkVersions")).split(",")
 
 if (flinkVersions.contains("1.12")) {
diff --git a/flink/v1.12/build.gradle b/flink/v1.12/build.gradle
index 46cefa8..2dd474e 100644
--- a/flink/v1.12/build.gradle
+++ b/flink/v1.12/build.gradle
@@ -30,19 +30,6 @@ configure(flinkProjects) {
 
 project(':iceberg-flink:iceberg-flink-1.12') {
 
-  sourceSets {
-    main {
-      java.srcDirs = [
-        "${project(':iceberg-flink').projectDir}/src/main/java",
-        "src/main/java"
-      ]
-      resources.srcDirs = [
-        "${project(':iceberg-flink').projectDir}/src/main/resources",
-        "src/main/resources"
-      ]
-    }
-  }
-
   dependencies {
     implementation project(path: ':iceberg-bundled-guava', configuration: 'shadow')
     api project(':iceberg-api')
diff --git a/flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/TableLoader.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/TableLoader.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/TableLoader.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/TableLoader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java b/flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java
similarity index 100%
copy from flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java
copy to flink/v1.12/flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java
diff --git a/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory b/flink/v1.12/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
similarity index 100%
copy from flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
copy to flink/v1.12/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
diff --git a/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory b/flink/v1.12/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory
similarity index 100%
copy from flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory
copy to flink/v1.12/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory
diff --git a/flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java b/flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java
similarity index 100%
copy from flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java
copy to flink/v1.12/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java
diff --git a/flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory b/flink/v1.12/flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory
similarity index 100%
copy from flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory
copy to flink/v1.12/flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory
diff --git a/flink/v1.13/build.gradle b/flink/v1.13/build.gradle
index b2c24d4..0e97de3 100644
--- a/flink/v1.13/build.gradle
+++ b/flink/v1.13/build.gradle
@@ -30,19 +30,6 @@ configure(flinkProjects) {
 
 project(':iceberg-flink:iceberg-flink-1.13') {
 
-  sourceSets {
-    main {
-      java.srcDirs = [
-          "${project(':iceberg-flink').projectDir}/src/main/java",
-          "src/main/java"
-      ]
-      resources.srcDirs = [
-          "${project(':iceberg-flink').projectDir}/src/main/resources",
-          "src/main/resources"
-      ]
-    }
-  }
-
   dependencies {
     implementation project(path: ':iceberg-bundled-guava', configuration: 'shadow')
     api project(':iceberg-api')
diff --git a/flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/CatalogLoader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalog.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkCatalogFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkConfigOptions.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkDynamicTableFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkFilters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkFixupTypes.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkSchemaUtil.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeToType.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/FlinkTypeVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSink.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/IcebergTableSource.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/TableLoader.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/TableLoader.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/TableLoader.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/TableLoader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/TypeToFlinkType.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/actions/Actions.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/actions/RewriteDataFilesAction.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/AvroWithFlinkSchemaVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkAvroWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcReaders.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkOrcWriters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetReaders.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkParquetWriters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkSchemaVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueReaders.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/FlinkValueWriters.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/ParquetWithFlinkSchemaVisitor.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/RowDataProjection.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/data/RowDataUtil.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/BaseDeltaTaskWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifests.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/DeltaManifestsSerializer.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkAppenderFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkFileWriterFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkManifestUtil.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/FlinkSink.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergFilesCommitter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/IcebergStreamWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/ManifestOutputFileFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionKeySelector.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/PartitionedDeltaWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/RowDataTaskWriterFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/TaskWriterFactory.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/sink/UnpartitionedDeltaWriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/DataIterator.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FileScanTaskReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputFormat.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkInputSplit.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSource.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/FlinkSplitGenerator.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/RowDataFileScanTaskReader.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/RowDataRewriter.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/ScanContext.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/StreamingMonitorFunction.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/source/StreamingReaderOperator.java
diff --git a/flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java b/flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java
similarity index 100%
rename from flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java
rename to flink/v1.13/flink/src/main/java/org/apache/iceberg/flink/util/FlinkCompatibilityUtil.java
diff --git a/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory b/flink/v1.13/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
similarity index 100%
rename from flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
rename to flink/v1.13/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.Factory
diff --git a/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory b/flink/v1.13/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory
similarity index 100%
rename from flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory
rename to flink/v1.13/flink/src/main/resources/META-INF/services/org.apache.flink.table.factories.TableFactory
diff --git a/flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/FlinkCatalogTestBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/FlinkTestBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/MiniClusterResource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/RowDataConverter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/SimpleDataUtil.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestCatalogTableLoader.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestChangeLogTable.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestDataFileSerialization.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFixtures.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogDatabase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTable.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkCatalogTablePartitions.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkFilters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkHiveCatalog.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkSchemaUtil.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSink.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestFlinkTableSource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestHelpers.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestIcebergConnector.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestManifestFileSerialization.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestRowDataWrapper.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/TestTableLoader.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/actions/TestRewriteDataFilesAction.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/RandomRowData.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkAvroReaderWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkOrcReaderWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetReader.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestFlinkParquetWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestRowDataProjection.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/data/TestRowProjection.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestDeltaTaskWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkAppenderFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkFileWriterFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSink.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkIcebergSinkV2.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkManifest.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPartitioningWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkPositionDeltaWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkRollingFileWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestFlinkWriterMetrics.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergFilesCommitter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestIcebergStreamWriter.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestRowDataPartitionKey.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/sink/TestTaskWriters.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTableFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/BoundedTestSource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/ChangeLogTableTestBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestBoundedTableFactory.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormat.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkInputFormatReaderDeletes.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkMergingMetrics.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkReaderDeletesBase.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScan.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkScanSql.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestFlinkSource.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamScanSql.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingMonitorFunction.java
diff --git a/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java b/flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java
similarity index 100%
rename from flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java
rename to flink/v1.13/flink/src/test/java/org/apache/iceberg/flink/source/TestStreamingReaderOperator.java
diff --git a/flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory b/flink/v1.13/flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory
similarity index 100%
rename from flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory
rename to flink/v1.13/flink/src/test/resources/META-INF/services/org.apache.flink.table.factories.Factory