-
Notifications
You must be signed in to change notification settings - Fork 5
186 lines (168 loc) · 6.83 KB
/
immortalwrt-23.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#
# 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"