name: 编译sshpass
on:
  # 使用手动触发执行
  workflow_dispatch:
  
jobs:
  #作业名 叫 build
  build: 
    strategy:
      # 并发作业 单个失败 不影响其他作业
      fail-fast: false
      # 设置并发作业
      matrix:
        # 设置多个作业的 参数
        include:
          - TARGET: amd64
            OS: ubuntu-latest
            MUSL: x86_64-linux-musl
            
          - TARGET: arm64
            OS: ubuntu-latest
            MUSL: aarch64-linux-musl
            
          - TARGET: mips
            OS: ubuntu-latest
            MUSL: mips-linux-muslsf
            
          - TARGET: mips64
            OS: ubuntu-latest
            MUSL: mips64-linux-musl
            
          - TARGET: mips64el
            OS: ubuntu-latest
            MUSL: mips64el-linux-musl
            
          - TARGET: mipsel
            OS: ubuntu-latest
            MUSL: mipsel-linux-muslsf
            
          - TARGET: arm
            OS: ubuntu-latest
            MUSL: arm-linux-musleabi

          - TARGET: arm_hf
            OS: ubuntu-latest
            MUSL: arm-linux-musleabihf
            
          - TARGET: armv5l
            OS: ubuntu-latest
            MUSL: armv5l-linux-musleabi

          - TARGET: armv5l_hf
            OS: ubuntu-latest
            MUSL: armv5l-linux-musleabihf
            
          - TARGET: armv6
            OS: ubuntu-latest
            MUSL: armv6-linux-musleabi
            
          - TARGET: armv6_hf
            OS: ubuntu-latest
            MUSL: armv6-linux-musleabihf

          - TARGET: armv7l
            OS: ubuntu-latest
            MUSL: armv7m-linux-musleabi

          - TARGET: armv7l_hf
            OS: ubuntu-latest
            MUSL: armv7l-linux-musleabihf

          - TARGET: Freebsd-x86-64
            OS: ubuntu-latest
     #从并发作业设置的变量里读取 应该执行什么系统操作       
    runs-on: ${{ matrix.OS }}
    steps:
    - name: 检出代码
      # 使用当前仓库 作为当前路径
      uses: actions/checkout@v4
    - name: 拉取代码
      # 手动Git 拉取代码
      run: git clone https://git.code.sf.net/p/sshpass/code-git sshpass-code-git
    - name: 下载gcc
      # 设置判断  不是这个架构的才执行这个流程  下载交叉编译工具链
      if: ${{ matrix.TARGET != 'Freebsd-x86-64' }}
      uses: lmq8267/dl-musl@main
      with:
        target: ${{ matrix.MUSL }}
        static: true
        gccpath: /tmp
    - name: 安装 UPX
      # 设置判断  不是这个架构的才执行这个流程  下载安装最新的upx
      if: ${{ matrix.TARGET != 'Freebsd-x86-64' }}
      uses: crazy-max/ghaction-upx@v3
      with:
          version: latest
          install-only: true
    - name: 编译Linux
      # 设置判断  不是这个架构的才执行这个流程
      if: ${{ matrix.TARGET != 'Freebsd-x86-64' }}
      working-directory: sshpass-code-git
      run: |
         sudo apt-get install autoconf automake
         #设置依赖 
         sudo ln -s /usr/bin/aclocal /usr/bin/aclocal-1.15
         #生成编译文件
         autoreconf -i
         ./configure --host=${{ matrix.MUSL }}
         sed -i '/^#define malloc rpl_malloc/d' config.h
         make
         ls
         file sshpass
         $STRIP sshpass
         if [[ ! ${{ matrix.TARGET }} =~ ^mips64 ]]; then
          upx --lzma --best sshpass
         fi
    - name: 编译FreeBSD
      # 设置判断  只有等于 这个架构才执行 
      if: ${{ matrix.TARGET == 'Freebsd-x86-64' }}
      # 这是安装虚拟机的流程  安装freebsd的虚拟机进行编译
      uses: cross-platform-actions/action@v0.23.0
      with:
        #设置虚拟机系统
        operating_system: freebsd
        #设置虚拟机的架构
        architecture: x86-64
        #设置虚拟机系统的版本
        version: '13.2'
        #设置语法类型
        shell: bash
        #设置内存
        memory: 5G
        #设置cpu核心
        cpu_count: 4
        run: |
         #执行命令  安装指定软件
          sudo pkg install -y autoconf automake libtool
          cd ./sshpass-code-git
          #设置环境变量
          export CXXFLAGS="-static"
          export LDFLAGS="-static"
          autoreconf -i
          ./configure 
          make
          ls
          strip sshpass
          file sshpass
    - name: 上传文件
      uses: actions/upload-artifact@v4
      with:
	#编译完成后上传文件
        name: sshpass-${{ matrix.TARGET }}
        path: sshpass-code-git/sshpass
