name: Package for OpenSUSE Build Service

on:
  workflow_call:
    secrets:
      OBS_PASSWORD:
        required: true
      PPA_GPG_PRIVATE_KEY:
        required: true
    inputs:
      obs_project:
        description: Meshtastic OBS project to target
        required: true
        type: string
      series:
        description: Debian series to target
        required: true
        type: string

permissions:
  contents: read

jobs:
  build-debian-src:
    uses: ./.github/workflows/build_debian_src.yml
    secrets: inherit
    with:
      series: ${{ inputs.series }}
      build_location: obs

  package-obs:
    runs-on: ubuntu-24.04
    needs: build-debian-src
    steps:
      - name: Checkout code
        uses: actions/checkout@v6
        with:
          submodules: recursive
          path: meshtasticd
          ref: ${{github.event.pull_request.head.ref}}
          repository: ${{github.event.pull_request.head.repo.full_name}}

      - name: Install OpenSUSE Build Service deps
        shell: bash
        run: |
          echo 'deb http://download.opensuse.org/repositories/openSUSE:/Tools/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/openSUSE:Tools.list
          curl -fsSL https://download.opensuse.org/repositories/openSUSE:Tools/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/openSUSE_Tools.gpg > /dev/null
          sudo apt-get update -y --fix-missing
          sudo apt-get install -y osc

      - name: Get release version string
        working-directory: meshtasticd
        run: |
          echo "deb=$(./bin/buildinfo.py deb)" >> $GITHUB_OUTPUT
        env:
          BUILD_LOCATION: obs
        id: version

      - name: Download artifacts
        uses: actions/download-artifact@v8
        with:
          name: firmware-debian-${{ steps.version.outputs.deb }}~${{ inputs.series }}-src
          merge-multiple: true

      - name: Display structure of downloaded files
        run: ls -lah

      - name: Configure osc
        env:
          OBS_USERNAME: meshtastic
        run: |
          # Setup OpenSUSE Build Service credentials
          mkdir -p ~/.config/osc
          echo "[general]" > ~/.config/osc/oscrc
          echo "apiurl=https://api.opensuse.org" >> ~/.config/osc/oscrc
          echo "[https://api.opensuse.org]" >> ~/.config/osc/oscrc
          echo "user=${{ env.OBS_USERNAME }}" >> ~/.config/osc/oscrc
          echo "pass=${{ secrets.OBS_PASSWORD }}" >> ~/.config/osc/oscrc
          echo "credentials_mgr_class=osc.credentials.PlaintextConfigFileCredentialsManager" >> ~/.config/osc/oscrc
          # Create a temporary directory for osc checkout
          mkdir -p osc

      # Intentionally fail if credentials are invalid
      # Update secrets if this returns `401`
      - name: Verify OBS authentication
        run: osc token

      - name: Upload package to OBS
        shell: bash
        working-directory: osc
        env:
          OBS_PROJECT: ${{ inputs.obs_project }}
          OBS_PACKAGE: meshtasticd
        run: |
          # Initialize the package in the current directory
          osc checkout --output-dir . $OBS_PROJECT $OBS_PACKAGE

          # Remove the existing package files
          rm -rf *.dsc *.tar.xz

          # Copy new package files to the directory
          cp $GITHUB_WORKSPACE/*.dsc .
          cp $GITHUB_WORKSPACE/*.tar.xz .

          # Add/Remove the files
          osc addremove

          # Commit changes and push to OpenSUSE Build Service
          osc commit -m "GitHub Actions: ${{ steps.version.outputs.deb }}~${{ inputs.series }}"
