-
Notifications
You must be signed in to change notification settings - Fork 0
296 lines (264 loc) · 11.6 KB
/
build-x86_64.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
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
#修改以下代码或者开启触发开关都好,要严格按格式对好,前面有多少空格也要看清楚
#代码里有 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/ssh2actions@v1.0.0
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