diff --git a/.codecov.yml b/.codecov.yml index 326dd3e0b2..a628d33cbe 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -4,6 +4,13 @@ # Can be validated via instructions at: # https://docs.codecov.io/docs/codecov-yaml#validate-your-repository-yaml +# Tell Codecov not to send a coverage notification until (at least) 2 builds are completed +# Since we run Unit & Integration tests in parallel, this lets Codecov know that coverage +# needs to be merged across those builds +codecov: + notify: + after_n_builds: 2 + # Settings related to code coverage analysis coverage: status: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..76148f3435 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,69 @@ +# DSpace Continuous Integration/Build via GitHub Actions +# Concepts borrowed from +# https://docs.github.com/en/free-pro-team@latest/actions/guides/building-and-testing-java-with-maven +name: Build + +# Run this Build only for pushes / PRs to main branch +on: + push: + branches: main + pull_request: + branches: main + +jobs: + tests: + runs-on: ubuntu-latest + env: + # Give Maven 1GB of memory to work with + # Suppress all Maven "downloading" messages in Travis logs (see https://stackoverflow.com/a/35653426) + # This also slightly speeds builds, as there is less logging + MAVEN_OPTS: "-Xmx1024M -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn" + strategy: + # Create a matrix of two separate configurations for Unit vs Integration Tests + # This will ensure those tasks are run in parallel + matrix: + include: + # NOTE: Unit Tests include deprecated REST API v6 (as it has unit tests) + - type: "Unit Tests" + mvnflags: "-DskipUnitTests=false -Pdspace-rest" + # NOTE: ITs skip all code validation checks, as they are already done by Unit Test job. + # - enforcer.skip => Skip maven-enforcer-plugin rules + # - checkstyle.skip => Skip all checkstyle checks by maven-checkstyle-plugin + # - license.skip => Skip all license header checks by license-maven-plugin + # - xml.skip => Skip all XML/XSLT validation by xml-maven-plugin + - type: "Integration Tests" + mvnflags: "-DskipIntegrationTests=false -Denforcer.skip=true -Dcheckstyle.skip=true -Dlicense.skip=true -Dxml.skip=true" + # Do NOT exit immediately if one matrix job fails + # This ensures ITs continue running even if Unit Tests fail, or visa versa + fail-fast: false + # These are the actual CI steps to perform per job + steps: + # https://github.com/actions/checkout + - name: Checkout codebase + uses: actions/checkout@v1 + + # https://github.com/actions/setup-java + - name: Install JDK 11 + uses: actions/setup-java@v1 + with: + java-version: 11 + + # https://github.com/actions/cache + - name: Cache Maven dependencies + uses: actions/cache@v2 + with: + # Cache entire ~/.m2/repository + path: ~/.m2/repository + # Cache key is hash of all pom.xml files. Therefore any changes to POMs will invalidate cache + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-maven- + + # Run parallel Maven builds based on the above 'strategy.matrix' + - name: Run Maven ${{ matrix.type }} + env: + TEST_FLAGS: ${{ matrix.mvnflags }} + run: mvn install -B -V -P-assembly -Pcoverage-report $TEST_FLAGS + + # https://github.com/codecov/codecov-action + - name: Upload coverage to Codecov.io + uses: codecov/codecov-action@v1 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 89cb443597..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,55 +0,0 @@ -# DSpace's Travis CI Configuration -# Builds: https://travis-ci.com/github/DSpace/DSpace -# Travis configuration guide/validation: https://config.travis-ci.com/explore -language: java -# TODO: Upgrade to Bionic -dist: trusty -os: linux - -jdk: - # DS-3384 Oracle JDK has DocLint enabled by default. - # Let's use this to catch any newly introduced DocLint issues. - - oraclejdk11 - -# Define global environment variables (shared across all jobs) -env: - global: - # Suppress all Maven "downloading" messages in Travis logs (see https://stackoverflow.com/a/35653426) - # This also slightly speeds builds in Travis, as there is less logging - - HIDE_MAVEN_DOWNLOADS="-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn" - # Give Maven 1GB of memory to work with - - MAVEN_OPTS="-Xmx1024M $HIDE_MAVEN_DOWNLOADS" - # Maven options which will skip ALL code validation checks. Includes skipping: - # - enforcer.skip => Skip maven-enforcer-plugin rules - # - checkstyle.skip => Skip all checkstyle checks by maven-checkstyle-plugin - # - license.skip => Skip all license header checks by license-maven-plugin - # - xml.skip => Skip all XML/XSLT validation by xml-maven-plugin - # (Useful for builds which don't need to repeat code checks) - - SKIP_CODE_CHECKS="-Denforcer.skip=true -Dcheckstyle.skip=true -Dlicense.skip=true -Dxml.skip=true" - -# Create two jobs to run Unit & Integration tests in parallel. -# These jobs only differ in the TEST_FLAGS defined below, -# and otherwise share all the other configs in this file -jobs: - include: - - name: "Run Unit Tests & Check Code" - # NOTE: unit tests include deprecated REST API v6 (as it has unit tests) - env: TEST_FLAGS="-DskipUnitTests=false -Pdspace-rest" - - name: "Run Integration Tests" - # NOTE: skips code checks, as they are already done by Unit Test job - env: TEST_FLAGS="-DskipIntegrationTests=false $SKIP_CODE_CHECKS" - -# Skip 'install' process to save time. We build/install/test all at once in "script" below. -install: skip - -# Build DSpace and run configured tests (see 'jobs' above) -# Notes on flags used: -# -B => Maven batch/non-interactive mode (recommended for CI) -# -V => Display Maven version info before build -# -P-assembly => Disable build of dspace-installer in [src]/dspace/, as it can be memory intensive -# -Pcoverage-report => Enable aggregate code coverage report (across all modules) via JaCoCo -script: mvn install -B -V -P-assembly -Pcoverage-report $TEST_FLAGS - -# After a successful build and test (see 'script'), send aggregate code coverage reports -# (generated by -Pcoverage-report above) to CodeCov.io -after_success: bash <(curl -s https://codecov.io/bash)