# 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: build-branch
on:
  pull_request:
    types: [opened, ready_for_review, synchronize]
  push:
  schedule:
    - cron: 30 0,12 * * *
env:
  FAIL_FAST: ${{ github.event_name == 'pull_request' }}
  MAVEN_OPTS: -Dhttp.keepAlive=false -Dmaven.wagon.http.pool=false -Dmaven.wagon.http.retryHandler.class=standard -Dmaven.wagon.http.retryHandler.count=3
concurrency:
  group: ci-${{ github.event.pull_request.number || github.sha }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
  build-info:
    runs-on: ubuntu-20.04
    env:
      GITHUB_CONTEXT: ${{ toJson(github) }}
    outputs:
      basic-checks: ${{ steps.selective-checks.outputs.basic-checks }}
      needs-basic-checks: ${{ steps.selective-checks.outputs.needs-basic-checks }}
      needs-build: ${{ steps.selective-checks.outputs.needs-build }}
      needs-compile: ${{ steps.selective-checks.outputs.needs-compile }}
      needs-compose-tests: ${{ steps.selective-checks.outputs.needs-compose-tests }}
      needs-dependency-check: ${{ steps.selective-checks.outputs.needs-dependency-check }}
      needs-integration-tests: ${{ steps.selective-checks.outputs.needs-integration-tests }}
      needs-kubernetes-tests: ${{ steps.selective-checks.outputs.needs-kubernetes-tests }}
    steps:
      - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )"
        uses: actions/checkout@v2
        with:
          persist-credentials: false
      - name: Fetch incoming commit ${{ github.sha }} with its parent
        uses: actions/checkout@v2
        with:
          ref: ${{ github.sha }}
          fetch-depth: 2
          persist-credentials: false
        if: github.event_name  == 'pull_request'
      - name: Selective checks
        id: selective-checks
        env:
          PR_LABELS: "${{ toJSON(github.event.pull_request.labels.*.name) }}"
          PR_DRAFT: "${{ github.event.pull_request.draft }}"
        run: |
          if [[ "${GITHUB_EVENT_NAME}" == "pull_request" ]]; then
            # Run selective checks
            dev-support/ci/selective_ci_checks.sh "${GITHUB_SHA}"
          else
            # Run all checks
            dev-support/ci/selective_ci_checks.sh
          fi
  build:
    needs:
      - build-info
    runs-on: ubuntu-20.04
    timeout-minutes: 30
    if: needs.build-info.outputs.needs-build == 'true'
    strategy:
      matrix:
        java: [ 8 ]
      fail-fast: false
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Cache for npm dependencies
        uses: actions/cache@v2
        with:
          path: |
            ~/.pnpm-store
            **/node_modules
          key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-
      - name: Cache for maven dependencies
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: maven-repo-${{ hashFiles('**/pom.xml') }}-${{ matrix.java }}
          restore-keys: |
            maven-repo-${{ hashFiles('**/pom.xml') }}
            maven-repo-
      - name: Setup java
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}
      - name: Run a full build
        run: hadoop-ozone/dev-support/checks/build.sh -Pcoverage -Pdist -Psrc
      - name: Store binaries for tests
        uses: actions/upload-artifact@v2
        with:
          name: ozone-bin
          path: |
            hadoop-ozone/dist/target/ozone-*.tar.gz
            !hadoop-ozone/dist/target/ozone-*-src.tar.gz
          retention-days: 1
      - name: Store source tarball for compilation
        uses: actions/upload-artifact@v2
        with:
          name: ozone-src
          path: hadoop-ozone/dist/target/ozone-*-src.tar.gz
          retention-days: 1
      - name: Delete temporary build artifacts before caching
        run: |
          #Never cache local artifacts
          rm -rf ~/.m2/repository/org/apache/ozone/hdds*
          rm -rf ~/.m2/repository/org/apache/ozone/ozone*
        if: always()
  compile:
    needs:
      - build-info
      - build
    runs-on: ubuntu-20.04
    timeout-minutes: 30
    if: needs.build-info.outputs.needs-compile == 'true'
    strategy:
      matrix:
        java: [ 11 ]
      fail-fast: false
    steps:
      - name: Download Ozone source tarball
        uses: actions/download-artifact@v2
        with:
          name: ozone-src
      - name: Untar sources
        run: |
          tar --strip-components 1 -xzvf ozone*-src.tar.gz
      - name: Cache for maven dependencies
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: maven-repo-${{ hashFiles('**/pom.xml') }}-${{ matrix.java }}
          restore-keys: |
            maven-repo-${{ hashFiles('**/pom.xml') }}
            maven-repo-
      - name: Setup java
        uses: actions/setup-java@v1
        with:
          java-version: ${{ matrix.java }}
      - name: Compile Ozone using Java ${{ matrix.java }}
        run: hadoop-ozone/dev-support/checks/build.sh -Dskip.npx -Dskip.installnpx
      - name: Delete temporary build artifacts before caching
        run: |
          #Never cache local artifacts
          rm -rf ~/.m2/repository/org/apache/ozone/hdds*
          rm -rf ~/.m2/repository/org/apache/ozone/ozone*
        if: always()
  basic:
    needs:
      - build-info
    runs-on: ubuntu-20.04
    timeout-minutes: 90
    if: needs.build-info.outputs.needs-basic-checks == 'true'
    strategy:
      matrix:
        check: ${{ fromJson(needs.build-info.outputs.basic-checks) }}
      fail-fast: false
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
        if: matrix.check != 'bats'
      - name: Checkout project with history
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
        if: matrix.check == 'bats'
      - name: Cache for maven dependencies
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: maven-repo-${{ hashFiles('**/pom.xml') }}-8-${{ matrix.check }}
          restore-keys: |
            maven-repo-${{ hashFiles('**/pom.xml') }}-8
            maven-repo-${{ hashFiles('**/pom.xml') }}
            maven-repo-
        if: ${{ !contains('author,bats,docs', matrix.check) }}
      - name: Setup java
        uses: actions/setup-java@v1
        with:
          java-version: 8
      - name: Execute tests
        run: hadoop-ozone/dev-support/checks/${{ matrix.check }}.sh
      - name: Summary of failures
        run: cat target/${{ matrix.check }}/summary.txt
        if: ${{ !cancelled() }}
      - name: Archive build results
        uses: actions/upload-artifact@v2
        if: ${{ !cancelled() }}
        with:
          name: ${{ matrix.check }}
          path: target/${{ matrix.check }}
        continue-on-error: true
      - name: Delete temporary build artifacts before caching
        run: |
          #Never cache local artifacts
          rm -rf ~/.m2/repository/org/apache/ozone/hdds*
          rm -rf ~/.m2/repository/org/apache/ozone/ozone*
        if: always()
  dependency:
    needs:
      - build-info
      - build
    runs-on: ubuntu-20.04
    timeout-minutes: 5
    if: needs.build-info.outputs.needs-dependency-check == 'true'
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Download compiled Ozone binaries
        uses: actions/download-artifact@v2
        with:
          name: ozone-bin
      - name: Untar binaries
        run: |
          mkdir dist
          tar  -C dist --strip-components 1 -xzf ozone*.tar.gz
      - name: Execute tests
        run: |
          export OZONE_DIST_DIR=`pwd`/dist
          ./hadoop-ozone/dev-support/checks/dependency.sh
      - name: Archive build results
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: dependency
          path: target/dependency
        continue-on-error: true
  acceptance:
    needs:
      - build-info
      - build
    runs-on: ubuntu-20.04
    timeout-minutes: 150
    if: needs.build-info.outputs.needs-compose-tests == 'true'
    strategy:
      matrix:
        suite:
          - secure
          - unsecure
          - compat
          - HA
          - MR
          - misc
      fail-fast: false
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Download compiled Ozone binaries
        uses: actions/download-artifact@v2
        with:
          name: ozone-bin
      - name: Untar binaries
        run: |
          mkdir -p hadoop-ozone/dist/target
          tar xzvf ozone*.tar.gz -C hadoop-ozone/dist/target
          sudo chmod -R a+rwX hadoop-ozone/dist/target
      - name: Execute tests
        run: |
          pushd hadoop-ozone/dist/target/ozone-*
          sudo mkdir .aws && sudo chmod 777 .aws && sudo chown 1000 .aws
          popd
          ./hadoop-ozone/dev-support/checks/acceptance.sh
        env:
          KEEP_IMAGE: false
          OZONE_ACCEPTANCE_SUITE: ${{ matrix.suite }}
          OZONE_WITH_COVERAGE: true
          OZONE_VOLUME_OWNER: 1000
      - name: Archive build results
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: acceptance-${{ matrix.suite }}
          path: target/acceptance
        continue-on-error: true
  kubernetes:
    needs:
      - build-info
      - build
    runs-on: ubuntu-20.04
    timeout-minutes: 60
    if: needs.build-info.outputs.needs-kubernetes-tests == 'true'
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Download compiled Ozone binaries
        uses: actions/download-artifact@v2
        with:
          name: ozone-bin
      - name: Untar binaries
        run: |
          mkdir -p hadoop-ozone/dist/target
          tar xzvf ozone*.tar.gz -C hadoop-ozone/dist/target
      - name: Execute tests
        run: |
          pushd hadoop-ozone/dist/target/ozone-*
          sudo mkdir .aws && sudo chmod 777 .aws && sudo chown 1000 .aws
          popd
          ./hadoop-ozone/dev-support/checks/kubernetes.sh
      - name: Archive build results
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: kubernetes
          path: target/kubernetes
        continue-on-error: true
  integration:
    needs:
      - build-info
    runs-on: ubuntu-20.04
    timeout-minutes: 150
    if: needs.build-info.outputs.needs-integration-tests == 'true'
    strategy:
      matrix:
        profile:
          - client
          - filesystem
          - hdds
          - om
          - ozone
          - scm
          - flaky
      fail-fast: false
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Cache for maven dependencies
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: maven-repo-${{ hashFiles('**/pom.xml') }}-8-${{ matrix.profile }}
          restore-keys: |
            maven-repo-${{ hashFiles('**/pom.xml') }}-8
            maven-repo-${{ hashFiles('**/pom.xml') }}
            maven-repo-
      - name: Setup java
        uses: actions/setup-java@v1
        with:
          java-version: 8
      - name: Execute tests
        run: hadoop-ozone/dev-support/checks/integration.sh -P${{ matrix.profile }}
        if: matrix.profile != 'flaky'
      - name: Execute flaky tests
        run: hadoop-ozone/dev-support/checks/integration.sh -P${{ matrix.profile }} -Dsurefire.rerunFailingTestsCount=5 -Dsurefire.fork.timeout=3600
        if: matrix.profile == 'flaky'
      - name: Summary of failures
        run: cat target/${{ github.job }}/summary.txt
        if: always()
      - name: Archive build results
        uses: actions/upload-artifact@v2
        if: always()
        with:
          name: it-${{ matrix.profile }}
          path: target/integration
        continue-on-error: true
      - name: Delete temporary build artifacts before caching
        run: |
          #Never cache local artifacts
          rm -rf ~/.m2/repository/org/apache/ozone/hdds*
          rm -rf ~/.m2/repository/org/apache/ozone/ozone*
        if: always()
  coverage:
    runs-on: ubuntu-20.04
    timeout-minutes: 30
    if: github.repository == 'apache/ozone' && github.event_name != 'pull_request'
    needs:
      - acceptance
      - basic
      - integration
    steps:
      - name: Checkout project
        uses: actions/checkout@v2
      - name: Cache for maven dependencies
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: maven-repo-${{ hashFiles('**/pom.xml') }}-8-${{ github.job }}
          restore-keys: |
            maven-repo-${{ hashFiles('**/pom.xml') }}-8
            maven-repo-${{ hashFiles('**/pom.xml') }}
            maven-repo-
      - name: Download artifacts
        uses: actions/download-artifact@v2
        with:
          path: target/artifacts
      - name: Untar binaries
        run: |
          mkdir -p hadoop-ozone/dist/target
          tar xzvf target/artifacts/ozone-bin/ozone*.tar.gz -C hadoop-ozone/dist/target
      - name: Calculate combined coverage
        run: ./hadoop-ozone/dev-support/checks/coverage.sh
      - name: Setup java 11
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Upload coverage to Sonar
        run: ./hadoop-ozone/dev-support/checks/sonar.sh
        env:
          SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      - name: Archive build results
        uses: actions/upload-artifact@v2
        with:
          name: coverage
          path: target/coverage
        continue-on-error: true
      - name: Delete temporary build artifacts before caching
        run: |
          #Never cache local artifacts
          rm -rf ~/.m2/repository/org/apache/ozone/hdds*
          rm -rf ~/.m2/repository/org/apache/ozone/ozone*
        if: always()
