A-Build-OpenWrt-JP-TVBox-2025 #45
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
#============================================================================================ | |
# https://github.com/ophub/amlogic-s9xxx-openwrt | |
# Description: Build OpenWrt | |
#============================================================================================ | |
name: A-Build-OpenWrt-JP-TVBox-2025 | |
on: | |
repository_dispatch: | |
workflow_dispatch: | |
inputs: | |
source_branch: | |
description: "Select the source branch" | |
required: false | |
default: "openwrt-tvbox" | |
type: choice | |
options: | |
- openwrt-n1 | |
- openwrt-tvbox | |
- openwrt-main | |
- lede-master | |
- immortalwrt-master | |
openwrt_board: | |
description: "Select device board" | |
required: false | |
default: "jp-tvbox" | |
type: choice | |
options: | |
- all | |
- s905w_s905x_s905mb_s905l3a_s905l3b_s905x2_s905x3_s912_s922x_s922x-ct2000_s922x-reva | |
- s905x3-x88-pro-x3_s912-m8s-pro_s905x-t95_s912-t95z-plus_s905l3-unt400g1_s905lb-r3300l | |
- s912-x92_s922x_s922x-ct2000_s922x-reva_seewo-sv21_smart-am40_station-m1_sw799_swan1-w28 | |
- tanix-tx6_tb-ls3399_tn3399_tpm312_tqc-a01_tvi3315a_vplus_wxy-oec_xiaobao_yskj_zcube1-max_zk-r39a_zysj | |
- a311d | |
- beikeyun | |
- chainedbox | |
- crrc | |
- dg3399 | |
- dg-tn3568 | |
- dlfr100 | |
- e20c | |
- e25 | |
- eaidk-610 | |
- emb3531 | |
- fine3399 | |
- firefly-rk3399 | |
- fmx1-pro | |
- jp-tvbox | |
- h28k | |
- h66k | |
- h68k | |
- h69k | |
- h88k | |
- h88k-v3 | |
- h96-max-m2 | |
- hs530r | |
- hugsun-x99 | |
- ipc-r | |
- king3399 | |
- kylin3399 | |
- lckfb-tspi | |
- leez | |
- lx-r3s | |
- mrkaio-m68s | |
- nanopc-t6 | |
- nanopi-r5c | |
- nanopi-r5s | |
- orangepi-5-plus | |
- panther-x2 | |
- r66s | |
- r68s | |
- renegade-rk3328 | |
- rk3318-box | |
- rock5b | |
- rock5c | |
- ruisen-box | |
- s905 | |
- s905-beelink-mini | |
- s905-mxqpro-plus | |
- s905d | |
- s905d-ki-pro | |
- s905d-sml5442tw | |
- s905l | |
- s905l-aurora-1s | |
- s905l-b860av21u | |
- s905l-mg101 | |
- s905l2 | |
- s905l2-e900v21e | |
- s905l2-wojia | |
- s905l3 | |
- s905l3-cm211 | |
- s905l3-unt400g1 | |
- s905l3-unt402a | |
- s905l3a | |
- s905l3a-cm311 | |
- s905l3a-m401a | |
- s905l3b | |
- s905l3b-e900v21d | |
- s905l3b-e900v22d | |
- s905l3b-e900v22e | |
- s905l3b-ip103h | |
- s905l3b-rg020et-ca | |
- s905l3b-unt403a | |
- s905lb-ipbs9505 | |
- s905lb-q96-mini | |
- s905lb-r3300l | |
- s905mb | |
- s905w | |
- s905w-w95 | |
- s905w-x96-mini | |
- s905w-x96w | |
- s905x | |
- s905x-b860h | |
- s905x-nexbox-a95x | |
- s905x-t95 | |
- s905x-tbee | |
- s905x-tx9 | |
- s905x2 | |
- s905x2-km3 | |
- s905x2-x96max-2g | |
- s905x3 | |
- s905x3-2101 | |
- s905x3-a100 | |
- s905x3-a95xf3 | |
- s905x3-a95xf3-gb | |
- s905x3-b | |
- s905x3-h96max | |
- s905x3-hk1 | |
- s905x3-ip1001m | |
- s905x3-q1 | |
- s905x3-q2 | |
- s905x3-tx3 | |
- s905x3-tx3-bz | |
- s905x3-ugoosx3 | |
- s905x3-whale | |
- s905x3-x88-pro-x3 | |
- s905x3-x96air | |
- s905x3-x96air-gb | |
- s905x3-x96max | |
- s912 | |
- s912-h96pro-plus | |
- s912-m8s-pro | |
- s912-nexbox-a1 | |
- s912-nexbox-a2 | |
- s912-onecloudpro | |
- s912-phicomm-t1 | |
- s912-t95z-plus | |
- s912-tx8-max | |
- s912-tx9-pro-2g | |
- s912-tx9-pro-3g | |
- s912-x92 | |
- s912-zyxq-fake | |
- s922x | |
- s922x-ct2000 | |
- s922x-gtking | |
- s922x-gtkingpro-h | |
- s922x-odroid-n2 | |
- s922x-reva | |
- s922x-ugoos-am6 | |
- seewo-sv21 | |
- smart-am40 | |
- station-m1 | |
- swan1-w28 | |
- sw799 | |
- tanix-tx6 | |
- tb-ls3399 | |
- tn3399 | |
- tpm312 | |
- tqc-a01 | |
- tvi3315a | |
- vplus | |
- wxy-oec | |
- xiaobao | |
- yskj | |
- zcube1-max | |
- zk-r39a | |
- zysj | |
openwrt_kernel: | |
description: "Select kernel version" | |
required: false | |
default: "6.1.y_6.12.y" | |
type: choice | |
options: | |
- 5.4.y | |
- 5.10.y | |
- 5.15.y | |
- 6.1.y | |
- 6.6.y | |
- 6.12.y | |
- 5.4.y_5.10.y | |
- 5.15.y_6.1.y | |
- 6.1.y_6.12.y | |
- 6.1.y_6.6.y | |
- 6.6.y_6.12.y | |
auto_kernel: | |
description: "Auto use the latest kernel" | |
required: false | |
default: true | |
type: boolean | |
kernel_repo: | |
description: "Set the kernel repository" | |
required: false | |
default: "ophub/kernel" | |
type: choice | |
options: | |
- ophub/kernel | |
kernel_usage: | |
description: "Set the tags of the stable kernel." | |
required: false | |
default: "flippy" | |
type: choice | |
options: | |
- stable | |
- flippy | |
- dev | |
- beta | |
openwrt_storage: | |
description: "Select image storage type." | |
required: false | |
default: "save" | |
type: choice | |
options: | |
- save | |
- temp | |
builder_name: | |
description: "Set OpenWrt builder signature." | |
required: false | |
default: "vpei" | |
type: choice | |
options: | |
- ophub | |
- angel | |
- vpei | |
env: | |
FEEDS_CONF: config/${{ inputs.source_branch }}/feeds.conf.default | |
CONFIG_FILE: config/${{ inputs.source_branch }}/.config | |
DIY_P1_SH: config/${{ inputs.source_branch }}/diy-part1.sh | |
DIY_P2_SH: config/${{ inputs.source_branch }}/diy-part2.sh | |
# TZ: America/New_York | |
TZ: Asia/Shanghai | |
jobs: | |
build: | |
runs-on: ubuntu-22.04 | |
if: ${{ github.event.repository.owner.id }} == ${{ github.event.sender.id }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Initialization environment | |
id: init | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
docker rmi $(docker images -q) 2>/dev/null | |
[[ -n "${AGENT_TOOLSDIRECTORY}" ]] && sudo rm -rf "${AGENT_TOOLSDIRECTORY}" | |
sudo rm -rf /usr/share/dotnet /etc/apt/sources.list.d /usr/local/lib/android 2>/dev/null | |
sudo swapoff -a | |
sudo rm -f /swapfile /mnt/swapfile | |
sudo -E apt-get -y update | |
sudo -E apt-get -y purge azure-cli ghc* zulu* llvm* firefox google* dotnet* powershell openjdk* mongodb* moby* || true | |
sudo -E apt-get -y install wget tar | |
sudo -E apt-get -y install $(curl -fsSL https://is.gd/depend_ubuntu2204_openwrt) | |
# ack antlr3 aria2 asciidoc autoconf automake autopoint binutils bison btrfs-progs build-essential bzip2 ca-certificates ccache cmake coreutils cpio curl device-tree-compiler fastjar flex g++-multilib gawk gcc-multilib gettext git git-core gperf gzip haveged help2man intltool jq libc6-dev-i386 libelf-dev libfuse-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool libz-dev lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full patch pigz pkgconf python2.7 python3 python3-pip python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig tar texinfo uglifyjs unzip upx upx-ucl vim wget xmlto xsltproc xxd xz-utils yasm zip zlib1g-dev zstd | |
sudo -E systemctl daemon-reload | |
#sudo -E apt-get -y full-upgrade | |
sudo -E apt-get -y autoremove --purge | |
sudo -E apt-get clean | |
sudo sed -i '/NVM_DIR/d;/skel/d' /root/{.bashrc,.profile} | |
sudo rm -rf ~/{.cargo,.dotnet,.rustup} | |
sudo timedatectl set-timezone "${TZ}" | |
echo "status=success" >> ${GITHUB_OUTPUT} | |
- name: Create simulated physical disk | |
run: | | |
mnt_size=$(expr $(df -h /mnt | tail -1 | awk '{print $4}' | sed 's/[[:alpha:]]//g' | sed 's/\..*//') - 1) | |
root_size=$(expr $(df -h / | tail -1 | awk '{print $4}' | sed 's/[[:alpha:]]//g' | sed 's/\..*//') - 4) | |
sudo truncate -s "${mnt_size}"G /mnt/mnt.img | |
sudo truncate -s "${root_size}"G /root.img | |
sudo losetup /dev/loop6 /mnt/mnt.img | |
sudo losetup /dev/loop7 /root.img | |
sudo pvcreate /dev/loop6 | |
sudo pvcreate /dev/loop7 | |
sudo vgcreate github /dev/loop6 /dev/loop7 | |
sudo lvcreate -n runner -l 100%FREE github | |
sudo mkfs.xfs /dev/github/runner | |
sudo mkdir -p /builder | |
sudo mount /dev/github/runner /builder | |
sudo chown -R runner.runner /builder | |
df -Th | |
- name: Clone source code [ ${{ inputs.source_branch }} ] | |
id: codes | |
working-directory: /builder | |
if: ${{ steps.init.outputs.status }} == 'success' && !cancelled() | |
run: | | |
# Set up compilation source code | |
if [[ "${{ inputs.source_branch }}" == *"openwrt"* ]]; then | |
REPO_URL="https://github.com/openwrt/openwrt" | |
REPO_BRANCH="main" | |
TAGS_NAME="official" | |
elif [[ "${{ inputs.source_branch }}" == *"lede"* ]]; then | |
REPO_URL="https://github.com/coolsnowwolf/lede" | |
REPO_BRANCH="master" | |
TAGS_NAME="lede" | |
elif [[ "${{ inputs.source_branch }}" == *"immortalwrt"* ]]; then | |
REPO_URL="https://github.com/immortalwrt/immortalwrt" | |
REPO_BRANCH="master" | |
TAGS_NAME="immortalwrt" | |
else | |
echo "Unknown source code repository." | |
exit 1 | |
fi | |
# Clone source code | |
git clone -q --single-branch --depth=1 --branch=${REPO_BRANCH} ${REPO_URL} openwrt | |
ln -sf /builder/openwrt ${GITHUB_WORKSPACE}/openwrt | |
ln -sf /builder/openwrt /home/runner/work/_actions/ophub/amlogic-s9xxx-openwrt/main/openwrt | |
# Set output information | |
echo "build_tag=OpenWrt_${TAGS_NAME}_${{ inputs.openwrt_storage }}_$(date +"%Y.%m.%d.%H%M")" >> ${GITHUB_OUTPUT} | |
echo -e "REPO_URL: [ ${REPO_URL} ]\nREPO_BRANCH: [ ${REPO_BRANCH} ]\nTAGS_NAME: [ ${TAGS_NAME} ]" | |
df -hT ${PWD} | |
echo "REPO_URL=${REPO_URL}" >> ${GITHUB_OUTPUT} | |
echo "TAGS_NAME=${TAGS_NAME}" >> ${GITHUB_OUTPUT} | |
echo "status=success" >> ${GITHUB_OUTPUT} | |
- name: Load custom feeds | |
run: | | |
[[ -f "${FEEDS_CONF}" ]] && cp -f ${FEEDS_CONF} openwrt/feeds.conf.default | |
chmod +x ${DIY_P1_SH} | |
cd openwrt/ | |
${GITHUB_WORKSPACE}/${DIY_P1_SH} | |
- name: Copy config files | |
run: cp -f -a ./config/files/ ./openwrt && cp -f -a ./config/${{ inputs.source_branch }}/etc/ openwrt/files && chmod -R 7777 ./openwrt/files #### && mkdir -p ./openwrt/files #### | |
- name: Update feeds | |
run: cd openwrt/ && ./scripts/feeds update -a | |
- name: Install feeds first | |
run: cd openwrt/ && ./scripts/feeds install -a | |
- name: Install feeds second | |
run: cd openwrt/ && ./scripts/feeds install -a | |
- name: Load custom configuration | |
run: | | |
[[ -d "files" ]] && mv -f files openwrt/files | |
[[ -e "${CONFIG_FILE}" ]] && cp -f ${CONFIG_FILE} openwrt/.config | |
chmod +x ${DIY_P2_SH} | |
cd openwrt/ | |
${GITHUB_WORKSPACE}/${DIY_P2_SH} | |
- name: Download package | |
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: Compile the OpenWrt | |
id: compile | |
run: | | |
cd openwrt/ | |
echo -e "$(nproc) thread compile" | |
make -j$(($(nproc) + 1)) V=s || make -j1 || make -j1 V=s | |
echo "status=success" >> ${GITHUB_OUTPUT} | |
- name: Clear server space | |
id: clean | |
if: ${{ steps.compile.outputs.status }} == 'success' && !cancelled() | |
run: | | |
# Clean up server space | |
cd openwrt/ | |
[[ -d "output" ]] || mkdir output | |
cp -f bin/targets/*/*/*rootfs.tar.gz output/ | |
cp -f .config output/config | |
rm -rf $(ls . | grep -v "^output$" | xargs) 2>/dev/null | |
# Generate sha256sum file | |
cd output/ | |
for file in *; do [[ ! -d "${file}" ]] && sha256sum "${file}" >"${file}.sha"; done | |
# Set output information | |
df -hT ${PWD} | |
echo "status=success" >> ${GITHUB_OUTPUT} | |
- name: Upload OpenWrt to Release | |
uses: ncipollo/release-action@main | |
if: ${{ steps.clean.outputs.status }} == 'success' && !cancelled() | |
with: | |
tag: ${{ steps.codes.outputs.build_tag }} | |
artifacts: openwrt/output/* | |
allowUpdates: true | |
removeArtifacts: false | |
replacesArtifacts: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Packaging OpenWrt | |
if: ${{ steps.clean.outputs.status }} == 'success' && !cancelled() | |
uses: ophub/amlogic-s9xxx-openwrt@main | |
with: | |
openwrt_path: openwrt/output/*rootfs.tar.gz | |
openwrt_board: ${{ inputs.openwrt_board }} | |
openwrt_kernel: ${{ inputs.openwrt_kernel }} | |
auto_kernel: ${{ inputs.auto_kernel }} | |
kernel_repo: ${{ inputs.kernel_repo }} | |
kernel_usage: ${{ inputs.kernel_usage }} | |
builder_name: ${{ inputs.builder_name }} | |
- name: Upload the packaged OpenWrt | |
uses: ncipollo/release-action@main | |
if: ${{ env.PACKAGED_STATUS }} == 'success' && !cancelled() | |
with: | |
tag: ${{ steps.codes.outputs.build_tag }} | |
artifacts: ${{ env.PACKAGED_OUTPUTPATH }}/* | |
allowUpdates: true | |
removeArtifacts: false | |
replacesArtifacts: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
body: | | |
### OpenWrt Image information | |
- Default IP: 192.168.1.1 | |
- Default username: root | |
- Default password: password | |
- Default WIFI name: OpenWrt | |
- Default WIFI password: none | |
### Install to EMMC | |
- Login to OpenWrt → System → Amlogic Service → Install OpenWrt | |
### OpenWrt source code | |
- [${{ steps.codes.outputs.TAGS_NAME }}](${{ steps.codes.outputs.REPO_URL }}) | |
### OpenWrt Image Verification | |
- sha256sum | |
- name: Send telegram message on push | |
uses: appleboy/telegram-action@master | |
if: env.UPLOAD_RELEASE == 'true' && env.DELETE_RELEASE == 'true' && !cancelled() | |
with: | |
to: ${{ secrets.TELEGRAM_TO }} | |
token: ${{ secrets.TELEGRAM_TOKEN }} | |
message: | | |
${{ github.actor }} created commit: | |
Commit message: ${{ github.event.commits[0].message }} | |
Repository: ${{ github.repository }} | |
See changes: https://github.com/${{ github.repository }}/commit/${{github.sha}} | |