# workflow for re-running publishing to Sonatype in case it fails for some reason
# you can run this workflow by navigating to https://www.github.com/openai/openai-java/actions/workflows/publish-sonatype.yml
name: Publish Sonatype
on:
  workflow_dispatch:

jobs:
  publish:
    name: publish
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6

      - name: Set up Java
        uses: actions/setup-java@v5
        with:
          distribution: temurin
          java-version: |
            8
            21
          cache: gradle

      - name: Set up Gradle
        uses: gradle/gradle-build-action@v2

      - name: Compile the openai-java-core project
        run: |
          ./gradlew :openai-java-core:compileJava :openai-java-core:compileTestJava -x test

      - name: Run the mock server
        run: |
          ./scripts/mock --daemon

      - name: Setup GraalVM
        uses: graalvm/setup-graalvm@v1
        with:
          java-version: 21
          distribution: 'graalvm-community'
          cache: gradle

      - name: Run tests on the openai-java-core project with the GraalVM native-image agent
        run: |
          ./gradlew :openai-java-core:test -x compileJava -x compileTestJava -x compileKotlin -x compileTestKotlin -PgraalvmAgent

      - name: Check generated GraalVM file
        run: |
          echo "Checking for GraalVM agent metadata files..."
          DIRECTORY=openai-java-core/src/main/resources/META-INF/native-image
          if [ -d "$DIRECTORY" ] && [ "$(ls -A $DIRECTORY)" ]; then
            echo "Files found in $DIRECTORY:"
            ls -l $DIRECTORY
          else
            echo "No files found in $DIRECTORY"
            exit 1
          fi

      - name: Publish to Sonatype
        run: |-
          export -- GPG_SIGNING_KEY_ID
          printenv -- GPG_SIGNING_KEY | gpg --batch --passphrase-fd 3 --import 3<<< "$GPG_SIGNING_PASSWORD"
          GPG_SIGNING_KEY_ID="$(gpg --with-colons --list-keys | awk -F : -- '/^pub:/ { getline; print "0x" substr($10, length($10) - 7) }')"
          ./gradlew publishAndReleaseToMavenCentral --stacktrace -PmavenCentralUsername="$SONATYPE_USERNAME" -PmavenCentralPassword="$SONATYPE_PASSWORD" --no-configuration-cache
        env:
          SONATYPE_USERNAME: ${{ secrets.OPENAI_SONATYPE_USERNAME || secrets.SONATYPE_USERNAME }}
          SONATYPE_PASSWORD: ${{ secrets.OPENAI_SONATYPE_PASSWORD || secrets.SONATYPE_PASSWORD }}
          GPG_SIGNING_KEY: ${{ secrets.OPENAI_SONATYPE_GPG_SIGNING_KEY || secrets.GPG_SIGNING_KEY }}
          GPG_SIGNING_PASSWORD: ${{ secrets.OPENAI_SONATYPE_GPG_SIGNING_PASSWORD || secrets.GPG_SIGNING_PASSWORD }}