name: Build on: schedule: - cron: '0 3 * * *' workflow_dispatch: inputs: platform: description: Platform required: false env: TAG_NAME: latest jobs: buildroot: name: Firmware runs-on: ubuntu-latest strategy: fail-fast: false matrix: platform: - gk7202v300_lite_cootli_camv0103 - gk7202v300_lite_xg521 - gk7205v200_lite_vixand-ipc-1 - gk7205v200_lite_vixand-iph-5-4g - gk7205v210_lite_vixand-ivg-g3s - gk7205v210_lite_vixand-ivg-g4f-a - gk7205v210_lite_vixand-ivg-g4f-a-w - gk7205v300_lite_vixand-ivg-g6s-w - hi3516cv200_lite_trassir-tr-d4121ir1-v2 - hi3518ev200_lite_smartwares-cip-37210 - hi3518ev200_lite_switcam-hs303 - hi3518ev200_lite_switcam-hs303-v2 - hi3518ev200_lite_vstarcam-c8892wip - hi3518ev200_lite_qtech-qvc-ipc-136w - hi3518ev300_lite_bathhouse - hi3518ev300_lite_xiaomi-mjsxj02hl - hi3518ev200_ultimate_lenovo-snowman-1080p - ssc30kd_lite_chinatelecom-ds-ytj5301 - ssc325_lite_imilab-ec3-cmsxj25a - ssc325_lite_tp-link-tapo-c310-v1 - ssc325_lite_trassir-tr-w2c1-v1 - ssc325de_lite_imou-c22ep-s2 - ssc333_lite_meari-speed-6s - ssc333_lite_tp-link-tapo-c110-v2 - ssc333_lite_babysense-see-hd-ip206 - ssc333_lite_vstarcam-c43s_b - ssc335_lite_tp-link-tapo-c110-v1 - ssc335_lite_trassir-tr-w2c1-v2 - ssc335de_lite_imou-c22e-s2-v2 - ssc335de_lite_uniview-c1l-2wn-g - ssc337_lite_h3c-tc2101 - ssc337_lite_tp-link-tapo-c110-v1 - ssc337de_ultimate_foscam-x5 - ssc338q_fpv_emax-wyvern-link - ssc338q_fpv_openipc-urllc-aio - ssc338q_fpv_openipc-mario-aio - ssc338q_fpv_runcam-wifilink - t10_lite_hb-wifi-z6 - t10_lite_jvs-ingt10-gqs60ep - t20_ultimate_azarton-c1 - t20_lite_ec37-t11 - t31_lite_vstarcam-cs55 - t21_lite_chinamobile-hdc-51-a5-v12 - t21_lite_smartwares-cip-37210at - t21_lite_xyx-06s - t21_lite_wansview-q5-1080p - t31_lite_wansview-q5-2k - t31_lite_aoni-ep01j05 - t31_lite_chinamobile-hdc-51-a6-v11 - t31_lite_chinatelecom-y4h-50 - t31_lite_wyze-v3b - t31_lite_xiaomi-mjsxj03hl - t31_lite_xiaomi-mjsxj03hl-jxq03 - t31_lite_tuya-gv7630-t31-ptz - t31_ultimate_azarton-c1-t31x - t31_ultimate_gcraftsman-gca50 - t31_lite_zte-k540 steps: - name: Checkout source uses: actions/checkout@v4 - name: Prepare firmware run: | echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf echo CACHE_DATE=$(date +%m) >> ${GITHUB_ENV} git clone https://github.com/openipc/firmware --depth 1 - name: Dispatch platform run: | INPUT=${{inputs.platform}} MATRIX=$(echo ${{matrix.platform}} | cut -d_ -f1) if [ -z ${INPUT} ] || [ ${INPUT} = ${MATRIX} ]; then echo RUN=${MATRIX} >> ${GITHUB_ENV} fi - name: Setup ccache if: env.RUN uses: actions/cache@v4 with: path: /tmp/ccache key: ${{matrix.platform}}-${{env.CACHE_DATE}} - name: Build firmware if: env.RUN run: | export GIT_HASH=$(git rev-parse --short ${GITHUB_SHA}) export GIT_BRANCH=${GITHUB_REF_NAME} echo GIT_HASH=${GIT_HASH} >> ${GITHUB_ENV} echo GIT_BRANCH=${GIT_BRANCH} >> ${GITHUB_ENV} mkdir -p /tmp/ccache ln -s /tmp/ccache ${HOME}/.ccache NAME=${{matrix.platform}} bash builder.sh ${NAME} cd openipc TIME=$(date -d @${SECONDS} +%M:%S) echo TIME=${TIME} >> ${GITHUB_ENV} NORFW=$(find output/images -name openipc*nor*) if [ ! -z ${NORFW} ]; then mv ${NORFW} ../${NAME}-nor.tgz echo NORFW=${GITHUB_WORKSPACE}/${NAME}-nor.tgz >> ${GITHUB_ENV} fi NANDFW=$(find output/images -name openipc*nand*) if [ ! -z ${NANDFW} ]; then mv ${NANDFW} ../${NAME}-nand.tgz echo NANDFW=${GITHUB_WORKSPACE}/${NAME}-nand.tgz >> ${GITHUB_ENV} fi if [ -z ${NORFW} ] && [ -z ${NANDFW} ]; then exit 1 fi - name: Upload firmware if: env.NORFW || env.NANDFW uses: softprops/action-gh-release@v2 with: tag_name: latest files: | ${{env.NORFW}} ${{env.NANDFW}} - name: Send binary if: env.NORFW run: | TG_MSG="Commit: ${GIT_HASH}\nBranch: ${GIT_BRANCH}\nTag: ${TAG_NAME}\nTime: ${TIME}\n\n" TG_ICON="\xE2\x9C\x85 GitHub Actions" TG_HEADER=$(echo -e ${TG_MSG}${TG_ICON}) TG_TOKEN=${{secrets.TELEGRAM_TOKEN_BOT_OPENIPC}} TG_CHANNEL=${{secrets.TELEGRAM_CHANNEL_OPENIPC_DEV}} HTTP=$(curl -s -o /dev/null -w %{http_code} https://api.telegram.org/bot${TG_TOKEN}/sendDocument -F chat_id=${TG_CHANNEL} -F caption="${TG_HEADER}" -F document=@${NORFW}) echo Telegram response: ${HTTP}