From eb60ecb4f2058d2c6087411a88910a15dbc8f0a0 Mon Sep 17 00:00:00 2001
From: SuperKali
Date: Sat, 18 Jan 2025 17:25:23 +0000
Subject: [PATCH] Add support for Stable builds and Nightly builds
---
...er.yml => immortalwrt-builder-nightly.yml} | 12 +-
.../immortalwrt-builder-selfhost.yml | 2 +-
.../workflows/immortalwrt-builder-stable.yml | 200 +++++++++++
.github/workflows/immortalwrt-checker.yml | 12 +-
README.md | 3 +-
.config => config/nightly/.config | 0
config/stable/.config | 328 ++++++++++++++++++
templates/release-notes-template.md | 2 +-
8 files changed, 545 insertions(+), 14 deletions(-)
rename .github/workflows/{immortalwrt-builder.yml => immortalwrt-builder-nightly.yml} (96%)
create mode 100644 .github/workflows/immortalwrt-builder-stable.yml
rename .config => config/nightly/.config (100%)
create mode 100644 config/stable/.config
diff --git a/.github/workflows/immortalwrt-builder.yml b/.github/workflows/immortalwrt-builder-nightly.yml
similarity index 96%
rename from .github/workflows/immortalwrt-builder.yml
rename to .github/workflows/immortalwrt-builder-nightly.yml
index a0cad80..37aece5 100644
--- a/.github/workflows/immortalwrt-builder.yml
+++ b/.github/workflows/immortalwrt-builder-nightly.yml
@@ -1,16 +1,16 @@
#
# https://github.com/P3TERX/Actions-OpenWrt
#
-# File: .github/workflows/immortalwrt-builder.yml
+# File: .github/workflows/immortalwrt-builder-nightly.yml
# Description: Build ImmortalWRT using GitHub Actions
#
# Copyright (c) 2019-2024 P3TERX
-# Copyright (c) 2024 SuperKali
+# Copyright (c) 2024-2025 SuperKali
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
-name: BananaWRT Builder
+name: BananaWRT Builder (Nightly)
on:
repository_dispatch:
workflow_dispatch:
@@ -21,7 +21,7 @@ env:
REPO_URL: https://github.com/immortalwrt/immortalwrt
REPO_BRANCH: 24.10.0-rc3
FEEDS_CONF: feeds.conf.default
- CONFIG_FILE: .config
+ CONFIG_FILE: config/nightly/.config
DIY_P1_SH: diy-part1.sh
DIY_P2_SH: diy-part2.sh
UPLOAD_BIN_DIR: false
@@ -159,8 +159,10 @@ jobs:
release_date=$(date +'%Y.%m.%d-%H%M')
kernel_version=$(find ${{ runner.workspace }}/immortalwrt/build_dir/target-*/linux-*/ -type d -regex '.*/linux-[0-9]+\.[0-9]+.*' | head -n 1 | sed -E 's|.*/linux-||')
target_devices=$(grep '^CONFIG_TARGET.*DEVICE.*=y' ${{ runner.workspace }}/immortalwrt/.config | sed -r 's/.*DEVICE_(.*)=y/\1/')
-
+ release_type='Nightly'
+
sed -e "s|{{BANANAWRT_KERNEL}}|${kernel_version}|g" \
+ -e "s|{{RELEASE_TYPE}}|${release_type}|g" \
-e "s|{{BANANAWRT_VERSION}}|${REPO_BRANCH}|g" \
-e "s|{{RELEASE_DATE}}|$(date '+%Y-%m-%d %H:%M:%S')|g" \
-e "s|{{TARGET_DEVICES}}|${target_devices}|g" \
diff --git a/.github/workflows/immortalwrt-builder-selfhost.yml b/.github/workflows/immortalwrt-builder-selfhost.yml
index 3353c67..bff5bd8 100644
--- a/.github/workflows/immortalwrt-builder-selfhost.yml
+++ b/.github/workflows/immortalwrt-builder-selfhost.yml
@@ -5,7 +5,7 @@
# Description: Build ImmortalWRT (Self Hosted) using GitHub Actions
#
# Copyright (c) 2019-2024 P3TERX
-# Copyright (c) 2024 SuperKali
+# Copyright (c) 2024-2025 SuperKali
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
diff --git a/.github/workflows/immortalwrt-builder-stable.yml b/.github/workflows/immortalwrt-builder-stable.yml
new file mode 100644
index 0000000..077268f
--- /dev/null
+++ b/.github/workflows/immortalwrt-builder-stable.yml
@@ -0,0 +1,200 @@
+#
+# https://github.com/P3TERX/Actions-OpenWrt
+#
+# File: .github/workflows/immortalwrt-builder-stable.yml
+# Description: Build ImmortalWRT using GitHub Actions
+#
+# Copyright (c) 2019-2024 P3TERX
+# Copyright (c) 2024-2025 SuperKali
+#
+# This is free software, licensed under the MIT License.
+# See /LICENSE for more information.
+
+name: BananaWRT Builder (Stable)
+on:
+ repository_dispatch:
+ workflow_dispatch:
+ schedule:
+ - cron: 0 0 1 * *
+
+env:
+ REPO_URL: https://github.com/immortalwrt/immortalwrt
+ REPO_BRANCH: 24.10.0-rc3
+ FEEDS_CONF: feeds.conf.default
+ CONFIG_FILE: config/stable/.config
+ DIY_P1_SH: diy-part1.sh
+ DIY_P2_SH: diy-part2.sh
+ UPLOAD_BIN_DIR: false
+ UPLOAD_FIRMWARE: true
+ UPLOAD_RELEASE: true
+ TZ: Europe/Rome
+
+jobs:
+ build:
+ runs-on: ubuntu-22.04
+ steps:
+ - name: Checkout Source Code
+ uses: actions/checkout@v4.2.2
+
+ - name: Set Up Build Environment
+ env:
+ DEBIAN_FRONTEND: noninteractive
+ run: |
+ sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc /opt/hostedtoolcache/CodeQL
+ sudo docker image prune --all --force
+ sudo apt-get -qq update
+ sudo apt-get -qq install -y \
+ 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 libfuse-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev \
+ libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
+ libssl-dev libtool lrzsz mkisofs msmtp 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 apt-get -qq autoremove --purge -y
+ sudo apt-get -qq clean
+
+ - name: Set timezone on the host
+ run: sudo timedatectl set-timezone "$TZ" || echo "Failed to set timezone, proceeding anyway."
+
+ - name: Authenticate GitHub
+ env:
+ GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
+ run: |
+ git config --global user.name "GitHub Actions"
+ git config --global user.email "actions@github.com"
+ echo "machine github.com login ${{ secrets.PERSONAL_ACCESS_TOKEN }}" > ~/.netrc
+ chmod 600 ~/.netrc
+
+ - name: Clone ImmortalWRT Repository
+ working-directory: ${{ runner.workspace }}
+ run: |
+ git clone $REPO_URL -b v"$REPO_BRANCH" immortalwrt
+
+ - name: Apply Custom Feeds Configuration
+ run: |
+ [ -e ${{ env.FEEDS_CONF }} ] && mv ${{ env.FEEDS_CONF }} ${{ runner.workspace }}/immortalwrt/feeds.conf.default
+ chmod +x ${{ env.DIY_P1_SH }}
+ cd ${{ runner.workspace }}/immortalwrt
+ $GITHUB_WORKSPACE/${{ env.DIY_P1_SH }}
+
+ - name: Add Custom DTS Files
+ run: |
+ cp -r dts/* ${{ runner.workspace }}/immortalwrt/target/linux/mediatek/dts/
+
+ - name: Update Package Feeds
+ run: |
+ cd ${{ runner.workspace }}/immortalwrt
+ ./scripts/feeds update -a
+
+ - name: Install Package Feeds
+ run: |
+ cd ${{ runner.workspace }}/immortalwrt
+ ./scripts/feeds install -a
+
+ - name: Apply Custom Configuration
+ run: |
+ [ -e files ] && mv files ${{ runner.workspace }}/immortalwrt/files
+ [ -e ${{ env.CONFIG_FILE }} ] && mv ${{ env.CONFIG_FILE }} ${{ runner.workspace }}/immortalwrt/.config
+ chmod +x ${{ env.DIY_P2_SH }}
+ cd ${{ runner.workspace }}/immortalwrt
+ $GITHUB_WORKSPACE/${{ env.DIY_P2_SH }}
+ ./scripts/feeds install -p additional_pack -a
+
+ - name: Diffconfig with current configuration
+ run: |
+ cd ${{ runner.workspace }}/immortalwrt
+ ./scripts/diffconfig.sh > diffconfig
+ curl https://downloads.immortalwrt.org/releases/$REPO_BRANCH/targets/mediatek/filogic/config.buildinfo
+ cat diffconfig >> config.buildinfo
+ mv config.buildinfo .config
+ [ -n "$REPO_BRANCH" ] && sed -i \
+ -e 's|^CONFIG_VERSION_REPO=.*|CONFIG_VERSION_REPO="https://downloads.immortalwrt.org/releases/'"$REPO_BRANCH"'"|g' \
+ .config
+
+
+ - name: Download Required Packages
+ run: |
+ cd ${{ runner.workspace }}/immortalwrt
+ make defconfig
+ make download -j$(nproc)
+ find dl -size -1024c -exec ls -l {} \;
+ find dl -size -1024c -exec rm -f {} \;
+
+ - name: Build Firmware
+ run: |
+ cd ${{ runner.workspace }}/immortalwrt
+ make -j$(nproc) || make -j1 V=s
+ grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/' > DEVICE_NAME
+ echo "FILE_DATE=$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
+
+ - name: Check Disk Usage
+ run: df -hT
+
+ - name: Upload Binary Files
+ if: env.UPLOAD_BIN_DIR == 'true'
+ uses: actions/upload-artifact@v4.5.0
+ with:
+ name: BananaWRT_bin${{ env.FILE_DATE }}
+ path: ${{ runner.workspace }}/immortalwrt/bin
+
+ - name: Prepare Firmware for Upload
+ run: |
+ cd ${{ runner.workspace }}/immortalwrt/bin/targets/*/*
+ rm -rf packages
+ echo "FIRMWARE=$PWD" >> $GITHUB_ENV
+
+ - name: Upload Firmware Files
+ if: env.UPLOAD_FIRMWARE == 'true'
+ uses: actions/upload-artifact@v4.5.0
+ with:
+ name: BananaWRT_firmware${{ env.FILE_DATE }}
+ path: ${{ env.FIRMWARE }}
+
+ - name: Create Release Tag
+ if: env.UPLOAD_RELEASE == 'true'
+ run: |
+ release_date=$(date +'%Y.%m.%d-%H%M')
+ kernel_version=$(find ${{ runner.workspace }}/immortalwrt/build_dir/target-*/linux-*/ -type d -regex '.*/linux-[0-9]+\.[0-9]+.*' | head -n 1 | sed -E 's|.*/linux-||')
+ target_devices=$(grep '^CONFIG_TARGET.*DEVICE.*=y' ${{ runner.workspace }}/immortalwrt/.config | sed -r 's/.*DEVICE_(.*)=y/\1/')
+ release_type='Stable'
+
+ sed -e "s|{{BANANAWRT_KERNEL}}|${kernel_version}|g" \
+ -e "s|{{RELEASE_TYPE}}|${release_type}|g" \
+ -e "s|{{BANANAWRT_VERSION}}|${REPO_BRANCH}|g" \
+ -e "s|{{RELEASE_DATE}}|$(date '+%Y-%m-%d %H:%M:%S')|g" \
+ -e "s|{{TARGET_DEVICES}}|${target_devices}|g" \
+ templates/release-notes-template.md > release.txt
+
+ echo "release_tag=${release_date}" >> $GITHUB_ENV
+
+ - name: Publish Firmware Release
+ if: env.UPLOAD_RELEASE == 'true'
+ uses: softprops/action-gh-release@v2.1.0
+ with:
+ tag_name: ${{ env.release_tag }}
+ body_path: release.txt
+ files: ${{ env.FIRMWARE }}/*
+
+ - name: Remove old Releases
+ uses: dev-drprasad/delete-older-releases@v0.3.4
+ if: env.UPLOAD_RELEASE == 'true' && !cancelled()
+ with:
+ keep_latest: 7
+ delete_tags: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Delete workflow runs
+ uses: Mattraks/delete-workflow-runs@v2.0.6
+ with:
+ retain_days: 0
+ keep_minimum_runs: 7
+
+ - name: Cleanup Workspace
+ if: always()
+ run: |
+ sudo rm -rf ~/.netrc
+ sudo rm -rf "${{ runner.workspace }}/immortalwrt"
diff --git a/.github/workflows/immortalwrt-checker.yml b/.github/workflows/immortalwrt-checker.yml
index 22d6fd5..b79c7d5 100644
--- a/.github/workflows/immortalwrt-checker.yml
+++ b/.github/workflows/immortalwrt-checker.yml
@@ -1,7 +1,7 @@
# File: .github/workflows/immortalwrt-checker.yml
# Description: Bump ImmortalWRT Version using GitHub Actions
#
-# Copyright (c) 2024 SuperKali
+# Copyright (c) 2024-2025 SuperKali
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
@@ -45,7 +45,7 @@ jobs:
exit 1
fi
files_to_update=()
- for file in .github/workflows/immortalwrt-builder*.yml; do
+ for file in .github/workflows/immortalwrt-builder*{selfhost,nightly}*.yml; do
if [ -f "$file" ]; then
file_version=$(grep -m 1 'REPO_BRANCH:' "$file" | awk -F': ' '{if (NF > 1) {gsub(/^ +| +$/, "", $2); print $2}}')
if [ "$file_version" != "${{ env.latest_version }}" ]; then
@@ -81,7 +81,7 @@ jobs:
id: check_config_repo
run: |
latest_repo="https://downloads.immortalwrt.org/releases/${{ env.latest_version }}"
- current_repo=$(grep -oP '^CONFIG_VERSION_REPO=\K.*' .config)
+ current_repo=$(grep -oP '^CONFIG_VERSION_REPO=\K.*' config/nightly/.config)
if [ "$current_repo" != "\"$latest_repo\"" ]; then
echo "CONFIG_VERSION_REPO in .config needs update: $current_repo -> $latest_repo"
echo "config_repo_needs_update=true" >> $GITHUB_ENV
@@ -94,7 +94,7 @@ jobs:
if: env.config_repo_needs_update == 'true'
run: |
latest_repo="https://downloads.immortalwrt.org/releases/${{ env.latest_version }}"
- sed -i 's|^CONFIG_VERSION_REPO=.*|CONFIG_VERSION_REPO="'"$latest_repo"'"|g' .config
+ sed -i 's|^CONFIG_VERSION_REPO=.*|CONFIG_VERSION_REPO="'"$latest_repo"'"|g' config/nightly/.config
echo "Updated CONFIG_VERSION_REPO in .config to $latest_repo."
- name: Check VERSION in scripts/update-script.sh
@@ -138,8 +138,8 @@ jobs:
- Updated `VERSION` in `scripts/update-script.sh`.
{% endif %}
- Labels: bump, immortalwrt, v${{ env.latest_version }}
- labels: bump, immortalwrt, v${{ env.latest_version }}
+ Labels: bump, immortalwrt, nightly, v${{ env.latest_version }}
+ labels: bump, immortalwrt, nightly, v${{ env.latest_version }}
- name: Delete workflow runs
uses: Mattraks/delete-workflow-runs@v2.0.6
diff --git a/README.md b/README.md
index aff04f9..740c36c 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,8 @@
BananaWRT
- [![Builder](https://img.shields.io/github/actions/workflow/status/SuperKali/BananaWRT/immortalwrt-builder.yml?label=Builder&style=for-the-badge&logo=github)](https://github.com/SuperKali/BananaWRT/actions/workflows/immortalwrt-builder.yml)
+ [![Stable](https://img.shields.io/github/actions/workflow/status/SuperKali/BananaWRT/immortalwrt-builder-stable.yml?label=Stable&style=for-the-badge&logo=github)](https://github.com/SuperKali/BananaWRT/actions/workflows/immortalwrt-builder-stable.yml)
+ [![Nightly](https://img.shields.io/github/actions/workflow/status/SuperKali/BananaWRT/immortalwrt-builder-nightly.yml?label=Nightly&style=for-the-badge&logo=github)](https://github.com/SuperKali/BananaWRT/actions/workflows/immortalwrt-builder-nightly.yml)
[![Checker](https://img.shields.io/github/actions/workflow/status/SuperKali/BananaWRT/immortalwrt-checker.yml?label=Checker&style=for-the-badge&logo=github)](https://github.com/SuperKali/BananaWRT/actions/workflows/immortalwrt-checker.yml)
diff --git a/.config b/config/nightly/.config
similarity index 100%
rename from .config
rename to config/nightly/.config
diff --git a/config/stable/.config b/config/stable/.config
new file mode 100644
index 0000000..cba4cec
--- /dev/null
+++ b/config/stable/.config
@@ -0,0 +1,328 @@
+CONFIG_TARGET_mediatek=y
+CONFIG_TARGET_mediatek_filogic=y
+CONFIG_TARGET_mediatek_filogic_DEVICE_bananapi_bpi-r3-mini=y
+CONFIG_ALL_KMODS=y
+CONFIG_ALL_NONSHARED=y
+CONFIG_DEVEL=y
+CONFIG_AUTOREMOVE=y
+CONFIG_BPF_TOOLCHAIN_BUILD_LLVM=y
+# CONFIG_BPF_TOOLCHAIN_NONE is not set
+CONFIG_BUILDBOT=y
+CONFIG_BUILD_LOG=y
+CONFIG_COLLECT_KERNEL_DEBUG=y
+CONFIG_DWARVES=y
+# CONFIG_FEED_additional_pack is not set
+CONFIG_GENSIO_PTHREADS=y
+CONFIG_HAS_BPF_TOOLCHAIN=y
+CONFIG_HTOP_LMSENSORS=y
+CONFIG_IMAGEOPT=y
+CONFIG_JSON_CYCLONEDX_SBOM=y
+CONFIG_KERNEL_ARM_PMU=y
+CONFIG_KERNEL_BPF_EVENTS=y
+CONFIG_KERNEL_BPF_STREAM_PARSER=y
+CONFIG_KERNEL_BTRFS_FS_POSIX_ACL=y
+CONFIG_KERNEL_BUILD_DOMAIN="buildbot.infra.immortalwrt.org"
+CONFIG_KERNEL_BUILD_USER="buildbot"
+CONFIG_KERNEL_CIFS_ACL=y
+CONFIG_KERNEL_DEBUG_INFO_BTF=y
+CONFIG_KERNEL_DEBUG_INFO_BTF_MODULES=y
+# CONFIG_KERNEL_DEBUG_INFO_REDUCED is not set
+CONFIG_KERNEL_EXT4_FS_POSIX_ACL=y
+CONFIG_KERNEL_EXT4_FS_SECURITY=y
+CONFIG_KERNEL_F2FS_FS_POSIX_ACL=y
+CONFIG_KERNEL_F2FS_FS_SECURITY=y
+CONFIG_KERNEL_FS_POSIX_ACL=y
+CONFIG_KERNEL_FTRACE=y
+CONFIG_KERNEL_HFSPLUS_FS_POSIX_ACL=y
+CONFIG_KERNEL_HFS_FS_POSIX_ACL=y
+CONFIG_KERNEL_JFFS2_FS_POSIX_ACL=y
+CONFIG_KERNEL_JFFS2_FS_SECURITY=y
+CONFIG_KERNEL_JFS_POSIX_ACL=y
+CONFIG_KERNEL_KPROBES=y
+CONFIG_KERNEL_KPROBE_EVENTS=y
+CONFIG_KERNEL_MODULE_ALLOW_BTF_MISMATCH=y
+CONFIG_KERNEL_NET_L3_MASTER_DEV=y
+CONFIG_KERNEL_NFS_ACL_SUPPORT=y
+CONFIG_KERNEL_PERF_EVENTS=y
+CONFIG_KERNEL_REISER_FS_POSIX_ACL=y
+CONFIG_KERNEL_TMPFS_POSIX_ACL=y
+CONFIG_KERNEL_UBIFS_FS_SECURITY=y
+CONFIG_KERNEL_XDP_SOCKETS=y
+CONFIG_KERNEL_XFS_POSIX_ACL=y
+CONFIG_LIBCURL_COOKIES=y
+CONFIG_LIBCURL_CRYPTO_AUTH=y
+CONFIG_LIBCURL_FILE=y
+CONFIG_LIBCURL_FTP=y
+CONFIG_LIBCURL_HTTP=y
+CONFIG_LIBCURL_NGHTTP2=y
+CONFIG_LIBCURL_OPENSSL=y
+CONFIG_LIBCURL_PROXY=y
+CONFIG_LIBCURL_TFTP=y
+CONFIG_LIBCURL_THREADED_RESOLVER=y
+CONFIG_LIBCURL_TLS_SRP=y
+CONFIG_LIBCURL_UNIX_SOCKETS=y
+CONFIG_LIBQMI_COLLECTION_BASIC=y
+CONFIG_LIBQMI_WITH_MBIM_QMUX=y
+CONFIG_LIBQMI_WITH_QRTR_GLIB=y
+CONFIG_LPAC_WITH_AT=y
+CONFIG_LPAC_WITH_UQMI=y
+# CONFIG_LUCI_LANG_zh_Hans is not set
+CONFIG_MAKE_TOOLCHAIN=y
+CONFIG_MBEDTLS_AES_C=y
+CONFIG_MBEDTLS_ARMV8CE_AES_C=y
+CONFIG_MBEDTLS_CMAC_C=y
+CONFIG_MBEDTLS_DES_C=y
+CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED=y
+CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED=y
+CONFIG_MBEDTLS_ENTROPY_FORCE_SHA256=y
+CONFIG_MBEDTLS_GCM_C=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED=y
+CONFIG_MBEDTLS_KEY_EXCHANGE_PSK_ENABLED=y
+CONFIG_MBEDTLS_NIST_KW_C=y
+CONFIG_MBEDTLS_RSA_NO_CRT=y
+CONFIG_MODEMMANAGER_WITH_MBIM=y
+CONFIG_MODEMMANAGER_WITH_QMI=y
+CONFIG_MODEMMANAGER_WITH_QRTR=y
+# CONFIG_NODEJS_18 is not set
+CONFIG_NODEJS_20=y
+# CONFIG_OPENSSL_ENGINE_BUILTIN is not set
+CONFIG_PACKAGE_6rd=y
+CONFIG_PACKAGE_6to4=y
+CONFIG_PACKAGE_adb=y
+CONFIG_PACKAGE_atc-fib-fm350_gl=y
+CONFIG_PACKAGE_atm-aread=m
+CONFIG_PACKAGE_atm-atmaddr=m
+CONFIG_PACKAGE_atm-atmdiag=m
+CONFIG_PACKAGE_atm-atmdump=m
+CONFIG_PACKAGE_atm-atmloop=m
+CONFIG_PACKAGE_atm-atmsigd=m
+CONFIG_PACKAGE_atm-atmswitch=m
+CONFIG_PACKAGE_atm-atmtcp=m
+CONFIG_PACKAGE_atm-awrite=m
+CONFIG_PACKAGE_atm-bus=m
+CONFIG_PACKAGE_atm-debug-tools=m
+CONFIG_PACKAGE_atm-diagnostics=m
+CONFIG_PACKAGE_atm-esi=m
+CONFIG_PACKAGE_atm-ilmid=m
+CONFIG_PACKAGE_atm-ilmidiag=m
+CONFIG_PACKAGE_atm-lecs=m
+CONFIG_PACKAGE_atm-les=m
+CONFIG_PACKAGE_atm-mpcd=m
+CONFIG_PACKAGE_atm-saaldump=m
+CONFIG_PACKAGE_atm-sonetdiag=m
+CONFIG_PACKAGE_atm-svc_recv=m
+CONFIG_PACKAGE_atm-svc_send=m
+CONFIG_PACKAGE_atm-tools=m
+CONFIG_PACKAGE_atm-ttcp_atm=m
+CONFIG_PACKAGE_atm-zeppelin=m
+CONFIG_PACKAGE_attendedsysupgrade-common=y
+CONFIG_PACKAGE_bc=y
+CONFIG_PACKAGE_br2684ctl=m
+CONFIG_PACKAGE_bridger=y
+CONFIG_PACKAGE_chat=y
+CONFIG_PACKAGE_collectd=y
+CONFIG_PACKAGE_collectd-mod-cpu=y
+CONFIG_PACKAGE_collectd-mod-interface=y
+CONFIG_PACKAGE_collectd-mod-iwinfo=y
+CONFIG_PACKAGE_collectd-mod-load=y
+CONFIG_PACKAGE_collectd-mod-memory=y
+CONFIG_PACKAGE_collectd-mod-network=y
+CONFIG_PACKAGE_collectd-mod-openvpn=y
+CONFIG_PACKAGE_collectd-mod-ping=y
+CONFIG_PACKAGE_collectd-mod-rrdtool=y
+CONFIG_PACKAGE_collectd-mod-sensors=y
+CONFIG_PACKAGE_collectd-mod-wireless=y
+CONFIG_PACKAGE_comgt=y
+CONFIG_PACKAGE_curl=y
+CONFIG_PACKAGE_dbus=y
+# CONFIG_PACKAGE_default-settings-chn is not set
+CONFIG_PACKAGE_glib2=y
+CONFIG_PACKAGE_htop=y
+CONFIG_PACKAGE_ip-tiny=y
+CONFIG_PACKAGE_iperf3=y
+CONFIG_PACKAGE_irqbalance=y
+CONFIG_PACKAGE_kmod-crypto-kpp=y
+CONFIG_PACKAGE_kmod-crypto-lib-chacha20=y
+CONFIG_PACKAGE_kmod-crypto-lib-chacha20poly1305=y
+CONFIG_PACKAGE_kmod-crypto-lib-curve25519=y
+CONFIG_PACKAGE_kmod-crypto-lib-poly1305=y
+CONFIG_PACKAGE_kmod-nvme=m
+CONFIG_PACKAGE_kmod-sched-act-vlan=y
+CONFIG_PACKAGE_kmod-sched-bpf=y
+CONFIG_PACKAGE_kmod-sched-core=y
+CONFIG_PACKAGE_kmod-sched-flower=y
+CONFIG_PACKAGE_kmod-udptunnel4=y
+CONFIG_PACKAGE_kmod-udptunnel6=y
+CONFIG_PACKAGE_kmod-usb-net-cdc-mbim=m
+CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=m
+CONFIG_PACKAGE_kmod-usb-net-qmi-wwan=m
+CONFIG_PACKAGE_kmod-usb-net-rndis=y
+CONFIG_PACKAGE_kmod-usb-wdm=m
+CONFIG_PACKAGE_kmod-vrf=m
+CONFIG_PACKAGE_kmod-wireguard=y
+CONFIG_PACKAGE_kmod-xdp-sockets-diag=m
+CONFIG_PACKAGE_kselftests-bpf=m
+CONFIG_PACKAGE_libatomic=y
+CONFIG_PACKAGE_libattr=y
+CONFIG_PACKAGE_libbfd=m
+CONFIG_PACKAGE_libbpf=y
+CONFIG_PACKAGE_libbz2=m
+CONFIG_PACKAGE_libcap=y
+CONFIG_PACKAGE_libctf=m
+CONFIG_PACKAGE_libcurl=y
+CONFIG_PACKAGE_libdbus=y
+CONFIG_PACKAGE_libdw=m
+CONFIG_PACKAGE_libelf=y
+CONFIG_PACKAGE_libevdev=y
+CONFIG_PACKAGE_libexpat=y
+CONFIG_PACKAGE_libffi=y
+CONFIG_PACKAGE_libgd=y
+CONFIG_PACKAGE_libgensio=y
+CONFIG_PACKAGE_libiperf3=y
+CONFIG_PACKAGE_libjpeg-turbo=y
+CONFIG_PACKAGE_libkmod=y
+CONFIG_PACKAGE_libltdl=y
+CONFIG_PACKAGE_libmbedtls=y
+CONFIG_PACKAGE_libmbim=y
+CONFIG_PACKAGE_libmount=y
+CONFIG_PACKAGE_libncurses=y
+CONFIG_PACKAGE_libnghttp2=y
+CONFIG_PACKAGE_libopcodes=m
+CONFIG_PACKAGE_libopenssl-devcrypto=y
+CONFIG_PACKAGE_liboping=y
+CONFIG_PACKAGE_libpcap=y
+CONFIG_PACKAGE_libpci=y
+CONFIG_PACKAGE_libpcre=y
+CONFIG_PACKAGE_libpcre2=y
+CONFIG_PACKAGE_libpcsclite=y
+CONFIG_PACKAGE_libpng=y
+CONFIG_PACKAGE_libqmi=y
+CONFIG_PACKAGE_libqrtr-glib=y
+CONFIG_PACKAGE_libreadline=y
+CONFIG_PACKAGE_librrd1=y
+CONFIG_PACKAGE_libsensors=y
+CONFIG_PACKAGE_libsmartcols=y
+CONFIG_PACKAGE_libsqlite3=y
+CONFIG_PACKAGE_libstdcpp=y
+CONFIG_PACKAGE_libsysfs=y
+CONFIG_PACKAGE_libtraceevent=m
+CONFIG_PACKAGE_libudev-zero=y
+CONFIG_PACKAGE_libusb-1.0=y
+CONFIG_PACKAGE_libustream-mbedtls=m
+CONFIG_PACKAGE_libuv=y
+CONFIG_PACKAGE_libwebp=y
+CONFIG_PACKAGE_libwebsockets-full=y
+CONFIG_PACKAGE_libxdp=m
+CONFIG_PACKAGE_libyaml=y
+CONFIG_PACKAGE_linkup-optimization=y
+CONFIG_PACKAGE_linux-atm=m
+CONFIG_PACKAGE_lm-sensors=y
+CONFIG_PACKAGE_lpac=y
+CONFIG_PACKAGE_lsblk=y
+CONFIG_PACKAGE_luci-app-3ginfo-lite=y
+CONFIG_PACKAGE_luci-app-attendedsysupgrade=y
+CONFIG_PACKAGE_luci-app-lite-watchdog=y
+CONFIG_PACKAGE_luci-app-modemband=y
+CONFIG_PACKAGE_luci-app-openvpn=y
+CONFIG_PACKAGE_luci-app-passwall_INCLUDE_Shadowsocks_Rust_Server=y
+CONFIG_PACKAGE_luci-app-ser2net=y
+CONFIG_PACKAGE_luci-app-sms-tool-js=y
+CONFIG_PACKAGE_luci-app-statistics=y
+CONFIG_PACKAGE_luci-app-ttyd=y
+CONFIG_PACKAGE_luci-app-usteer=y
+CONFIG_PACKAGE_luci-app-vnstat2=y
+CONFIG_PACKAGE_luci-app-wifischedule=y
+# CONFIG_PACKAGE_luci-i18n-base-zh-cn is not set
+# CONFIG_PACKAGE_luci-i18n-firewall-zh-cn is not set
+# CONFIG_PACKAGE_luci-i18n-opkg-zh-cn is not set
+CONFIG_PACKAGE_luci-mod-dashboard=y
+CONFIG_PACKAGE_luci-proto-atc=y
+# CONFIG_PACKAGE_luci-proto-mbim is not set
+CONFIG_PACKAGE_luci-proto-modemmanager=y
+# CONFIG_PACKAGE_luci-proto-qmi is not set
+CONFIG_PACKAGE_luci-proto-wireguard=y
+CONFIG_PACKAGE_luci-ssl-openssl=y
+CONFIG_PACKAGE_luci-theme-openwrt-2020=y
+CONFIG_PACKAGE_modemband=y
+CONFIG_PACKAGE_modemmanager=y
+CONFIG_PACKAGE_mtr-json=y
+CONFIG_PACKAGE_musl-fts=m
+CONFIG_PACKAGE_nano=y
+CONFIG_PACKAGE_nload=y
+CONFIG_PACKAGE_nmap=y
+CONFIG_PACKAGE_objdump=m
+CONFIG_PACKAGE_openssl-util=y
+CONFIG_PACKAGE_pciids=y
+CONFIG_PACKAGE_pciutils=y
+CONFIG_PACKAGE_pcscd=y
+CONFIG_PACKAGE_perf=m
+CONFIG_PACKAGE_picocom=y
+CONFIG_PACKAGE_px5g-mbedtls=y
+CONFIG_PACKAGE_qosify=m
+CONFIG_PACKAGE_resize2fs=y
+CONFIG_PACKAGE_resolveip=y
+CONFIG_PACKAGE_rpcd-mod-rpcsys=y
+CONFIG_PACKAGE_rrdtool1=y
+CONFIG_PACKAGE_rt61-pci-firmware=m
+CONFIG_PACKAGE_rt73-usb-firmware=m
+CONFIG_PACKAGE_rtl8851be-firmware=m
+CONFIG_PACKAGE_rtl8852ae-firmware=m
+CONFIG_PACKAGE_rtl8852be-firmware=m
+CONFIG_PACKAGE_rtl8852ce-firmware=m
+CONFIG_PACKAGE_ser2net=y
+CONFIG_PACKAGE_sms-tool=y
+CONFIG_PACKAGE_speedtest-ookla=y
+CONFIG_PACKAGE_sysfsutils=y
+CONFIG_PACKAGE_tc-tiny=m
+CONFIG_PACKAGE_tcpdump=y
+CONFIG_PACKAGE_terminfo=y
+CONFIG_PACKAGE_ttyd=y
+CONFIG_PACKAGE_umbim=m
+CONFIG_PACKAGE_uqmi=m
+CONFIG_PACKAGE_usb-modeswitch=y
+CONFIG_PACKAGE_usbids=y
+CONFIG_PACKAGE_usbutils=y
+CONFIG_PACKAGE_usteer=y
+CONFIG_PACKAGE_vim=y
+CONFIG_PACKAGE_vnstat2=y
+CONFIG_PACKAGE_vnstati2=y
+CONFIG_PACKAGE_wget-ssl=y
+CONFIG_PACKAGE_wifischedule=y
+CONFIG_PACKAGE_wireguard-tools=y
+CONFIG_PACKAGE_wwan=m
+CONFIG_PACKAGE_xdp-filter=m
+CONFIG_PACKAGE_xdp-loader=m
+CONFIG_PACKAGE_xdpdump=m
+CONFIG_PACKAGE_zlib=y
+CONFIG_REPRODUCIBLE_DEBUG_INFO=y
+CONFIG_SQLITE3_COLUMN_METADATA=y
+CONFIG_SQLITE3_DYNAMIC_EXTENSIONS=y
+CONFIG_SQLITE3_FTS3=y
+CONFIG_SQLITE3_FTS4=y
+CONFIG_SQLITE3_FTS5=y
+CONFIG_SQLITE3_RTREE=y
+CONFIG_TARGET_ROOTFS_PARTSIZE=7100
+CONFIG_USE_FS_ACL_ATTR=y
+CONFIG_USE_LLVM_BUILD=y
+CONFIG_VERSIONOPT=y
+CONFIG_VERSION_BUG_URL=""
+CONFIG_VERSION_CODE=""
+CONFIG_VERSION_DIST="ImmortalWrt"
+CONFIG_VERSION_FILENAMES=y
+CONFIG_VERSION_HOME_URL=""
+CONFIG_VERSION_HWREV=""
+CONFIG_VERSION_MANUFACTURER=""
+CONFIG_VERSION_MANUFACTURER_URL=""
+CONFIG_VERSION_NUMBER=""
+CONFIG_VERSION_PRODUCT=""
+CONFIG_VERSION_REPO="https://downloads.immortalwrt.org/releases/24.10.0-rc3"
+CONFIG_VERSION_SUPPORT_URL=""
+# CONFIG_IB is not set
+CONFIG_PACKAGE_default-settings=y
+# CONFIG_SDK is not set
+# CONFIG_SDK_LLVM_BPF is not set
diff --git a/templates/release-notes-template.md b/templates/release-notes-template.md
index d7e5c31..0db8d4a 100644
--- a/templates/release-notes-template.md
+++ b/templates/release-notes-template.md
@@ -3,7 +3,7 @@
-BananaWRT Release
+BananaWRT {{RELEASE_TYPE}} Release
- 🕛 **Date**: {{RELEASE_DATE}}
- 🛜 **Target Devices:** {{TARGET_DEVICES}}