Skip to content

immortalwrt-ikuai_Q6000 #1

immortalwrt-ikuai_Q6000

immortalwrt-ikuai_Q6000 #1

name: immortalwrt-ikuai_Q6000
on:
workflow_dispatch:
inputs:
enable_ssh_debug:
description: '启用 SSH 调试模式'
required: false
default: 'false'
type: choice
options:
- 'false'
- 'true'
env:
REPO_URL: https://github.com/dailook/immortalwrt-24.10.git
REPO_BRANCH: openwrt-24.10
CONFIG_FILE: ikuai-q6000.config
DIY_P1_SH: OpenWrt-part1.sh
DIY_P2_SH: OpenWrt-part2.sh
CACHE_TOOLCHAIN: true
UPLOAD_BIN_DIR: false
FIRMWARE_RELEASE: true
FIRMWARE_TAG: ikuai_q6000_immortalwrt_2410
TZ: Asia/Shanghai
jobs:
Build:
runs-on: ubuntu-22.04
# 添加权限声明
permissions:
contents: write
packages: write
steps:
# 步骤 1: 检查服务器性能
- name: Check Server Performance
run: |
echo "警告⚠ 服务器性能检查"
echo "分配的服务器性能有限,若选择的插件过多,务必注意CPU性能!"
echo "已知CPU型号(降序): 7763,8370C,8272CL,8171M,E5-2673"
echo "----- CPU信息 -----"
echo "CPU物理数量: $(cat /proc/cpuinfo | grep 'physical id' | sort -u | wc -l)"
echo "CPU核心数量: $(nproc)"
echo "CPU型号信息: $(cat /proc/cpuinfo | grep -m1 'model name' | cut -d':' -f2 | xargs)"
echo "----- 内存信息 -----"
free -h || true
echo "----- 硬盘信息 -----"
df -hT
# 步骤 2: 初始化编译环境
- name: Initialization Environment
env:
DEBIAN_FRONTEND: noninteractive
run: |
# 清理 Docker 镜像
docker rmi $(docker images -q) 2>/dev/null || true
# 删除不需要的路径
sudo rm -rf /usr/share/dotnet /etc/apt/sources.list.d /usr/local/lib/android "$AGENT_TOOLSDIRECTORY" || true
# 卸载大型软件包
sudo -E apt-get -y purge \
azure-cli ghc* zulu* llvm* firefox google* dotnet* \
powershell openjdk* mongodb* moby* 2>/dev/null || true
# 更新包管理器
sudo -E apt-get -y update
# 安装依赖包
sudo -E apt-get -y install \
build-essential ccache curl git libelf-dev libfuse-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev \
libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool \
p7zip p7zip-full unzip vim wget jq libc6-dev libffi-dev libpcre3-dev \
libsqlite3-dev zip gzip
# 清理和优化
sudo -E systemctl daemon-reload
sudo -E apt-get -y autoremove --purge
sudo -E apt-get -y clean
# 设置时区
sudo timedatectl set-timezone "$TZ"
# 步骤 3: 扩展磁盘空间
- name: Combine Disks
uses: easimon/maximize-build-space@master
with:
swap-size-mb: 1024
temp-reserve-mb: 100
root-reserve-mb: 1024
# 步骤 4: 检出代码
- name: Checkout
uses: actions/checkout@v4
# 步骤 5: 克隆源码并提取 Git 信息
- name: Clone Source Code
run: |
echo "磁盘空间使用情况:"
df -hT "$GITHUB_WORKSPACE"
echo "克隆源码仓库..."
git clone "$REPO_URL" -b "$REPO_BRANCH" openwrt
cd openwrt
echo "OPENWRT_PATH=$PWD" >> "$GITHUB_ENV"
# 提取 Git 信息
COMMIT_AUTHOR=$(git show -s --date=short --format="作者: %an")
echo "COMMIT_AUTHOR=$COMMIT_AUTHOR" >> "$GITHUB_ENV"
COMMIT_DATE=$(git show -s --date=short --format="时间: %ci")
echo "COMMIT_DATE=$COMMIT_DATE" >> "$GITHUB_ENV"
COMMIT_MESSAGE=$(git show -s --date=short --format="内容: %s")
echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> "$GITHUB_ENV"
COMMIT_HASH=$(git show -s --date=short --format="hash: %H")
echo "COMMIT_HASH=$COMMIT_HASH" >> "$GITHUB_ENV"
# 步骤 6: 生成变量
- name: Generate Variables
run: |
cp "$CONFIG_FILE" "$OPENWRT_PATH/.config"
cd "$OPENWRT_PATH"
make defconfig > /dev/null 2>&1
SOURCE_REPO="$(basename "$REPO_URL" .git)"
echo "SOURCE_REPO=$SOURCE_REPO" >> "$GITHUB_ENV"
DEVICE_TARGET=$(grep -m1 'CONFIG_TARGET_BOARD' .config | cut -d'"' -f2)
echo "DEVICE_TARGET=$DEVICE_TARGET" >> "$GITHUB_ENV"
DEVICE_SUBTARGET=$(grep -m1 'CONFIG_TARGET_SUBTARGET' .config | cut -d'"' -f2)
echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> "$GITHUB_ENV"
# 步骤 7: 缓存编译工具链
- name: Cache Toolchain
if: env.CACHE_TOOLCHAIN == 'true'
uses: HiGarfield/cachewrtbuild@main
with:
ccache: false
mixkey: ${{ env.SOURCE_REPO }}-${{ env.REPO_BRANCH }}-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}
prefix: ${{ env.OPENWRT_PATH }}
# 步骤 8: 加载自定义 feeds
- name: Load Custom Feeds
run: |
chmod +x "$DIY_P1_SH"
cd "$OPENWRT_PATH"
"$GITHUB_WORKSPACE/$DIY_P1_SH"
# 步骤 9: 更新和安装 feeds
- name: Install Feeds
run: |
cd "$OPENWRT_PATH"
./scripts/feeds update -a
./scripts/feeds install -a
# 步骤 10: 加载自定义配置
- name: Load Custom Configuration
run: |
[ -e files ] && mv files "$OPENWRT_PATH/files"
[ -e "$CONFIG_FILE" ] && mv "$CONFIG_FILE" "$OPENWRT_PATH/.config"
chmod +x "$GITHUB_WORKSPACE/scripts"/*.sh
chmod +x "$DIY_P2_SH"
cd "$OPENWRT_PATH"
"$GITHUB_WORKSPACE/$DIY_P2_SH"
# 步骤 11: SSH 调试(可选)
- name: SSH Debug
uses: mxschmitt/action-tmate@v3
if: |
failure() ||
(github.event_name == 'workflow_dispatch' &&
github.event.inputs.enable_ssh_debug == 'true')
with:
limit-output-lines: 1000
# 步骤 12: 下载依赖包
- name: Download DL Package
run: |
cd "$OPENWRT_PATH"
make defconfig
make download -j$(nproc)
# 移除损坏的包
find dl -size -1024c -exec rm -f {} \;
# 步骤 13: 编译固件
- name: Compile Firmware
id: compile
run: |
cd "$OPENWRT_PATH"
mkdir -p files/etc/uci-defaults
cp "$GITHUB_WORKSPACE/scripts/init-settings.sh" files/etc/uci-defaults/99-init-settings
echo "使用 $(nproc) 线程编译"
# 多次尝试编译,逐步降低并行度
make -j$(nproc) || make -j$(( $(nproc) / 2 )) || make -j1 || make -j1 V=s
# 标记编译成功
echo "status=success" >> "$GITHUB_OUTPUT"
# 记录时间
echo "DATE=$(date +'%Y-%m-%d %H:%M:%S')" >> "$GITHUB_ENV"
echo "FILE_DATE=$(date +'%Y.%m.%d')" >> "$GITHUB_ENV"
# 步骤 14: 检查空间使用
- name: Check Space Usage
if: always()
run: |
echo "编译后磁盘空间使用情况:"
df -hT
# 步骤 15: 整理固件文件
- name: Organize Files
if: steps.compile.outputs.status == 'success'
run: |
cd "$OPENWRT_PATH/bin/targets/*/*" || exit 1
echo "SHA256 校验和:"
cat sha256sums
# 备份配置
cp "$OPENWRT_PATH/.config" build.config
# 整理包文件
mkdir -p packages 2>/dev/null || true
find "$OPENWRT_PATH/bin/packages" -name "*.ipk" -exec mv {} packages/ \; 2>/dev/null || true
# 压缩包文件
if [ -d "packages" ] && [ "$(ls -A packages)" ]; then
tar -zcf Packages.tar.gz packages
rm -rf packages
fi
# 清理不需要的文件
rm -f feeds.buildinfo version.buildinfo 2>/dev/null || true
# 提取内核版本
if [ -f "*.manifest" ]; then
KERNEL=$(grep '^kernel' *.manifest 2>/dev/null | head -1 | cut -d- -f2 | xargs || echo "unknown")
echo "KERNEL=$KERNEL" >> "$GITHUB_ENV"
fi
echo "FIRMWARE_PATH=$PWD" >> "$GITHUB_ENV"
# 步骤 16: 上传固件到制品库(可选)
- name: Upload Firmware To Artifact
if: steps.compile.outputs.status == 'success' && env.FIRMWARE_RELEASE != 'true'
uses: actions/upload-artifact@v4
with:
name: ${{ env.SOURCE_REPO }}-firmware-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}-${{ env.FILE_DATE }}
path: ${{ env.FIRMWARE_PATH }}
retention-days: 30
# 步骤 17: 上传固件到 Release
- name: Upload Firmware To Release
if: steps.compile.outputs.status == 'success' && env.FIRMWARE_RELEASE == 'true'
uses: ncipollo/release-action@v1
with:
name: R${{ env.DATE }} for ${{ env.FIRMWARE_TAG }}
allowUpdates: true
makeLatest: true
tag: ${{ env.FIRMWARE_TAG }}
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: ${{ env.FIRMWARE_PATH }}/*
body: |
# ImmortalWrt 固件发布
**设备**: ${{ env.FIRMWARE_TAG }}
**编译时间**: ${{ env.DATE }}
## 📒 固件信息
- 💻 平台架构: `${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}`
- ⚽ 固件源码: [${{ env.REPO_URL }}](${{ env.REPO_URL }})
- 💝 源码分支: `${{ env.REPO_BRANCH }}`
- 🚀 内核版本: `${{ env.KERNEL }}`
- 🌐 默认地址: `192.168.1.1`
- 🔑 默认密码: 无
## 🧊 最后一次源码更新记录
```
${{ env.COMMIT_AUTHOR }}
${{ env.COMMIT_DATE }}
${{ env.COMMIT_MESSAGE }}
${{ env.COMMIT_HASH }}
```
## 📝 SHA256 校验
请检查下载的固件文件完整性。
# 步骤 18: 清理工作空间(可选)
- name: Clean Up Workspace
if: always()
run: |
# 可选:删除大型临时文件以节省空间
cd "$OPENWRT_PATH" 2>/dev/null || true
rm -rf .git dl/git-* 2>/dev/null || true
du -sh . || true