name: Publish Swift Bindings
on:
  workflow_dispatch:
    inputs:
      version:
        description: 'nostr-sdk repo release (MAJOR.MINOR.PATCH)'
        required: true
        type: string

jobs:
  build-tag-release:
    name: Build, tag, and release the Nostr SDK Swift bindings
    runs-on: macOS-latest
    permissions:
      contents: write
    steps:
      - name: Checkout nostr repo
        uses: actions/checkout@v3
        with:
          repository: ${{ github.repository_owner }}/nostr
          path: build
          # ref: v${{ inputs.version }}

      - name: Checkout nostr-sdk-swift repo
        uses: actions/checkout@v3
        with:
          path: dist
          ssh-key: ${{ secrets.NOSTR_SDK_SWIFT_DEPLOY_KEY }}

      - name: Build Swift bindings
        working-directory: build/bindings/nostr-sdk-ffi
        run: |
          make init
          make bindings-swift

      - name: Compress XCFramework
        working-directory: build/bindings/nostr-sdk-ffi/bindings-swift
        run: |
          zip -9 -r nostr_sdkFFI.xcframework.zip nostr_sdkFFI.xcframework
          echo "XCF_CHECKSUM=`swift package compute-checksum nostr_sdkFFI.xcframework.zip`" >> $GITHUB_ENV

      - name: Update Swift Package definition
        working-directory: build/bindings/nostr-sdk-ffi/bindings-swift
        run: |
          sed 's#.binaryTarget(name: "nostr_sdkFFI", path: "./nostr_sdkFFI.xcframework"),#.binaryTarget(name: "nostr_sdkFFI", url: "https://github.com/rust-nostr/nostr-sdk-swift/releases/download/${{ inputs.version }}/nostr_sdkFFI.xcframework.zip", checksum: "${{ env.XCF_CHECKSUM }}"),#;/.testTarget(name: "NostrSDKTests", dependencies: \["NostrSDK"\]),/d' Package.swift > ../../../../dist/Package.swift
          cp -r Sources ../../../../dist

      - name: Tag the Swift bindings
        working-directory: dist
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add Package.swift
          git add Sources
          git commit -m "Update Nostr SDK Swift bindings to version ${{ inputs.version }}"
          git push
          git tag ${{ inputs.version }} -m "${{ inputs.version }}"
          git push --tags

      - name: Release and attach XCFramework binary artifact
        uses: ncipollo/release-action@v1
        with:
          artifacts: "build/bindings/nostr-sdk-ffi/bindings-swift/nostr_sdkFFI.xcframework.zip"
          tag: ${{ inputs.version }}
          token: ${{ secrets.GITHUB_TOKEN }}
          name: ${{ inputs.version }}
          prerelease: true