name: Push-Triggers

on:
  push:
    branches:
    - master
    - develop
    - qa-develop
    - 'release-**'
  release:
    types: [published]
  pull_request:
    types: [opened, reopened, synchronize]
    branches:
    - master
    - develop
    - qa-develop
    - 'release-**'

jobs:
  build-android:
    uses: mosip/kattu/.github/workflows/android-build.yml@master
    with:
      NODE_VERSION: "18.x"
      JAVA_VERSION: "17"
      KEYSTORE_ALIAS: androidbuildkey
      KEYSTORE_PASSWORD: 'password'
      SERVICE_LOCATION: '.'
      ANDROID_SERVICE_LOCATION: 'android'
      BUILD_SCRIPT_LOCATION: 'scripts'
      SCRIPT_NAME: './android-build.sh'
      UPLOAD_TO_ACTIONS: 'false'

  build-ios:
    uses: mosip/kattu/.github/workflows/ios-build.yml@master
    with:
      NODE_VERSION: "18.x"
      SERVICE_LOCATION: '.'
      IOS_SERVICE_LOCATION: 'ios'
      SCRIPT_NAME: "fastlane ios_app_build"

  sonar-check-on-push:
    name: Sonar check
    if: ${{ github.event_name != 'pull_request' }}
    needs: [build-android, build-ios]
    uses: mosip/kattu/.github/workflows/npm-sonar-analysis.yml@master-java21
    with:
      SERVICE_LOCATION: '.'
      NODE_VERSION: '18.x'
      NPM_BUILD_TYPE: 'BOB'
      SONAR_SOURCES: '.'
      SONAR_TESTS: '.'
      SONAR_TEST_INCLUSIONS: '**/*.test.ts, **/*.test.tsx'
      SONAR_EXCLUSIONS: '.github/**, .vscode/**, android/**, assets/**, build/**, ios/**, node_modules/**, scripts/**, **/*.java, **/*.typegen.ts, __mocks__/**'
    secrets:
      SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
      ORG_KEY: ${{ secrets.ORG_KEY }}
      SLACK_WEBHOOK_URL: '${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}'
      
  build-maven-uitest-inji-wallet:
    uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21
    with:
      SERVICE_LOCATION: ./injitest
      BUILD_ARTIFACT: uitest-inji-wallet
    secrets:
      OSSRH_USER: ${{ secrets.OSSRH_USER }}
      OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }}
      OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }}
      GPG_SECRET: ${{ secrets.GPG_SECRET }}
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}

  build-uitest-inji-wallet-local:
    needs: build-maven-uitest-inji-wallet
    runs-on: ubuntu-latest
    env:
      NAMESPACE: ${{ secrets.dev_namespace_docker_hub }}
      SERVICE_NAME: uitest-inji-wallet
      SERVICE_LOCATION: injitest
      BUILD_ARTIFACT: uitest-inji-wallet-local
    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 21
        uses: actions/setup-java@v3
        with:
          distribution: 'temurin'
          java-version: '21'
          server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml
          settings-path: ${{ github.workspace }} # location for the settings.xml file

      - name: Cache local Maven repository
        uses: actions/cache@v4
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-

      - name: Setup the settings file for ossrh server
        run: echo "<settings> <servers>  <server>  <id>ossrh</id>    <username>${{secrets.ossrh_user}}</username> <password>${{secrets.ossrh_secret}}</password> </server> </servers> <profiles> <profile>     <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation>  <properties> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>${{secrets.gpg_secret}}</gpg.passphrase> </properties> </profile> <profile> <id>allow-snapshots</id>       <activation><activeByDefault>true</activeByDefault></activation> <repositories> <repository>        <id>snapshots-repo</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository>  <repository>         <id>releases-repo</id>  <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>         <releases><enabled>true</enabled></releases>         <snapshots><enabled>false</enabled></snapshots> </repository> </repositories>  </profile> <profile> <id>sonar</id> <properties>  <sonar.sources>.</sonar.sources> <sonar.host.url>https://sonarcloud.io</sonar.host.url>  </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> </profiles> </settings>" > $GITHUB_WORKSPACE/settings.xml

      - name: Build uitest-inji-wallet with Maven
        run: |
          cd ${{ env.SERVICE_LOCATION}}
          mvn -U -B package -DskipTests -Dmaven.wagon.http.retryHandler.count=2 --file pom.xml -s $GITHUB_WORKSPACE/settings.xml

      - name: Ready the springboot artifacts
        if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }}
        run: |
          ## FIND JARS & COPY ONLY EXECUTABLE JARs STORED UNDER TARGET DIRECTORY 
          find ${{ env.SERVICE_LOCATION }} -path '*/target/*' -name '*.jar'  -type f -exec zip ${{ env.BUILD_ARTIFACT }}.zip {} +

      - name: Upload the springboot jars
        if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }}
        uses: actions/upload-artifact@v4
        with:
          name: ${{ env.BUILD_ARTIFACT }}
          path: ${{ env.BUILD_ARTIFACT }}.zip

      - uses: 8398a7/action-slack@v3
        with:
          status: ${{ job.status }}
          fields: repo,message,author,commit,workflow,job # selectable (default: repo,message)
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required
        if: failure() # Pick up events even if the job fails or is canceled.

  build-docker-uitest-inji-wallet:
    needs: build-uitest-inji-wallet-local
    strategy:
      matrix:
        include:
          - SERVICE_LOCATION: 'injitest'
            SERVICE_NAME: 'uitest-inji-wallet'
            BUILD_ARTIFACT: 'uitest-inji-wallet-local'
            ONLY_DOCKER: true
      fail-fast: false
    name: ${{ matrix.SERVICE_NAME }}
    uses: mosip/kattu/.github/workflows/docker-build.yml@master-java21
    with:
      SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }}
      SERVICE_NAME: ${{ matrix.SERVICE_NAME }}
      BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }}
      ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }}
    secrets:
      DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }}
      ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }}
      RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }}
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_INJI_TEAM }}