# SPDX-License-Identifier: GPL-2.0-or-later

# Copyright (C) 2020 by Tarek BOUCHKATI <tarek.bouchkati@gmail.com>

on: push

name: OpenOCD Snapshot

jobs:
  package:
    runs-on: [ubuntu-latest]
    env:
      DL_DIR: ../downloads
      BUILD_DIR: ../build
    steps:
      - name: Install needed packages
        run: |
          sudo apt-get update
          sudo apt-get install autotools-dev autoconf automake libtool pkg-config cmake texinfo texlive g++-mingw-w64-i686
      - name: Checkout Code
        uses: actions/checkout@v4
      - run: ./bootstrap
      - name: Prepare libusb1
        env:
          LIBUSB1_VER: 1.0.26
        run: |
          mkdir -p $DL_DIR && cd $DL_DIR
          wget "https://github.com/libusb/libusb/releases/download/v${LIBUSB1_VER}/libusb-${LIBUSB1_VER}.tar.bz2"
          tar -xjf libusb-${LIBUSB1_VER}.tar.bz2
          echo "LIBUSB1_SRC=$PWD/libusb-${LIBUSB1_VER}" >> $GITHUB_ENV
      - name: Prepare hidapi
        env:
          HIDAPI_VER: 0.13.1
        run: |
          mkdir -p $DL_DIR && cd $DL_DIR
          wget "https://github.com/libusb/hidapi/archive/hidapi-${HIDAPI_VER}.tar.gz"
          tar -xzf hidapi-${HIDAPI_VER}.tar.gz
          cd hidapi-hidapi-${HIDAPI_VER}
          ./bootstrap
          echo "HIDAPI_SRC=$PWD" >> $GITHUB_ENV
      - name: Prepare libftdi
        env:
          LIBFTDI_VER: 1.5
        run: |
          mkdir -p $DL_DIR && cd $DL_DIR
          wget "http://www.intra2net.com/en/developer/libftdi/download/libftdi1-${LIBFTDI_VER}.tar.bz2"
          tar -xjf libftdi1-${LIBFTDI_VER}.tar.bz2
          echo "LIBFTDI_SRC=$PWD/libftdi1-${LIBFTDI_VER}" >> $GITHUB_ENV
      - name: Prepare capstone
        env:
          CAPSTONE_VER: 4.0.2
        run: |
          mkdir -p $DL_DIR && cd $DL_DIR
          CAPSTONE_NAME=${CAPSTONE_VER}
          CAPSTONE_FOLDER=capstone-${CAPSTONE_VER}
          wget "https://github.com/aquynh/capstone/archive/${CAPSTONE_VER}.tar.gz"
          tar -xzf ${CAPSTONE_VER}.tar.gz
          echo "CAPSTONE_SRC=$PWD/capstone-${CAPSTONE_VER}" >> $GITHUB_ENV
      - name: Prepare libjaylink
        env:
          LIBJAYLINK_VER: 0.3.1
        run: |
          mkdir -p $DL_DIR && cd $DL_DIR
          wget https://gitlab.zapb.de/libjaylink/libjaylink/-/archive/${LIBJAYLINK_VER}/libjaylink-${LIBJAYLINK_VER}.tar.gz
          tar -xzf libjaylink-${LIBJAYLINK_VER}.tar.gz
          cd libjaylink-${LIBJAYLINK_VER}
          ./autogen.sh
          echo "LIBJAYLINK_SRC=$PWD" >> $GITHUB_ENV
      - name: Prepare jimtcl
        env:
          JIMTCL_VER: 0.83
        run: |
          mkdir -p $DL_DIR && cd $DL_DIR
          wget https://github.com/msteveb/jimtcl/archive/refs/tags/${JIMTCL_VER}.tar.gz
          tar -xzf ${JIMTCL_VER}.tar.gz
          echo "JIMTCL_SRC=$PWD/jimtcl-${JIMTCL_VER}" >> $GITHUB_ENV
      - name: Package OpenOCD for windows
        env:
          MAKE_JOBS: 2
          HOST: i686-w64-mingw32
          LIBUSB1_CONFIG: --enable-shared --disable-static
          HIDAPI_CONFIG: --enable-shared --disable-static --disable-testgui
          LIBFTDI_CONFIG: -DSTATICLIBS=OFF -DEXAMPLES=OFF -DFTDI_EEPROM=OFF
          CAPSTONE_CONFIG: "CAPSTONE_BUILD_CORE_ONLY=yes CAPSTONE_STATIC=yes CAPSTONE_SHARED=no"
          LIBJAYLINK_CONFIG: --enable-shared --disable-static
          JIMTCL_CONFIG: --with-ext=json --minimal --disable-ssl
        run: |
          # check if there is tag pointing at HEAD, otherwise take the HEAD SHA-1 as OPENOCD_TAG
          OPENOCD_TAG="`git tag --points-at HEAD`"
          [ -z $OPENOCD_TAG ] && OPENOCD_TAG="`git rev-parse --short HEAD`"
          # check if there is tag pointing at HEAD, if so the release will have the same name as the tag,
          # otherwise it will be named 'latest'
          RELEASE_NAME="`git tag --points-at HEAD`"
          [ -z $RELEASE_NAME ] && RELEASE_NAME="latest"
          [[ $RELEASE_NAME = "latest" ]] && IS_PRE_RELEASE="true" || IS_PRE_RELEASE="false"
          # set env and call cross-build.sh
          export OPENOCD_TAG=$OPENOCD_TAG
          export OPENOCD_SRC=$PWD
          export OPENOCD_CONFIG=""
          mkdir -p $BUILD_DIR &&  cd $BUILD_DIR
          bash $OPENOCD_SRC/contrib/cross-build.sh $HOST
          # add missing dlls
          cd $HOST-root/usr
          cp `$HOST-gcc --print-file-name=libwinpthread-1.dll` ./bin/
          # required by libftdi1.dll
          cp `$HOST-gcc --print-file-name=libgcc_s_dw2-1.dll` ./bin/
          # prepare the artifact
          ARTIFACT="openocd-${OPENOCD_TAG}-${HOST}.tar.gz"
          tar -czf $ARTIFACT *
          echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV
          echo "IS_PRE_RELEASE=$IS_PRE_RELEASE" >> $GITHUB_ENV
          echo "ARTIFACT_PATH=$PWD/$ARTIFACT" >> $GITHUB_ENV
      - name: Publish OpenOCD packaged for windows
        uses: actions/upload-artifact@v4
        with:
          path: ${{ env.ARTIFACT_PATH }}
      - name: Delete 'latest' Release
        uses: dev-drprasad/delete-tag-and-release@v1.1
        with:
          delete_release: true
          tag_name: ${{ env.RELEASE_NAME }}
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - name: Create Release
        uses: ncipollo/release-action@v1
        with:
          tag: ${{ env.RELEASE_NAME }}
          commit: ${{ github.sha }}
          draft: false
          artifacts: ${{ env.ARTIFACT_PATH }}
          prerelease: ${{ env.IS_PRE_RELEASE }}
          token: ${{ secrets.GITHUB_TOKEN }}
