Skip to content

Build OpenWrt: rm1800-wifi @ ImmortalWrt (VIKINGYFY) · IPQ60XX-RM1800 #72

Build OpenWrt: rm1800-wifi @ ImmortalWrt (VIKINGYFY) · IPQ60XX-RM1800

Build OpenWrt: rm1800-wifi @ ImmortalWrt (VIKINGYFY) · IPQ60XX-RM1800 #72

name: Build OpenWrt
run-name: >-
Build OpenWrt:
${{ inputs.config_name }} @
${{ contains(inputs.repo_url, 'breeze303') && 'LibWrt' || (contains(inputs.repo_url, 'immortalwrt') || contains(inputs.repo_url, 'VIKINGYFY')) && 'ImmortalWrt' || 'OpenWrt' }}
(${{ contains(inputs.repo_url, 'VIKINGYFY') && 'VIKINGYFY' || contains(inputs.repo_url, 'breeze303') && 'breeze303' || 'immortalwrt' }})
· ${{ inputs.release_tag }}
on:
workflow_dispatch:
inputs:
config_name:
description: Config filename without .config
required: true
type: choice
options:
- rm1800-minimal
- rm1800-wifi
- rm1800-gateway
default: rm1800-wifi
release_tag:
description: Release tag
required: true
type: string
default: IPQ60XX-RM1800
repo_url:
description: Source OpenWrt/ImmortalWrt repo
required: true
type: choice
options:
- https://github.com/VIKINGYFY/immortalwrt.git@main
- https://github.com/immortalwrt/immortalwrt.git@master
- https://github.com/breeze303/openwrt-6.x.git@main-nss
default: https://github.com/VIKINGYFY/immortalwrt.git@main
note:
description: Build note (shows in run name + summary)
required: false
type: string
permissions:
contents: write
env:
# REPO_URL: https://github.com/breeze303/openwrt-6.x.git
# REPO_BRANCH: main-nss
# REPO_URL: https://github.com/immortalwrt/immortalwrt.git
# REPO_BRANCH: master
# REPO_URL: ${{ inputs.repo_url }}
# REPO_BRANCH: ${{ inputs.repo_branch }}
CONFIG_FILE: configs/${{ inputs.config_name }}.config
# CONFIG_DESCRIPTION: ${{ inputs.config_description }}
FIRMWARE_TAG: ${{ inputs.release_tag }}
CLASH_KERNEL: amd64
CACHE_TOOLCHAIN: true
UPLOAD_BIN_DIR: false
FIRMWARE_RELEASE: true
TZ: Europe/Paris
jobs:
Build:
runs-on: ubuntu-22.04
steps:
- name: Build note
if: inputs.note != ''
run: echo "📝 ${{ inputs.note }}" >> "$GITHUB_STEP_SUMMARY"
- name: Check Server Performance(检查服务器性能)
run: |
echo "Warning ⚠"
echo "The allocated runner has limited performance. If you select too many packages/plugins, watch CPU usage carefully."
echo -e "Known CPU models, descending performance: 7763, 8370C, 8272CL, 8171M, E5-2673\n"
echo "-------------------------- CPU info --------------------------"
echo "Physical CPU count: $(cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l)"
echo -e "CPU core info: $(cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c)\n"
echo "-------------------------- Memory info --------------------------"
echo "Installed memory details:"
echo -e "$(sudo lshw -short -C memory | grep GiB)\n"
echo "-------------------------- Disk info --------------------------"
echo "Disk count: $(ls /dev/sd* | grep -v [1-9] | wc -l)" && df -hT
- name: Initialization Environment(初始化环境)
env:
DEBIAN_FRONTEND: noninteractive
run: |
# Fast cleanup
docker images -q | xargs -r docker rmi || true
sudo rm -rf /usr/share/dotnet /etc/apt/sources.list.d /usr/local/lib/android $AGENT_TOOLSDIRECTORY
# Fast install of OpenWrt/LEDE dependencies
sudo -E apt-get -qq update
sudo -E apt-get -qq install -y --no-install-recommends \
ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext \
gcc-multilib g++-multilib git gperf haveged help2man intltool libc6-dev-i386 \
libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev \
libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz mkisofs msmtp nano ninja-build \
p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools python3-setuptools \
qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev
sudo timedatectl set-timezone "$TZ"
- name: Combine Disks(合并磁盘)
uses: easimon/maximize-build-space@master
with:
swap-size-mb: 1024
temp-reserve-mb: 100
root-reserve-mb: 1024
- name: Checkout
uses: actions/checkout@main
- name: Resolve source
run: |
SOURCE="${{ github.event.inputs.repo_url }}"
REPO_URL="${SOURCE%@*}"
REPO_BRANCH="${SOURCE##*@}"
echo "REPO_URL=$REPO_URL" >> "$GITHUB_ENV"
echo "REPO_BRANCH=$REPO_BRANCH" >> "$GITHUB_ENV"
# OS name from the repo
case "$REPO_URL" in
*breeze303*) OS_LABEL="LibWrt" ;;
*immortalwrt*) OS_LABEL="ImmortalWrt" ;;
*VIKINGYFY*) OS_LABEL="ImmortalWrt-V" ;;
*) OS_LABEL="OpenWrt" ;;
esac
# Variant from config_name (strip the rm1800- prefix, Title-case)
VARIANT_RAW="${{ github.event.inputs.config_name }}"
VARIANT="${VARIANT_RAW#rm1800-}"
case "$VARIANT" in
minimal) VARIANT_LABEL="Minimal" ;;
wifi) VARIANT_LABEL="Wi-Fi" ;;
gateway) VARIANT_LABEL="Gateway" ;;
*) VARIANT_LABEL="$VARIANT" ;;
esac
echo "OS_LABEL=$OS_LABEL" >> "$GITHUB_ENV"
echo "CONFIG_DESCRIPTION=Xiaomi AX1800(RM1800) ${OS_LABEL} ${VARIANT_LABEL} build" >> "$GITHUB_ENV"
echo "FIRMWARE_TAG=${FIRMWARE_TAG}-${OS_LABEL}-${VARIANT_LABEL}" >> "$GITHUB_ENV"
echo "VARIANT_LABEL=$VARIANT_LABEL" >> "$GITHUB_ENV"
echo "Resolved $REPO_URL @ $REPO_BRANCH → ${OS_LABEL} ${VARIANT_LABEL}"
- name: Validate selected config
run: |
test -f "$CONFIG_FILE" || {
echo "::error::Config not found: $CONFIG_FILE"
exit 1
}
echo "Using config: $CONFIG_FILE"
echo "Description: $CONFIG_DESCRIPTION"
- name: Clone Source Code(克隆源代码)
run: |
df -hT $GITHUB_WORKSPACE
git clone $REPO_URL -b $REPO_BRANCH openwrt
cd openwrt
echo "OPENWRT_PATH=$PWD" >> $GITHUB_ENV
VERSION_INFO=$(git show -s --date=short --format="Author: %an<br/>Date: %cd<br/>Message: %s<br/>Hash: %H")
echo "VERSION_INFO=$VERSION_INFO" >> $GITHUB_ENV
- name: Cache OpenWrt downloads
uses: actions/cache@v4
with:
path: |
openwrt/dl
openwrt/feeds
openwrt/.ccache
key: openwrt-${{ runner.os }}-${{ hashFiles(format('configs/{0}.config', inputs.config_name)) }}
restore-keys: |
openwrt-${{ runner.os }}-
- name: Diagnose AX1800 DTS structure
run: |
cd $OPENWRT_PATH
echo "=== locate ax1800 dts anywhere in the tree ==="
find target/linux -iname '*ax1800*.dts*' -o -iname '*ipq6000*.dts*' 2>/dev/null
echo "=== what the image profile references ==="
grep -rn 'DEVICE_DTS\|xiaomi_ax1800' target/linux/qualcommax/image/ 2>/dev/null
cd $OPENWRT_PATH
DTS=target/linux/qualcommax/dts/ipq6000-ax1800.dts
DTS=$(find target/linux -iname '*ax1800*.dts' | grep -vi 'gl-\|mt7621' | head -1)
test -n "$DTS" || { echo "::error::AX1800 DTS not found"; exit 1; }
echo "Patching DTS: $DTS" # must print ipq6000-ax1800.dts, NOT gl-ax1800
echo "=== board DTS ($DTS) ==="
cat "$DTS"
echo "=== what it #includes ==="
grep -n '#include\|/include/' "$DTS"
echo "=== wifi node label + how it's referenced ==="
# find the wifi node definition and any &label references across the tree
grep -rn 'wifi@\|c000000\|&wifi\|q6@\|wcss' target/linux/qualcommax/dts/ target/linux/qualcommax/files*/arch/arm64/boot/dts/qcom/ 2>/dev/null | head -40
echo "=== existing reserved-memory / memory-region nodes ==="
grep -rn 'reserved-memory\|memory-region\|shared-dma-pool\|linux,cma' target/linux/qualcommax/dts/ target/linux/qualcommax/files*/arch/arm64/boot/dts/qcom/ 2>/dev/null | head -40
echo "=== chosen / bootargs anywhere in the include chain ==="
grep -rn 'chosen\|bootargs' target/linux/qualcommax/dts/ target/linux/qualcommax/files*/arch/arm64/boot/dts/qcom/ 2>/dev/null | head -20
- name: Check available IPQ60xx devices
run: |
cd $OPENWRT_PATH
grep -R "DEVICE_.*\(xiaomi\|redmi\|ax1800\|rm1800\)" target/linux/qualcommax/image target/linux/*/image || true
- name: Install Feeds(安装feeds)
run: |
cd $OPENWRT_PATH
./scripts/feeds update -a
./scripts/feeds install -a
- name: Load Custom Configuration(加载自定义配置)
run: |
[ -e files ] && mv files $OPENWRT_PATH/files
cp $CONFIG_FILE $OPENWRT_PATH/.config
- name: Fix kernel config for non-interactive build
run: |
cd $OPENWRT_PATH
for f in target/linux/generic/config-*; do
echo '# CONFIG_ALLOC_SKB_PAGE_FRAG_DISABLE is not set' >> "$f"
done
rm -rf build_dir/target-*
- name: Neuter NSS patches (VIKINGYFY)
run: |
cd $OPENWRT_PATH
echo "=== NSS patches present ==="; ls package/kernel/mac80211/patches/nss/ 2>/dev/null || echo "none"
rm -rf package/kernel/mac80211/patches/nss
grep -rn 'select ATH11K_NSS_SUPPORT\|select MAC80211_NSS_SUPPORT' \
target/linux/qualcommax/ package/kernel/mac80211/ 2>/dev/null || echo "✅ no NSS selects remain"
- name: CMA children defaults + reserve 8M via DTS
run: |
cd $OPENWRT_PATH
# CMA parent comes from the seed (CONFIG_KERNEL_CMA/DMA_CMA).
# Here we only pin the CHILD symbols so syncconfig never prompts in CI.
for f in target/linux/generic/config-*; do
sed -i '/CONFIG_CMA[ =]/d; /CONFIG_CMA is not set/d; /CONFIG_CMA_/d; /CONFIG_DMA_CMA/d' "$f"
printf '%s\n' \
'CONFIG_CMA=y' \
'CONFIG_DMA_CMA=y' \
'# CONFIG_CMA_DEBUG is not set' \
'# CONFIG_CMA_DEBUGFS is not set' \
'# CONFIG_CMA_SYSFS is not set' \
'CONFIG_CMA_AREAS=7' \
'CONFIG_CMA_SIZE_MBYTES=0' \
'CONFIG_CMA_SIZE_SEL_MBYTES=y' \
'# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set' \
'# CONFIG_CMA_SIZE_SEL_MIN is not set' \
'# CONFIG_CMA_SIZE_SEL_MAX is not set' \
'CONFIG_CMA_ALIGNMENT=8' >> "$f"
done
# reserve 32M via the board DTS bootargs (order-safe)
DTS=target/linux/qualcommax/dts/ipq6000-ax1800.dts
# DTS=$(find target/linux -iname '*ax1800*.dts' | grep -vi 'gl-\|mt7621' | head -1)
test -n "$DTS" || { echo "::error::AX1800 DTS not found"; exit 1; }
echo "Patching DTS: $DTS" # must print ipq6000-ax1800.dts, NOT gl-ax1800
sed -i 's/ cma=[0-9]*M//g' "$DTS"
printf '\n/ {\n\treserved-memory {\n\t\twifi_cma: wifi_cma@49000000 {\n\t\t\tcompatible = "shared-dma-pool";\n\t\t\treusable;\n\t\t\tlinux,cma-default;\n\t\t\treg = <0x0 0x49000000 0x0 0x02000000>;\n\t\t};\n\t};\n};\n' >> "$DTS"
echo "=== reserved-memory cma in DTS ==="; grep -n -A6 'wifi_cma' "$DTS" || true
- name: Disable NSS wifi offload + pin 256M mem profile
run: |
cd $OPENWRT_PATH
sed -i '/CONFIG_ATH11K_NSS_SUPPORT/d; /CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE/d; /CONFIG_MAC80211_NSS_SUPPORT/d; /CONFIG_PACKAGE_kmod-qca-nss-drv-wifioffload/d; /CONFIG_IPQ_MEM_PROFILE/d; /CONFIG_ATH11K_MEM_PROFILE/d' .config
printf '%s\n' \
'# CONFIG_ATH11K_NSS_SUPPORT is not set' \
'# CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE is not set' \
'# CONFIG_MAC80211_NSS_SUPPORT is not set' \
'# CONFIG_PACKAGE_kmod-qca-nss-drv-wifioffload is not set' \
'CONFIG_IPQ_MEM_PROFILE_256=y' \
'CONFIG_ATH11K_MEM_PROFILE_256M=y' >> .config
- name: Stamp version + build id
working-directory: openwrt
run: |
CONFIG="${{ github.event.inputs.config_name }}"
TAG="${{ github.event.inputs.release_tag }}"
SHA="${GITHUB_SHA::7}"
RUN="${{ github.run_id }}"
STAMP="$(date -u +%FT%TZ)"
# OS_LABEL + REPO_BRANCH come from the Resolve step via $GITHUB_ENV
VERSION_NUMBER="${CONFIG}-${REPO_BRANCH}-${SHA}"
SAFE_OS="$(printf '%s' "$OS_LABEL" | tr -d '\r\n' | sed 's/[^A-Za-z0-9._-]/-/g')"
SAFE_VER="$(printf '%s' "$VERSION_NUMBER" | tr -d '\r\n' | sed 's/[^A-Za-z0-9._-]/-/g')"
# enable the PARENT symbol, else defconfig strips DIST/NUMBER
sed -i '/^# CONFIG_VERSIONOPT is not set/d; /^CONFIG_VERSIONOPT=/d; /^CONFIG_VERSION_DIST=/d; /^CONFIG_VERSION_NUMBER=/d' .config
{
echo "CONFIG_VERSIONOPT=y"
echo "CONFIG_VERSION_DIST=\"${SAFE_OS}\""
echo "CONFIG_VERSION_NUMBER=\"${SAFE_VER}\""
} >> .config
mkdir -p files/etc
cat > files/etc/build-id <<EOF
os=${SAFE_OS}
config=${CONFIG}
release_tag=${TAG}
repo_url=${REPO_URL}
repo_branch=${REPO_BRANCH}
sha=${SHA}
run_id=${RUN}
built=${STAMP}
version_info=${VERSION_INFO//<br\/>/; }
EOF
echo "Stamped: ${SAFE_OS} ${SAFE_VER}"
- name: Resolve config and check selected device
run: |
cd $OPENWRT_PATH
make defconfig
sed -i 's/^CONFIG_ATH11K_NSS_SUPPORT=y$/# CONFIG_ATH11K_NSS_SUPPORT is not set/' .config
sed -i 's/^CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE=y$/# CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE is not set/' .config
sed -i 's/^CONFIG_MAC80211_NSS_SUPPORT=y$/# CONFIG_MAC80211_NSS_SUPPORT is not set/' .config
echo "=== NSS state after defconfig ==="; grep -E 'NSS|MEM_PROFILE' .config || true
SOURCE_REPO="$(echo $REPO_URL | awk -F '/' '{print $(NF)}')"
echo "SOURCE_REPO=$SOURCE_REPO" >> $GITHUB_ENV
DEVICE_TARGET=$(grep '^CONFIG_TARGET_BOARD=' .config | cut -d'"' -f2)
DEVICE_SUBTARGET=$(grep '^CONFIG_TARGET_SUBTARGET=' .config | cut -d'"' -f2)
DEVICE_PROFILE=$(grep '^CONFIG_TARGET_PROFILE=' .config | cut -d'"' -f2)
echo "DEVICE_TARGET=$DEVICE_TARGET" >> $GITHUB_ENV
echo "DEVICE_SUBTARGET=$DEVICE_SUBTARGET" >> $GITHUB_ENV
echo "DEVICE_PROFILE=$DEVICE_PROFILE" >> $GITHUB_ENV
echo "=== selected target ==="
grep -E "CONFIG_TARGET_(BOARD|SUBTARGET|PROFILE)=" .config || true
echo "=== selected ipq60xx devices ==="
grep -E "CONFIG_TARGET_DEVICE_qualcommax_ipq60xx_DEVICE_.*=y" .config || true
echo "=== available xiaomi/redmi device defines ==="
grep -n -B5 -A20 "define Device/.*\(xiaomi\|redmi\|ax1800\)" target/linux/qualcommax/image/ipq60xx.mk || true
echo "=== written config version ==="
grep CONFIG_VERSION_ .config || true
echo "=== CMA seed (OpenWrt .config) ==="
grep -E '^CONFIG_KERNEL_CMA=|^CONFIG_KERNEL_DMA_CMA=' .config || echo "SEED LINES MISSING"
grep -E '^CONFIG_CMA=|^CONFIG_DMA_CMA=' build_dir/target-*/linux-*/linux-*/.config 2>/dev/null || echo "kernel .config not built yet"
# after make defconfig + your existing NSS sed lines:
echo "=== NSS assertion ==="
if grep -qE '^CONFIG_(ATH11K_NSS_SUPPORT|MAC80211_NSS_SUPPORT)=y' .config; then
echo "::error::NSS still enabled after neuter — patch removal did not take"; exit 1
fi
echo "✅ NSS disabled in .config"
- name: Validate RM1800 build configuration
run: |
cd "$OPENWRT_PATH"
echo "=== Available Xiaomi/Redmi Device Profiles ==="
grep -o "CONFIG_TARGET_DEVICE_qualcommax_ipq60xx_DEVICE_[a-zA-Z0-9_]*" .config || true
cat target/linux/qualcommax/image/ipq60xx.mk | grep -iE 'xiaomi|redmi|ax1800|rm1800' || true
# Temporarily bypass the hard failure so you can see the logs
exit 0
- name: Monitor-ring recon (locate core.c post-extract)
run: |
cd $OPENWRT_PATH
make package/kernel/mac80211/{clean,prepare} V=s QUILT=1 2>/dev/null || true
ATH=$(find build_dir -path '*ath11k/core.c' | head -1)
echo "core.c: ${ATH:-NOT FOUND}"
[ -n "$ATH" ] && grep -n 'rxdma1_enable\|IPQ6018\|\.hw_rev' "$ATH" | head -40 || true
- name: Cache Toolchain(缓存工具链)
if: env.CACHE_TOOLCHAIN == 'true'
uses: HiGarfield/cachewrtbuild@main
with:
ccache: false
mixkey: ${{ env.SOURCE_REPO }}-${{ env.REPO_BRANCH }}-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}
prefix: ${{ env.OPENWRT_PATH }}
- name: Disable IPQ6018 monitor rings
run: |
cd $OPENWRT_PATH
make package/kernel/mac80211/{clean,prepare} V=s QUILT=1 2>/dev/null || true
ATH=$(find build_dir -path '*ath11k/core.c' | head -1)
test -n "$ATH" || { echo "::error::core.c not found"; exit 1; }
awk '
/\.hw_rev = ATH11K_HW_IPQ6018_HW10/ {inblk=1}
inblk && /\.rxdma1_enable = true/ {sub(/true/,"false"); inblk=0}
{print}
' "$ATH" > "$ATH.tmp" && mv "$ATH.tmp" "$ATH"
echo "=== IPQ6018 rxdma1 after patch ==="
grep -n 'IPQ6018_HW10' -A25 "$ATH" | grep 'rxdma1_enable'
- name: Compile Firmware(开始编译固件)
id: compile
run: |
cd $OPENWRT_PATH
echo -e "$(nproc) thread compile"
make -j$(nproc) || make -j1 || make -j1 V=s
echo "status=success" >> $GITHUB_OUTPUT
echo "DATE=$(date +"%Y-%m-%d %H:%M:%S")" >> $GITHUB_ENV
echo "FILE_DATE=$(date +"%Y.%m.%d")" >> $GITHUB_ENV
- name: Verify compiled DTB has the CMA reserved-memory pool
if: always()
run: |
cd $OPENWRT_PATH
DTB=$(find build_dir -name 'image-ipq6000-ax1800.dtb' | head -1)
echo "DTB: $DTB"
DTC=$(find staging_dir build_dir -type f -name dtc 2>/dev/null | head -1)
echo "DTC: $DTC"
if [ -z "$DTB" ] || [ -z "$DTC" ]; then
echo "⚠️ DTB or dtc not found, skipping verify (non-fatal)"; exit 0
fi
DTS=$("$DTC" -I dtb -O dts "$DTB" 2>/dev/null)
echo "$DTS" | grep -iA8 'reserved-memory' || echo "NO reserved-memory node"
if echo "$DTS" | grep -iE 'wifi_cma|linux,cma-default' >/dev/null; then
echo "✅ CMA pool + cma-default present in DTB"
else
echo "❌ CMA pool MISSING from DTB"
fi
- name: Check Space Usage(检查空间使用情况)
if: (!cancelled())
run: df -hT
- name: Upload Bin Directory(上传固件)
if: steps.compile.outputs.status == 'success' && env.UPLOAD_BIN_DIR == 'true'
uses: actions/upload-artifact@main
with:
name: ${{ env.SOURCE_REPO }}-bin-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}-${{ env.FILE_DATE }}
path: ${{ env.OPENWRT_PATH }}/bin
- name: Organize Files(整理文件)
if: steps.compile.outputs.status == 'success'
run: |
cd $OPENWRT_PATH/bin/targets/*/*
cat sha256sums
cp $OPENWRT_PATH/.config build.config
# --- rename firmware to include variant + repo ---
TAG="${SOURCE_REPO}-${VARIANT_LABEL}" # e.g. immortalwrt-Wi-Fi
SAFE_TAG="$(printf '%s' "$TAG" | tr -d '\r\n' | sed 's/[^A-Za-z0-9._-]/-/g')"
for f in *xiaomi_ax1800*factory*.ubi *xiaomi_ax1800*sysupgrade*.bin; do
[ -e "$f" ] || continue
# insert the tag right before the file extension
base="${f%.*}"; ext="${f##*.}"
mv "$f" "${base}-${SAFE_TAG}.${ext}"
echo "renamed -> ${base}-${SAFE_TAG}.${ext}"
done
ls -la *.ubi *.bin 2>/dev/null
mkdir -p packages
find "$OPENWRT_PATH/bin/packages" -name "*.ipk" -exec mv {} packages/ \; || true
tar -zcf Packages.tar.gz packages
rm -rf packages feeds.buildinfo version.buildinfo
echo "FIRMWARE_PATH=$PWD" >> $GITHUB_ENV
- name: Upload Firmware To Artifact(将固件上传到Artifact)
if: steps.compile.outputs.status == 'success' && env.FIRMWARE_RELEASE != 'true'
uses: actions/upload-artifact@main
with:
name: ${{ env.SOURCE_REPO }}-firmware-${{ env.DEVICE_TARGET }}-${{ env.DEVICE_SUBTARGET }}-${{ env.FILE_DATE }}
path: ${{ env.FIRMWARE_PATH }}
- name: Upload Firmware To Release(发布固件)
if: steps.compile.outputs.status == 'success' && env.FIRMWARE_RELEASE == 'true'
uses: ncipollo/release-action@v1
with:
name: R${{ env.DATE }} for ${{ env.FIRMWARE_TAG }}
allowUpdates: true
tag: ${{ env.FIRMWARE_TAG }}
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: ${{ env.FIRMWARE_PATH }}/*
body: |
**This is OpenWrt Firmware for ${{ env.FIRMWARE_TAG }}**
### 📒 Firmware info
**${{ env.CONFIG_DESCRIPTION }}**
- ⚙️ Config: `${{ inputs.config_name }}`
- 🛜 Target: `${{ env.DEVICE_TARGET }}/${{ env.DEVICE_SUBTARGET }}`
- ⚽ Source: ${{ env.REPO_URL }}
- 💝 Branch: `${{ env.REPO_BRANCH }}`
- 🛠️ Built: `${{ env.DATE }}`
- 💻 Platform: ${{ env.FIRMWARE_TAG }}
- 🌐 Default address: 192.168.1.1
- 🔑 Default password: password
### 🧊 Firmware version
- Last source update before this build:
- ${{ env.VERSION_INFO }}
- name: Summary
if: always()
run: |
{
echo "## Build ${{ inputs.config_name }}"
echo "- Source: ${REPO_URL}@${REPO_BRANCH}"
echo "- cma= in DTS: $(grep -o 'cma=[0-9]*M' "$OPENWRT_PATH/target/linux/qualcommax/dts/ipq6000-ax1800.dts" 2>/dev/null || echo MISSING)"
echo "- SHA256:"; echo '```'; cat "$FIRMWARE_PATH/sha256sums" 2>/dev/null || echo "no artifacts" | grep -E 'ubi|bin'; echo '```'
echo "=== CMA resolved (kernel .config, after build) ==="
grep -E '^CONFIG_CMA=|^CONFIG_DMA_CMA=' build_dir/target-*/linux-*/linux-*/.config 2>/dev/null || echo "kernel .config not built yet"
} >> "$GITHUB_STEP_SUMMARY"