name: Maven Central Release

on:
  workflow_dispatch:
    inputs:
      releaseVersion:
        description: "Release version"
        required: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:

      - name: Capture release version
        run: echo RELEASE_VERSION=${{ github.event.inputs.releaseVersion }} >> $GITHUB_ENV

      - name: Prepare directory structure
        run: |
          mkdir -p nexus/org/springframework/ai/spring-ai-core/$RELEASE_VERSION
          mkdir -p nexus/org/springframework/ai/spring-ai-openai/$RELEASE_VERSION
          mkdir -p nexus/org/springframework/ai/spring-ai-azure-openai/$RELEASE_VERSION
          mkdir -p nexus/org/springframework/ai/spring-ai-spring-boot-autoconfigure/$RELEASE_VERSION

      - name: Download release files from Artifactory
        env:
          ARTIFACTORY_URL: "https://repo.spring.io/libs-staging-local/org/springframework/ai"
        run: |          
          echo "Downloading core artifacts"
          cd ../../../../../..
          cd nexus/org/springframework/ai/spring-ai-core/$RELEASE_VERSION
          wget $ARTIFACTORY_URL/spring-ai-core/$RELEASE_VERSION/spring-ai-core-$RELEASE_VERSION.pom
          wget $ARTIFACTORY_URL/spring-ai-core/$RELEASE_VERSION/spring-ai-core-$RELEASE_VERSION.jar
          wget $ARTIFACTORY_URL/spring-ai-core/$RELEASE_VERSION/spring-ai-core-$RELEASE_VERSION-javadoc.jar
          wget $ARTIFACTORY_URL/spring-ai-core/$RELEASE_VERSION/spring-ai-core-$RELEASE_VERSION-sources.jar

          echo "Downloading openai artifacts"
          cd ../../../../../..
          cd nexus/org/springframework/batch/spring-ai-openai/$RELEASE_VERSION
          wget $ARTIFACTORY_URL/spring-ai-openai/$RELEASE_VERSION/spring-ai-openai-$RELEASE_VERSION.pom
          wget $ARTIFACTORY_URL/spring-ai-openai/$RELEASE_VERSION/spring-ai-openai-$RELEASE_VERSION.jar
          wget $ARTIFACTORY_URL/spring-ai-openai/$RELEASE_VERSION/spring-ai-openai-$RELEASE_VERSION-javadoc.jar
          wget $ARTIFACTORY_URL/spring-ai-openai/$RELEASE_VERSION/spring-ai-openai-$RELEASE_VERSION-sources.jar

          echo "Downloading azure openai artifacts"
          cd ../../../../../..
          cd nexus/org/springframework/batch/spring-ai-azure-openai/$RELEASE_VERSION
          wget $ARTIFACTORY_URL/spring-ai-azure-openai/$RELEASE_VERSION/spring-ai-azure-openai-$RELEASE_VERSION.pom
          wget $ARTIFACTORY_URL/spring-ai-azure-openai/$RELEASE_VERSION/spring-ai-azure-openai-$RELEASE_VERSION.jar
          wget $ARTIFACTORY_URL/spring-ai-azure-openai/$RELEASE_VERSION/spring-ai-azure-openai-$RELEASE_VERSION-javadoc.jar
          wget $ARTIFACTORY_URL/spring-ai-azure-openai/$RELEASE_VERSION/spring-ai-azure-openai-$RELEASE_VERSION-sources.jar

          echo "Downloading autoconfiguration artifacts"
          cd ../../../../../..
          cd nexus/org/springframework/batch/spring-ai-spring-boot-autoconfigure/$RELEASE_VERSION
          wget $ARTIFACTORY_URL/spring-ai-spring-boot-autoconfigure/$RELEASE_VERSION/spring-ai-spring-boot-autoconfigure-$RELEASE_VERSION.pom
          wget $ARTIFACTORY_URL/spring-ai-spring-boot-autoconfigure/$RELEASE_VERSION/spring-ai-spring-boot-autoconfigure-$RELEASE_VERSION.jar
          wget $ARTIFACTORY_URL/spring-ai-spring-boot-autoconfigure/$RELEASE_VERSION/spring-ai-spring-boot-autoconfigure-$RELEASE_VERSION-javadoc.jar
          wget $ARTIFACTORY_URL/spring-ai-spring-boot-autoconfigure/$RELEASE_VERSION/spring-ai-spring-boot-autoconfigure-$RELEASE_VERSION-sources.jar

      - name: Sign artifacts and release them to Maven Central
        uses: jvalkeal/nexus-sync@v0
        id: nexus
        with:
          url: ${{ secrets.OSSRH_URL }}
          username: ${{ secrets.OSSRH_S01_TOKEN_USERNAME }}
          password: ${{ secrets.OSSRH_S01_TOKEN_PASSWORD }}
          staging-profile-name: ${{ secrets.OSSRH_STAGING_PROFILE_NAME }}
          create: true
          upload: true
          close: true
          release: true
          generate-checksums: true
          pgp-sign: true
          pgp-sign-passphrase: ${{ secrets.GPG_PASSPHRASE }}
          pgp-sign-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
