Skip to content

op-xr30

op-xr30 #1

Workflow file for this run

name: op-xr30
on:
workflow_dispatch:
inputs:
OP_IP:
description: 'Static IP address'
required: false
default: '192.168.2.1'
type: string
OP_author:
description: 'Build author'
required: false
default: 'kubulama'
type: string
CUSTOM_PLUGINS:
description: 'Extra package names separated by spaces'
required: false
default: 'luci-app-zerotier luci-app-socat luci-app-samba4 luci-theme-m3e luci-app-ttyd luci-app-diskman'
type: string
permissions:
contents: write
env:
DIY_P1_SH: sh/op.sh
jobs:
build_firmware:
name: build XR30 eMMC with kenzok8 daede
runs-on: ubuntu-22.04
strategy:
fail-fast: false
matrix:
device: ["xr30-emmc-daede"]
source: ["openwrt"]
include:
- device: "xr30-emmc-daede"
config: "CONFIG_TARGET_DEVICE_mediatek_filogic_DEVICE_cmcc_xr30-emmc=y"
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Free disk space
run: |
sudo rm -rf /etc/apt/sources.list.d
sudo swapoff -a
sudo rm -f /swapfile /mnt/swapfile
sudo docker image prune -a -f
sudo systemctl stop docker
sudo snap set system refresh.retain=2
sudo apt-get -y purge firefox clang* ghc* google* llvm* mono* mongo* mysql* php*
sudo apt-get -y autoremove --purge
sudo apt-get clean
sudo rm -rf /etc/mysql /etc/php /usr/lib/jvm /usr/libexec/docker /usr/local /usr/src/* /var/lib/docker /var/lib/gems /var/lib/mysql /var/lib/snapd /etc/skel /opt/{microsoft,az,hostedtoolcache,cni,mssql-tools,pipx} /usr/share/{az*,dotnet,swift,miniconda,gradle*,java,kotlinc,ri,sbt} /root/{.sbt,.local,.npm}
sudo sed -i '/NVM_DIR/d;/skel/d' /root/{.bashrc,.profile}
rm -rf ~/{.cargo,.dotnet,.rustup}
df -Th
- name: Install build dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
sudo apt-get install -y tar build-essential flex bison cmake g++ gawk gcc-multilib g++-multilib gettext git libfuse-dev libncurses5-dev libssl-dev python3 python3-pip python3-ply python3-distutils python3-pyelftools rsync unzip zlib1g-dev file wget subversion patch upx-ucl autoconf automake curl asciidoc binutils bzip2 lib32gcc-s1 libc6-dev-i386 uglifyjs msmtp texinfo libreadline-dev libglib2.0-dev xmlto libelf-dev libtool autopoint antlr3 gperf ccache swig coreutils haveged scons libpython3-dev rename qemu-utils clang llvm
sudo apt-get clean
git config --global user.name 'GitHub Actions'
git config --global user.email 'noreply@github.com'
sudo timedatectl set-timezone 'Asia/Shanghai'
sudo mkdir -p /workdir
sudo chown $USER:$GROUPS /workdir
df -Th
- name: Set variables
run: |
TAG="$(date +'%Y%m%d')"
echo "tag=$TAG" >> $GITHUB_ENV
echo "OP_IP=${{ github.event.inputs.OP_IP }}" >> $GITHUB_ENV
echo "OP_author=${{ github.event.inputs.OP_author }}" >> $GITHUB_ENV
echo "CUSTOM_PLUGINS=${{ github.event.inputs.CUSTOM_PLUGINS }}" >> $GITHUB_ENV
echo "DEVICE_NAME=${{ matrix.device }}" >> $GITHUB_ENV
echo "SOURCE_NAME=${{ matrix.source }}" >> $GITHUB_ENV
echo "REPO_URL=https://github.com/shiyu1314/openwrt-source" >> $GITHUB_ENV
echo "REPO_BRANCH=openwrt-25.12" >> $GITHUB_ENV
- name: Clone source
working-directory: /workdir
run: |
df -hT $PWD
git clone $REPO_URL $SOURCE_NAME
ln -sf /workdir/$SOURCE_NAME $GITHUB_WORKSPACE/$SOURCE_NAME
- name: Checkout source tag
run: |
cd $SOURCE_NAME
case $REPO_BRANCH in
openwrt-25.12)
_release_tag=$(git tag --sort=taggerdate --list 'v25.*' | tail -1)
git checkout $_release_tag
;;
*)
echo "Can't get local/upstream branch or tag"
exit 1
;;
esac
echo "release_tag=$_release_tag" >> $GITHUB_ENV
- name: Restore build cache
id: build-cache
uses: actions/cache/restore@v5
with:
path: |
${{ matrix.source }}/dl
${{ matrix.source }}/staging_dir
${{ matrix.source }}/build_dir/host
${{ matrix.source }}/build_dir/hostpkg
${{ matrix.source }}/build_dir/toolchain-*
${{ matrix.source }}/bin/packages
${{ matrix.source }}/bin/targets
key: ${{ matrix.source }}-${{ matrix.device }}-build-cache-${{ github.run_id }}
restore-keys: |
${{ matrix.source }}-${{ matrix.device }}-build-cache-
${{ matrix.source }}-xr30-emmc-build-cache-
${{ matrix.source }}-mt7981-multi-build-cache-
- name: Validate toolchain cache
run: |
cd $SOURCE_NAME
if [ -d staging_dir ] && ! find staging_dir -path '*/toolchain-*/lib/libgcc_s.so.*' | grep -q .; then
echo "::warning::Restored toolchain cache is incomplete; rebuilding toolchain only."
rm -rf staging_dir/toolchain-* build_dir/toolchain-* build_dir/target-*/toolchain
rm -f staging_dir/target-*/pkginfo/toolchain.* staging_dir/target-*/stamp/.toolchain_installed
fi
rm -rf dl/go-mod-cache
- name: Prepare feeds and patches
run: |
set -x
cd $SOURCE_NAME
[ -d ./staging_dir ] && find ./staging_dir/ -name '*' -exec touch {} \; >/dev/null 2>&1 || true
./scripts/feeds update -a
cd ..
[ -e patch ] && cp -rf patch/diy/*.patch $SOURCE_NAME
[ -e patch ] && cp -rf patch/luci/*.patch $SOURCE_NAME/feeds/luci
- name: Run common custom script
run: |
chmod +x $DIY_P1_SH
cd $SOURCE_NAME
$GITHUB_WORKSPACE/$DIY_P1_SH
cd ..
[ -e patch ] && cp -rf patch/nginx/luci.locations $SOURCE_NAME/feeds/packages/net/nginx/files-luci-support
[ -e patch ] && cp -rf patch/nginx/uci.conf.template $SOURCE_NAME/feeds/packages/net/nginx-util/files
- name: Use kenzok8 daede source packages
run: |
rm -rf $SOURCE_NAME/package/porxy/dae $SOURCE_NAME/package/porxy/daed $SOURCE_NAME/package/porxy/luci-app-daede
git clone --depth=1 https://github.com/kenzok8/openwrt-daede daede-src
mv daede-src/dae daede-src/daed daede-src/luci-app-daede $SOURCE_NAME/package/porxy/
rm -rf daede-src
- name: Load XR30 eMMC config
run: |
[ -e files ] && mv files $SOURCE_NAME/files
rm -f $SOURCE_NAME/files/etc/uci-defaults/98-install-daed-runfiles
cat <<EOF >>$SOURCE_NAME/.config
CONFIG_TARGET_mediatek=y
CONFIG_TARGET_mediatek_filogic=y
${{ matrix.config }}
EOF
[ -e config ] && cat config/config-common >> $SOURCE_NAME/.config
cat <<EOF >>$SOURCE_NAME/.config
CONFIG_PACKAGE_luci-app-daede=y
CONFIG_PACKAGE_luci-app-daede_daed=y
# CONFIG_PACKAGE_luci-app-daede_dae is not set
CONFIG_PACKAGE_daed=y
CONFIG_DAED_USE_KERNEL_BTF=y
# CONFIG_DAED_USE_VMLINUX_BTF is not set
EOF
sed -i "s/192.168.1.1/${{ github.event.inputs.OP_IP }}/" $SOURCE_NAME/package/base-files/files/bin/config_generate
IFS=' ' read -r -a plugins <<< "${{ github.event.inputs.CUSTOM_PLUGINS }}"
for plugin in "${plugins[@]}"; do
case "$plugin" in
luci-app-daed|luci-i18n-daed-zh-cn|luci-app-daede|daed|dae)
continue
;;
esac
echo "CONFIG_PACKAGE_${plugin}=y" >> $SOURCE_NAME/.config
done
- name: Download package sources
id: package
run: |
cd $SOURCE_NAME
make defconfig
make download -j8
find dl -size -1024c -exec ls -l {} \;
find dl -size -1024c -exec rm -f {} \;
- name: BPF/LLVM early checkpoint
run: |
cd $SOURCE_NAME
trap 'echo "::group::BPF checkpoint diagnostics"; find staging_dir -maxdepth 4 \( -path "*/toolchain-*" -o -name "libgcc_s.so*" -o -name "*.toolchain*" \) -print 2>/dev/null || true; find build_dir -maxdepth 3 \( -path "*/toolchain*" -o -path "*/bpf-headers*" \) -print 2>/dev/null || true; echo "::endgroup::"' ERR
clang --version || true
grep -E 'CONFIG_(BPF_TOOLCHAIN|USE_LLVM|HAS_BPF|SDK_LLVM|KERNEL_DEBUG_INFO|KERNEL_BPF|KERNEL_CGROUP_BPF|KERNEL_XDP|DAE.*BTF|DAE.*BPF_DEPENDS)' .config || true
make tools/install -j$(nproc) || yes n | make tools/install -j1 V=s
make toolchain/install -j$(nproc) || yes n | make toolchain/install -j1 V=s
make target/compile -j$(nproc) || yes n | make target/compile -j1 V=s
make package/kernel/bpf-headers/compile V=s || yes n | make package/kernel/bpf-headers/compile V=s
- name: Compile firmware
id: compile
run: |
cd $SOURCE_NAME
echo -e "$(nproc) thread compile"
make -j$(nproc) || yes n | make -j1 || yes n | make -j1 V=s
- name: Clean volatile Go module cache
if: always()
run: |
cd $SOURCE_NAME
rm -rf dl/go-mod-cache
- name: Save build cache
if: always()
uses: actions/cache/save@v5
with:
path: |
${{ matrix.source }}/dl
${{ matrix.source }}/staging_dir
${{ matrix.source }}/build_dir/host
${{ matrix.source }}/build_dir/hostpkg
${{ matrix.source }}/build_dir/toolchain-*
${{ matrix.source }}/bin/packages
${{ matrix.source }}/bin/targets
key: ${{ matrix.source }}-${{ matrix.device }}-build-cache-${{ github.run_id }}
- name: Show disk usage
if: (!cancelled())
run: df -hT
- name: Organize firmware
id: organize
run: |
cd $SOURCE_NAME/bin/targets/*/*
rm -rf packages
rm -rf *.buildinfo
rm -rf profiles.json
rm -rf *.manifest
rm -rf *.itb
rm -rf *bl2.bin
rm -rf *kernel.bin
rm -rf *.sha
rm -rf sha256sums
echo "FIRMWARE=$PWD" >> $GITHUB_ENV
- name: Upload firmware to Releases
uses: softprops/action-gh-release@v3
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.release_tag }}-${{ env.tag }}-op-xr30
files: ${{ env.FIRMWARE }}/*
body: |
==================== Firmware Info =======================
Workflow: op-xr30
Device: XR30 eMMC
Branch: ${{ env.release_tag }}
Static IP: ${{ github.event.inputs.OP_IP }}
Extra packages: ${{ github.event.inputs.CUSTOM_PLUGINS }}
daed source: kenzok8/openwrt-daede
Author: ${{ github.event.inputs.OP_author }}
Default password: none