# 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. name: Static Checks CI on: push: branches: - master - '[0-9]+.[0-9]+.[0-9]+' # release branches - '[0-9]+.[0-9]+.[0-9]+-[A-Za-z0-9]+' # release branches pull_request: branches: - master - '[0-9]+.[0-9]+.[0-9]+' # release branches - '[0-9]+.[0-9]+.[0-9]+-[A-Za-z0-9]+' # release branches concurrency: group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}' cancel-in-progress: true env: MVN: mvn -B MAVEN_SKIP: -P skip-static-checks -Dweb.console.skip=true -Dmaven.javadoc.skip=true MAVEN_SKIP_TESTS: -P skip-tests MAVEN_OPTS: -Xmx3000m jobs: static-checks: strategy: fail-fast: false matrix: java: [ 'jdk8', 'jdk11', 'jdk17' ] runs-on: ubuntu-latest steps: - name: checkout branch uses: actions/checkout@v3 - name: set java version run: | export jdk=${{ matrix.java }} echo "java_version=${jdk:3}" >> $GITHUB_ENV - name: setup ${{ matrix.java }} run: export JAVA_HOME=$JAVA_HOME_${{ env.java_version }}_X64 - name: packaging check run: | ./.github/scripts/setup_generate_license.sh ${MVN} clean install -Prat --fail-at-end \ -pl '!benchmarks, !distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} -Dweb.console.skip=false -T1C ${MVN} install -Prat -Pdist -Pbundle-contrib-exts --fail-at-end \ -pl 'distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} -Dweb.console.skip=false -T1C - name: script checks # who watches the watchers? if: ${{ matrix.java == 'jdk8' }} run: ./check_test_suite_test.py - name: (openjdk11) strict compilation if: ${{ matrix.java == 'jdk11' }} # errorprone requires JDK 11 # Strict compilation requires more than 2 GB run: ${MVN} clean -DstrictCompile compile test-compile --fail-at-end ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} - name: maven install if: ${{ matrix.java == 'jdk8' }} run: | echo 'Running Maven install...' && ${MVN} clean install -q -ff -pl '!distribution,!:druid-it-image,!:druid-it-cases' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} -T1C && ${MVN} install -q -ff -pl 'distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} - name: license checks if: ${{ matrix.java == 'jdk8' }} run: ./.github/scripts/license_checks_script.sh - name: license checks for hadoop3 if: ${{ matrix.java == 'jdk8' }} env: HADOOP_PROFILE: -Phadoop3 run: ./.github/scripts/license_checks_script.sh - name: analyze dependencies if: ${{ matrix.java == 'jdk8' }} run: | ./.github/scripts/analyze_dependencies_script.sh - name: analyze dependencies for hadoop3 if: ${{ matrix.java == 'jdk8' }} env: HADOOP_PROFILE: -Phadoop3 run: | ./.github/scripts/analyze_dependencies_script.sh - name: animal sniffer checks if: ${{ matrix.java == 'jdk8' }} run: ${MVN} animal-sniffer:check --fail-at-end - name: checkstyle if: ${{ matrix.java == 'jdk8' }} run: ${MVN} checkstyle:checkstyle --fail-at-end - name: enforcer checks if: ${{ matrix.java == 'jdk8' }} run: ${MVN} enforcer:enforce --fail-at-end - name: forbidden api checks if: ${{ matrix.java == 'jdk8' }} run: ${MVN} forbiddenapis:check forbiddenapis:testCheck --fail-at-end - name: pmd checks if: ${{ matrix.java == 'jdk8' }} run: ${MVN} pmd:check --fail-at-end # TODO: consider adding pmd:cpd-check - name: spotbugs checks if: ${{ matrix.java == 'jdk8' }} run: ${MVN} spotbugs:check --fail-at-end -pl '!benchmarks' - name: intellij inspections if: ${{ matrix.java == 'jdk8' }} run: | docker run --rm \ -v $(pwd):/project \ -v ~/.m2:/home/inspect/.m2 \ ccaominh/intellij-inspect:1.0.0 \ /project/pom.xml \ /project/.idea/inspectionProfiles/Druid.xml \ --levels ERROR \ --scope JavaInspectionsScope - name: setup node if: ${{ matrix.java == 'jdk8' }} uses: actions/setup-node@v3 with: node-version: 16.17.0 - name: docs if: ${{ matrix.java == 'jdk8' }} run: | (cd website && npm install) cd website npm run link-lint npm run spellcheck - name: web console if: ${{ matrix.java == 'jdk8' }} run: | ${MVN} test -pl 'web-console' cd web-console { for i in 1 2 3; do npm run codecov && break || sleep 15; done } - name: web console end-to-end test if: ${{ matrix.java == 'jdk8' }} run: | ./.github/scripts/setup_generate_license.sh web-console/script/druid build web-console/script/druid start (cd web-console && npm run test-e2e) web-console/script/druid stop