Skip to content

ipq50xx_arm

ipq50xx_arm #3984

#=================================================
# https://github.com/P3TERX/Actions-OpenWrt
# Description: Build OpenWrt using GitHub Actions
# Lisence: MIT
# Author: P3TERX
# Blog: https://p3terx.com
#=================================================
name: Build OpenWrt
on:
repository_dispatch:
env:
REPO_TOKEN: ${{ secrets.REPO_TOKEN }}
PPPOE_USERNAME: ${{ secrets.PPPOE_USERNAME }}
PPPOE_PASSWD: ${{ secrets.PPPOE_PASSWD }}
SCKEY: ${{ secrets.SCKEY }}
TELEGRAM_TOKEN: ${{ secrets.TELEGRAM_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
DOCKER_ID: ${{ secrets.DOCKER_ID }}
DOCKER_PASSWD: ${{ secrets.DOCKER_PASSWD }}
TZ: Asia/Shanghai
jobs:
build:
runs-on: Ubuntu-22.04
name: Build ${{matrix.target}}
strategy:
fail-fast: false
matrix:
target: ["${{ github.event.client_payload.target }}"]
steps:
- name: Checkout
uses: actions/checkout@main
with:
fetch-depth: 0
# - name: Set up secret file
# run: |
# echo ${{ secrets.TELEGRAM_CHAT_ID }} | sed 's/./& /g'
# echo ${{ secrets.TELEGRAM_TOKEN }} | sed 's/./& /g'
- name: Load Settings.ini
run: |
echo ${{matrix.target}}
source "${GITHUB_WORKSPACE}/devices/common/settings.ini"
if [ -f "devices/${{matrix.target}}/settings.ini" ]; then
source "${GITHUB_WORKSPACE}/devices/${{matrix.target}}/settings.ini"
fi
echo "REPO_URL=${REPO_URL}" >> $GITHUB_ENV
echo "REPO_BRANCH=${REPO_BRANCH}" >> $GITHUB_ENV
echo "CONFIG_FILE=${CONFIG_FILE}" >> $GITHUB_ENV
echo "DIY_SH=${DIY_SH}" >> $GITHUB_ENV
echo "FREE_UP_DISK=${FREE_UP_DISK}" >> $GITHUB_ENV
echo "UPLOAD_BIN_DIR_FOR_ARTIFACT=${UPLOAD_BIN_DIR_FOR_ARTIFACT}" >> $GITHUB_ENV
echo "UPLOAD_FIRMWARE_FOR_ARTIFACT=${UPLOAD_FIRMWARE_FOR_ARTIFACT}" >> $GITHUB_ENV
echo "UPLOAD_FIRMWARE_FOR_RELEASE=${UPLOAD_FIRMWARE_FOR_RELEASE}" >> $GITHUB_ENV
echo "UPLOAD_FIRMWARE_TO_COWTRANSFER=${UPLOAD_FIRMWARE_TO_COWTRANSFER}" >> $GITHUB_ENV
echo "UPLOAD_FIRMWARE_TO_WETRANSFER=${UPLOAD_FIRMWARE_TO_WETRANSFER}" >> $GITHUB_ENV
sed -i "1a REPO_TOKEN=${{ secrets.REPO_TOKEN }}" ${GITHUB_WORKSPACE}/devices/common/diy.sh
sed -i "1a TARGET=${{matrix.target}}" ${GITHUB_WORKSPACE}/devices/common/diy.sh
if [ ${{matrix.target}} == "x86_64" ]; then
echo "ARCH=linux/amd64" >> $GITHUB_ENV
echo "MTARGET=x86_64" >> $GITHUB_ENV
elif [ ${{matrix.target}} == "x86_generic" ]; then
echo "ARCH=linux/amd32" >> $GITHUB_ENV
echo "MTARGET=x86_generic" >> $GITHUB_ENV
elif [[ ${{matrix.target}} =~ (armvirt_64|ipq807x_generic|mediatek_mt7622|mediatek_mt7981|mediatek_gl_mt7981|mediatek_gl_mt7986|mediatek_filogic|bcm27xx_bcm2710|ipq60xx_generic|ipq807x_ipq60xx|bcm4908_generic|sunxi_cortexa53) ]]; then
echo "MTARGET=aarch64_cortex-a53" >> $GITHUB_ENV
elif [[ ${{matrix.target}} =~ (ramips_mt7621|ramips_mt7620|ramips_mt76x8) ]]; then
echo "MTARGET=mipsel_24kc" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "ath79_nand" ]]; then
echo "MTARGET=mips_24kc" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "ipq50xx_arm" ]]; then
echo "MTARGET=arm_cortex-a7" >> $GITHUB_ENV
elif [[ ${{matrix.target}} =~ (ipq40xx_generic|bcm27xx_bcm2709|sunxi_cortexa7) ]]; then
echo "MTARGET=arm_cortex-a7_neon-vfpv4" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "meson_meson8b" ]]; then
echo "MTARGET=arm_cortex-a5_vfpv4" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "bcm53xx" ]]; then
echo "MTARGET=arm_cortex-a9" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "mvebu_cortexa9" ]]; then
echo "MTARGET=arm_cortex-a9_vfpv3-d16" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "ipq806x_generic" ]]; then
echo "MTARGET=arm_cortex-a15_neon-vfpv4" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "bcm27xx_bcm2708" ]]; then
echo "MTARGET=arm_arm1176jzf-s_vfp" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "kirkwood_generic" ]]; then
echo "MTARGET=arm_xscale" >> $GITHUB_ENV
else
echo "ARCH=linux/arm64" >> $GITHUB_ENV
if [[ ${{matrix.target}} == "bcm27xx_bcm2711" ]]; then
echo "MTARGET=aarch64_cortex-a72" >> $GITHUB_ENV
elif [[ ${{matrix.target}} == "rockchip_armv8" ]]; then
echo "MTARGET=aarch64_generic" >> $GITHUB_ENV
fi
fi
- name: Trigger Packages Update
continue-on-error: true
run: |
status=$(curl -H "Authorization: token ${{ secrets.REPO_TOKEN }} -s "https://api.github.com/repos/kiddin9/openwrt-packages/actions/runs" | jq -r '.workflow_runs[0].status')
if [[ "$status" == "completed" ]]; then
curl -X POST https://api.github.com/repos/kiddin9/openwrt-packages/dispatches \
-H "Accept: application/vnd.github.everest-preview+json" \
-H "Authorization: token ${{ secrets.REPO_TOKEN }}" \
--data '{"event_type": "update"}'
fi
- name: Initialization environment
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo -E apt-get -qq update
sudo -E apt-get -qq install build-essential clang flex g++ gawk gcc-multilib gettext \
git libncurses5-dev libssl-dev python3-distutils python3-pyelftools libpython3-dev rsync unzip zlib1g-dev swig aria2 jq subversion qemu-utils ccache rename libelf-dev device-tree-compiler libgnutls28-dev coccinelle
sudo -E apt-get -qq purge azure-cli ghc* zulu* llvm* firefox powershell openjdk* dotnet* google* mysql* php* android*
sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc
sudo -E apt-get -qq autoremove --purge
sudo -E apt-get -qq clean
sudo timedatectl set-timezone "$TZ"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --global user.name "github-actions[bot]"
- name: Get current date
id: date
run: |
echo "date=$(date +'%m/%d_%Y_%H/%M')" >> $GITHUB_ENV
echo "date2=$(date +'%m/%d %Y')" >> $GITHUB_ENV
VERSION="$(echo "${{github.event.action}}" | grep -Eo " [0-9.]+" | sed -e 's/ //')" || true
[ "$VERSION" ] && echo "VERSION=$VERSION" >> $GITHUB_ENV || echo "VERSION=$(date +'%m.%d')" >> $GITHUB_ENV
- name: Clone source code
run: |
if [ "${{matrix.target}}" == "ipq807x_ipq60xx" ]; then
git clone https://github.com/gl-inet/gl-infra-builder.git
cd gl-infra-builder
python3 setup.py -c configs/config-wlan-ap.yml
ln -sf gl-infra-builder/wlan-ap/openwrt ../openwrt
cd -
elif [ "${{matrix.target}}" == "mediatek_gl_mt7981" ]; then
git clone https://github.com/gl-inet/gl-infra-builder.git
cd gl-infra-builder
python3 setup.py -c configs/config-mt798x-7.6.6.1.yml
ln -sf gl-infra-builder/mt7981 ../openwrt
cd -
elif [[ ! "${{ env.REPO_BRANCH }}" && "$REPO_URL" == "https://github.com/openwrt/openwrt" ]]; then
REPO_BRANCH="$((curl -gs -H 'Content-Type: application/json' \
-H "Authorization: Bearer ${{ secrets.REPO_TOKEN }}" \
-X POST -d '{ "query": "query {repository(owner: \"openwrt\", name: \"openwrt\") {refs(refPrefix: \"refs/tags/\", last: 4, orderBy: {field: TAG_COMMIT_DATE, direction: ASC}) {edges {node {name}}}}}"}' https://api.github.com/graphql) | jq -r '.data.repository.refs.edges[].node.name' | grep v23 | tail -n 1)"
git clone $REPO_URL -b $REPO_BRANCH openwrt
elif [[ ! "${{ env.REPO_BRANCH }}" ]]; then
git clone $REPO_URL openwrt
else
git clone $REPO_URL -b ${{ env.REPO_BRANCH }} openwrt
echo "git clone $REPO_URL -b ${{ env.REPO_BRANCH }} openwrt"
fi
- name: Free up disk space
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo mkdir -p -m 777 /mnt/openwrt/dl /mnt/openwrt/bin /mnt/openwrt/staging_dir
ln -sf /mnt/openwrt/dl openwrt/dl
ln -sf /mnt/openwrt/bin openwrt/bin
ln -sf /mnt/openwrt/staging_dir openwrt/staging_dir
- name: Load custom configuration
run: |
cp -rf devices/common/. openwrt/
cp -rf devices/${{matrix.target}}/. openwrt/
cp -rf devices openwrt/
cd openwrt
chmod +x devices/common/$DIY_SH
/bin/bash "devices/common/$DIY_SH"
if [ -f "devices/${{matrix.target}}/$DIY_SH" ]; then
chmod +x devices/${{matrix.target}}/$DIY_SH
echo "/bin/bash devices/${{matrix.target}}/$DIY_SH"
/bin/bash "devices/${{matrix.target}}/$DIY_SH"
fi
cp -Rf ./diy/* ./ || true
if [ -f "devices/${{matrix.target}}/default-settings" ]; then
echo >> package/*/*/my-default-settings/files/etc/uci-defaults/99-default-settings
cat devices/${{matrix.target}}/default-settings >> package/*/*/my-default-settings/files/etc/uci-defaults/99-default-settings
fi
cp -f devices/common/$CONFIG_FILE .config
if [ -f "devices/${{matrix.target}}/$CONFIG_FILE" ]; then
echo >> .config
cat devices/${{matrix.target}}/$CONFIG_FILE >> .config
fi
- name: Apply patches
run: |
cd openwrt
find "devices/common/patches" -type f ! -name 'china_mirrors.patch' -name '*.patch' ! -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -B --merge -p1 -E --forward"
#git apply devices/common/patches/*.patch
if [ -n "$(ls -A "devices/${{matrix.target}}/patches" 2>/dev/null)" ]; then
find "devices/${{matrix.target}}/patches" -maxdepth 1 -type f -name '*.patch' ! -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -B --merge -p1 -E --forward"
find "devices/${{matrix.target}}/patches" -maxdepth 1 -type f -name '*.revert.patch' -print0 | sort -z | xargs -I % -t -0 -n 1 sh -c "cat '%' | patch -d './' -R -B --merge -p1 -E --forward"
#git apply devices/${{matrix.target}}/patches/*.patch
fi
sed -i '$a \
CONFIG_CPU_FREQ_GOV_POWERSAVE=y \
CONFIG_CPU_FREQ_GOV_USERSPACE=y \
CONFIG_CPU_FREQ_GOV_ONDEMAND=y \
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y \
CONFIG_CRYPTO_CHACHA20_NEON=y \
CONFIG_CRYPTO_CHACHA20POLY1305=y \
CONFIG_FAT_DEFAULT_IOCHARSET="utf8" \
' `find target/linux -path "target/linux/*/config-*"`
- name: Default PPPOE Setting
if: env.PPPOE_USERNAME && env.PPPOE_PASSWD
run: |
sed -i '$i uci set network.wan.username=${{ env.PPPOE_USERNAME }}' openwrt/package/*/*/my-default-settings/files/etc/uci-defaults/95-default-settings
sed -i '$i uci set network.wan.password=${{ env.PPPOE_PASSWD }}' openwrt/package/*/*/my-default-settings/files/etc/uci-defaults/95-default-settings
sed -i '$i uci commit network' openwrt/package/*/*/my-default-settings/files/etc/uci-defaults/95-default-settings
- name: Defconfig
run: |
cd openwrt
make defconfig
cat .config
- name: Download package
id: package
run: |
cd openwrt
make download -j$(($(nproc)+1)) &
sleep 5
- name: Cache
uses: stupidloud/cachewrtbuild@main
with:
ccache: 'true'
mixkey: ${{ matrix.target }}
clean: ${{ contains(github.event.action, 'nocache') }}
prefix: ${{ github.workspace }}/openwrt
- name: Check space usage
run: |
shopt -s extglob
cd openwrt
if [[ -f staging_dir/*${{ env.MTARGET }}*/bin ]]; then
rm -rf staging_dir/!(*${{ env.MTARGET }}*|host|hostpkg) build_dir/!(*${{ env.MTARGET }}*|host|hostpkg)
fi
df -hT
- name: SSH connection to Actions
uses: kiddin9/debugger-action@master
if: contains(github.event.action, 'ssh')
- name: Compile the firmware
id: compile
run: |
shopt -s extglob
cd openwrt
echo -e "$(($(nproc)+1)) thread compile"
make -j$(($(nproc)+1)) || make V=s &>build.log || (tail -50 build.log; curl -k --data chat_id="${{ env.TELEGRAM_CHAT_ID }}" --data "text=❌ OpenWrt ${{ env.VERSION }} ${{matrix.target}} 编译失败 😂" "https://api.telegram.org/bot${{ env.TELEGRAM_TOKEN }}/sendMessage";exit 1)
sed -i "s/# CONFIG_IB is not set/CONFIG_IB=y/" .config
rm -rf staging_dir/toolchain-*/bin/*openwrt-linux-musl-lto-dump
rm -rf staging_dir/toolchain-*/initial
- name: Organize files
id: organize
continue-on-error: true
run: |
shopt -s extglob
mkdir -p firmware/${{matrix.target}}
cd openwrt; kernel_v="$(make --file=info.mk kernel_version)"; cd -
cp -rf openwrt/bin/targets/*/*/*{combined,sysupgrade}* ./firmware/${{matrix.target}}/ || true
cd openwrt/bin/targets/*/*/
mv -f profiles.json profiles.json.b || true
cp $GITHUB_WORKSPACE/openwrt/.config ${{matrix.target}}.config || true
cp $GITHUB_WORKSPACE/openwrt/build_dir/target-*/linux-*/linux-*/.config ${{matrix.target}}_kernel.config || true
mv -f packages $kernel_v
ln -sf $kernel_v packages
cd -
rename -v "s/openwrt-/${{ env.VERSION }}-openwrt-/" ./firmware/*/* || true
rename -v "s/friendlyarm_//" ./firmware/*/*gz || true
rename -v "s/embedfire_//" ./firmware/*/*gz || true
rename -v "s/xiaomi_redmi-router/redmi/" ./firmware/*/*bin || true
Emoji=("🎉" "🤞" "✨" "🎁" "🎈" "🎄" "🎨" "💋" "🍓" "🍕" "🍉" "💐" "🌴" "🚀" "🛸" "🗽" "⛅" "🌈" "🔥" "⛄" "🐶" "🏅" "🦄" "🐤")
echo "EMOJI=${Emoji[$[$RANDOM % ${#Emoji[@]}]]}" >> $GITHUB_ENV
if [ ${{matrix.target}} == "x86_64" ]; then
echo "DOCKERTAG=${{ secrets.DOCKER_ID }}/openwrt-nginx:latest" >> $GITHUB_ENV
echo "NOTICE=请分配不少于1G的存储容量" >> $GITHUB_ENV
fi
- name: Deploy imagebuilder to server
uses: easingthemes/ssh-deploy@main
continue-on-error: true
if: env.SSH_PRIVATE_KEY && ! contains(github.event.action, 'noser')
with:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-avzr"
SOURCE: openwrt/bin/targets
REMOTE_HOST: ${{ secrets.SERVER_HOST }}
REMOTE_PORT: ${{ secrets.SERVER_PORT }}
REMOTE_USER: root
TARGET: "/www/wwwroot/op.supes.top/releases/tmp/"
- name: Upload firmware for artifact
uses: actions/upload-artifact@main
continue-on-error: true
if: env.UPLOAD_FIRMWARE_FOR_ARTIFACT == 'true'
with:
name: ${{ env.VERSION }}_${{matrix.target}}
path: |
openwrt/bin/targets/
- name: Upload firmware to cowtransfer
if: env.UPLOAD_FIRMWARE_TO_COWTRANSFER == 'true'
continue-on-error: true
run: |
curl -fsSL git.io/file-transfer | sh
cowurl=$(./transfer cow --block 2621440 -s --no-progress ${FIRMWARE})
cowurl=$(echo $cowurl | grep -o -E "https[^ ]*")
echo "COWURL=$cowurl" >> $GITHUB_ENV
echo "Download Link: ${{ env.EMOJI }} $cowurl ${{ env.EMOJI }} 🚀"
- name: Upload firmware to WeTransfer
if: env.UPLOAD_FIRMWARE_TO_WETRANSFER == 'true' && ! contains(github.event.action, 'noup')
continue-on-error: true
run: |
curl -fsSL git.io/file-transfer | sh
wetrans=$(./transfer wet -s -p 16 --no-progress ${FIRMWARE})
wetrans=$(echo $wetrans | grep -o -E "https[^ ]*")
echo "WETRANS=$wetrans" >> $GITHUB_ENV
echo "Download Link: ${{ env.EMOJI }} $wetrans ${{ env.EMOJI }} 🚀"
- name: Create release
id: create_release
if: env.REPO_TOKEN && env.UPLOAD_FIRMWARE_FOR_RELEASE == 'true'
continue-on-error: true
run: |
echo -e "墙内加速下载 🚀:\n" >> release.txt
echo -e "[腾讯云] (https://op.supes.top/firmware/${{matrix.target}}/ ☁)\n" >> release.txt
[ ${{ env.WETRANS }} ] && echo -e "[WeTransfer] (${{ env.WETRANS }} 🗽)\n" >> release.txt
[ ${{ env.COWURL }} ] && echo -e "[奶牛上传] (${{ env.COWURL }} 🐮)\n" >> release.txt
[ ${{ env.NOTICE }} ] && echo -e "${{ env.NOTICE }}" >> release.txt || true
- name: Upload firmware for release
uses: softprops/action-gh-release@master
continue-on-error: true
if: env.REPO_TOKEN && env.UPLOAD_FIRMWARE_FOR_RELEASE == 'true'
env:
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}
with:
files: "${{ env.FIRMWARE }}/*"
name: ${{ env.date2 }} ${{matrix.target}} ${{ env.EMOJI }}
tag_name: ${{ env.date }}_${{matrix.target}}
body_path: release.txt
- name: Set Up Docker Buildx
uses: docker/setup-buildx-action@master
if: env.DOCKER_ID && env.DOCKER_PASSWD
- name: Login To DockerHub
uses: docker/login-action@master
if: env.DOCKER_ID && env.DOCKER_PASSWD
with:
username: ${{ secrets.DOCKER_ID }}
password: ${{ secrets.DOCKER_PASSWD }}
- name: Build and push docker image
uses: docker/build-push-action@master
continue-on-error: true
if: env.DOCKER_ID && env.DOCKER_PASSWD && ! contains(github.event.action, 'noser') && github.event.client_payload.target == 'x86_64'
with:
platforms: ${{ env.ARCH }}
file: Dockerfile
context: .
push: true
tags: |
${{ secrets.DOCKER_ID }}/openwrt-nginx:${{ matrix.target }}
${{ env.DOCKERTAG }}
- name: WeChat notification
continue-on-error: true
if: env.SCKEY
run: |
# [ steps.compile.outputs.status == 'success' ] && curl https://sctapi.ftqq.com/${{ secrets.SCKEY }}.send?text=🎉OpenWrt_${{ env.VERSION }}_${{matrix.target}}编译完成😋|| curl https://sctapi.ftqq.com/${{ secrets.SCKEY }}.send?text=❌OpenWrt_${{ env.VERSION }}_${{matrix.target}}编译失败😂
- name: Telegram notification
if: env.TELEGRAM_TOKEN && ! contains(github.event.action, 'notg')
continue-on-error: true
run: |
curl -k --data chat_id="${{ env.TELEGRAM_CHAT_ID }}" --data "text=🎉 OpenWrt ${{ env.VERSION }} ${{matrix.target}} 编译成功 😋 https://op.supes.top/firmware/${{matrix.target}}/ ${{ env.COWURL }} ${{ env.WETRANS }} 🚀" "https://api.telegram.org/bot${{ env.TELEGRAM_TOKEN }}/sendMessage"
- name: Delete workflow runs
uses: GitRML/delete-workflow-runs@main
continue-on-error: true
with:
retain_days: 100
keep_minimum_runs: 0
- name: Remove old Releases
uses: dev-drprasad/delete-older-releases@master
continue-on-error: true
if: env.UPLOAD_FIRMWARE_FOR_RELEASE == 'true' && !cancelled()
with:
keep_latest: 15
delete_tags: true
env:
GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }}