name: Linux_Python

on: [push, pull_request]

jobs:
  build:

    runs-on: ubuntu-24.04

    steps:
      - uses: actions/checkout@v1

      - name: 下载submodule源码
        run: mv -f .gitmodules_github .gitmodules && git submodule sync && git submodule update --init

      - name: 下载 SRTP
        uses: actions/checkout@v2
        with:
          repository: cisco/libsrtp
          fetch-depth: 1
          ref: v2.3.0
          path: 3rdpart/libsrtp

      - name: 下载 openssl
        uses: actions/checkout@v2
        with:
          repository: openssl/openssl
          fetch-depth: 1
          ref: OpenSSL_1_1_1
          path: 3rdpart/openssl

      - name: 下载 usrsctp
        uses: actions/checkout@v2
        with:
          repository: sctplab/usrsctp
          fetch-depth: 1
          ref: 0.9.5.0
          path: 3rdpart/usrsctp

      - name: 启动 Docker 容器, 在Docker 容器中执行脚本
        run: |
          docker pull centos:7 
          docker run -v $(pwd):/root -w /root --rm centos:7 sh -c "
            #!/bin/bash
            set -x
          
            # Backup original CentOS-Base.repo file
            cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
          
            # Define new repository configuration
            cat <<EOF > /etc/yum.repos.d/CentOS-Base.repo
          [base]
          name=CentOS-7 - Base - mirrors.aliyun.com
          baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
          gpgcheck=1
          gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
          
          [updates]
          name=CentOS-7 - Updates - mirrors.aliyun.com
          baseurl=http://mirrors.aliyun.com/centos/7/updates/x86_64/
          gpgcheck=1
          gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
          EOF
            cat > /etc/yum.repos.d/epel-aliyun.repo <<EOF
          [epel]
          name=Extra Packages for Enterprise Linux 7 - x86_64
          baseurl=http://mirrors.aliyun.com/epel/7/x86_64/
          enabled=1
          gpgcheck=0
          EOF
            cat > /etc/yum.repos.d/CentOS-SCLo-aliyun.repo <<EOF
          [C7-SCLo-rh]
          name=CentOS-7 SCLo RH - x86_64
          baseurl=http://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
          enabled=1
          gpgcheck=0
          EOF
          
            # Clean yum cache and recreate it
            yum clean all
            yum makecache
          
            echo \"CentOS 7 软件源已成功切换\"
            yum install -y git wget gcc gcc-c++ make which devtoolset-11
          
            # === 1. 下载并静默安装 Miniconda ===
            wget -q https://repo.anaconda.com/miniconda/Miniconda3-py39_23.3.1-0-Linux-x86_64.sh -O miniconda.sh
            bash miniconda.sh -b -p "$HOME/miniconda"  # -b 表示 batch（静默安装）
            export PATH="$HOME/miniconda/bin:$PATH"
          
            # === 2. 初始化 conda（非交互模式） ===
            source "$HOME/miniconda/etc/profile.d/conda.sh"
          
            # === 3. 创建 Python 3.11 环境 ===
            conda create -n py11 python=3.11 -y
          
            # === 4. 激活环境 ===
            conda activate py11
          
            # === 5. 验证环境 ===
            python --version
          
            # === 6. 安装必要模块 ===
            conda install -y pip setuptools jinja2 wheel
          
            mkdir -p /root/install
          
            cd 3rdpart/openssl
            ./config no-shared --prefix=/root/install
            make -j $(nproc)
            make install
            cd ../../
          
            wget https://github.com/Kitware/CMake/releases/download/v3.29.5/cmake-3.29.5.tar.gz
            tar -xf cmake-3.29.5.tar.gz
            cd cmake-3.29.5
            OPENSSL_ROOT_DIR=/root/install ./configure
            make -j $(nproc)
            make install
            cd ..
          
            cd 3rdpart/usrsctp
            mkdir build
            cd build
            cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
            make -j $(nproc)
            make install
            cd ../../../
          
            cd 3rdpart/libsrtp && ./configure --enable-openssl  --with-openssl-dir=/root/install && make -j $(nproc) && make install
            cd ../../
            
            source /opt/rh/devtoolset-11/enable
            gcc --version
          
            mkdir -p linux_build && cd linux_build && cmake .. -DENABLE_PYTHON=ON -DPYTHON_EXECUTABLE=$(which python3.14) -DOPENSSL_ROOT_DIR=/root/install -DCMAKE_BUILD_TYPE=Release && make -j $(nproc)
          "

      - name: 设置环境变量
        run: |
          echo "BRANCH=$(echo ${GITHUB_REF#refs/heads/} | tr -s "/\?%*:|\"<>" "_")" >> $GITHUB_ENV  
          echo "BRANCH2=$(echo ${GITHUB_REF#refs/heads/} )" >> $GITHUB_ENV    
          echo "DATE=$(date +%Y-%m-%d)" >> $GITHUB_ENV

      - name: 打包二进制
        id: upload
        uses: actions/upload-artifact@v4
        with:
          name: ${{ github.workflow }}_${{ env.BRANCH }}_${{ env.DATE }}
          path: release/*
          if-no-files-found: error
          retention-days: 90

      - name: issue评论
        if: github.event_name != 'pull_request' && github.ref != 'refs/heads/feature/test'
        uses: actions/github-script@v7
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            github.rest.issues.createComment({
              issue_number: ${{vars.VERSION_ISSUE_NO}},
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: '- 下载地址: [${{ github.workflow }}_${{ env.BRANCH }}_${{ env.DATE }}](${{ steps.upload.outputs.artifact-url }})\n'
                + '- 分支: ${{ env.BRANCH2 }}\n' 
                + '- git hash: ${{ github.sha }} \n' 
                + '- 编译日期: ${{ env.DATE }}\n' 
                + '- 编译记录: [${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})\n'
                + '- 打包ci名: ${{ github.workflow }}\n'
                + '- 开启特性: openssl/webrtc/datachannel\n'
                + '- 说明: 本二进制在centos7(x64)上编译，请确保您的机器系统不低于此版本；本程序依赖python3.11, 运行前请miniconda安装python3.11\n' 
            })
