name: 🏗️ 构建 OpenWrt 稳定版

# 触发条件：push, pull_request, 定时（每天）和手动触发（workflow_dispatch）
on:
  #push:
  #  branches:
  #    - main # 只有在 main 分支 push 时触发
  #pull_request: # PR 时触发
  #schedule:
  #  - cron: '0 0 * * *'  # 每天自动触发一次
  workflow_dispatch:  # 手动触发

jobs:
  build:
    #runs-on: ubuntu-22.04
    runs-on: ubuntu-builder

    steps:
      - name: 🛒 检出代码 - 获取最新的代码库状态
        uses: actions/checkout@v3

      #配置git代理http和https为192.168.1.20:7890
      #- name: 🛠️ 配置 Git 代理
      #  run: |
      #    git config --global http.proxy http://192.168.1.20:7890
      #    git config --global https.proxy http://192.168.1.20:7890

      #打印git配置信息
      - name: 📄 打印 Git 配置信息
        run: |
          git config --list

      #打印git代理配置信息
      #- name: 📄 打印 Git 代理配置信息
      #  run: |
      #    git config --global --get http.proxy
      #    git config --global --get https.proxy

      - name: 📥 克隆 LEDE 源码
        run: |
          git clone https://github.com/coolsnowwolf/lede
          cd lede

      #添加源
      - name: 📦 添加源
        run: |
          cd lede
          echo "当前目录：" && pwd
          echo "当前用户为：" && whoami
          #echo 'src-git istore https://github.com/linkease/istore;main' >> feeds.conf.default
          #echo 'src-git kenzo https://github.com/kenzok8/openwrt-packages' >> feeds.conf.default
          #echo 'src-git small https://github.com/kenzok8/small' >> feeds.conf.default

      #打印feeds.conf.default文件内容
      - name: 📄 打印 feeds.conf.default 文件内容
        run: |
          cat lede/feeds.conf.default

      #执行./scripts/feeds update -a 和./scripts/feeds install -a
      - name: 🔄 更新 feeds 并安装
        run: |
          cd lede
          ./scripts/feeds update -a
          #延时5秒
          sleep 5
          ./scripts/feeds update -a
          ./scripts/feeds install -a

      - name: 📦 获取固件版本 - 检索当前固件的版本信息
        run: |
          cd lede
          grep '"DISTRIB_REVISION=' */*/default-settings/files/zzz-default-settings | cut -d"'" -f2

          # 获取 DISTRIB_REVISION 值
          DISTRIB_REVISION=$(grep '"DISTRIB_REVISION=' */*/default-settings/files/zzz-default-settings | cut -d"'" -f2)

          # 将值设置为环境变量
          echo "distrib_revision=$DISTRIB_REVISION" >> $GITHUB_ENV

          # 在日志中显示 DISTRIB_REVISION 的值
          echo "DISTRIB_REVISION: $DISTRIB_REVISION"   

      - name: 📄 创建并写入 DISTRIB_REVISION.txt 文件 - 记录分发版本
        run: |
          # 获取当前日期和时间 - 格式为“2024年1月31日15时24分36秒更新”
          CURRENT_DATE=$(date +"%Y年%m月%d日%H时%M分")
          #日期TAG，格式为“0131-15”，表示1月31日15时
          CURRENT_DATE_TAG=$(date +"%m%d-%H")
          echo "当前日期: $CURRENT_DATE"
          # 将当前日期和时间设置为环境变量
          echo "CURRENT_DATE=$(date +'%Y年%m月%d日%H时%M分')" >> $GITHUB_ENV
          # 将日期TAG写入环境变量
          echo "CURRENT_DATE_TAG=$CURRENT_DATE_TAG" >> $GITHUB_ENV
          # 写入文件，以便在发布中使用
          echo -e "${CURRENT_DATE}更新\n${{ env.distrib_revision }}" > DISTRIB_REVISION.txt
          cat DISTRIB_REVISION.txt # 确认文件内容     

      - name: 📑 拷贝.config文件 - 确认配置文件状态
        run: |
          echo "📂当前目录：" && pwd
          ls -la  #la表示显示所有文件，包括隐藏文件
          # 重命名当前目录下的配置文件并拷贝到 lede 目录下
          cp "lede;RUI;x86_64.config" lede/.config        

      - name: 🔧 设置编译配置
        run: |
          cd lede
          # make menuconfig  # 这里您可以根据需要修改配置
          make defconfig  # 生成默认的 .config 文件

      - name: 🔨 编译前准备 - 下载 dl 库
        run: |
          cd lede
          #make defconfig
          make download -j8 V=s 

      - name: 🚀 启用多线程编译
        run: |
          cd lede
          #make V=s -j$(nproc) #使用所有 CPU 编译
          # 使用 V=0 关闭详细输出
          make V=s -j$(nproc)

      - name: 🗃️ 整理文件 - 优化文件结构
        if: success() && !cancelled()
        run: |
          echo "当前目录：" && pwd
          # 查看当前目录下的文件
          ls -al
          # 查看磁盘空间
          df -hT
          # 进入固件目录
          cd lede/bin/targets/*/*
          # 删除不需要的文件
          rm -rf packages *.bin *.json *.buildinfo *.manifest sha256sums
          # 设置固件所在的目录路径并写入环境变量
          echo "firmware_path=$PWD" >> $GITHUB_ENV          

      - name: 📂 固件路径 - 显示固件路径
        run: |
          echo "Firmware path: ${{ env.firmware_path }}"  

      - name: 🚀 上传固件到 Release - 发布最新固件
        uses: akkuman/gitea-release-action@v1
        env:
          NODE_OPTIONS: "--experimental-fetch" # 如果 Node.js 版本 < 18
          NODE_TLS_REJECT_UNAUTHORIZED: "0" # 如果您需要忽略 SSL 验证错误
          GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} # 确保在 Gitea 的仓库 Secrets 中设置了 GITEA_TOKEN
        with:
          #server_url: "https://git.aoun.ltd/" # 您的 Gitea API URL 默认为仓库地址
          repository: "18152827937/OpenWrt-Stable" # 您的 Gitea 仓库
          name: "最新发布版本：${{ env.distrib_revision }}" # 发布名称
          # 使用固件版本和日期TAG作为标签
          tag_name: ${{ env.distrib_revision }}-${{ env.CURRENT_DATE_TAG }}
          files: ${{ env.firmware_path }}/*  # /* 表示上传所有文件
          body: |
            ## 固件版本
            - 版本号：`${{ env.distrib_revision }}`
            - 发布日期：`${{ env.CURRENT_DATE }}`

            ## 官方网站
            - 点我访问[固件发布官方网站](https://xiangzi.ltd/)  