name: CI

on:
  workflow_dispatch:
  push:
    branches:
      - main
    paths-ignore:
      - '.github/**'

jobs:

  # build and test, then upload logs if failure
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest]
        java: [1.8, 11]
      fail-fast: false

    steps:
    - uses: actions/checkout@v2
    - name: Setup JDK
      uses: actions/setup-java@v1
      with:
        java-version: ${{ matrix.java }}
    - name: Build with Gradle
      run: ./gradlew clean build
    - name: Tar Build Logs
      if: ${{ failure() }}
      run: |
        mkdir -p build
        tar \
          -zc \
          --ignore-failed-read \
          --file build/buildlogs.tar.gz \
          */build/reports \
          */*/build/reports
    - name: Upload Build Logs
      if: ${{ failure() }}
      uses: actions/upload-artifact@v2
      with:
        name: buildlogs
        path: build/buildlogs.tar.gz

  # if build job succeed, build without tests and publish
  publish:
    needs: build
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-java@v1
      with:
        java-version: 1.8
    - uses: jfrog/setup-jfrog-cli@v3
      with:
        version: 2.39.1
      env:
        JF_ENV_SPRING: ${{ secrets.JF_ARTIFACTORY_SPRING }}

    # setup non persistent config for jfrog gradle to use server defined in
    # secret which points via virtual repo into spring local repo.
    # modify default build name and number as we don't like how those
    # gets used from action defaults.
    - name: Configure JFrog Cli
      run: |
        jf gradlec \
          --use-wrapper \
          --deploy-ivy-desc=false \
          --server-id-resolve=repo.spring.io \
          --server-id-deploy=repo.spring.io \
          --repo-resolve=snapshot \
          --repo-deploy=snapshot
        echo JFROG_CLI_BUILD_NAME=spring-statemachine-main >> $GITHUB_ENV
        echo JFROG_CLI_BUILD_NUMBER=$GITHUB_RUN_NUMBER >> $GITHUB_ENV

    # as we already tested just build and publish
    - name: Build and Publish Snapshot
      run: |
        jf gradle clean build -x test artifactoryPublish

    # publish build info so that we can see it in artifactory "builds"
    - name: Publish Build Info
      run: |
        jf rt build-publish
