# Licensed to the Apache Software Foundation (ASF) under one or more
# license agreements; and to You under the Apache License, version 2.0:
#
#   https://www.apache.org/licenses/LICENSE-2.0
#
# This file is part of the Apache Pekko project, which was derived from Akka.
#

name: Pull Requests

on:
  pull_request:

permissions: {}

concurrency:
  # Only run once for latest commit per ref and cancel other (previous) runs.
  group: ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  check-code-style:
    name: Check / Code Style
    runs-on: ubuntu-22.04
    env:
      DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          # we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
          fetch-depth: 0
          fetch-tags: true

      - name: Cache Coursier cache
        uses: coursier/cache-action@4e2615869d13561d626ed48655e1a39e5b192b3c # v6.4.7

      - name: Setup Java 17
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 17

      - name: Install sbt
        uses: sbt/setup-sbt@17575ea4e18dd928fe5968dbe32294b97923d65b # v1.1.13

      - name: Code style check
        run: |-
          cp .jvmopts-ci .jvmopts
          sbt \
          -Dsbt.override.build.repos=false \
          -Dsbt.log.noformat=false \
          javafmtCheckAll
  pull-request-validation:
    name: Check / Tests
    runs-on: ubuntu-22.04
    env:
      DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          # we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
          fetch-depth: 0
          fetch-tags: 0

      - name: Setup Java 17
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 17

      - name: Install sbt
        uses: sbt/setup-sbt@17575ea4e18dd928fe5968dbe32294b97923d65b # v1.1.13

      - name: Cache Coursier cache
        uses: coursier/cache-action@4e2615869d13561d626ed48655e1a39e5b192b3c # v6.4.7

      - name: Enable jvm-opts
        run: cp .jvmopts-ci .jvmopts

      - name: sbt validateCompile
        run: |-
          sbt \
          -Dpekko.mima.enabled=false \
          -Dpekko.test.multi-in-test=false \
          -Dpekko.test.timefactor=2 \
          -Dpekko.actor.testkit.typed.timefactor=2 \
          -Dpekko.test.tags.exclude=gh-exclude,timing \
          -Dpekko.cluster.assert=on \
          -Dsbt.override.build.repos=false \
          -Dpekko.test.multi-node=false \
          -Dsbt.log.noformat=false \
          -Dpekko.log.timestamps=true \
          validateCompile

      - name: sbt validatePullRequest
        run: |-
          sbt \
          -Dpekko.mima.enabled=false \
          -Dpekko.test.multi-in-test=false \
          -Dpekko.test.timefactor=2 \
          -Dpekko.actor.testkit.typed.timefactor=2 \
          -Dpekko.test.tags.exclude=gh-exclude,timing \
          -Dpekko.cluster.assert=on \
          -Dsbt.override.build.repos=false \
          -Dpekko.test.multi-node=false \
          -Dsbt.log.noformat=false \
          -Dpekko.log.timestamps=true \
          -Dio.netty.leakDetection.level=PARANOID \
          validatePullRequest

  pekko-classic-remoting-tests:
    name: Pekko Classic Remoting Tests
    runs-on: ubuntu-22.04
    if: github.repository == 'apache/pekko'
    strategy:
      fail-fast: false
      matrix:
        command:
          - cluster/test distributed-data/test cluster-tools/test cluster-metrics/test
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          # we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
          fetch-depth: 0
          fetch-tags: true

      - name: Setup Java 17
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 17

      - name: Install sbt
        uses: sbt/setup-sbt@17575ea4e18dd928fe5968dbe32294b97923d65b # v1.1.13

      - name: Cache Coursier cache
        uses: coursier/cache-action@4e2615869d13561d626ed48655e1a39e5b192b3c # v6.4.7

      - name: Enable jvm-opts
        run: cp .jvmopts-ci .jvmopts

      - name: sbt ${{ matrix.command }}
        env:
          DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
        # note that this is not running any multi-jvm tests because multi-in-test=false
        run: |-
          sbt \
          -Djava.security.egd=file:/dev/./urandom \
          -Dpekko.remote.artery.enabled=off \
          -Dpekko.test.timefactor=2 \
          -Dpekko.actor.testkit.typed.timefactor=2 \
          -Dpekko.test.tags.exclude=gh-exclude,timing \
          -Dpekko.test.multi-in-test=false \
          -Dpekko.cluster.assert=on \
          clean ${{ matrix.command }}
          
  jdk-21-extra-tests:
    name: Java 21 Extra Tests (including all tests that need Java 9+)
    runs-on: ubuntu-22.04
    env:
      DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    steps:
      - name: Checkout
        uses: actions/checkout@v5
        with:
          # we don't know what commit the last tag was it's safer to get entire repo so previousStableVersion resolves
          fetch-depth: 0
          fetch-tags: 0

      - name: Setup Java 21
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: 21

      - name: Install sbt
        uses: sbt/setup-sbt@17575ea4e18dd928fe5968dbe32294b97923d65b # v1.1.13

      - name: Cache Coursier cache
        uses: coursier/cache-action@4e2615869d13561d626ed48655e1a39e5b192b3c # v6.4.7

      - name: Enable jvm-opts
        run: cp .jvmopts-ci .jvmopts

      - name: sbt TestJdk9/test
        run: |-
          sbt \
          -Dpekko.mima.enabled=false \
          -Dpekko.test.multi-in-test=false \
          -Dpekko.test.timefactor=2 \
          -Dpekko.actor.testkit.typed.timefactor=2 \
          -Dpekko.test.tags.exclude=gh-exclude,timing \
          -Dpekko.cluster.assert=on \
          -Dsbt.override.build.repos=false \
          -Dpekko.test.multi-node=false \
          -Dsbt.log.noformat=false \
          -Dpekko.log.timestamps=true \
          -Dio.netty.leakDetection.level=PARANOID \
          TestJdk9/test        
