openWrt #4
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: openWrt | |
on: | |
workflow_dispatch: | |
inputs: | |
manual: | |
description: '手动触发一次编译' | |
env: | |
REPO_URL: https://github.com/immortalwrt/immortalwrt | |
REPO_BRANCH: master | |
CONFIG_FILE: .config | |
DIY_P1_SH: op1.sh | |
DIY_P2_SH: op2.sh | |
DIY_P3_SH: op3.sh | |
DIY_P4_SH: oc.sh | |
UPLOAD_FIRMWARE: true | |
UPLOAD_RELEASE: true | |
TZ: Asia/Shanghai | |
jobs: | |
build: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: 检查分支 | |
uses: actions/checkout@v3 | |
- name: 编译环境 | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc | |
sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.eu.org/init_build_environment.sh)' | |
sudo timedatectl set-timezone "$TZ" | |
sudo mkdir -p /workdir | |
sudo chown $USER:$GROUPS /workdir | |
- name: 克隆源代码 | |
working-directory: /workdir | |
run: | | |
df -hT $PWD | |
git clone $REPO_URL -b $REPO_BRANCH openwrt | |
ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt | |
- name: 加载自定义 | |
run: | | |
chmod +x $DIY_P1_SH | |
cd openwrt | |
$GITHUB_WORKSPACE/$DIY_P1_SH | |
- name: 更新订阅源 | |
run: cd openwrt && ./scripts/feeds update -a | |
- name: 删除一些订阅源包 | |
run: | | |
chmod +x $DIY_P3_SH | |
cd openwrt | |
$GITHUB_WORKSPACE/$DIY_P3_SH | |
- name: 二次更新订阅源 | |
run: cd openwrt && ./scripts/feeds update -a | |
- name: 安装订阅源 | |
run: cd openwrt && ./scripts/feeds install -a | |
- name: 下载oc内核 | |
run: | | |
$GITHUB_WORKSPACE/$DIY_P4_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: 下载编译依赖 | |
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" | |
make -j$(nproc) || make -j1 || make -j1 V=s | |
echo "status=success" >> $GITHUB_OUTPUT | |
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: 打包直刷包 | |
run: | | |
sudo apt install img2simg | |
ver="v0.3.1" | |
curl -L -o ./AmlImg https://github.com/hzyitc/AmlImg/releases/download/$ver/AmlImg_${ver}_linux_amd64 | |
chmod +x ./AmlImg | |
curl -L -o ./uboot.img https://github.com/shiyu1314/u-boot-onecloud/releases/download/build-20230901-0443/eMMC.burn.img | |
./AmlImg unpack ./uboot.img burn/ | |
echo "::endgroup::" | |
gunzip openwrt/bin/targets/*/*/*.gz | |
diskimg=$(ls openwrt/bin/targets/*/*/*.img) | |
loop=$(sudo losetup --find --show --partscan $diskimg) | |
img_ext="openwrt.img" | |
img_mnt="xd" | |
rootfs_mnt="img" | |
boot_img=$1${img_ext} | |
boot_img_mnt=$1${img_mnt} | |
rootfs_img_mnt=$1${rootfs_mnt} | |
echo ${boot_img} | |
echo ${boot_img_mnt} | |
echo ${rootfs_img_mnt} | |
sudo rm -rf ${boot_img} | |
sudo rm -rf ${boot_img_mnt} | |
sudo rm -rf ${rootfs_img_mnt} | |
sudo dd if=/dev/zero of=${boot_img} bs=1M count=400 | |
sudo mkfs.ext4 ${boot_img} | |
sudo mkdir ${boot_img_mnt} | |
sudo mkdir ${rootfs_img_mnt} | |
sudo mount ${boot_img} ${boot_img_mnt} | |
sudo mount ${loop}p2 ${rootfs_img_mnt} | |
cd ${rootfs_img_mnt} | |
sudo cp -r * ../${boot_img_mnt} | |
cd .. | |
sudo sync | |
sudo umount ${boot_img_mnt} | |
sudo umount ${rootfs_img_mnt} | |
sudo img2simg ${loop}p1 burn/boot.simg | |
sudo img2simg openwrt.img burn/rootfs.simg | |
sudo rm -rf *.img | |
sudo losetup -d $loop | |
cat <<EOF >>burn/commands.txt | |
PARTITION:boot:sparse:boot.simg | |
PARTITION:rootfs:sparse:rootfs.simg | |
EOF | |
prefix=$(ls openwrt/bin/targets/*/*/*.img | sed 's/\.img$//') | |
burnimg=${prefix}.burn.img | |
./AmlImg pack $burnimg burn/ | |
for f in openwrt/bin/targets/*/*/*.burn.img; do | |
sha256sum "$f" >"${f}.sha" | |
xz -9 --threads=0 --compress "$f" | |
done | |
sudo rm -rf openwrt/bin/targets/*/*/*.img | |
sudo rm -rf openwrt/bin/targets/*/*/*.gz | |
- name: 查看磁盘使用情况 | |
if: (!cancelled()) | |
run: df -hT | |
- name: 整理文件 | |
id: organize | |
if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() | |
run: | | |
cd openwrt/bin/targets/*/* | |
rm -rf packages | |
rm -rf *.buildinfo | |
rm -rf profiles.json | |
rm -rf *.manifest | |
rm -rf *.sha | |
rm -rf sha256sums | |
echo "FIRMWARE=$PWD" >> $GITHUB_ENV | |
- name: 上传文件到Actions | |
uses: actions/upload-artifact@main | |
if: steps.organize.outputs.status == 'success' && !cancelled() | |
with: | |
name: OpenWrt_firmware${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} | |
path: ${{ env.FIRMWARE }} | |
- name: 生成Releases标签 | |
id: tag | |
if: env.UPLOAD_RELEASE == 'true' && !cancelled() | |
run: | | |
echo "release_tag=$(date +"%Y.%m.%d-%H%M")" >> $GITHUB_OUTPUT | |
touch release.txt | |
[ $UPLOAD_COWTRANSFER = true ] && echo "🔗 [Cowtransfer](${{ steps.cowtransfer.outputs.url }})" >> release.txt | |
[ $UPLOAD_WETRANSFER = true ] && echo "🔗 [WeTransfer](${{ steps.wetransfer.outputs.url }})" >> release.txt | |
echo "status=success" >> $GITHUB_OUTPUT | |
- name: 上传固件到Releases | |
uses: softprops/action-gh-release@v1 | |
if: steps.tag.outputs.status == 'success' && !cancelled() | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ steps.tag.outputs.release_tag }} | |
body_path: release.txt | |
files: ${{ env.FIRMWARE }}/* | |
- name: 清理Releases | |
uses: dev-drprasad/[email protected] | |
if: env.UPLOAD_RELEASE == 'true' && !cancelled() | |
with: | |
keep_latest: 6 | |
delete_tags: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |