Build OpenWrt: rm1800-wifi @ ImmortalWrt (VIKINGYFY) · IPQ60XX-RM1800 #53
This file contains hidden or 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: 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: 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: CMA children defaults + reserve 16M 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' "$f" | |
| printf '%s\n' \ | |
| '# 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 16M on the kernel cmdline via the board DTS bootargs | |
| DTS=target/linux/qualcommax/dts/ipq6000-ax1800.dts | |
| test -f "$DTS" || { echo "::error::AX1800 DTS missing"; exit 1; } | |
| echo "Found DTS: $DTS" | |
| if [ -n "$DTS" ]; then | |
| if grep -q 'bootargs-append' "$DTS"; then | |
| sed -i 's/\(bootargs-append = "[^"]*\)"/\1 cma=16M"/' "$DTS" | |
| else | |
| sed -i '0,/{/s//{\n\tchosen { bootargs-append = " cma=16M"; };/' "$DTS" | |
| fi | |
| echo "=== bootargs after edit ==="; grep -n 'bootargs\|cma=' "$DTS" || true | |
| else | |
| echo "::warning::AX1800 DTS not found; cma= not applied" | |
| fi | |
| - 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 | |
| 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 state ==="; grep -E '^CONFIG_CMA=|^CONFIG_DMA_CMA=' .config || echo "CMA NOT ENABLED" | |
| # - name: Force 256M Memory Profile & Disable NSS | |
| # run: | | |
| # cd $OPENWRT_PATH | |
| # # Force memory profiles | |
| # echo "CONFIG_ATH11K_MEM_PROFILE_256M=y" >> .config | |
| # echo "CONFIG_IPQ_MEM_PROFILE_256=y" >> .config | |
| # # Disable features | |
| # echo "# CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE is not set" >> .config | |
| # echo "# CONFIG_MAC80211_NSS_SUPPORT is not set" >> .config | |
| # echo "# CONFIG_ATH11K_NSS_SUPPORT is not set" >> .config | |
| # echo "# CONFIG_PACKAGE_kmod-qca-nss-drv-wifioffload is not set" >> .config | |
| # make defconfig | |
| # # Brutal safety net: overwrite them if dependencies forced them back on | |
| # sed -i 's/CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE=y/# CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE is not set/g' .config | |
| # sed -i 's/CONFIG_MAC80211_NSS_SUPPORT=y/# CONFIG_MAC80211_NSS_SUPPORT is not set/g' .config | |
| # sed -i 's/CONFIG_ATH11K_NSS_SUPPORT=y/# CONFIG_ATH11K_NSS_SUPPORT is not set/g' .config | |
| # - name: Brutalize NSS Out of Config | |
| # run: | | |
| # cd $OPENWRT_PATH | |
| # echo "=== Pre-Brutalize Config State ===" | |
| # grep -E 'NSS|ATH11K_MEM_PROFILE|IPQ_MEM_PROFILE' .config || true | |
| # 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 | |
| # sed -i 's/^CONFIG_ATH11K_NSS_SUPPORT=y$/# CONFIG_ATH11K_NSS_SUPPORT is not set/' .config | |
| # sed -i 's/^CONFIG_PACKAGE_kmod-qca-nss-drv-wifioffload=y$/# CONFIG_PACKAGE_kmod-qca-nss-drv-wifioffload is not set/' .config | |
| # sed -i 's/^CONFIG_PACKAGE_qca-nss-clients=y$/# CONFIG_PACKAGE_qca-nss-clients is not set/' .config | |
| # sed -i 's/^CONFIG_PACKAGE_kmod-qca-nss-crypto=y$/# CONFIG_PACKAGE_kmod-qca-nss-crypto is not set/' .config | |
| # echo "=== Post-Brutalize Config State ===" | |
| # grep -E 'NSS|ATH11K_MEM_PROFILE|IPQ_MEM_PROFILE' .config || true | |
| # - name: Patch Makefiles to remove NSS defaults | |
| # run: | | |
| # cd $OPENWRT_PATH | |
| # # Prevent ath11k from forcing NSS on | |
| # sed -i 's/select ATH11K_NSS_SUPPORT/# select ATH11K_NSS_SUPPORT/g' target/linux/qualcommax/Makefile | |
| # sed -i 's/select MAC80211_NSS_SUPPORT/# select MAC80211_NSS_SUPPORT/g' package/kernel/mac80211/Makefile | |
| # # Prevent the router profile from demanding NSS offload | |
| # sed -i 's/kmod-qca-nss-drv-wifioffload//g' target/linux/qualcommax/image/ipq60xx.mk | |
| # sed -i 's/qca-nss-clients//g' target/linux/qualcommax/image/ipq60xx.mk | |
| - 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: Validate RM1800 build configuration | |
| # run: | | |
| # cd "$OPENWRT_PATH" | |
| # require_enabled() { | |
| # grep -q "^$1=y$" .config || { | |
| # echo "::error::$1 must be enabled" | |
| # exit 1 | |
| # } | |
| # } | |
| # require_disabled() { | |
| # if grep -q "^$1=y$" .config; then | |
| # echo "::error::$1 must be disabled" | |
| # exit 1 | |
| # fi | |
| # } | |
| # require_enabled CONFIG_TARGET_DEVICE_qualcommax_ipq60xx_DEVICE_xiaomi_ax1800 | |
| # require_enabled CONFIG_IPQ_MEM_PROFILE_256 | |
| # require_enabled CONFIG_ATH11K_MEM_PROFILE_256M | |
| # require_enabled CONFIG_NSS_MEM_PROFILE_LOW | |
| # require_disabled CONFIG_IPQ_MEM_PROFILE_512 | |
| # require_disabled CONFIG_IPQ_MEM_PROFILE_1024 | |
| # require_disabled CONFIG_ATH11K_MEM_PROFILE_512M | |
| # require_disabled CONFIG_ATH11K_MEM_PROFILE_1G | |
| # require_disabled CONFIG_ATH11K_NSS_SUPPORT | |
| # require_disabled CONFIG_NSS_MEM_PROFILE_MEDIUM | |
| # require_disabled CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE | |
| # require_disabled CONFIG_NSS_DRV_WIFI_MESH_ENABLE | |
| # require_disabled CONFIG_PACKAGE_MAC80211_NSS_SUPPORT | |
| # require_disabled CONFIG_PACKAGE_kmod-qca-nss-drv-wifi-meshmgr | |
| # echo "=== Validated RM1800 configuration ===" | |
| # grep -E \ | |
| # 'TARGET_DEVICE.*xiaomi_ax1800|IPQ_MEM_PROFILE|ATH11K_MEM_PROFILE|ATH11K_NSS|NSS_MEM_PROFILE|WIFIOFFLOAD|WIFI_MESH|MAC80211_NSS' \ | |
| # .config | |
| # - name: Validate RM1800 memory profile | |
| # run: | | |
| # cd "$OPENWRT_PATH" | |
| # grep -E 'IPQ_MEM_PROFILE|ATH11K_MEM_PROFILE|NSS.*WIFI|MAC80211_NSS' .config || true | |
| # grep -q '^CONFIG_IPQ_MEM_PROFILE_256=y$' .config | |
| # grep -q '^CONFIG_ATH11K_MEM_PROFILE_256M=y$' .config | |
| # ! grep -q '^CONFIG_ATH11K_NSS_SUPPORT=y$' .config | |
| # ! grep -q '^CONFIG_NSS_DRV_WIFIOFFLOAD_ENABLE=y$' .config | |
| # ! grep -q '^CONFIG_PACKAGE_MAC80211_NSS_SUPPORT=y$' .config | |
| - 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: 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: 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 | |
| run: | | |
| { | |
| echo "## Build ${{ inputs.config_name }}" | |
| echo "- Source: ${REPO_URL}@${REPO_BRANCH}" | |
| echo "- cma= in DTS: $(grep -o 'cma=[0-9]*M' target/linux/qualcommax/dts/ipq6000-ax1800.dts || echo MISSING)" | |
| echo "- SHA256:"; echo '```'; cat "$FIRMWARE_PATH/sha256sums" 2>/dev/null | grep -E 'ubi|bin'; echo '```' | |
| } >> "$GITHUB_STEP_SUMMARY" | |