Merge remote-tracking branch 'upstream/master' #182
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# <https://github.com/KFERMercer/OpenWrt-CI> | |
# | |
# Copyright (C) 2019 P3TERX | |
# | |
# Copyright (C) 2020 KFERMercer | |
# | |
name: Build Openwrt | |
on: | |
push: | |
branches: | |
- master | |
release: | |
types: [published] | |
# schedule: | |
# - cron: 0 20 * * * | |
# release: | |
# types: [published] | |
#push: | |
# tags: | |
# - '*' | |
env: | |
REPO_URL: https://github.com/coolsnowwolf/lede | |
REPO_BRANCH: master | |
FEEDS_CONF: feeds.conf.default | |
CONFIG_FILE: .config | |
DIY_P1_SH: diy-part1.sh | |
DIY_P2_SH: diy-part2.sh | |
UPLOAD_BIN_DIR: true | |
UPLOAD_FIRMWARE: true | |
UPLOAD_COWTRANSFER: false | |
UPLOAD_WETRANSFER: false | |
UPLOAD_RELEASE: false | |
TZ: Asia/Shanghai | |
permissions: | |
contents: read | |
jobs: | |
build_openwrt: | |
permissions: | |
contents: write # for release creation | |
name: Build OpenWrt firmware | |
runs-on: ubuntu-22.04 | |
if: github.event.repository.owner.id == github.event.sender.id || ! github.event.sender.id | |
steps: | |
- name: Check Server Performance | |
run: | | |
echo "警告⚠" | |
echo "分配的服务器性能有限,若选择的插件过多,务必注意CPU性能!" | |
echo -e "已知CPU型号(降序):7763,8370C,8272CL,8171M,E5-2673 \n" | |
echo "--------------------------CPU信息--------------------------" | |
echo "CPU物理数量:$(cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l)" | |
echo -e "CPU核心信息:$(cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c) \n" | |
echo "--------------------------内存信息--------------------------" | |
echo "已安装内存详细信息:" | |
echo -e "$(sudo lshw -short -C memory | grep GiB) \n" | |
echo "--------------------------硬盘信息--------------------------" | |
echo "硬盘数量:$(ls /dev/sd* | grep -v [1-9] | wc -l)" && df -hT | |
- name: "Optimize Disk Space" | |
uses: "hugoalh/disk-space-optimizer-ghaction@v0.8.1" | |
with: | |
operate_sudo: "True" | |
general_include: ".+" | |
general_exclude: |- | |
^GCC$ | |
^G\+\+$ | |
Clang | |
LLVM | |
docker_include: ".+" | |
docker_prune: "True" | |
docker_clean: "True" | |
apt_prune: "True" | |
apt_clean: "True" | |
homebrew_prune: "True" | |
homebrew_clean: "True" | |
npm_prune: "True" | |
npm_clean: "True" | |
os_swap: "True" | |
- name: Freeing up disk space | |
uses: easimon/maximize-build-space@master | |
with: | |
root-reserve-mb: 2048 | |
temp-reserve-mb: 2048 | |
swap-size-mb: 1 | |
remove-dotnet: 'true' | |
remove-android: 'true' | |
remove-haskell: 'true' | |
remove-codeql: 'true' | |
remove-docker-images: 'true' | |
- name: Free up disk space complete | |
run: | | |
echo "Free up disk space complete" | |
echo "==============================================================================" | |
df -hT | |
echo "==============================================================================" | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
ref: master | |
- name: Initialization environment | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo -E apt update -y | |
sudo -E apt -y full-upgrade | |
sudo -E apt -y install build-essential clang flex bison g++ gawk gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev python3-setuptools rsync swig unzip zlib1g-dev file wget | |
sudo -E apt -y autoremove --purge | |
sudo -E apt clean | |
sudo rm -rf /etc/apt/sources.list.d/* /usr/local/lib/android /opt/ghc /usr/share/dotnet /usr/local/graalvm /usr/local/.ghcup \ | |
/usr/local/share/powershell /usr/local/share/chromium /usr/local/lib/node_modules | |
sudo -E timedatectl set-timezone "$TZ" | |
df -hT | |
- name: Update feeds | |
run: | | |
#sed -i 's/#src-git helloworld/src-git helloworld/g' ./feeds.conf.default | |
./scripts/feeds update -a | |
./scripts/feeds install -a | |
- name: Get new themes and applications | |
run: | | |
rm -rf package/feeds/luci/luci-theme-argon | |
rm -rf package/feeds/luci/luci-app-argon-config | |
rm -rf package/feeds/luci/luci-theme-infinityfreedom | |
rm -rf package/feeds/luci/luci/luci-theme-design | |
rm -rf package/feeds/luci/luci-app-unblockneteasemusic | |
git clone https://github.com/xiaoqingfengATGH/luci-theme-infinityfreedom.git package/feeds/luci/luci-theme-infinityfreedom | |
git clone https://github.com/SAENE/luci-theme-design.git package/feeds/luci/luci-theme-design | |
git clone -b master https://github.com/jerrykuku/luci-theme-argon.git package/feeds/luci/luci-theme-argon | |
git clone -b master https://github.com/jerrykuku/luci-app-argon-config.git package/feeds/luci/luci-app-argon-config | |
git clone https://github.com/zzsj0928/luci-app-pushbot package/feeds/luci/luci-app-pushbot | |
git clone https://github.com/UnblockNeteaseMusic/luci-app-unblockneteasemusic package/feeds/luci/luci-app-unblockneteasemusic | |
- name: Costom configure file | |
run: | | |
rm -f ./.config* | |
touch ./.config | |
# | |
# ========================固件定制部分======================== | |
# | |
# | |
# 如果不对本区块做出任何编辑, 则生成默认配置固件. | |
# | |
# 以下为定制化固件选项和说明: | |
# | |
# | |
# 有些插件/选项是默认开启的, 如果想要关闭, 请参照以下示例进行编写: | |
# | |
# ========================================= | |
# | # 取消编译VMware镜像: | | |
# | cat >> .config <<EOF | | |
# | # CONFIG_VMDK_IMAGES is not set | | |
# | EOF | | |
# ========================================= | |
# | |
# | |
# 以下是一些提前准备好的一些插件选项. | |
# 直接取消注释相应代码块即可应用. 不要取消注释代码块上的汉字说明. | |
# 如果不需要代码块里的某一项配置, 只需要删除相应行. | |
# | |
# 如果需要其他插件, 请按照示例自行添加. | |
# 注意, 只需添加依赖链顶端的包. 如果你需要插件 A, 同时 A 依赖 B, 即只需要添加 A. | |
# | |
# 无论你想要对固件进行怎样的定制, 都需要且只需要修改 EOF 回环内的内容. | |
# | |
# 编译x64固件: | |
cat >> .config <<EOF | |
CONFIG_TARGET_x86=y | |
CONFIG_TARGET_x86_64=y | |
CONFIG_TARGET_x86_64_Generic=y | |
EOF | |
# 固件压缩: | |
cat >> .config <<EOF | |
CONFIG_TARGET_IMAGES_GZIP=y | |
EOF | |
# 编译UEFI固件: | |
cat >> .config <<EOF | |
CONFIG_EFI_IMAGES=y | |
EOF | |
# IPv6支持: | |
cat >> .config <<EOF | |
CONFIG_PACKAGE_dnsmasq_full_dhcpv6=y | |
CONFIG_PACKAGE_ipv6helper=y | |
CONFIG_PACKAGE_odhcp6c=y | |
CONFIG_PACKAGE_odhcpd-ipv6only=y | |
CONFIG_PACKAGE_luci-proto-ipv6=y | |
EOF | |
# 多文件系统支持: | |
cat >> .config <<EOF | |
CONFIG_PACKAGE_kmod-fs-nfs=y | |
CONFIG_PACKAGE_kmod-fs-nfs-common=y | |
CONFIG_PACKAGE_kmod-fs-nfs-v3=y | |
CONFIG_PACKAGE_kmod-fs-nfs-v4=y | |
CONFIG_PACKAGE_kmod-fs-ntfs=y | |
CONFIG_PACKAGE_kmod-fs-squashfs=y | |
EOF | |
# bonding支持: | |
cat >> .config <<EOF | |
CONFIG_PACKAGE_kmod-bonding=y | |
CONFIG_PACKAGE_proto-bonding=y | |
CONFIG_PACKAGE_luci-proto-bonding=y | |
EOF | |
# USB3.0支持: | |
cat >> .config <<EOF | |
CONFIG_PACKAGE_kmod-usb-ohci=y | |
CONFIG_PACKAGE_kmod-usb-ohci-pci=y | |
CONFIG_PACKAGE_kmod-usb2=y | |
CONFIG_PACKAGE_kmod-usb2-pci=y | |
CONFIG_PACKAGE_kmod-usb3=y | |
EOF | |
# 常用LuCI插件选择: | |
cat >> .config <<EOF | |
# CONFIG_PACKAGE_luci-app-adbyby-plus is not set | |
CONFIG_PACKAGE_luci-app-autoreboot=y | |
CONFIG_PACKAGE_luci-app-airplay2=y | |
CONFIG_PACKAGE_luci-app-alist=y | |
# CONFIG_PACKAGE_luci-app-aria2 is not set | |
# CONFIG_PACKAGE_luci-app-docker is not set | |
# CONFIG_PACKAGE_luci-app-frpc is not set | |
# CONFIG_PACKAGE_luci-app-hd-idle is not set | |
# CONFIG_PACKAGE_luci-app-kodexplorer is not set | |
# CONFIG_PACKAGE_luci-app-music-remote-center is not set | |
CONFIG_PACKAGE_luci-app-minidlna=y | |
# CONFIG_PACKAGE_luci-app-openvpn is not set | |
# CONFIG_PACKAGE_luci-app-openvpn-server is not set | |
# CONFIG_PACKAGE_luci-app-samba is not set | |
# CONFIG_PACKAGE_luci-app-samba4 is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_libustream-mbedtls is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_libustream-openssl=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_PACKAGE_libustream-wolfssl is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_NONE_Client is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Client is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Client=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_NONE_Server is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Libev_Server is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Rust_Server=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_NONE_V2RAY is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_V2ray is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Xray=y | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ChinaDNS_NG=y | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_MosDNS=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Hysteria is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Tuic_Client is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadow_TLS is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_IPT2Socks is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Kcptun is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_NaiveProxy is not set | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Redsocks2 is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_Simple_Obfs=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Shadowsocks_V2ray_Plugin is not set | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ShadowsocksR_Libev_Client=y | |
CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_ShadowsocksR_Libev_Server=y | |
# CONFIG_PACKAGE_luci-app-ssr-plus_INCLUDE_Trojan is not set | |
CONFIG_PACKAGE_luci-app-ttyd=y | |
# CONFIG_PACKAGE_luci-app-wireguard=y | |
CONFIG_PACKAGE_luci-app-ddns=y | |
CONFIG_PACKAGE_luci-app-turboacc=y | |
# CONFIG_PACKAGE_luci-app-udpxy is not set | |
# CONFIG_PACKAGE_luci-app-uhttpd is not set | |
# CONFIG_PACKAGE_luci-app-vsftpd is not set | |
CONFIG_PACKAGE_luci-app-unblockneteasemusic=y | |
CONFIG_PACKAGE_luci-app-upnp=y | |
CONFIG_PACKAGE_luci-app-vlmcsd=y | |
CONFIG_PACKAGE_luci-app-wol=y | |
CONFIG_PACKAGE_luci-app-pushbot=y | |
CONFIG_PACKAGE_luci-app-zerotier=y | |
EOF | |
# LuCI主题: | |
cat >> .config <<EOF | |
CONFIG_PACKAGE_luci-theme-argon=y | |
CONFIG_PACKAGE_luci-app-argon-config=y | |
CONFIG_PACKAGE_luci-theme-netgear=y | |
CONFIG_PACKAGE_luci-theme-bootstrap=y | |
CONFIG_PACKAGE_luci-theme-material=y | |
CONFIG_PACKAGE_luci-theme-opentomato=y | |
# CONFIG_PACKAGE_luci-theme-infinityfreedom-ng is not set | |
EOF | |
# 常用软件包: | |
cat >> .config <<EOF | |
CONFIG_PACKAGE_curl=y | |
CONFIG_PACKAGE_htop=y | |
CONFIG_PACKAGE_nano=y | |
CONFIG_PACKAGE_screen=y | |
CONFIG_PACKAGE_tree=y | |
CONFIG_PACKAGE_vim-fuller=y | |
CONFIG_PACKAGE_wget=y | |
CONFIG_PACKAGE_acme=y | |
CONFIG_PACKAGE_acme-dnsapi=y | |
CONFIG_PACKAGE_haproxy=y | |
CONFIG_PACKAGE_socat=y | |
CONFIG_SOCAT_SSL=y | |
EOF | |
# 取消编译VMware镜像以及镜像填充 (不要删除被缩进的注释符号): | |
# cat >> .config <<EOF | |
# # CONFIG_TARGET_IMAGES_PAD is not set | |
# # CONFIG_VMDK_IMAGES is not set | |
# EOF | |
# | |
# ========================固件定制部分结束======================== | |
# | |
sed -i 's/^[ \t]*//g' ./.config | |
make defconfig | |
- name: Make download | |
run: | | |
make download -j8 | |
find dl -size -1024c -exec rm -f {} \; | |
- name: Compile firmware | |
run: | | |
make -j$(nproc) || make -j1 V=s | |
echo "=======================" | |
echo "Space usage:" | |
echo "=======================" | |
df -h | |
echo "=======================" | |
du -h --max-depth=1 ./ --exclude=build_dir --exclude=bin | |
du -h --max-depth=1 ./build_dir | |
du -h --max-depth=1 ./bin | |
- name: Prepare artifact | |
run: | | |
mkdir -p ./artifact/firmware | |
mkdir -p ./artifact/package | |
mkdir -p ./artifact/buildinfo | |
rm -rf $(find ./bin/targets/ -type d -name "packages") | |
cp -rf $(find ./bin/targets/ -type f) ./artifact/firmware/ | |
cp -rf $(find ./bin/packages/ -type f -name "*.ipk") ./artifact/package/ | |
cp -rf $(find ./bin/targets/ -type f -name "*.buildinfo" -o -name "*.manifest") ./artifact/buildinfo/ | |
- name: Upload buildinfo | |
uses: actions/upload-artifact@v4 | |
with: | |
name: OpenWrt_buildinfo | |
path: ./artifact/buildinfo/ | |
- name: Upload package | |
uses: actions/upload-artifact@v4 | |
with: | |
name: OpenWrt_package | |
path: ./artifact/package/ | |
- name: Upload firmware | |
uses: actions/upload-artifact@v4 | |
with: | |
name: OpenWrt_firmware | |
path: ./bin/targets/ | |
- name: Upload release asset | |
if: github.event == 'release' | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.YOURTOKEN }} | |
file: ./artifact/firmware/* | |
tag: ${{ github.ref }} | |
file_glob: true |