name: Releases (Legacy)
on:
  release:
    types: [published]

jobs:
  version:
    runs-on: ubuntu-latest
    outputs:
      build_number: ${{ steps.tag_info.outputs.build_number }}
      version: ${{ steps.tag_info.outputs.version }}
    steps:
      - name: Extract version and build number
        id: tag_info
        shell: bash
        run: |
          TAG_NAME="${GITHUB_REF#refs/tags/}"
          BUILD_NUMBER=$(echo "$TAG_NAME" | cut -d'-' -f2)
          VERSION=$(echo "$TAG_NAME" | cut -d'-' -f3)

          # Set outputs for use in later jobs or steps
          echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
          echo "version=$VERSION" >> $GITHUB_OUTPUT
  publish:
    name: Publish Processing Core to Maven Central
    runs-on: ubuntu-latest
    needs: version
    steps:
    - name: Checkout Repository
      uses: actions/checkout@v4
    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: 'temurin'
        java-version: 17
    - name: Setup Gradle
      uses: gradle/actions/setup-gradle@v4
    - name: Build with Gradle
      run: ./gradlew publish
      env:
        MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
        MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}

        ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
        ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}

        ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_IN_MEMORY_KEY }}
        ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }}

        ORG_GRADLE_PROJECT_version: ${{ needs.version.outputs.version }}
  build: 
    name: Publish Release for ${{ matrix.os_prefix }} (${{ matrix.arch }})
    runs-on: ${{ matrix.os }}
    needs: version
    permissions:
      contents: write
    strategy:
      fail-fast: false
      matrix:
        include:
          # compiling for arm32 needs a self-hosted runner on Raspi OS (32-bit)
          - os: [self-hosted, linux, ARM]
            os_prefix: linux
            arch: arm
          - os: ubuntu-latest
            os_prefix: linux
            arch: x64
          - os: windows-latest
            os_prefix: windows
            arch: x64
          - os: macos-latest
            os_prefix: macos
            arch: x64
          - os: macos-latest
            os_prefix: macos
            arch: aarch64
          - os: macos-latest
            os_prefix: linux
            arch: aarch64
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
      - name: Checkout Examples Repository
        uses: actions/checkout@v4
        with:
          repository: processing/processing-examples
          path: processing-examples
      - name: Install Java
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'
          architecture: ${{ matrix.arch }}
      - name: Setup Ant
        uses: cedx/setup-ant@v3
      - name: Write build_number and revision to todo.txt and Base.java
        run: |
          echo "${{ needs.version.outputs.build_number }} (${{ needs.version.outputs.version }})" > todo.txt
          perl -pi -e 's/static private final int REVISION = \d+;/static private final int REVISION = ${{ needs.version.outputs.build_number }};/g; s/static private String VERSION_NAME = "\d+";\s*\/\/\$NON-NLS-1\$/static private String VERSION_NAME = "${{ needs.version.outputs.build_number }}"; \/\/\$NON-NLS-1\$/g' app/src/processing/app/Base.java
      - name: Install Certificates for Code Signing
        if: ${{ matrix.os_prefix == 'macos' }}
        uses: apple-actions/import-codesign-certs@v3
        with: 
          p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
          p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
      - name: Build Release
        run: ant -noinput -buildfile build/build.xml ${{ matrix.os_prefix }}-dist -Dversion="${{ needs.version.outputs.version }}" -Dplatform=${{ matrix.os_prefix }}
        env:
          PROCESSING_APP_SIGNING: true
          PROCESSING_APP_PASSWORD: ${{ secrets.PROCESSING_APP_PASSWORD }}
          PROCESSING_APPLE_ID: ${{ secrets.PROCESSING_APPLE_ID }}
          PROCESSING_TEAM_ID: ${{ secrets.PROCESSING_TEAM_ID }}
      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file:  ./build/${{ matrix.os_prefix }}/processing-${{ needs.version.outputs.version }}-${{ matrix.os_prefix}}-*
          file_glob: true
