name: Binary release

on:
  push:
    tags:
      - 'v*'

jobs:
  build:
    name: Build and upload binary artifacts
    runs-on: codeberg-medium
    container: archlinux:latest

    steps:
      - name: Create resolv.conf
        run: |
          set -ex
          echo 'nameserver 8.8.8.8' >/etc/resolv.conf
          echo 'nameserver 8.8.4.4' >>/etc/resolv.conf

      - name: Install dependencies
        run: pacman --noconfirm -Syu && pacman --needed --noconfirm -S nodejs base-devel gnupg git autoconf automake nasm curl mtools llvm clang lld mingw-w64-gcc

      - name: Import GPG public key
        run: gpg --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys 05D29860D0A0668AAEFB9D691F3C021BECA23821

      - name: Import GPG private key
        run: echo "$MINTSUKI_PRIVATE_KEY" | gpg --batch --import
        env:
          MINTSUKI_PRIVATE_KEY: ${{ secrets.MINTSUKI_PRIVATE_KEY }}

      - name: Checkout code
        uses: https://code.forgejo.org/actions/checkout@v6
        with:
          fetch-depth: '0'

      - name: Git config
        run: |
          set -e
          git config --global --add safe.directory "$FORGEJO_WORKSPACE"
          git config --global user.name 'Mintsuki'
          git config --global user.email 'mintsuki@protonmail.com'
          git config --global user.signingkey 05D29860D0A0668AAEFB9D691F3C021BECA23821

      - name: Get tag name
        run: echo "TAG_NAME=$(git describe --exact-match --tags $(git log -n1 --pretty='%h'))" >> $FORGEJO_ENV

      - name: Get branch name
        run: echo "BRANCH_NAME=$(echo "$TAG_NAME" | grep -o 'v[0-9]\+\.')x" >> $FORGEJO_ENV

      - name: Regenerate
        run: ./bootstrap

      - name: Create build dir
        run: mkdir -p build

      - name: Configure
        run: cd build && ../configure --enable-all

      - name: Build the bootloader
        run: make -C build -j$(nproc)

      - name: Clean limine
        run: rm build/bin/limine

      - name: Build limine for Windows
        run: make -C build/bin CC="i686-w64-mingw32-gcc" CFLAGS="-O2 -pipe" CPPFLAGS="-D__USE_MINGW_ANSI_STDIO" limine

      - name: Strip limine for Windows
        run: i686-w64-mingw32-strip build/bin/limine.exe

      - name: Copy LICENSE to bin
        run: cp COPYING build/bin/LICENSE

      - name: Remove limine-bios-hdd.bin
        run: rm build/bin/limine-bios-hdd.bin

      - name: Push binaries to binary branch
        run: |
          set -e
          git remote set-url origin https://x-access-token:${{ secrets.FORGEJO_TOKEN }}@codeberg.org/Limine/Limine.git
          git fetch --all
          git checkout $BRANCH_NAME-binary || git checkout --orphan $BRANCH_NAME-binary
          rm -rf $(ls -a | grep -v '^\.git$' | grep -v '^\.\.$' | grep -v '^\.$' | grep -v '^build$')
          cp -r build/bin/. ./
          rm -rf build
          git add -f .
          git commit -m "Binary release $TAG_NAME" -S
          git push origin $BRANCH_NAME-binary
          git tag $TAG_NAME-binary -s -m $TAG_NAME-binary
          git push origin $TAG_NAME-binary
