| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to you under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # The default workflow for GitHub Actions that is used for continuous |
| # integration. A configuration file that is used to control when, where, |
| # and how different CI jobs are executed. |
| # For more information on how to modify this file check the following link: |
| # https://help.github.com/en/actions/automating-your-workflow-with-github-actions |
| |
| name: CI |
| |
| on: |
| push: |
| paths-ignore: |
| - 'site/**' |
| branches: |
| - '*' |
| pull_request: |
| types: [opened, synchronize, reopened, labeled] |
| paths-ignore: |
| - 'site/**' |
| branches: |
| - '*' |
| |
| concurrency: |
| # On main/release, we don't want any jobs cancelled so the sha is used to name the group |
| # On PR branches, we cancel the job if new commits are pushed |
| # More info: https://stackoverflow.com/a/68422069/253468 |
| group: ${{ (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release' ) && format('ci-main-{0}', github.sha) || format('ci-main-{0}', github.ref) }} |
| cancel-in-progress: true |
| |
| # Throw OutOfMemoryError in case less than 35% is free after full GC |
| # This avoids never-ending GC trashing if memory gets too low in case of a memory leak |
| env: |
| _JAVA_OPTIONS: '-XX:GCTimeLimit=90 -XX:GCHeapFreeLimit=35' |
| |
| jobs: |
| windows-jdk8: |
| if: github.event.action != 'labeled' |
| name: 'Windows (JDK 8)' |
| runs-on: windows-latest |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 8' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 8 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| # Arrow build is excluded because it is not supported on Windows |
| # See https://arrow.apache.org/docs/java/install.html#system-compatibility |
| arguments: --scan --no-parallel --no-daemon build javadoc --exclude-task :arrow:build |
| - name: 'sqlline and sqllsh' |
| shell: cmd |
| run: | |
| call sqlline.bat -e '!quit' |
| echo. |
| echo Sqlline example/csv |
| call example/csv/sqlline.bat --verbose -u jdbc:calcite:model=example/csv/src/test/resources/model.json -n admin -p admin -f example/csv/src/test/resources/smoke_test.sql |
| echo. |
| echo sqlsh |
| call sqlsh.bat -o headers "select count(*) commits, author from (select substring(author, 1, position(' <' in author)-1) author from git_commits) group by author order by count(*) desc, author limit 20" |
| |
| windows-jdk17: |
| if: github.event.action != 'labeled' |
| name: 'Windows (JDK 17)' |
| runs-on: windows-latest |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 17' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 17 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| # Arrow build is excluded because it is not supported on Windows |
| # See https://arrow.apache.org/docs/java/install.html#system-compatibility |
| arguments: --scan --no-parallel --no-daemon build --exclude-task :arrow:build |
| - name: 'sqlline and sqllsh' |
| shell: cmd |
| run: | |
| call sqlline.bat -e '!quit' |
| echo. |
| echo Sqlline example/csv |
| call example/csv/sqlline.bat --verbose -u jdbc:calcite:model=example/csv/src/test/resources/model.json -n admin -p admin -f example/csv/src/test/resources/smoke_test.sql |
| echo. |
| echo sqlsh |
| call sqlsh.bat -o headers "select count(*) commits, author from (select substring(author, 1, position(' <' in author)-1) author from git_commits) group by author order by count(*) desc, author limit 20" |
| |
| linux-jdk8-oldest-guava-tz: |
| if: github.event.action != 'labeled' |
| name: 'Linux (JDK 8), oldest Guava, America/New_York Timezone' |
| runs-on: ubuntu-latest |
| env: |
| TZ: 'America/New_York' # flips between −05:00 and −04:00 |
| GUAVA: '21.0' # oldest Guava |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 8' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 8 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} build |
| |
| linux-jdk8-latest-guava-tz: |
| if: github.event.action != 'labeled' |
| name: 'Linux (JDK 8), latest Guava, America/New_York Timezone' |
| runs-on: ubuntu-latest |
| env: |
| TZ: 'America/New_York' # flips between −05:00 and −04:00 |
| GUAVA: '32.1.3-jre' # latest supported Guava version |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 8' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 8 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} tasks build |
| |
| linux-jdk11-tz: |
| if: github.event.action != 'labeled' |
| name: 'Linux (JDK 11), Pacific/Chatham Timezone' |
| runs-on: ubuntu-latest |
| env: |
| TZ: 'Pacific/Chatham' # flips between +12:45 and +13:45 |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 11' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 11 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon build |
| |
| linux-jdk17: # LTS JDK version, don't remove until EOL |
| if: github.event.action != 'labeled' |
| name: 'Linux (JDK 17)' |
| runs-on: ubuntu-latest |
| env: |
| GUAVA: '21.0' # oldest Guava |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 17' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 17 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| # The following option `--add-opens=java.base/java.nio=ALL-UNNAMED` is required jdk17+ |
| # to avoid error. See https://arrow.apache.org/docs/java/install.html#java-compatibility |
| _JAVA_OPTIONS: ${{ env._JAVA_OPTIONS }} --add-opens=java.base/java.nio=ALL-UNNAMED |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} build |
| |
| linux-jdk19: # latest JDK version supported by ForbiddenAPIs plugin, keep this updated (see https://jdk.java.net/) |
| if: github.event.action != 'labeled' |
| name: 'Linux (JDK 19)' |
| runs-on: ubuntu-latest |
| env: |
| GUAVA: '21.0' # oldest Guava |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 19' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 19 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| # The following option `--add-opens=java.base/java.nio=ALL-UNNAMED` is required jdk17+ |
| # to avoid error. See https://arrow.apache.org/docs/java/install.html#java-compatibility |
| _JAVA_OPTIONS: ${{ env._JAVA_OPTIONS }} --add-opens=java.base/java.nio=ALL-UNNAMED |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} tasks build |
| |
| linux-avatica: |
| if: github.event.action != 'labeled' |
| name: 'Linux (JDK 11), Avatica main' |
| runs-on: ubuntu-latest |
| steps: |
| - name: 'Set up JDK 11' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 11 |
| distribution: 'zulu' |
| - name: 'Clone Avatica to Maven Local repository' |
| run: | |
| git clone --branch main --depth 100 https://github.com/apache/calcite-avatica.git ../calcite-avatica |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Build Avatica |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: avatica-jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| build-root-directory: ../calcite-avatica |
| arguments: publishToMavenLocal |
| properties: | |
| calcite.avatica.version=1.0.0-dev-main |
| skipJavadoc= |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: jdk${{ matrix.jdk }} |
| remote-build-cache-proxy-enabled: false |
| execution-only-caches: true |
| arguments: --scan --no-parallel --no-daemon build javadoc |
| properties: | |
| calcite.avatica.version=1.0.0-dev-main-SNAPSHOT |
| enableMavenLocal= |
| |
| mac: |
| if: github.event.action != 'labeled' |
| name: 'macOS (JDK 19)' |
| runs-on: macos-latest |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 19' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 19 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| # The following option `--add-opens=java.base/java.nio=ALL-UNNAMED` is required jdk17+ |
| # to avoid error. See https://arrow.apache.org/docs/java/install.html#java-compatibility |
| _JAVA_OPTIONS: ${{ env._JAVA_OPTIONS }} --add-opens=java.base/java.nio=ALL-UNNAMED |
| with: |
| job-id: jdk19 |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon build javadoc |
| - name: 'sqlline and sqllsh' |
| run: | |
| ./sqlline -e '!quit' |
| echo |
| echo Sqlline example/csv |
| ./example/csv/sqlline --verbose -u jdbc:calcite:model=example/csv/src/test/resources/model.json -n admin -p admin -f example/csv/src/test/resources/smoke_test.sql |
| echo |
| echo sqlsh |
| ./sqlsh -o headers "select count(*) commits, author from (select substring(author, 1, position(' <' in author)-1) author from git_commits) group by author order by count(*) desc, author limit 20" |
| |
| errorprone-guava-latest: # LTS JDK version, don't remove until EOL |
| if: github.event.action != 'labeled' |
| name: 'Error Prone (JDK 11), latest Guava' |
| runs-on: ubuntu-latest |
| env: |
| GUAVA: '32.1.3-jre' # ErrorProne checks for Beta APIs, so use the latest supported Guava version |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 11' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 11 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: errprone |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} -PenableErrorprone classes |
| |
| linux-checkerframework: |
| name: 'CheckerFramework (JDK 11)' |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 11' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 11 |
| distribution: 'zulu' |
| - name: 'Run CheckerFramework' |
| uses: burrunan/gradle-cache-action@v1 |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: checkerframework-jdk11 |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -PenableCheckerframework :linq4j:classes :core:classes |
| |
| linux-checkerframework-guava29: |
| name: 'CheckerFramework (JDK 11), oldest Guava' |
| runs-on: ubuntu-latest |
| env: |
| GUAVA: '21.0' # oldest Guava |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 11' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 11 |
| distribution: 'zulu' |
| - name: 'Run CheckerFramework' |
| uses: burrunan/gradle-cache-action@v1 |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: checkerframework-jdk11 |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon -Pguava.version=${{ env.GUAVA }} -PenableCheckerframework :linq4j:classes :core:classes |
| |
| linux-slow: |
| # Run slow tests when the commit is on main or it is requested explicitly by adding an |
| # appropriate label in the PR |
| if: github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'slow-tests-needed') |
| name: 'Linux (JDK 8) Slow Tests' |
| runs-on: ubuntu-latest |
| steps: |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 50 |
| - name: 'Set up JDK 8' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 8 |
| distribution: 'zulu' |
| - uses: burrunan/gradle-cache-action@v1 |
| name: Test |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| job-id: jdk8 |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon testSlow |
| |
| linux-druid: |
| if: github.event.action != 'labeled' |
| name: 'Druid Tests' |
| runs-on: ubuntu-latest |
| steps: |
| - name: 'Set up JDK 17' |
| uses: actions/setup-java@v2 |
| with: |
| java-version: 17 |
| distribution: 'zulu' |
| - name: 'Checkout Druid dataset' |
| uses: actions/checkout@v3 |
| with: |
| repository: zabetak/calcite-druid-dataset |
| fetch-depth: 1 |
| path: druid-dataset |
| - name: 'Start Druid containers' |
| working-directory: ./druid-dataset |
| run: | |
| chmod -R 777 storage |
| docker compose up -d |
| - name: 'Wait Druid nodes to startup' |
| run: | |
| until docker logs coordinator | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done |
| until docker logs router | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done |
| until docker logs historical | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done |
| until docker logs middlemanager | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done |
| until docker logs broker | grep "Successfully started lifecycle \[module\]"; do sleep 1s; done |
| - name: 'Index Foodmart/Wikipedia datasets' |
| working-directory: ./druid-dataset |
| run: ./index.sh 30s |
| - uses: actions/checkout@v3 |
| with: |
| fetch-depth: 1 |
| path: calcite |
| - uses: burrunan/gradle-cache-action@v1 |
| name: 'Run Druid tests' |
| timeout-minutes: 10 |
| env: |
| S3_BUILD_CACHE_ACCESS_KEY_ID: ${{ secrets.S3_BUILD_CACHE_ACCESS_KEY_ID }} |
| S3_BUILD_CACHE_SECRET_KEY: ${{ secrets.S3_BUILD_CACHE_SECRET_KEY }} |
| GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.GE_ACCESS_TOKEN }} |
| with: |
| build-root-directory: ./calcite |
| job-id: Druid8 |
| remote-build-cache-proxy-enabled: false |
| arguments: --scan --no-parallel --no-daemon :druid:test -Dcalcite.test.druid=true |