mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			tset
							parent
							
								
									d142450b5d
								
							
						
					
					
						commit
						100cbc39fe
					
				|  | @ -0,0 +1,167 @@ | |||
| name: build-338q-fpv | ||||
| on: | ||||
| # pull_request: | ||||
| #  branches: | ||||
| #    - master | ||||
| #  push: | ||||
| #    branches: | ||||
| #      - master | ||||
| 
 | ||||
| #  schedule: | ||||
| #    - cron: '0 8 * * *' | ||||
|   workflow_dispatch: | ||||
| 
 | ||||
| env: | ||||
|   TAG_NAME: openipc-ssc338q-fpv-now-webui  # 固件版本标签,默认为 'latest' | ||||
|   TG_TOKEN: ${{secrets.TELEGRAM_TOKEN_BOT_OPENIPC}}  # Telegram Bot Token,从 GitHub Secrets 中获取 | ||||
|   TG_CHANNEL: ${{secrets.TELEGRAM_CHANNEL_OPENIPC_DEV}}  # Telegram Channel,从 GitHub Secrets 中获取 | ||||
|   TG_OPTIONS: -s -o /dev/null -w %{http_code}  # Telegram 发送消息的 curl 参数 | ||||
| 
 | ||||
| jobs: | ||||
|   buildroot: | ||||
|     name: Firmware  # 构建固件的任务 | ||||
|     runs-on: ubuntu-latest  # 使用最新的 Ubuntu 环境 | ||||
| 
 | ||||
|     strategy: | ||||
|       fail-fast: false  # 设置为 false,允许多平台并行构建失败时不中断其他构建 | ||||
|       matrix: | ||||
|         include: | ||||
|           - {"platform": "ssc338q", "release": "fpvwebui"}  # 仅编译 ssc338q 平台的 fpvfpvwebui 固件 | ||||
| 
 | ||||
|     steps: | ||||
|       # 步骤 1: 检出代码 | ||||
|       - name: Checkout source | ||||
|         uses: actions/checkout@v4 | ||||
| 
 | ||||
|       # 步骤 2: 设置 ccache(用于加速编译) | ||||
|       - name: Setup ccache | ||||
|         if: github.event_name != 'pull_request'  # 非 pull_request 事件时启用缓存 | ||||
|         uses: actions/cache@v4 | ||||
|         with: | ||||
|           path: /tmp/ccache  # 设置 ccache 存放路径 | ||||
|           key: ${{matrix.platform}}_${{matrix.release}}  # 缓存的键值,使用平台和版本区分 | ||||
| 
 | ||||
|       # 步骤 3: 恢复 ccache(在 PR 事件时使用缓存) | ||||
|       - name: Restore ccache | ||||
|         if: github.event_name == 'pull_request'  # 只有在 pull_request 事件时才恢复缓存 | ||||
|         uses: actions/cache/restore@v4 | ||||
|         with: | ||||
|           path: /tmp/ccache  # 缓存路径 | ||||
|           key: ${{matrix.platform}}_${{matrix.release}}  # 缓存的键值 | ||||
| 
 | ||||
|       # 步骤 4: 下载和准备依赖文件 | ||||
|       - name: Download files | ||||
|         run: | | ||||
|           echo "8.8.8.8 invisible-mirror.net" | sudo tee -a /etc/hosts  # 添加 DNS 配置 | ||||
|           echo "8.8.8.8 distfiles.dereferenced.org" | sudo tee -a /etc/hosts  # 添加 DNS 配置 | ||||
|           make prepare  # 准备构建所需的文件 | ||||
|           git clone https://github.com/openipc/br-cache  # 克隆 br-cache 仓库 | ||||
|           ln -s ${GITHUB_WORKSPACE}/br-cache $(ls -d output/buildroot-*)/dl  # 创建软链接 | ||||
| 
 | ||||
|           #修改源码 | ||||
|           rm -rf ${GITHUB_WORKSPACE}/br-cache/msposd | ||||
|           sed -i 's|MSPOSD_SITE = $(call github,openipc,msposd,$(MSPOSD_VERSION))|MSPOSD_SITE = https://github.com/longcat99/msposd/archive/refs/heads|' ${GITHUB_WORKSPACE}/general/package/msposd/msposd.mk | ||||
|           sed -i 's|MSPOSD_VERSION = HEAD|MSPOSD_SOURCE = main.tar.gz|' ${GITHUB_WORKSPACE}/general/package/msposd/msposd.mk | ||||
|           rm -rf ${GITHUB_WORKSPACE}/br-cache/zerotier-one | ||||
|           sed -i 's|ZEROTIER_ONE_SITE = $(call github,zerotier,ZeroTierOne,$(ZEROTIER_ONE_VERSION))|ZEROTIER_ONE_SITE = https://github.com/zerotier/ZeroTierOne/archive/refs/heads|' ${GITHUB_WORKSPACE}/general/package/zerotier-one/zerotier-one.mk | ||||
|           sed -i 's|ZEROTIER_ONE_VERSION = 1.14.1|ZEROTIER_ONE_SOURCE = 1.14.2.tar.gz|' ${GITHUB_WORKSPACE}/general/package/zerotier-one/zerotier-one.mk | ||||
|           make BOARD=${{matrix.platform}}_${{matrix.release}} br-source  # 获取构建源文件 | ||||
| 
 | ||||
|       # 步骤 5: 编译固件 | ||||
|       - name: Build firmware | ||||
|         run: | | ||||
|           export GIT_HASH=$(git rev-parse --short ${GITHUB_SHA})  # 获取当前 Git 提交的短 hash | ||||
|           export GIT_BRANCH=${GITHUB_REF_NAME}  # 获取当前分支名称 | ||||
|           echo GIT_HASH=${GIT_HASH} >> ${GITHUB_ENV}  # 将 Git hash 写入环境变量 | ||||
|           echo GIT_BRANCH=${GIT_BRANCH} >> ${GITHUB_ENV}  # 将 Git 分支写入环境变量 | ||||
| 
 | ||||
|           mkdir -p /tmp/ccache  # 创建 ccache 缓存目录 | ||||
|           ln -s /tmp/ccache ${HOME}/.ccache  # 将缓存目录链接到用户的 ccache 配置目录 | ||||
|           make BOARD=${{matrix.platform}}_${{matrix.release}} all  # 编译固件 | ||||
| 
 | ||||
|           TIME=$(date -d @${SECONDS} +%M:%S)  # 计算编译时间 | ||||
|           echo TIME=${TIME} >> ${GITHUB_ENV}  # 将编译时间写入环境变量 | ||||
| 
 | ||||
|           # 设置固件路径 | ||||
|           NORFW=${GITHUB_WORKSPACE}/output/images/openipc.${{matrix.platform}}-nor-${{matrix.release}}.tgz | ||||
|           if [ -e ${NORFW} ]; then | ||||
|             echo NORFW=${NORFW} >> ${GITHUB_ENV} | ||||
|           fi | ||||
| 
 | ||||
|           NANDFW=${GITHUB_WORKSPACE}/output/images/openipc.${{matrix.platform}}-nand-${{matrix.release}}.tgz | ||||
|           if [ -e ${NANDFW} ]; then | ||||
|             echo NANDFW=${NANDFW} >> ${GITHUB_ENV} | ||||
|           fi | ||||
|            | ||||
|           UIMAGE=${GITHUB_WORKSPACE}/output/images/uImage.ssc338 | ||||
|           if [ -e ${UIMAGE} ]; then | ||||
|             echo UIMAGE=${UIMAGE} >> ${GITHUB_ENV} | ||||
|           fi | ||||
|            | ||||
|           ROOTFS=${GITHUB_WORKSPACE}/output/images/rootfs.squashfs.ssc338q | ||||
|           if [ -e ${ROOTFS} ]; then | ||||
|             echo ROOTFS=${ROOTFS} >> ${GITHUB_ENV} | ||||
|           fi | ||||
| 
 | ||||
|       # 步骤6  列出 output/images 目录的内容 | ||||
|       - name: ls tar | ||||
|         run: | | ||||
|           echo "Listing output/images contents:" | ||||
|           ls -lh ${GITHUB_WORKSPACE}/output/images/ | ||||
|           # 定义 TAR 文件路径 | ||||
|           TAR_FILE=${GITHUB_WORKSPACE}/output/images/longcat-openipc.${{matrix.platform}}-${{matrix.release}}.tgz | ||||
|           # 创建临时目录并复制所有文件 | ||||
|           TEMP_DIR=$(mktemp -d) | ||||
|           cp -r ${GITHUB_WORKSPACE}/output/images/* ${TEMP_DIR} | ||||
|           # 在临时目录中执行打包 | ||||
|           tar -czvf ${TAR_FILE} -C ${TEMP_DIR} . | ||||
|           # 清理临时目录 | ||||
|           rm -rf ${TEMP_DIR} | ||||
|           # 设置打包后的路径 | ||||
|           echo TAR_FILE=${TAR_FILE} >> ${GITHUB_ENV} | ||||
| 
 | ||||
| 
 | ||||
|        | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|       # 步骤 7: 上传固件 | ||||
|       - name: Upload firmware | ||||
|       #  if: github.event_name != 'pull_request'  # 仅在 push 事件时上传 | ||||
|         uses: softprops/action-gh-release@v2  # 使用 GitHub Actions 的 release 上传插件 | ||||
|         with: | ||||
|           tag_name: ${{env.TAG_NAME}}  # 使用定义的 TAG_NAME(默认为 latest) | ||||
|           files: | | ||||
|             ${{env.NORFW}} | ||||
|             ${{env.NANDFW}} | ||||
|             ${{env.UIMAGE}} | ||||
|             ${{env.ROOTFS}} | ||||
|             ${{env.TAR_FILE}} | ||||
|              | ||||
|        # 上传固件到github         | ||||
|       - name: Upload firmware github | ||||
|         uses: actions/upload-artifact@v4 | ||||
|         with: | ||||
|           name: openipc-ssc338q-fpv | ||||
|           path: "${{ github.workspace }}/output/images/"          | ||||
|              | ||||
|       # 步骤 8: 发送 Telegram 通知 | ||||
|       - name: Send binary | ||||
|         if: github.event_name != 'pull_request' && env.NORFW  # 仅在 push 且存在 NORFW 文件时发送通知 | ||||
|         run: | | ||||
|           TG_MSG="Commit: ${GIT_HASH}\nBranch: ${GIT_BRANCH}\nTag: ${TAG_NAME}\nTime: ${TIME}\n\n"  # 设置 Telegram 消息内容 | ||||
|           TG_ICON="\xE2\x9C\x85 GitHub Actions"  # 设置消息图标 | ||||
|           TG_HEADER=$(echo -e ${TG_MSG}${TG_ICON})  # 拼接消息内容和图标 | ||||
|           HTTP=$(curl ${TG_OPTIONS} -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot${TG_TOKEN}/sendDocument -F chat_id=${TG_CHANNEL} -F caption="${TG_HEADER}" -F document=@${NORFW})  # 发送到 Telegram | ||||
|           echo Telegram response: ${HTTP}  # 输出 Telegram 响应信息 | ||||
| 
 | ||||
|       # 步骤 9: 发送错误通知 | ||||
|       - name: Send error | ||||
|         if: github.event_name != 'pull_request' && failure()  # 仅在构建失败时发送错误通知 | ||||
|         run: | | ||||
|           TG_WARN="Error: ${{matrix.platform}}_${{matrix.release}}\n"  # 错误提示 | ||||
|           TG_MSG="Commit: ${GIT_HASH}\nBranch: ${GIT_BRANCH}\nTag: ${TAG_NAME}\n\n"  # 错误消息内容 | ||||
|           TG_ICON="\xE2\x9A\xA0 GitHub Actions"  # 错误消息图标 | ||||
|           TG_HEADER=$(echo -e ${TG_WARN}${TG_MSG}${TG_ICON})  # 拼接错误消息 | ||||
|           HTTP=$(curl ${TG_OPTIONS} -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot${TG_TOKEN}/sendMessage -F chat_id=${TG_CHANNEL} -F text="${TG_HEADER}")  # 发送到 Telegram | ||||
|           echo Telegram response: ${HTTP}  # 输出 Telegram 响应信息 | ||||
|  | @ -0,0 +1,101 @@ | |||
| # Architecture | ||||
| BR2_arm=y | ||||
| BR2_cortex_a7=y | ||||
| BR2_ARM_FPU_NEON_VFPV4=y | ||||
| BR2_ARM_INSTRUCTIONS_THUMB2=y | ||||
| 
 | ||||
| # Toolchain | ||||
| BR2_TOOLCHAIN_EXTERNAL=y | ||||
| BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y | ||||
| BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y | ||||
| BR2_TOOLCHAIN_EXTERNAL_URL="https://github.com/openipc/firmware/releases/download/$(OPENIPC_TOOLCHAIN).tgz" | ||||
| BR2_TOOLCHAIN_EXTERNAL_CUSTOM_PREFIX="arm-openipc-linux-gnueabihf" | ||||
| BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_9=y | ||||
| BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y | ||||
| # BR2_TOOLCHAIN_EXTERNAL_INET_RPC is not set | ||||
| BR2_TOOLCHAIN_EXTERNAL_CXX=y | ||||
| 
 | ||||
| # Kernel | ||||
| BR2_LINUX_KERNEL=y | ||||
| BR2_LINUX_KERNEL_CUSTOM_TARBALL=y | ||||
| #BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/openipc/linux/archive/$(OPENIPC_KERNEL).tar.gz" | ||||
| BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="https://github.com/longcat99/linux/archive/$(OPENIPC_KERNEL).tar.gz" | ||||
| BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y | ||||
| BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(EXTERNAL_VENDOR)/board/$(OPENIPC_SOC_FAMILY)/infinity6e-ssc012b.config" | ||||
| BR2_LINUX_KERNEL_UIMAGE=y | ||||
| BR2_LINUX_KERNEL_XZ=y | ||||
| 
 | ||||
| # Filesystem | ||||
| BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL)/package/busybox/busybox.config" | ||||
| BR2_PACKAGE_EXFATPROGS=y | ||||
| BR2_PACKAGE_UBOOT_TOOLS=y | ||||
| BR2_PACKAGE_ZLIB=y | ||||
| # BR2_PACKAGE_IFUPDOWN_SCRIPTS is not set | ||||
| BR2_PACKAGE_WIRELESS_TOOLS=y | ||||
| BR2_TARGET_ROOTFS_CPIO=y | ||||
| BR2_TARGET_ROOTFS_SQUASHFS=y | ||||
| BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y | ||||
| BR2_TARGET_ROOTFS_UBI=y | ||||
| BR2_TARGET_ROOTFS_UBI_SUBSIZE=2048 | ||||
| BR2_TARGET_ROOTFS_UBI_USE_CUSTOM_CONFIG=y | ||||
| BR2_TARGET_ROOTFS_UBI_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL)/scripts/ubifs/ubinize_sigmastar.cfg" | ||||
| BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x1f000 | ||||
| 
 | ||||
| # OpenIPC | ||||
| BR2_OPENIPC_SOC_VENDOR="sigmastar" | ||||
| BR2_OPENIPC_SOC_MODEL="ssc338q" | ||||
| BR2_OPENIPC_SOC_FAMILY="infinity6e" | ||||
| BR2_OPENIPC_VARIANT="fpv" | ||||
| BR2_OPENIPC_FLASH_SIZE="16" | ||||
| 
 | ||||
| # Packages | ||||
| BR2_PACKAGE_DROPBEAR_OPENIPC=y | ||||
| BR2_PACKAGE_EXFAT_OPENIPC=y | ||||
| BR2_PACKAGE_IPCTOOL=y | ||||
| BR2_PACKAGE_JSONFILTER=y | ||||
| BR2_PACKAGE_LIBCURL_OPENIPC=y | ||||
| BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y | ||||
| # BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set | ||||
| # BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set | ||||
| # BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set | ||||
| BR2_PACKAGE_LIBOGG_OPENIPC=y | ||||
| BR2_PACKAGE_MAJESTIC_FONTS=y | ||||
| #BR2_PACKAGE_WEBUI=y | ||||
| BR2_PACKAGE_MAJESTIC_WEBUI=y | ||||
| BR2_PACKAGE_MAJESTIC=y | ||||
| BR2_PACKAGE_MAVFWD=y | ||||
| BR2_PACKAGE_MAVLINK_ROUTER=y | ||||
| BR2_PACKAGE_MBEDTLS_OPENIPC=y | ||||
| BR2_PACKAGE_MSPOSD=y | ||||
| BR2_PACKAGE_OPUS_OPENIPC=y | ||||
| BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y | ||||
| BR2_PACKAGE_RTL88X2EU_OPENIPC=y | ||||
| BR2_PACKAGE_RTL8812AU_OPENIPC=y | ||||
| BR2_PACKAGE_SIGMASTAR_OSDRV_INFINITY6E=y | ||||
| BR2_PACKAGE_VTUND_OPENIPC=y | ||||
| #BR2_PACKAGE_WIFIBROADCAST=y | ||||
| BR2_PACKAGE_YAML_CLI=y | ||||
| BR2_PACKAGE_ZEROTIER_ONE=y | ||||
| BR2_PACKAGE_SOCAT=y | ||||
| BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y | ||||
| BR2_PACKAGE_WIREGUARD_TOOLS=y | ||||
| #BR2_PACKAGE_AWS_WEBRTC=y | ||||
| BR2_PACKAGE_GESFTPSERVER=y | ||||
| #BR2_PACKAGE_GO2RTC=y | ||||
| BR2_PACKAGE_LIBWEBSOCKETS_OPENIPC=y | ||||
| BR2_PACKAGE_ZEROTIER_ONE=y | ||||
| #BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING_OPENIPC=y | ||||
| BR2_PACKAGE_EXFAT_UTILS=y | ||||
| BR2_PACKAGE_NTFS_3G=y | ||||
| #BR2_PACKAGE_USDPSPLITTER=y | ||||
| #BR2_PACKAGE_LIBFUSE=y | ||||
| BR2_PACKAGE_LIBFUSE3=y | ||||
| BR2_PACKAGE_MOSQUITTO=y | ||||
| BR2_PACKAGE_SCREEN=y | ||||
| BR2_PACKAGE_DATALINK=y | ||||
| BR2_PACKAGE_LIBPCAP=y | ||||
| BR2_PACKAGE_LIBSODIUM=y | ||||
| BR2_PACKAGE_WIFIBROADCAST_NG=y | ||||
| 
 | ||||
| #BR2_PACKAGE_UTIL_LINUX=y | ||||
| #BR2_PACKAGE_UTIL_LINUX_BINARIES=y | ||||
		Loading…
	
		Reference in New Issue