immortalwrt-23 #9
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
# | |
# Copyright (c) 2019-2020 P3TERX <https://p3terx.com> | |
# | |
# This is free software, licensed under the MIT License. | |
# See /LICENSE for more information. | |
# | |
# https://github.com/P3TERX/Actions-OpenWrt | |
# Description: Build OpenWrt using GitHub Actions | |
# | |
name: immortalwrt-23 | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- 'immortalwrt-23/.config' | |
workflow_dispatch: | |
schedule: | |
- cron: '0 0 1 * *' | |
env: | |
REPO_URL: https://github.com/immortalwrt/immortalwrt.git | |
REPO_BRANCH: openwrt-23.05 | |
FEEDS_CONF: immortalwrt-23/feeds.conf.default | |
CONFIG_FILE: immortalwrt-23/.config | |
DIY_P1_SH: immortalwrt-23/diy1.sh | |
DIY_P2_SH: immortalwrt-23/diy2.sh | |
UPLOAD_FIRMWARE: true | |
UPLOAD_RELEASE: true | |
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
TELEGRAM_CHATID: ${{ secrets.TELEGRAM_CHATID }} | |
TZ: Asia/Shanghai | |
jobs: | |
build: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: 检查项目分支 | |
uses: actions/checkout@main | |
- name: 初始化编译环境 | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc | |
sudo apt update | |
sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)' | |
sudo apt autoremove --purge | |
sudo apt clean | |
sudo timedatectl set-timezone "$TZ" | |
sudo mkdir -p /workdir | |
sudo chown $USER:$GROUPS /workdir | |
echo "FIRMWARE_VERSION=$(date +"%y%m%d")" >> $GITHUB_ENV | |
echo "START_DATE=$(date +%s)" >> $GITHUB_ENV | |
- name: 下载源码 | |
working-directory: /workdir | |
run: | | |
df -hT $PWD | |
git clone --single-branch -b $REPO_BRANCH $REPO_URL openwrt | |
ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt | |
- name: 加载软件源 | |
run: | | |
[ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default | |
chmod +x $DIY_P1_SH | |
cd openwrt | |
$GITHUB_WORKSPACE/$DIY_P1_SH | |
- name: 更新并安装软件源 | |
run: cd openwrt && ./scripts/feeds update -a && ./scripts/feeds install -a | |
- name: 加载自定义配置 | |
run: | | |
[ -e immortalwrt-23/files ] && mv immortalwrt-23/files openwrt/files | |
[ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config | |
chmod +x $DIY_P2_SH | |
cd openwrt | |
$GITHUB_WORKSPACE/$DIY_P2_SH | |
- name: 下载包 | |
id: package | |
run: | | |
cd openwrt | |
make defconfig | |
make download -j8 | |
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" | |
if make -j$(nproc); then | |
echo "status=success" >> $GITHUB_OUTPUT | |
else | |
duration=$(( ($(date +%s) - ${{ env.START_DATE }}) / 60 )) && time=$(( duration / 60 ))小时$(( duration % 60 ))分钟 | |
content="immortalwrt-23固件编译失败%0A多线程编译失败,尝试单线程编译%0A固件版本:${{ env.FIRMWARE_VERSION }}%0A编译用时:${time}" | |
curl "https://api.telegram.org/bot${{ env.TELEGRAM_BOT_TOKEN }}/sendMessage?chat_id=${{ env.TELEGRAM_CHATID }}&text=$content" | |
second_time=$(date +%s) | |
if make -j1 V=s; then | |
echo "status=success" >> $GITHUB_OUTPUT | |
else | |
duration=$(( ($(date +%s) - ${second_time}) / 60 )) && time=$(( duration / 60 ))小时$(( duration % 60 ))分钟 | |
content="immortalwrt-23固件编译失败%0A单线程编译失败%0A固件版本:${{ env.FIRMWARE_VERSION }}%0A编译用时:${time}" | |
curl "https://api.telegram.org/bot${{ env.TELEGRAM_BOT_TOKEN }}/sendMessage?chat_id=${{ env.TELEGRAM_CHATID }}&text=$content" | |
fi | |
fi | |
- name: 整理文件 | |
id: organize | |
if: steps.compile.outputs.status == 'success' && !cancelled() | |
run: | | |
# 整理固件包时候,删除您不想要的固件或者文件,让它不需要上传到Actions空间 | |
cd openwrt/bin/targets/*/* | |
mkdir -p package | |
mv packages package/core | |
mv package packages | |
mv $GITHUB_WORKSPACE/openwrt/bin/packages/*/* packages | |
tar -czf packages.tar.gz packages | |
rm -rf packages | |
rm -rf version.buildinfo | |
rm -rf profiles.json | |
# rm -rf *rootfs* | |
rm -rf *kernel* | |
rm -rf *.manifest | |
rm -rf feeds.buildinfo | |
rm -rf sha256sums | |
for file in immortalwrt*; do | |
mv "$file" "${file/immortalwrt/immortalwrt-23-${{ env.FIRMWARE_VERSION }}}" | |
done | |
echo -e "$(sha256sum *)\n" > sha256sums | |
echo "FIRMWARE=$PWD" >> $GITHUB_ENV | |
echo "status=success" >> $GITHUB_OUTPUT | |
- name: 上传固件到Github Actions空间 | |
if: steps.organize.outputs.status == 'success' && env.UPLOAD_FIRMWARE == 'true' | |
continue-on-error: true | |
uses: actions/upload-artifact@main | |
with: | |
name: immortalwrt-23-${{ env.FIRMWARE_VERSION }} | |
path: ${{ env.FIRMWARE }} | |
- name: 删除旧的发行版 | |
uses: dev-drprasad/delete-older-releases@master | |
continue-on-error: true | |
with: | |
keep_latest: 0 | |
delete_tags: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: 创建release标签 | |
id: tag | |
if: steps.organize.outputs.status == 'success' && env.UPLOAD_RELEASE == 'true' && !cancelled() | |
run: | | |
echo "编译时间:$(date -d "@${{ env.START_DATE }}" +"%Y年%m月%d日 %H点%M分")" >> release.txt | |
echo "默认网关:192.168.6.1" >> release.txt | |
echo "默认密码:password" >> release.txt | |
echo 包含插件:$(grep "CONFIG_PACKAGE_luci-app-\(.*\)=y" openwrt/.config | sed "s/CONFIG_PACKAGE_luci-app-\(.*\)=y/\1/g" | grep -v "_\|arpbind\|autoreboot\|firewall") >> release.txt | |
echo "release_tag=$release_tag" >> $GITHUB_OUTPUT | |
echo "status=success" >> $GITHUB_OUTPUT | |
- name: 将固件上传到release | |
uses: softprops/action-gh-release@v1 | |
if: steps.tag.outputs.status == 'success' && !cancelled() | |
continue-on-error: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
id: upload-release | |
with: | |
name: immortalwrt-23-${{ env.FIRMWARE_VERSION }} | |
tag_name: immortalwrt-23 | |
body_path: release.txt | |
files: ${{ env.FIRMWARE }}/* | |
- name: Telegram 通知 | |
if: steps.compile.outputs.status == 'success' && env.TELEGRAM_CHATID && env.TELEGRAM_BOT_TOKEN | |
run: | | |
duration=$(( ($(date +%s) - ${{ env.START_DATE }}) / 60 )) && time=$(( duration / 60 ))小时$(( duration % 60 ))分钟 | |
content="immortalwrt-23固件编译成功%0A固件版本:${{ env.FIRMWARE_VERSION }}%0A编译用时:${time}" | |
curl "https://api.telegram.org/bot${{ env.TELEGRAM_BOT_TOKEN }}/sendMessage?chat_id=${{ env.TELEGRAM_CHATID }}&text=$content" |