├── .github └── workflows │ ├── CWRT-ALL.yml │ ├── Cache-Clean.yml │ ├── WRT-CORE.yml │ └── WRT-TEST.yml ├── Config ├── GENERAL.txt ├── MT7981.txt ├── MT7986.txt └── TEST.txt ├── README.md └── Scripts ├── Handles.sh ├── Packages.sh └── Settings.sh /.github/workflows/CWRT-ALL.yml: -------------------------------------------------------------------------------- 1 | #CI项目 2 | name: CWRT-ALL 3 | 4 | #CI计划 5 | on: 6 | #自动编译:早上6点 7 | schedule: 8 | - cron: 0 22 * * * 9 | #手动编译 10 | workflow_dispatch: 11 | inputs: 12 | PACKAGE: 13 | description: '手动调整插件包,多个请用\n符号隔开。' 14 | required: false 15 | type: string 16 | TEST: 17 | description: '仅输出配置文件,不编译固件。' 18 | default: 'false' 19 | required: false 20 | type: boolean 21 | 22 | env: 23 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 24 | 25 | #CI权限 26 | permissions: write-all 27 | 28 | #CI任务 29 | jobs: 30 | cleanup: 31 | runs-on: ubuntu-latest 32 | steps: 33 | - name: Delete old Releases and Workflows 34 | uses: ophub/delete-releases-workflows@main 35 | with: 36 | gh_token: ${{secrets.GITHUB_TOKEN}} 37 | delete_releases: true 38 | releases_keep_latest: 0 39 | delete_tags: true 40 | delete_workflows: true 41 | workflows_keep_day: 0 42 | 43 | config: 44 | needs: cleanup 45 | name: ${{matrix.CONFIG}} 46 | strategy: 47 | fail-fast: false 48 | #max-parallel: 4 49 | matrix: 50 | CONFIG: [MT7981, MT7986] 51 | REPO_INFO: 52 | - {SOURCE: "padavanonly/immortalwrt-mt798x-24.10", BRANCH: "2410"} 53 | #- {SOURCE: "dailook/immortalwrt-mt798x-23.05", BRANCH: "openwrt-23.05"} 54 | #- {SOURCE: "NekokeCore/immortalwrt-mt798x-24.10", BRANCH: "openwrt-24.10"} 55 | 56 | #调用公用编译核心WRT-CORE.yml 57 | uses: ./.github/workflows/WRT-CORE.yml 58 | with: 59 | #编译配置 60 | WRT_CONFIG: ${{matrix.CONFIG}} 61 | #默认主题 62 | WRT_THEME: argon 63 | #默认主机名 64 | WRT_NAME: CWRT 65 | #默认WIFI名称 66 | WRT_SSID: CWRT 67 | #默认WIFI密码 68 | WRT_WORD: 12345678 69 | #默认地址 70 | WRT_IP: 192.168.10.1 71 | #默认密码,仅作提示,修改无用 72 | WRT_PW: 无 73 | #源码链接 74 | WRT_REPO: https://github.com/${{matrix.REPO_INFO.SOURCE}}.git 75 | #源码分支 76 | WRT_BRANCH: ${{matrix.REPO_INFO.BRANCH}} 77 | #源码名称 78 | WRT_SOURCE: ${{matrix.REPO_INFO.SOURCE}} 79 | #插件调整 80 | WRT_PACKAGE: ${{inputs.PACKAGE}} 81 | #仅输出配置文件 82 | WRT_TEST: ${{inputs.TEST}} 83 | -------------------------------------------------------------------------------- /.github/workflows/Cache-Clean.yml: -------------------------------------------------------------------------------- 1 | name: Cache-Clean 2 | 3 | on: 4 | schedule: 5 | - cron: 0 20 * * 0 6 | workflow_dispatch: 7 | 8 | permissions: write-all 9 | 10 | env: 11 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 12 | 13 | jobs: 14 | cleanup: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - name: Checkout Projects 18 | uses: actions/checkout@main 19 | 20 | - name: Cache Clean 21 | run: gh cache delete --all 22 | -------------------------------------------------------------------------------- /.github/workflows/WRT-CORE.yml: -------------------------------------------------------------------------------- 1 | #云编译公用核心 2 | name: WRT-CORE 3 | 4 | on: 5 | workflow_call: 6 | inputs: 7 | WRT_CONFIG: 8 | required: true 9 | type: string 10 | WRT_THEME: 11 | required: true 12 | type: string 13 | WRT_NAME: 14 | required: true 15 | type: string 16 | WRT_SSID: 17 | required: true 18 | type: string 19 | WRT_WORD: 20 | required: true 21 | type: string 22 | WRT_IP: 23 | required: true 24 | type: string 25 | WRT_PW: 26 | required: true 27 | type: string 28 | WRT_REPO: 29 | required: true 30 | type: string 31 | WRT_BRANCH: 32 | required: true 33 | type: string 34 | WRT_SOURCE: 35 | required: true 36 | type: string 37 | WRT_PACKAGE: 38 | required: false 39 | type: string 40 | WRT_TEST: 41 | required: false 42 | type: string 43 | 44 | env: 45 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 46 | WRT_CONFIG: ${{inputs.WRT_CONFIG}} 47 | WRT_THEME: ${{inputs.WRT_THEME}} 48 | WRT_NAME: ${{inputs.WRT_NAME}} 49 | WRT_SSID: ${{inputs.WRT_SSID}} 50 | WRT_WORD: ${{inputs.WRT_WORD}} 51 | WRT_IP: ${{inputs.WRT_IP}} 52 | WRT_PW: ${{inputs.WRT_PW}} 53 | WRT_REPO: ${{inputs.WRT_REPO}} 54 | WRT_BRANCH: ${{inputs.WRT_BRANCH}} 55 | WRT_SOURCE: ${{inputs.WRT_SOURCE}} 56 | WRT_PACKAGE: ${{inputs.WRT_PACKAGE}} 57 | WRT_TEST: ${{inputs.WRT_TEST}} 58 | 59 | jobs: 60 | core: 61 | name: ${{inputs.WRT_SOURCE}} 62 | runs-on: ubuntu-latest 63 | steps: 64 | - name: Checkout Projects 65 | uses: actions/checkout@main 66 | 67 | - name: Initialization Environment 68 | env: 69 | DEBIAN_FRONTEND: noninteractive 70 | run: | 71 | sudo -E apt -yqq purge firefox 72 | sudo -E apt -yqq update 73 | sudo -E apt -yqq full-upgrade 74 | sudo -E apt -yqq autoremove --purge 75 | sudo -E apt -yqq autoclean 76 | sudo -E apt -yqq clean 77 | sudo -E apt -yqq install dos2unix libfuse-dev 78 | sudo bash -c 'bash <(curl -sL https://build-scripts.immortalwrt.org/init_build_environment.sh)' 79 | sudo -E systemctl daemon-reload 80 | sudo -E timedatectl set-timezone "Asia/Shanghai" 81 | 82 | sudo mkdir -p /mnt/build_wrt 83 | sudo chown $USER:$USER /mnt/build_wrt 84 | sudo ln -s /mnt/build_wrt $GITHUB_WORKSPACE/wrt 85 | 86 | - name: Initialization Values 87 | run: | 88 | echo "WRT_DATE=$(TZ=UTC-8 date +"%y.%m.%d-%H.%M.%S")" >> $GITHUB_ENV 89 | echo "WRT_MARK=${GITHUB_REPOSITORY%%/*}" >> $GITHUB_ENV 90 | echo "WRT_INFO=${WRT_SOURCE%%/*}" >> $GITHUB_ENV 91 | echo "WRT_TARGET=$(grep -m 1 -oP '^CONFIG_TARGET_\K[\w]+(?=\=y)' ./Config/$WRT_CONFIG.txt)" >> $GITHUB_ENV 92 | echo "WRT_KVER=none" >> $GITHUB_ENV 93 | echo "WRT_LIST=none" >> $GITHUB_ENV 94 | 95 | - name: Clone Code 96 | run: | 97 | git clone --depth=1 --single-branch --branch $WRT_BRANCH $WRT_REPO ./wrt/ 98 | 99 | cd ./wrt/ && echo "WRT_HASH=$(git log -1 --pretty=format:'%h')" >> $GITHUB_ENV 100 | 101 | # 如果不存在 defconfig 则直接结束工作流 102 | if [ ! -d "defconfig" ]; then 103 | echo "defconfig directory not found, stopping workflow." 104 | exit 0 105 | fi 106 | 107 | # GitHub Action 移除国内下载源 108 | PROJECT_MIRRORS_FILE="./scripts/projectsmirrors.json" 109 | if [ -f "$PROJECT_MIRRORS_FILE" ]; then 110 | sed -i '/.cn\//d; /tencent/d; /aliyun/d' "$PROJECT_MIRRORS_FILE" 111 | fi 112 | 113 | - name: Check Scripts 114 | run: | 115 | find ./ -maxdepth 3 -type f -iregex ".*\(txt\|sh\)$" -exec dos2unix {} \; -exec chmod +x {} \; 116 | 117 | - name: Check Caches 118 | id: check-cache 119 | if: env.WRT_TEST != 'true' 120 | uses: actions/cache@main 121 | with: 122 | key: ${{env.WRT_CONFIG}}-${{env.WRT_INFO}}-${{env.WRT_HASH}} 123 | restore-keys: ${{env.WRT_CONFIG}}-${{env.WRT_INFO}} 124 | path: | 125 | ./wrt/.ccache 126 | ./wrt/staging_dir/host* 127 | ./wrt/staging_dir/tool* 128 | 129 | - name: Update Caches 130 | if: env.WRT_TEST != 'true' 131 | run: | 132 | if [ -d "./wrt/staging_dir" ]; then 133 | find "./wrt/staging_dir" -type d -name "stamp" -not -path "*target*" | while read -r DIR; do 134 | find "$DIR" -type f -exec touch {} + 135 | done 136 | 137 | mkdir -p ./wrt/tmp && echo "1" > ./wrt/tmp/.build 138 | 139 | echo "toolchain skiped done!" 140 | else 141 | echo "caches missed!" 142 | fi 143 | 144 | if ${{steps.check-cache.outputs.cache-hit != 'true'}}; then 145 | CACHE_LIST=$(gh cache list --key "$WRT_CONFIG-$WRT_INFO" | cut -f 1) 146 | for CACHE_KEY in $CACHE_LIST; do 147 | gh cache delete $CACHE_KEY 148 | done 149 | 150 | echo "caches cleanup done!" 151 | fi 152 | 153 | - name: Update Feeds 154 | run: | 155 | cd ./wrt/ 156 | 157 | ./scripts/feeds update -a 158 | ./scripts/feeds install -a 159 | 160 | - name: Custom Packages 161 | run: | 162 | cd ./wrt/package/ 163 | 164 | $GITHUB_WORKSPACE/Scripts/Packages.sh 165 | $GITHUB_WORKSPACE/Scripts/Handles.sh 166 | 167 | - name: Custom Settings 168 | run: | 169 | cd ./wrt/ 170 | 171 | if [[ "${WRT_CONFIG,,}" == *"test"* ]]; then 172 | cat $GITHUB_WORKSPACE/Config/$WRT_CONFIG.txt >> .config 173 | else 174 | find ./defconfig -type f -iname "*$WRT_CONFIG*" -exec cat {} + | sort | uniq > .config 175 | $GITHUB_WORKSPACE/Scripts/Settings.sh 176 | cat $GITHUB_WORKSPACE/Config/$WRT_CONFIG.txt $GITHUB_WORKSPACE/Config/GENERAL.txt >> .config 177 | fi 178 | 179 | make defconfig -j$(nproc) && make clean -j$(nproc) 180 | 181 | - name: Download Packages 182 | if: env.WRT_TEST != 'true' 183 | run: | 184 | cd ./wrt/ 185 | 186 | make download -j$(nproc) 187 | 188 | - name: Compile Firmware 189 | if: env.WRT_TEST != 'true' 190 | run: | 191 | cd ./wrt/ 192 | 193 | make -j$(nproc) || make -j$(nproc) V=s 194 | 195 | - name: Machine Information 196 | run: | 197 | cd ./wrt/ 198 | 199 | echo "=======================" 200 | lscpu | grep -E "name|Core|Thread" 201 | echo "=======================" 202 | df -h 203 | echo "=======================" 204 | du -h --max-depth=1 205 | echo "=======================" 206 | 207 | - name: Package Firmware 208 | run: | 209 | cd ./wrt/ && mkdir ./upload/ 210 | 211 | cp -f ./.config ./upload/Config-"$WRT_CONFIG"-"$WRT_INFO"-"$WRT_DATE".txt 212 | 213 | if [[ $WRT_TEST != 'true' ]]; then 214 | echo "WRT_KVER=$(find ./bin/targets/ -type f -name "*.manifest" -exec grep -oP '^kernel - \K[\d\.]+' {} \;)" >> $GITHUB_ENV 215 | echo "WRT_LIST=$(find ./bin/targets/ -type f -name "*.manifest" -exec grep -oP '^luci-(app|theme)[^ ]*' {} \; | tr '\n' ' ')" >> $GITHUB_ENV 216 | 217 | find ./bin/targets/ -iregex ".*\(buildinfo\|json\|sha256sums\|packages\)$" -exec rm -rf {} + 218 | 219 | for FILE in $(find ./bin/targets/ -type f -iname "*$WRT_TARGET*") ; do 220 | EXT=$(basename $FILE | cut -d '.' -f 2-) 221 | NAME=$(basename $FILE | cut -d '.' -f 1 | grep -io "\($WRT_TARGET\).*") 222 | NEW_FILE="$WRT_INFO"-"$NAME"-"$WRT_DATE"."$EXT" 223 | mv -f $FILE ./upload/$NEW_FILE 224 | done 225 | 226 | find ./bin/targets/ -type f -exec mv -f {} ./upload/ \; 227 | 228 | make clean -j$(nproc) 229 | fi 230 | 231 | - name: Release Firmware 232 | uses: softprops/action-gh-release@v2 233 | with: 234 | tag_name: ${{env.WRT_CONFIG}}-${{env.WRT_INFO}}-${{env.WRT_DATE}} 235 | files: ./wrt/upload/*.* 236 | body: | 237 | 这是个平台固件包,内含多个设备! 238 | 请注意选择你需要的设备固件! 239 | 不要问,刷就完事了! 240 | 241 | 全系带闭源硬件加速,别问了! 242 | 243 | 源码:${{env.WRT_REPO}} 244 | 分支:${{env.WRT_BRANCH}} 245 | 提交:${{env.WRT_HASH}} 246 | 247 | 配置:${{env.WRT_CONFIG}} 248 | 平台:${{env.WRT_TARGET}} 249 | 250 | 登录地址:${{env.WRT_IP}} 251 | 登录密码:${{env.WRT_PW}} 252 | 253 | WIFI名称:${{env.WRT_SSID}} 254 | WIFI密码:${{env.WRT_WORD}} 255 | 256 | 内核版本:${{env.WRT_KVER}} 257 | 插件列表:${{env.WRT_LIST}} 258 | -------------------------------------------------------------------------------- /.github/workflows/WRT-TEST.yml: -------------------------------------------------------------------------------- 1 | #CI项目 2 | name: WRT-TEST 3 | 4 | #CI计划 5 | on: 6 | #手动编译 7 | workflow_dispatch: 8 | inputs: 9 | CONFIG: 10 | default: 'MTK-7981' 11 | required: true 12 | type: choice 13 | options: 14 | - MT7981 15 | - MT7986 16 | - TEST 17 | SOURCE: 18 | default: 'padavanonly/immortalwrt-mt798x-24.10' 19 | required: true 20 | type: choice 21 | options: 22 | - padavanonly/immortalwrt-mt798x-24.10 23 | - NekokeCore/immortalwrt-mt798x-24.10 24 | BRANCH: 25 | default: '2410' 26 | required: true 27 | type: string 28 | PACKAGE: 29 | required: false 30 | type: string 31 | TEST: 32 | description: '仅输出配置文件,不编译固件。' 33 | default: 'true' 34 | required: true 35 | type: boolean 36 | 37 | #CI权限 38 | permissions: write-all 39 | 40 | #CI任务 41 | jobs: 42 | config: 43 | name: ${{inputs.CONFIG}} 44 | #调用公用编译核心WRT-CORE.yml 45 | uses: ./.github/workflows/WRT-CORE.yml 46 | with: 47 | #编译配置 48 | WRT_CONFIG: ${{inputs.CONFIG}} 49 | #默认主题 50 | WRT_THEME: argon 51 | #默认主机名 52 | WRT_NAME: CWRT 53 | #默认WIFI名称 54 | WRT_SSID: CWRT 55 | #默认WIFI密码 56 | WRT_WORD: 12345678 57 | #默认地址 58 | WRT_IP: 192.168.10.1 59 | #默认密码,仅作提示,修改无用 60 | WRT_PW: 无 61 | #源码链接 62 | WRT_REPO: https://github.com/${{inputs.SOURCE}}.git 63 | #源码分支 64 | WRT_BRANCH: ${{inputs.BRANCH}} 65 | #源码名称 66 | WRT_SOURCE: ${{inputs.SOURCE}} 67 | #插件调整 68 | WRT_PACKAGE: ${{inputs.PACKAGE}} 69 | #仅输出配置文件 70 | WRT_TEST: ${{inputs.TEST}} 71 | -------------------------------------------------------------------------------- /Config/GENERAL.txt: -------------------------------------------------------------------------------- 1 | #科学插件调整 2 | CONFIG_PACKAGE_luci-app-homeproxy=y 3 | #增加插件 4 | CONFIG_PACKAGE_luci-app-autoreboot=y 5 | CONFIG_PACKAGE_luci-app-gecoosac=y 6 | CONFIG_PACKAGE_luci-app-netspeedtest=y 7 | CONFIG_PACKAGE_luci-app-partexp=y 8 | CONFIG_PACKAGE_luci-app-samba4=y 9 | CONFIG_PACKAGE_luci-app-tailscale=y 10 | CONFIG_PACKAGE_luci-app-upnp=y 11 | CONFIG_PACKAGE_luci-app-wolplus=y 12 | CONFIG_PACKAGE_openssh-sftp-server=y 13 | #必选插件 14 | CONFIG_PACKAGE_luci-app-eqos-mtk=y 15 | CONFIG_PACKAGE_luci-app-mtwifi-cfg=y 16 | CONFIG_PACKAGE_luci-app-turboacc-mtk=y 17 | CONFIG_PACKAGE_luci-app-upnp-mtk-adjust=y 18 | #删除插件 19 | CONFIG_PACKAGE_luci-app-eqos=n 20 | CONFIG_PACKAGE_luci-app-mtk=n 21 | CONFIG_PACKAGE_luci-app-upnp=n 22 | CONFIG_PACKAGE_luci-app-wol=n 23 | CONFIG_PACKAGE_wifi-profile=n 24 | #参数调整 25 | CONFIG_CCACHE=y 26 | CONFIG_DEVEL=y 27 | CONFIG_TARGET_MULTI_PROFILE=y 28 | CONFIG_TARGET_PER_DEVICE_ROOTFS=y 29 | CONFIG_TARGET_ROOTFS_INITRAMFS=n 30 | CONFIG_MTK_MEMORY_SHRINK=n 31 | CONFIG_MTK_MEMORY_SHRINK_AGGRESS=n 32 | -------------------------------------------------------------------------------- /Config/MT7981.txt: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_mediatek=y 2 | CONFIG_TARGET_mediatek_mt7981=y 3 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_abt_asr3000=y 4 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cetron_ct3003=y 5 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_a10=y 6 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_rax3000m-emmc-usboffload=y 7 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_rax3000m-emmc=y 8 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_rax3000m-usboffload=y 9 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_rax3000m=y 10 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_rax3000me=y 11 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_xr30-emmc=y 12 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cmcc_xr30=y 13 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_cudy_tr3000-v1=y 14 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_glinet_gl-mt2500=y 15 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_glinet_gl-mt3000=y 16 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_glinet_gl-x3000=y 17 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_glinet_gl-xe3000=y 18 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_h3c_nx30pro=y 19 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_huasifei_wh3000-emmc=y 20 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_imou_lc-hx3001=y 21 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_jcg_q30=y 22 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_konka_komi-a31=y 23 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_livinet_zr-3020=y 24 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_mt7981-360-t7-108M=y 25 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_mt7981-360-t7=y 26 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_mt7981-clt-r30b1-112M=y 27 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_mt7981-clt-r30b1=y 28 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_newland_nl-wr8103=y 29 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_newland_nl-wr9103=y 30 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_nokia_ea0326gmp=y 31 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_nradio_wt9103=y 32 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_nradio_wt9103_512m=y 33 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_sl_3000-emmc=y 34 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_sl_3000=y 35 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_xiaomi_mi-router-ax3000t-stock=y 36 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_xiaomi_mi-router-ax3000t=y 37 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_xiaomi_mi-router-wr30u-112m=y 38 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_xiaomi_mi-router-wr30u-stock=y 39 | CONFIG_MTK_MT7981_NEW_FW=y 40 | -------------------------------------------------------------------------------- /Config/MT7986.txt: -------------------------------------------------------------------------------- 1 | CONFIG_TARGET_mediatek=y 2 | CONFIG_TARGET_mediatek_mt7986=y 3 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_BPI-R3MINI-EMMC=y 4 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_BPI-R3MINI-NAND-110M=y 5 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_BPI-R3MINI-NAND=y 6 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_glinet_gl-mt6000=y 7 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_jdcloud_re-cp-03=y 8 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_netcore_n60-pro=y 9 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_netcore_n60=y 10 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_ruijie-rg-x60-pro-uboot=y 11 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_ruijie-rg-x60-pro=y 12 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_tplink_tl-xdr6086=y 13 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_tplink_tl-xdr6088=y 14 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_xiaomi_redmi-router-ax6000-stock=y 15 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_xiaomi_redmi-router-ax6000=y 16 | CONFIG_TARGET_DEVICE_mediatek_mt7986_DEVICE_zyxel_ex5700=y 17 | CONFIG_MTK_MT7986_NEW_FW=y 18 | -------------------------------------------------------------------------------- /Config/TEST.txt: -------------------------------------------------------------------------------- 1 | #设备平台 2 | CONFIG_TARGET_mediatek=y 3 | CONFIG_TARGET_mediatek_mt7981=y 4 | #设备列表 5 | CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_jcg_q30=y 6 | #插件调整 7 | CONFIG_PACKAGE_luci-app-passwall=y 8 | CONFIG_PACKAGE_luci-app-mosdns=y 9 | CONFIG_PACKAGE_luci-app-mwan3=y 10 | #必选组件,请勿修改 11 | CONFIG_first_card_name="MT7981" 12 | CONFIG_MTK_CHIP_MT7981=y 13 | CONFIG_MTK_CONNINFRA_APSOC_MT7981=y 14 | CONFIG_MTK_FIRST_IF_MT7981=y 15 | CONFIG_MTK_MT7981_NEW_FW=y 16 | CONFIG_WARP_CHIPSET="mt7981" 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CloseWRT-CI 2 | 云编译CloseWRT固件 3 | 4 | PADAVANONLY-24.10源码: 5 | https://github.com/padavanonly/immortalwrt-mt798x-24.10.git 6 | 7 | # 注意: 8 | 9 | 本项目仅支持编译带有defconfig目录的MTK SDK闭源项目。 10 | 11 | # 固件简要说明: 12 | 13 | 固件每天早上4点自动编译。 14 | 15 | 固件信息里的时间为编译开始的时间,方便核对上游源码提交时间。 16 | 17 | MEDIATEK系列,配套的UBOOT: 18 | https://github.com/VIKINGYFY/UBOOT-CI/releases 19 | 20 | # 目录简要说明: 21 | 22 | workflows——自定义CI配置 23 | 24 | Scripts——自定义脚本 25 | 26 | Config——自定义配置 27 | -------------------------------------------------------------------------------- /Scripts/Handles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PKG_PATH="$GITHUB_WORKSPACE/wrt/package/" 4 | 5 | #预置HomeProxy数据 6 | if [ -d *"homeproxy"* ]; then 7 | echo " " 8 | 9 | HP_RULE="surge" 10 | HP_PATH="homeproxy/root/etc/homeproxy" 11 | 12 | rm -rf ./$HP_PATH/resources/* 13 | 14 | git clone -q --depth=1 --single-branch --branch "release" "https://github.com/Loyalsoldier/surge-rules.git" ./$HP_RULE/ 15 | cd ./$HP_RULE/ && RES_VER=$(git log -1 --pretty=format:'%s' | grep -o "[0-9]*") 16 | 17 | echo $RES_VER | tee china_ip4.ver china_ip6.ver china_list.ver gfw_list.ver 18 | awk -F, '/^IP-CIDR,/{print $2 > "china_ip4.txt"} /^IP-CIDR6,/{print $2 > "china_ip6.txt"}' cncidr.txt 19 | sed 's/^\.//g' direct.txt > china_list.txt ; sed 's/^\.//g' gfw.txt > gfw_list.txt 20 | mv -f ./{china_*,gfw_list}.{ver,txt} ../$HP_PATH/resources/ 21 | 22 | cd .. && rm -rf ./$HP_RULE/ 23 | 24 | cd $PKG_PATH && echo "homeproxy date has been updated!" 25 | fi 26 | 27 | #修改argon主题字体和颜色 28 | if [ -d *"luci-theme-argon"* ]; then 29 | echo " " 30 | 31 | cd ./luci-theme-argon/ 32 | 33 | sed -i "/font-weight:/ { /important/! { /\/\*/! s/:.*/: var(--font-weight);/ } }" $(find ./luci-theme-argon -type f -iname "*.css") 34 | sed -i "s/primary '.*'/primary '#31a1a1'/; s/'0.2'/'0.5'/; s/'none'/'bing'/; s/'600'/'normal'/" ./luci-app-argon-config/root/etc/config/argon 35 | 36 | cd $PKG_PATH && echo "theme-argon has been fixed!" 37 | fi 38 | 39 | #修改qca-nss-drv启动顺序 40 | NSS_DRV="../feeds/nss_packages/qca-nss-drv/files/qca-nss-drv.init" 41 | if [ -f "$NSS_DRV" ]; then 42 | echo " " 43 | 44 | sed -i 's/START=.*/START=85/g' $NSS_DRV 45 | 46 | cd $PKG_PATH && echo "qca-nss-drv has been fixed!" 47 | fi 48 | 49 | #修改qca-nss-pbuf启动顺序 50 | NSS_PBUF="./kernel/mac80211/files/qca-nss-pbuf.init" 51 | if [ -f "$NSS_PBUF" ]; then 52 | echo " " 53 | 54 | sed -i 's/START=.*/START=86/g' $NSS_PBUF 55 | 56 | cd $PKG_PATH && echo "qca-nss-pbuf has been fixed!" 57 | fi 58 | 59 | #修复TailScale配置文件冲突 60 | TS_FILE=$(find ../feeds/packages/ -maxdepth 3 -type f -wholename "*/tailscale/Makefile") 61 | if [ -f "$TS_FILE" ]; then 62 | echo " " 63 | 64 | sed -i '/\/files/d' $TS_FILE 65 | 66 | cd $PKG_PATH && echo "tailscale has been fixed!" 67 | fi 68 | -------------------------------------------------------------------------------- /Scripts/Packages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #安装和更新软件包 4 | UPDATE_PACKAGE() { 5 | local PKG_NAME=$1 6 | local PKG_REPO=$2 7 | local PKG_BRANCH=$3 8 | local PKG_SPECIAL=$4 9 | local PKG_LIST=("$PKG_NAME" $5) # 第5个参数为自定义名称列表 10 | local REPO_NAME=${PKG_REPO#*/} 11 | 12 | echo " " 13 | 14 | # 删除本地可能存在的不同名称的软件包 15 | for NAME in "${PKG_LIST[@]}"; do 16 | # 查找匹配的目录 17 | echo "Search directory: $NAME" 18 | local FOUND_DIRS=$(find ../feeds/luci/ ../feeds/packages/ -maxdepth 3 -type d -iname "*$NAME*" 2>/dev/null) 19 | 20 | # 删除找到的目录 21 | if [ -n "$FOUND_DIRS" ]; then 22 | while read -r DIR; do 23 | rm -rf "$DIR" 24 | echo "Delete directory: $DIR" 25 | done <<< "$FOUND_DIRS" 26 | else 27 | echo "Not fonud directory: $NAME" 28 | fi 29 | done 30 | 31 | # 克隆 GitHub 仓库 32 | git clone --depth=1 --single-branch --branch $PKG_BRANCH "https://github.com/$PKG_REPO.git" 33 | 34 | # 处理克隆的仓库 35 | if [[ "$PKG_SPECIAL" == "pkg" ]]; then 36 | find ./$REPO_NAME/*/ -maxdepth 3 -type d -iname "*$PKG_NAME*" -prune -exec cp -rf {} ./ \; 37 | rm -rf ./$REPO_NAME/ 38 | elif [[ "$PKG_SPECIAL" == "name" ]]; then 39 | mv -f $REPO_NAME $PKG_NAME 40 | fi 41 | } 42 | 43 | # 调用示例 44 | # UPDATE_PACKAGE "OpenAppFilter" "destan19/OpenAppFilter" "master" "" "custom_name1 custom_name2" 45 | # UPDATE_PACKAGE "open-app-filter" "destan19/OpenAppFilter" "master" "" "luci-app-appfilter oaf" 这样会把原有的open-app-filter,luci-app-appfilter,oaf相关组件删除,不会出现coremark错误。 46 | 47 | # UPDATE_PACKAGE "包名" "项目地址" "项目分支" "pkg/name,可选,pkg为从大杂烩中单独提取包名插件;name为重命名为包名" 48 | UPDATE_PACKAGE "argon" "sbwml/luci-theme-argon" "openwrt-24.10" 49 | UPDATE_PACKAGE "kucat" "sirpdboy/luci-theme-kucat" "js" 50 | 51 | UPDATE_PACKAGE "homeproxy" "VIKINGYFY/homeproxy" "main" 52 | UPDATE_PACKAGE "nikki" "nikkinikki-org/OpenWrt-nikki" "main" 53 | UPDATE_PACKAGE "openclash" "vernesong/OpenClash" "dev" "pkg" 54 | UPDATE_PACKAGE "passwall" "xiaorouji/openwrt-passwall" "main" "pkg" 55 | UPDATE_PACKAGE "passwall2" "xiaorouji/openwrt-passwall2" "main" "pkg" 56 | 57 | UPDATE_PACKAGE "luci-app-tailscale" "asvow/luci-app-tailscale" "main" 58 | 59 | UPDATE_PACKAGE "alist" "sbwml/luci-app-alist" "main" 60 | UPDATE_PACKAGE "ddns-go" "sirpdboy/luci-app-ddns-go" "main" 61 | UPDATE_PACKAGE "easytier" "EasyTier/luci-app-easytier" "main" 62 | UPDATE_PACKAGE "gecoosac" "lwb1978/openwrt-gecoosac" "main" 63 | UPDATE_PACKAGE "mosdns" "sbwml/luci-app-mosdns" "v5" "" "v2dat" 64 | UPDATE_PACKAGE "netspeedtest" "sirpdboy/luci-app-netspeedtest" "js" "" "homebox speedtest" 65 | UPDATE_PACKAGE "partexp" "sirpdboy/luci-app-partexp" "main" 66 | UPDATE_PACKAGE "qbittorrent" "sbwml/luci-app-qbittorrent" "master" "" "qt6base qt6tools rblibtorrent" 67 | UPDATE_PACKAGE "qmodem" "FUjr/QModem" "main" 68 | UPDATE_PACKAGE "viking" "VIKINGYFY/packages" "main" "" "luci-app-timewol luci-app-wolplus" 69 | UPDATE_PACKAGE "vnt" "lmq8267/luci-app-vnt" "main" 70 | 71 | #更新软件包版本 72 | UPDATE_VERSION() { 73 | local PKG_NAME=$1 74 | local PKG_MARK=${2:-false} 75 | local PKG_FILES=$(find ./ ../feeds/packages/ -maxdepth 3 -type f -wholename "*/$PKG_NAME/Makefile") 76 | 77 | if [ -z "$PKG_FILES" ]; then 78 | echo "$PKG_NAME not found!" 79 | return 80 | fi 81 | 82 | echo -e "\n$PKG_NAME version update has started!" 83 | 84 | for PKG_FILE in $PKG_FILES; do 85 | local PKG_REPO=$(grep -Po "PKG_SOURCE_URL:=https://.*github.com/\K[^/]+/[^/]+(?=.*)" $PKG_FILE) 86 | local PKG_TAG=$(curl -sL "https://api.github.com/repos/$PKG_REPO/releases" | jq -r "map(select(.prerelease == $PKG_MARK)) | first | .tag_name") 87 | 88 | local OLD_VER=$(grep -Po "PKG_VERSION:=\K.*" "$PKG_FILE") 89 | local OLD_URL=$(grep -Po "PKG_SOURCE_URL:=\K.*" "$PKG_FILE") 90 | local OLD_FILE=$(grep -Po "PKG_SOURCE:=\K.*" "$PKG_FILE") 91 | local OLD_HASH=$(grep -Po "PKG_HASH:=\K.*" "$PKG_FILE") 92 | 93 | local PKG_URL=$([[ "$OLD_URL" == *"releases"* ]] && echo "${OLD_URL%/}/$OLD_FILE" || echo "${OLD_URL%/}") 94 | 95 | local NEW_VER=$(echo $PKG_TAG | sed -E 's/[^0-9]+/\./g; s/^\.|\.$//g') 96 | local NEW_URL=$(echo $PKG_URL | sed "s/\$(PKG_VERSION)/$NEW_VER/g; s/\$(PKG_NAME)/$PKG_NAME/g") 97 | local NEW_HASH=$(curl -sL "$NEW_URL" | sha256sum | cut -d ' ' -f 1) 98 | 99 | echo "old version: $OLD_VER $OLD_HASH" 100 | echo "new version: $NEW_VER $NEW_HASH" 101 | 102 | if [[ "$NEW_VER" =~ ^[0-9].* ]] && dpkg --compare-versions "$OLD_VER" lt "$NEW_VER"; then 103 | sed -i "s/PKG_VERSION:=.*/PKG_VERSION:=$NEW_VER/g" "$PKG_FILE" 104 | sed -i "s/PKG_HASH:=.*/PKG_HASH:=$NEW_HASH/g" "$PKG_FILE" 105 | echo "$PKG_FILE version has been updated!" 106 | else 107 | echo "$PKG_FILE version is already the latest!" 108 | fi 109 | done 110 | } 111 | 112 | #UPDATE_VERSION "软件包名" "测试版,true,可选,默认为否" 113 | UPDATE_VERSION "sing-box" 114 | -------------------------------------------------------------------------------- /Scripts/Settings.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #修改默认主题 4 | sed -i "s/luci-theme-bootstrap/luci-theme-$WRT_THEME/g" $(find ./feeds/luci/collections/ -type f -name "Makefile") 5 | #修改immortalwrt.lan关联IP 6 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$WRT_IP/g" $(find ./feeds/luci/modules/luci-mod-system/ -type f -name "flash.js") 7 | #添加编译日期标识 8 | sed -i "s/(\(luciversion || ''\))/(\1) + (' \/ $WRT_MARK-$WRT_DATE')/g" $(find ./feeds/luci/modules/luci-mod-status/ -type f -name "10_system.js") 9 | 10 | WIFI_FILE="./package/mtk/applications/mtwifi-cfg/files/mtwifi.sh" 11 | #修改WIFI名称 12 | sed -i "s/ImmortalWrt/$WRT_SSID/g" $WIFI_FILE 13 | #修改WIFI加密 14 | sed -i "s/encryption=.*/encryption='psk2+ccmp'/g" $WIFI_FILE 15 | #修改WIFI密码 16 | sed -i "/set wireless.default_\${dev}.encryption='psk2+ccmp'/a \\\t\t\t\t\t\set wireless.default_\${dev}.key='$WRT_WORD'" $WIFI_FILE 17 | 18 | CFG_FILE="./package/base-files/files/bin/config_generate" 19 | #修改默认IP地址 20 | sed -i "s/192\.168\.[0-9]*\.[0-9]*/$WRT_IP/g" $CFG_FILE 21 | #修改默认主机名 22 | sed -i "s/hostname='.*'/hostname='$WRT_NAME'/g" $CFG_FILE 23 | 24 | #配置文件修改 25 | echo "CONFIG_PACKAGE_luci=y" >> ./.config 26 | echo "CONFIG_LUCI_LANG_zh_Hans=y" >> ./.config 27 | echo "CONFIG_PACKAGE_luci-theme-$WRT_THEME=y" >> ./.config 28 | echo "CONFIG_PACKAGE_luci-app-$WRT_THEME-config=y" >> ./.config 29 | 30 | #手动调整的插件 31 | if [ -n "$WRT_PACKAGE" ]; then 32 | echo -e "$WRT_PACKAGE" >> ./.config 33 | fi 34 | 35 | #调整mtk系列配置 36 | sed -i '/TARGET.*mediatek/d' ./.config 37 | sed -i '/TARGET_MULTI_PROFILE/d' ./.config 38 | sed -i '/TARGET_PER_DEVICE_ROOTFS/d' ./.config 39 | sed -i '/luci-app-eqos/d' ./.config 40 | sed -i '/luci-app-mtk/d' ./.config 41 | sed -i '/luci-app-upnp/d' ./.config 42 | sed -i '/luci-app-wol/d' ./.config 43 | sed -i '/wifi-profile/d' ./.config 44 | --------------------------------------------------------------------------------