mirror of
https://github.com/Dichgrem/Dwrt-build.git
synced 2025-12-16 21:51:59 -05:00
169 lines
5.0 KiB
YAML
169 lines
5.0 KiB
YAML
name: Build Custom WRT
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
project:
|
||
description: "选择 WRT 项目"
|
||
required: true
|
||
default: "immortalwrt"
|
||
type: choice
|
||
options:
|
||
- openwrt
|
||
- immortalwrt
|
||
- x-wrt
|
||
- lienol
|
||
- lede
|
||
version_type:
|
||
description: "版本类型"
|
||
required: true
|
||
default: "stable"
|
||
type: choice
|
||
options:
|
||
- "snapshot"
|
||
- "stable"
|
||
branch:
|
||
description: "snapshot-branch"
|
||
required: false
|
||
default: "master"
|
||
type: string
|
||
tag:
|
||
description: "stable-tag"
|
||
required: false
|
||
default: "v24.10.2"
|
||
type: string
|
||
config_path:
|
||
description: "config路径"
|
||
required: true
|
||
default: "config/myconfig"
|
||
type: string
|
||
|
||
jobs:
|
||
build:
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout current repository
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Determine Git ref
|
||
id: refinfo
|
||
run: |
|
||
if [ "${{ inputs.version_type }}" = "snapshot" ]; then
|
||
echo "ref=${{ inputs.branch }}" >> $GITHUB_OUTPUT
|
||
else
|
||
echo "ref=${{ inputs.tag }}" >> $GITHUB_OUTPUT
|
||
fi
|
||
|
||
- name: Install build dependencies
|
||
run: |
|
||
sudo apt-get update
|
||
sudo apt-get install -y \
|
||
build-essential clang flex bison g++ gawk gettext git \
|
||
libncurses-dev libssl-dev python3 python3-dev python3-setuptools \
|
||
rsync unzip zlib1g-dev file wget curl \
|
||
gzip tar zip xz-utils bzip2 zstd \
|
||
make cmake autoconf automake libtool patch diffutils \
|
||
findutils grep sed help2man texinfo \
|
||
libelf-dev libfuse-dev liblzma-dev libxml2-dev libyaml-dev \
|
||
uuid-dev device-tree-compiler antlr3 gperf \
|
||
time bc jq xxd swig upx-ucl ccache ecj fastjar imagemagick
|
||
|
||
- name: Determine Git URL
|
||
id: projectinfo
|
||
run: |
|
||
case "${{ inputs.project }}" in
|
||
immortalwrt)
|
||
echo "url=https://github.com/immortalwrt/immortalwrt.git" >> $GITHUB_OUTPUT
|
||
;;
|
||
x-wrt)
|
||
echo "url=https://github.com/x-wrt/x-wrt.git" >> $GITHUB_OUTPUT
|
||
;;
|
||
openwrt)
|
||
echo "url=https://git.openwrt.org/openwrt/openwrt.git" >> $GITHUB_OUTPUT
|
||
;;
|
||
lienol)
|
||
echo "url=https://github.com/Lienol/openwrt.git" >> $GITHUB_OUTPUT
|
||
;;
|
||
lede)
|
||
echo "url=https://github.com/coolsnowwolf/lede.git" >> $GITHUB_OUTPUT
|
||
;;
|
||
*)
|
||
echo "❌ 未知项目: ${{ inputs.project }}" >&2
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
- name: Clone selected WRT source
|
||
run: |
|
||
echo "📥 克隆 ${{ inputs.project }} 仓库,ref=${{ steps.refinfo.outputs.ref }}"
|
||
git clone --branch "${{ steps.refinfo.outputs.ref }}" \
|
||
"${{ steps.projectinfo.outputs.url }}" wrt
|
||
|
||
- name: Copy diy.sh to WRT
|
||
run: |
|
||
echo "📂 复制 diy.sh 到 wrt 目录"
|
||
cp diy.sh wrt/diy.sh
|
||
|
||
- name: Run diy.sh
|
||
working-directory: wrt
|
||
run: |
|
||
echo "🔧 执行 diy.sh"
|
||
chmod +x diy.sh
|
||
./diy.sh
|
||
|
||
- name: Update and install feeds
|
||
working-directory: wrt
|
||
run: |
|
||
echo "📦 更新 feeds"
|
||
./scripts/feeds update -a
|
||
echo "📦 安装 feeds"
|
||
./scripts/feeds install -a
|
||
|
||
- name: Setup configuration
|
||
run: |
|
||
echo "📋 复制配置:${{ inputs.config_path }} → wrt/.config"
|
||
if [ ! -f "${{ inputs.config_path }}" ]; then
|
||
echo "❌ 找不到配置文件:${{ inputs.config_path }}"
|
||
exit 1
|
||
fi
|
||
cp "${{ inputs.config_path }}" wrt/.config
|
||
cd wrt
|
||
echo "🔄 运行 make oldconfig"
|
||
make oldconfig
|
||
|
||
- name: Download source packages
|
||
working-directory: wrt
|
||
run: |
|
||
echo "⬇️ 下载所有源码包"
|
||
make download -j8
|
||
|
||
- name: Build Firmware
|
||
working-directory: wrt
|
||
run: |
|
||
JOBS=$(nproc)
|
||
echo "🚀 全量编译(并行 ${JOBS})开始"
|
||
START=$(date "+%Y-%m-%d %H:%M:%S")
|
||
echo "⏱️ 编译开始:${START}"
|
||
if ! time make world -j${JOBS} 2>&1 | tee build.log; then
|
||
echo "❌ 编译失败,输出最后 100 行日志:"
|
||
grep error ./build.log
|
||
exit 1
|
||
fi
|
||
END=$(date "+%Y-%m-%d %H:%M:%S")
|
||
echo "✅ 编译成功"
|
||
echo "⏱️ 结束:${END}"
|
||
|
||
- name: Upload firmware artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: ${{ inputs.project }}-output
|
||
path: |
|
||
wrt/bin/targets/**/*.{img,bin,tar.gz,zip}
|
||
|
||
- name: Upload build log
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: ${{ inputs.project }}-build-log
|
||
path: wrt/build.log
|