name: GDB & gdbserver
on:
  workflow_dispatch
jobs:

  build-x86:
    name: Build GDB & gdbserver x86
    runs-on: ubuntu-latest
    container: muslcc/x86_64:i686-linux-musl
    outputs:
        version: ${{ steps.build_gdb.outputs.PACKAGED_VERSION }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Install dependencies
        run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

      - name: Install build compiler
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh x86_64

      - name: Install dependencies workaround
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh i686

      - name: Build GDB
        id: build_gdb
        run: |
          export PATH="$PATH:/i686-linux-musl-cross/bin"
          $GITHUB_WORKSPACE/build/targets/build_gdb.sh x86
        
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
            name: ${{ steps.build_gdb.outputs.PACKAGED_NAME }}
            path: ${{ steps.build_gdb.outputs.PACKAGED_NAME_PATH }}

  build-x86_64:
    name: Build GDB & gdbserver x86_64
    runs-on: ubuntu-latest
    container: muslcc/x86_64:x86_64-linux-musl
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Install dependencies
        run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

      - name: Install build compiler
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh x86_64

      - name: Build GDB
        id: build_gdb
        run: |
          $GITHUB_WORKSPACE/build/targets/build_gdb.sh x86_64
        
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
            name: ${{ steps.build_gdb.outputs.PACKAGED_NAME }}
            path: ${{ steps.build_gdb.outputs.PACKAGED_NAME_PATH }}


  build-armhf:
    name: Build GDB & gdbserver ARMHF
    runs-on: ubuntu-latest
    container: muslcc/x86_64:arm-linux-musleabihf
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Install dependencies
        run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

      - name: Install build compiler
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh x86_64

      - name: Install dependencies workaround
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh arm

      - name: Build gdb
        id: build_gdb
        run: |
          export PATH="$PATH:/arm-linux-musleabihf-cross/bin"
          $GITHUB_WORKSPACE/build/targets/build_gdb.sh armhf
        
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
            name: ${{ steps.build_gdb.outputs.PACKAGED_NAME }}
            path: ${{ steps.build_gdb.outputs.PACKAGED_NAME_PATH }}


  build-aarch64:
    name: Build GDB & gdbserver AARCH64
    runs-on: ubuntu-latest
    container: muslcc/x86_64:aarch64-linux-musl
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Install dependencies
        run: sudo apk update && sudo apk add bash && sudo bash build/install_deps_alpine.sh

      - name: Install build compiler
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh x86_64

      - name: Install dependencies workaround
        run: $GITHUB_WORKSPACE/build/02_install_build_compiler.sh aarch64

      - name: Patch headers
        run: |
          patch /aarch64-linux-musl-cross/aarch64-linux-musl/include/asm/sigcontext.h < $GITHUB_WORKSPACE/patches/gdb/gdb-aarch64-header-sigcontext-fix.patch

      - name: Build GDB
        id: build_gdb
        run: |
          export PATH="$PATH:/aarch64-linux-musl-cross/bin"
          $GITHUB_WORKSPACE/build/targets/build_gdb.sh aarch64
        
      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
            name: ${{ steps.build_gdb.outputs.PACKAGED_NAME }}
            path: ${{ steps.build_gdb.outputs.PACKAGED_NAME_PATH }}

  create-release:
    name: Create GDB & gdbserver Release
    runs-on: ubuntu-latest
    needs: [build-x86, build-x86_64, build-armhf, build-aarch64]
    permissions:
      contents: write
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Prepare Environment
        run: mkdir /tmp/releases

      - name: Download Artifacts
        uses: actions/download-artifact@v4
        with:
          path: /tmp/releases

      - name: List Artifacts
        run: ls -laR /tmp/releases

      - name: Fetch tags
        run: git fetch --tags --prune --quiet

      - name: Tag Release
        id: tag_release
        run: |
          set +e
          if git rev-list "gdb-v${{ needs.build-x86.outputs.version }}" >/dev/null;then
            echo "Tag for gdb-v${{ needs.build-x86.outputs.version }} already exists. Skipping release creation."
            echo ::set-output name=NEW_RELEASE::"false"
          else
            git tag "gdb-v${{ needs.build-x86.outputs.version }}"
            git push origin "gdb-v${{ needs.build-x86.outputs.version }}"
            echo ::set-output name=NEW_RELEASE::"true"
          fi

      - name: Create Release
        uses: ncipollo/release-action@v1
        if: ${{ steps.tag_release.outputs.NEW_RELEASE == 'true' }}
        with:
          name: gdb-v${{ needs.build-x86.outputs.version }}
          tag: gdb-v${{ needs.build-x86.outputs.version }}
          artifacts: "/tmp/releases/*/*"
          token: ${{ secrets.GITHUB_TOKEN }}