编译x86_64固件 #155
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
#修改以下代码或者开启触发开关都好,要严格按格式对好,前面有多少空格也要看清楚 | |
#代码里有 name: 后面的内容随便改,冒号后面是有个空格的,如果修改固件名字就要考虑能不能显示出你想要的 | |
name: 编译x86_64固件 | |
on: | |
repository_dispatch: | |
workflow_dispatch: | |
inputs: | |
ssh: | |
description: 'SSH connection to Actions' | |
required: false | |
default: 'false' | |
schedule: | |
- cron: 23 10 * * 5 | |
- cron: 20 10 * * 3 | |
env: | |
REPO_URL: https://github.com/coolsnowwolf/lede.git | |
REPO_BRANCH: master | |
UPLOAD_BIN_DIR: false | |
UPLOAD_FIRMWARE: true | |
UPLOAD_RELEASE: true | |
TZ: Asia/Shanghai | |
SERVERCHAN_SCKEY: ${{ secrets.SERVERCHAN_SCKEY }} | |
PUSH_PLUS_TOKEN: ${{ secrets.PUSH_PLUS_TOKEN }} | |
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} | |
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
MATRIX_TARGET: x86_64 | |
FEEDS_CONF: x86_64/feeds.conf.default | |
CONFIG_FILE: x86_64/.config | |
DIY_P1_SH: x86_64/diy-part1.sh | |
DIY_P2_SH: x86_64/diy-part2.sh | |
jobs: | |
Checka: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get Commit Hash | |
id: getHash | |
run: | | |
git clone --depth 1 $REPO_URL -b $REPO_BRANCH . | |
echo "commitHash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT | |
- name: Compare Commit Hash | |
id: cacheHash | |
uses: actions/cache@main | |
with: | |
path: .commitHash | |
key: HEAD-${{ steps.getHash.outputs.commitHash }} | |
- name: Save New Commit Hash | |
if: steps.cacheHash.outputs.cache-hit != 'true' | |
run: | | |
echo ${{ steps.getHash.outputs.commitHash }} | tee .commitHash | |
build: | |
needs: [Checka] | |
if: ${{ needs.Checka.outputs.output != 'hello' || github.event.inputs.checkupdates54 == 'true'}} | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: 创建编译空间挂载点 | |
run: | | |
sudo mkdir -p /workdir | |
sudo chown $USER:$GROUPS /workdir | |
- name: 最大化编译空间 | |
uses: easimon/maximize-build-space@master | |
with: | |
root-reserve-mb: 2048 | |
swap-size-mb: 1024 | |
build-mount-path: /workdir | |
overprovision-lvm: 'true' | |
remove-dotnet: 'true' | |
remove-android: 'true' | |
remove-haskell: 'true' | |
remove-codeql: 'true' | |
remove-docker-images: 'true' | |
- name: Checkout | |
uses: actions/checkout@main | |
- name: 检查服务器配置 | |
run: | | |
echo "警告⚠" | |
echo "若分配的服务器性能不足,务必及时取消,重新运行!" | |
echo -e "-------------- ------------CPU信息------------------------------------------\n" | |
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 "已安装内存详细信息:" | |
sudo lshw -short -C memory | grep GiB | |
echo -e "\n" | |
echo "-----------------------------硬盘信息---------------------------------------------" | |
echo -e "硬盘数量:$(ls /dev/sd* | grep -v [1-9] | wc -l) \n" | |
echo "硬盘详情:" | |
echo " 系统空间 类型 总数 已用 可用 使用率" | |
df -Th | |
- name: 初始化编译环境 | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo -E swapoff -a | |
sudo -E rm -f /swapfile | |
sudo -E docker image prune -a -f | |
sudo -E snap set system refresh.retain=2 | |
sudo -E rm -rf /usr/share/dotnet /etc/mysql /etc/php /etc/apt/sources.list.d /usr/local/lib/android | |
sudo -E apt-get -y purge azure-cli* ghc* zulu* llvm* firefox google* dotnet* powershell* openjdk* mysql* php* mongodb* dotnet* moby* snap* aspnetcore* | |
[ -n "$AGENT_TOOLSDIRECTORY" ] && sudo rm -rf "$AGENT_TOOLSDIRECTORY" | |
sudo -E apt-get update | |
sudo -E apt-get -y install $(curl -fsSL https://raw.githubusercontent.com/connself/openwrt-action/main/diy/ubuntu2204-make-openwrt-depends) | |
sudo -E apt-get -y install libfuse-dev | |
sudo -E apt-get -y autoremove --purge | |
sudo -E apt-get clean | |
sudo timedatectl set-timezone "$TZ" | |
- name: 编译开始TG或pushplus通知 | |
if: (env.PUSH_PLUS_TOKEN && env.SERVERCHAN_SCKEY == 'PUSH') || (env.TELEGRAM_BOT_TOKEN && env.SERVERCHAN_SCKEY == 'TELE') | |
run: | | |
if [[ "${SERVERCHAN_SCKEY}" == "TELE" ]]; then | |
curl -k --data chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" --data "text=🎉 主人:您正在编译openwrt ${{ env.MATRIX_TARGET }}固件,请耐心等待...... 😋" "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" | |
elif [[ "${SERVERCHAN_SCKEY}" == "PUSH" ]]; then | |
curl -k --data token="${{ secrets.PUSH_PLUS_TOKEN }}" --data title="开始编译openwrt ${{ env.MATRIX_TARGET }}固件" --data "content=🎉 主人:您正在编译openwrt ${{ env.MATRIX_TARGET }}固件,请耐心等待...... 😋💐" "http://www.pushplus.plus/send" | |
fi | |
- name: 克隆源码 | |
working-directory: /workdir | |
run: | | |
df -hT $PWD | |
git clone $REPO_URL -b $REPO_BRANCH openwrt | |
ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt | |
- name: 加载Cache缓存 | |
uses: stupidloud/cachewrtbuild@main | |
with: | |
ccache: 'true' | |
mixkey: ${{ env.MATRIX_TARGET }} | |
clean: ${{ contains(github.event.action, 'nocache') }} | |
prefix: ${{ github.workspace }}/openwrt | |
- name: 加载自定义feeds和更新安装feeds | |
run: | | |
chmod +x $DIY_P1_SH | |
cd openwrt | |
$GITHUB_WORKSPACE/$DIY_P1_SH | |
- name: 加载自定义配置 | |
run: | | |
[ -e files ] && mv files openwrt/files | |
[ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config | |
chmod +x $DIY_P2_SH | |
cd openwrt | |
$GITHUB_WORKSPACE/$DIY_P2_SH | |
- name: SSH connection to Actions | |
uses: P3TERX/[email protected] | |
if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') | |
env: | |
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} | |
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
- name: 输出编译信息 | |
run: | | |
cd openwrt | |
echo " 系统空间 类型 总数 已用 可用 使用率" | |
df -hT $PWD | |
echo | |
echo "==========================================" | |
grep -i CONFIG_PACKAGE_luci-app .config | grep -v \# > Plug-in | |
grep -i CONFIG_PACKAGE_luci-theme .config | grep -v \# >> Plug-in | |
sed -i '/INCLUDE/d' Plug-in > /dev/null 2>&1 | |
sed -i 's/CONFIG_PACKAGE_/、/g' Plug-in | |
sed -i '/Transparent_Proxy/d' Plug-in > /dev/null 2>&1 | |
sed -i 's/=y/\ /g' Plug-in | |
awk '$0=NR$0' Plug-in > Plug-2 | |
awk '{print " " $0}' Plug-2 > Plug-in | |
echo | |
echo | |
echo "已选插件列表" | |
cat Plug-in | |
rm -rf {Plug-in,Plug-2} | |
echo | |
echo "==========================================" | |
echo | |
echo | |
echo "输出完整插件信息..." | |
echo | |
echo | |
cat .config | |
- name: 下载软件包 | |
id: package | |
run: | | |
cd openwrt | |
make defconfig | |
make download -j50 | |
make download -j1 | |
find dl -size -1024c -exec ls -l {} \; | |
find dl -size -1024c -exec rm -f {} \; | |
- name: 编译固件 | |
id: compile | |
run: | | |
cd openwrt | |
echo -e "$(nproc) thread compile" | |
make -j$(nproc) || make -j1 || make -j1 V=s | |
echo "COMPILESTATUS=success" >> $GITHUB_ENV | |
grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/' > DEVICE_NAME | |
[ -s DEVICE_NAME ] && echo "DEVICE_NAME=_$(cat DEVICE_NAME)" >> $GITHUB_ENV | |
echo "FILE_DATE=_$(date +"%Y%m%d%H%M")" >> $GITHUB_ENV | |
- name: 检查磁盘空间 | |
if: env.COMPILESTATUS == 'success' && !cancelled() | |
run: df -hT | |
- name: 上传bin目录 | |
uses: actions/upload-artifact@main | |
if: env.COMPILESTATUS == 'success' && env.UPLOAD_BIN_DIR == 'true' && !cancelled() | |
with: | |
name: OpenWrt_bin${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} | |
path: openwrt/bin | |
- name: 整理文件 | |
id: organize | |
if: env.COMPILESTATUS == 'success' && env.UPLOAD_FIRMWARE == 'true' && !cancelled() | |
run: | | |
mkdir firmware | |
mv -f openwrt/bin/targets/*/*/* ./firmware/ 2>/dev/null || true | |
cp openwrt/.config ./firmware/${{env.MATRIX_TARGET}}.config | |
cd firmware | |
rm -rf packages | |
rm -rf *.buildinfo | |
rm -rf *.manifest | |
rm -rf *-kernel.bin | |
rm -rf sha256sums | |
ls -l | |
echo "FIRMWARE=$PWD" >> $GITHUB_ENV | |
echo "ORGANIZERSTATUS=success" >> $GITHUB_ENV | |
- name: 上传固件 | |
uses: actions/upload-artifact@main | |
if: env.COMPILESTATUS == 'success' && !cancelled() | |
with: | |
name: OpenWrt_firmware${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} | |
path: ${{ env.FIRMWARE }} | |
- name: 生成release信息 | |
id: tag | |
if: env.COMPILESTATUS == 'success' && env.UPLOAD_RELEASE == 'true' && !cancelled() | |
run: | | |
echo "release_name=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_OUTPUT | |
touch release.txt | |
echo "⭐️${{ env.MATRIX_TARGET }}固件" >> release.txt | |
echo "IP:192.168.123.5" >> release.txt | |
echo "账户:root" >> release.txt | |
echo "密码:无" >> release.txt | |
- name: 发布固件 | |
uses: ncipollo/release-action@main | |
if: env.COMPILESTATUS == 'success' && env.UPLOAD_RELEASE == 'true' && !cancelled() | |
with: | |
# name: ${{ env.MATRIX_TARGET }}🔥${{ steps.tag.outputs.release_name }} | |
allowUpdates: true | |
tag: ${{ env.MATRIX_TARGET }}🔥${{ steps.tag.outputs.release_name }} | |
removeArtifacts: false | |
token: ${{ secrets.token_release }} | |
bodyFile: release.txt | |
artifacts: ${{ env.FIRMWARE }}/* | |
- name: 构造docker镜像 | |
id: push | |
if: env.COMPILESTATUS == 'success' && !cancelled() | |
run: | | |
cd $GITHUB_WORKSPACE/x86_64/docker | |
cp $GITHUB_WORKSPACE/firmware/openwrt-x86-64-generic-rootfs.tar.gz $GITHUB_WORKSPACE/x86_64/docker | |
mv openwrt-x86-64-generic-rootfs.tar.gz openwrt-x86-64-default-rootfs.tar.gz | |
chmod +x build.sh | |
./build.sh | |
gzip -dc docker-img-openwrt-x86-latest.gz | docker load | |
docker login --username=${{ secrets.DOCKER_USERNAME }} --password=${{ secrets.DOCKER_PASSWORD }} | |
docker tag ${{ secrets.DOCKER_USERNAME }}/openwrt-x86 ${{ secrets.DOCKER_USERNAME }}/openwrt-x86:${{ env.FILE_DATE }} | |
docker push ${{ secrets.DOCKER_USERNAME }}/openwrt-x86 | |
- name: 编译完成TG或pushplus通知 | |
if: env.COMPILESTATUS == 'success' && ((env.PUSH_PLUS_TOKEN && env.SERVERCHAN_SCKEY == 'PUSH') || (env.TELEGRAM_BOT_TOKEN && env.SERVERCHAN_SCKEY == 'TELE')) | |
run: | | |
if [[ "${SERVERCHAN_SCKEY}" == "TELE" ]]; then | |
curl -k --data chat_id="${{ secrets.TELEGRAM_CHAT_ID }}" --data "text=我亲爱的✨主人✨:您编译的openwrt ${{ env.MATRIX_TARGET }}固件顺利编译完成了!💐https://github.com/${{github.repository}}/releases" "https://api.telegram.org/bot${{ secrets.TELEGRAM_BOT_TOKEN }}/sendMessage" | |
elif [[ "${SERVERCHAN_SCKEY}" == "PUSH" ]]; then | |
curl -k --data token="${{ secrets.PUSH_PLUS_TOKEN }}" --data title="编译成功" --data "content=我亲爱的✨主人✨:您编译的openwrt ${{ env.MATRIX_TARGET }}固件顺利编译完成了!💐https://github.com/${{github.repository}}/releases" "http://www.pushplus.plus/send" | |
fi |