diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 00000000..35e49975 --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,33 @@ +# +# Copyright Pravega Authors. +# +# Licensed 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. +# +codecov: + require_ci_to_pass: yes + max_report_age: off + notify: + wait_for_ci: yes + +coverage: + status: + project: + default: + threshold: 0.5% + patch: + default: + target: 80% + ignore: + - "**/generated/**" + - "standalone" + - "test" diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml new file mode 100644 index 00000000..7d220a1d --- /dev/null +++ b/.github/workflows/gradle.yml @@ -0,0 +1,154 @@ +# +# Copyright (c) Dell Inc., or its subsidiaries. All Rights Reserved. +# +# Licensed 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 +# +name: build + +on: [push, pull_request, workflow_dispatch] + # workflow_dispatch should make manually triggered ci/cd possible + # workflow file (like this) with `workflow_dispatch` after on should exist on the **master** or default branch, + # or there will be no ui for a manual trigger. https://github.community/t/workflow-dispatch-event-not-working/128856/2 + + # + # Set 'GRADLE_OPTS' to pass additional custom parameters to each ./gradlew invocation in this workflow. + # Example '--info' or '--debug'. + #GRADLE_OPTS: --info + +# The workflow begins with a compilation and static analysis job that also caches the build output and source code, +# followed by a number of parallel test jobs (which make use of that cached artifacts). +# +# Once the build job and all the test jobs complete successfully, a final (no-op) job ("build_and_test_complete") will +# automatically complete. This job must NOT be renamed as the GitHub Pravega Repository gates merges into master on +# this step passing. +# +# Finally, a "snapshot" job is triggered only for pushes (commits) to master and release branches, which publishes all +# artifacts to a public repository. + +env: + GLOBAL_CACHE_PATH: | + ~/.gradle + ~/.m2 + GLOBAL_CACHE_KEY: gradle-m2-java-11 + GLOBAL_CACHE_RESTORE_KEYS: | + gradle-m2-java- + gradle-m2 + # We cache the class files, resources and build output. This is generated on the build job and reused in dependent jobs. + # If there are subsequent builds this includes test execution. + BUILD_CACHE_PATH: | + .gradle + ./bin + **/bin + **/build + + REPORTS_LOCATIONS: | + pravega-sensor-collector/build/reports + + +jobs: + build: + name: Build + runs-on: ubuntu-20.04 + steps: + - name: Build Information + run: echo Building a '${{ github.event_name }}' for target '${{ github.ref }}'. + - name: Checkout + uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '11' + - name: Test script + run: ./scripts/build-installer.sh + - name: Clean + if: ${{ startsWith(github.ref, 'refs/heads/') }} + run: ./gradlew clean ${{env.GRADLE_OPTS}} + - name: Compile & Checkstyle + run: ./gradlew jar compileTest checkstyleMain checkstyleTest --parallel ${{env.GRADLE_OPTS}} + - name: Spotbugs + run: ./gradlew spotbugsMain spotbugsTest + - name: Tar Reports + run: tar --use-compress-program zstd -cf reports-${{github.job}}.tzst `echo ${{env.REPORTS_LOCATIONS}}` + - name: Upload Reports + uses: actions/upload-artifact@v2 + with: + name: ${{github.job}}-reports + retention-days: 4 + path: reports-${{github.job}}.tzst +# Uncomment these two lines if you need ssh access to debug a build. +# - name: Setup upterm session +# uses: lhotari/action-upterm@v1 + + + unit_test: + name: PSC Unit Tests + needs: build + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + - uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '11' + - name: Unit tests + run: ./gradlew build --parallel ${{env.GRADLE_OPTS}} + - name: PWD + run: pwd + - name: LS + run: ls + - name: LS PSC/build + run: ls pravega-sensor-collector/build + - name: Tar Reports + run: tar --use-compress-program zstd -cf reports-${{github.job}}.tzst `echo ${{env.REPORTS_LOCATIONS}}` + - name: Upload Reports + if: always() + uses: actions/upload-artifact@v2 + with: + name: ${{github.job}}-reports + retention-days: 4 + path: reports-${{github.job}}.tzst + + + # DO NOT RENAME THIS JOB. Mergers to master branch are gated on this completing successfully. + build_and_test_complete: + name: CI Complete + needs: [build, unit_test] + runs-on: ubuntu-20.04 + steps: + - name: Check Build Status + run: echo Build, static analysis, unit and integration tests successful. + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 2 + - name: Download code coverage reports + uses: actions/download-artifact@v2 + - name: Untar reports + run: ( ls */reports-*.tzst | xargs -n1 tar --use-compress-program zstd --keep-newer-files -xf ) + - name: Upload to Codecov + uses: codecov/codecov-action@v1 + + snapshot: + name: Publish snapshot packages + needs: [build_and_test_complete] + # Only run this on PUSH (no pull requests) and only on the master branch and release branches. + if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/r0.') || startsWith(github.ref, 'refs/heads/r1.')) }} + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: actions/setup-java@v2 + with: + distribution: 'temurin' + java-version: '11' + - name: Assemble + run: ./gradlew assemble --parallel ${{env.GRADLE_OPTS}} + - name: Publish to GitHub Packages + run: ./gradlew publish -PpublishUrl=https://maven.pkg.github.com/${{github.repository}} -PpublishUsername=${{github.actor}} -PpublishPassword=${{secrets.GITHUB_TOKEN}} ${{env.GRADLE_OPTS}} diff --git a/pravega-sensor-collector/.codecov.yml b/pravega-sensor-collector/.codecov.yml new file mode 100644 index 00000000..35e49975 --- /dev/null +++ b/pravega-sensor-collector/.codecov.yml @@ -0,0 +1,33 @@ +# +# Copyright Pravega Authors. +# +# Licensed 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. +# +codecov: + require_ci_to_pass: yes + max_report_age: off + notify: + wait_for_ci: yes + +coverage: + status: + project: + default: + threshold: 0.5% + patch: + default: + target: 80% + ignore: + - "**/generated/**" + - "standalone" + - "test" diff --git a/pravega-sensor-collector/build.gradle b/pravega-sensor-collector/build.gradle index 3e3e354d..1baf4688 100644 --- a/pravega-sensor-collector/build.gradle +++ b/pravega-sensor-collector/build.gradle @@ -158,23 +158,16 @@ checkstyle { } -test { - finalizedBy jacocoTestReport // report is always generated after tests run -} - -jacocoTestReport { - dependsOn test // tests are required to run before generating the report -} - -jacoco { - toolVersion = "0.8.9" - reportsDirectory = layout.buildDirectory.dir('customJacocoReportDir') -} - -jacocoTestReport { - reports { - xml.required = false - csv.required = false - html.outputLocation = layout.buildDirectory.dir('jacocoHtml') +plugins.withId('jacoco') { + jacoco { + toolVersion = "0.8.5" } -} + jacocoTestReport { + reports { + xml.enabled true + html.enabled false + } + } + + test { finalizedBy jacocoTestReport } +} \ No newline at end of file diff --git a/pravega-sensor-collector/src/test/java/io/pravega/sensor/collector/DeviceDriverTest.java b/pravega-sensor-collector/src/test/java/io/pravega/sensor/collector/DeviceDriverTest.java index 081b1a97..e650edea 100644 --- a/pravega-sensor-collector/src/test/java/io/pravega/sensor/collector/DeviceDriverTest.java +++ b/pravega-sensor-collector/src/test/java/io/pravega/sensor/collector/DeviceDriverTest.java @@ -28,7 +28,7 @@ public void testCreateAccelerometerDriverWithNullConfig() { @Test public void testCreateLeapDriverWithNullConfig() { - Exception exception = Assert.assertThrows(NullPointerException.class, () -> new LeapDriver(null)); + Exception exception = Assert.assertThrows(NullPointerException.class, () -> new LeapDriver(null)); Assert.assertTrue("config".equals(exception.getMessage())); }