Build immortalwrt for AX3600 #38
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # Copyright (c) 2022-2023 Curious <https://www.curious.host> | |
| # | |
| # This is free software, licensed under the MIT License. | |
| # See /LICENSE for more information. | |
| # | |
| # https://github.com/Curious-r/OpenWrtBuildWorkflows | |
| # Description: Automatically check OpenWrt source code update and build it. No additional keys are | |
| # required. | |
| # | |
| # Some features come from https://github.com/P3TERX/Actions-OpenWrt, visit the repository to get its | |
| # copyright information. | |
| #------------------------------------------------------------------------------------------------------- | |
| # Workflow name which is showed in GitHub Actions. | |
| name: Build immortalwrt for AX3600 | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| ssh: | |
| description: "SSH connection to Actions" | |
| required: false | |
| default: "false" | |
| # Uncomment the following to run regularly. Note that the cron expression here does not contain seconds. | |
| # schedule: | |
| # - cron: 0 */18 * * * | |
| env: | |
| # REPO means the OpenWrt repo you want to build from in this workflow. | |
| # You can modify the WORK_NAME to any name you want, but remember not to let it have the same name in | |
| # other workflows. | |
| WORK_NAME: immortalwrt-AX3600 | |
| REPO_URL: https://github.com/immortalwrt/immortalwrt.git | |
| REPO_BRANCH: openwrt-23.05 | |
| BUILD_DEPENDS: "ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \ | |
| bzip2 ccache clang cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext gcc-multilib \ | |
| g++-multilib git gnutls-dev gperf haveged help2man intltool lib32gcc-s1 libc6-dev-i386 libelf-dev \ | |
| libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5 \ | |
| libncursesw5-dev libpython3-dev libreadline-dev libssl-dev libtool lld llvm lrzsz mkisofs msmtp \ | |
| nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip python3-ply \ | |
| python3-docutils python3-pyelftools qemu-utils re2c rsync scons squashfs-tools subversion swig \ | |
| texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev zstd" | |
| # CONFIG_FILE is the name of your own config files for compiling, you should upload these files into the root | |
| # directory of your workflow repo. | |
| CONFIG_FILE: .config-AX3600 | |
| # FEEDS_BEFORE_SCRIPT is the name of extra bash script you want to execute before feeds update&install. | |
| # FEEDS_AFTER_SCRIPT is the name of extra bash script you want to execute after feeds update&install. | |
| # You can modify the initial settings of your firmware through these two scripts. If this is what you need, | |
| # please upload your scripts to the root directory of your workflow repo. | |
| FEEDS_BEFORE_SCRIPT: feeds-before-script.sh | |
| FEEDS_AFTER_SCRIPT: feeds-after-script.sh | |
| # STORE_PRODUCTS determine whether to upload all compilation products to workflow artifacts. | |
| # Not only firmwires, all compiled packages will be here, including compiled but not solidified into firmware. | |
| STORE_PRODUCTS: true | |
| # STORE_FIRMWARE determine whether to upload firmwares to workflow artifacts. | |
| STORE_FIRMWARE: true | |
| # The following are options of where the firmware needs to be transfered. | |
| COWTRANSFER_FIRMWARE: false | |
| WETRANSFER_FIRMWARE: false | |
| RELEASE_FIRMWARE: true | |
| # Change the following to your time zone. | |
| TIME_ZONE: Asia/Shanghai | |
| jobs: | |
| build: | |
| name: Build firmware | |
| runs-on: ubuntu-22.04 | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@main | |
| - name: Initialization environment | |
| env: | |
| DEBIAN_FRONTEND: noninteractive | |
| run: | | |
| sudo rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet/ /usr/local/lib/android/ /opt/ghc/ | |
| sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.org/init_build_environment.sh)' | |
| # sudo -E apt -qq update | |
| # sudo -E apt -qq install $BUILD_DEPENDS | |
| sudo -E apt -qq autoremove --purge | |
| sudo -E apt -qq clean | |
| sudo timedatectl set-timezone $TIME_ZONE | |
| sudo mkdir -p /workdir/ | |
| sudo chown $USER:$GROUPS /workdir/ | |
| - name: Clone source code | |
| working-directory: /workdir | |
| run: | | |
| df -hT $PWD | |
| git clone --depth 1 --branch $REPO_BRANCH --single-branch $REPO_URL openwrt/ | |
| ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt | |
| - name: Run feeds-before-script | |
| run: | | |
| chmod +x $FEEDS_BEFORE_SCRIPT | |
| cd openwrt/ | |
| $GITHUB_WORKSPACE/$FEEDS_BEFORE_SCRIPT | |
| - name: Update feeds | |
| run: cd openwrt/ && ./scripts/feeds update -a | |
| - name: Install feeds | |
| run: cd openwrt/ && ./scripts/feeds install -a | |
| - name: Run feeds-after-script | |
| run: | | |
| chmod +x $FEEDS_AFTER_SCRIPT | |
| cd openwrt/ | |
| $GITHUB_WORKSPACE/$FEEDS_AFTER_SCRIPT | |
| - name: Copy build config file | |
| run: | | |
| [ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config | |
| - name: SSH connection to Actions | |
| uses: P3TERX/ssh2actions@main | |
| if: github.event.inputs.ssh == 'true' || contains(github.event.action, 'ssh') | |
| env: | |
| TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} | |
| TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} | |
| # - name: Download packages | |
| # id: download-packages | |
| # run: | | |
| # cd openwrt/ | |
| # make defconfig | |
| # make download -j8 | |
| # find dl -size -1024c -exec ls -l {} \; | |
| # find dl -size -1024c -exec rm -f {} \; | |
| - name: Compile the firmware | |
| id: compile | |
| run: | | |
| cd openwrt/ | |
| echo -e "$(nproc) thread compile" | |
| make -j$(nproc) || make -j1 || make -j1 V=s | |
| cp ./.config ./config.all.buildinfo | |
| cp ./config.all.buildinfo ./bin/targets/*/*/ | |
| echo "status=success" >> $GITHUB_OUTPUT | |
| grep '^CONFIG_TARGET.*DEVICE.*=y' .config | sed -r 's/.*DEVICE_(.*)=y/\1/' > DEVICE_NAME | |
| [ -s DEVICE_NAME ] && echo "DEVICE_NAME=_$(cat DEVICE_NAME)" >> $GITHUB_ENV | |
| echo "FILE_DATE=_$(date +"%Y.%m.%d_%H.%M.%S")" >> $GITHUB_ENV | |
| - name: Check space usage | |
| if: (!cancelled()) | |
| run: df -hT | |
| - name: Upload all compilation products | |
| uses: actions/upload-artifact@main | |
| if: steps.compile.outputs.status == 'success' && env.STORE_PRODUCTS == 'true' | |
| with: | |
| name: ${{ env.WORK_NAME }}_bin${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} | |
| path: openwrt/bin/ | |
| - name: Organize firmware-related files | |
| id: organize-files | |
| run: | | |
| cd openwrt/bin/targets/*/* | |
| rm -rf packages/ | |
| echo "FIRMWARE=$PWD" >> $GITHUB_ENV | |
| echo "status=success" >> $GITHUB_OUTPUT | |
| - name: Upload firmware directory | |
| uses: actions/upload-artifact@main | |
| if: steps.organize-files.outputs.status == 'success' && env.STORE_FIRMWARE == 'true' && !cancelled() | |
| with: | |
| name: ${{ env.WORK_NAME }}_firmware${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} | |
| path: ${{ env.FIRMWARE }} | |
| - name: Upload firmware to cowtransfer | |
| id: cowtransfer | |
| if: steps.organize-files.outputs.status == 'success' && env.COWTRANSFER_FIRMWARE == 'true' && !cancelled() | |
| run: | | |
| curl -fsSL git.io/file-transfer | sh | |
| ./transfer cow --block 2621440 -s -p 64 --no-progress ${FIRMWARE} 2>&1 | tee cowtransfer.log | |
| echo "::notice file=cowtransfer.com::$(cat cowtransfer.log | grep https)" | |
| echo "url=$(cat cowtransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT | |
| - name: Upload firmware to WeTransfer | |
| id: wetransfer | |
| if: steps.organize-files.outputs.status == 'success' && env.WETRANSFER_FIRMWARE == 'true' && !cancelled() | |
| run: | | |
| curl -fsSL git.io/file-transfer | sh | |
| ./transfer wet -s -p 16 --no-progress ${FIRMWARE} 2>&1 | tee wetransfer.log | |
| echo "::notice file=wetransfer.com::$(cat wetransfer.log | grep https)" | |
| echo "url=$(cat wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT | |
| - name: Generate release tag | |
| id: tag | |
| if: steps.compile.outputs.status == 'success' && env.RELEASE_FIRMWARE == 'true' && !cancelled() | |
| run: | | |
| echo "release_tag=$WORK_NAME-$(date +"%Y.%m.%d_%H.%M.%S")" >> $GITHUB_OUTPUT | |
| touch release.txt | |
| echo "Build from $REPO_URL $REPO_BRANCH" >> release.txt | |
| [ $COWTRANSFER_FIRMWARE = true -o $WETRANSFER_FIRMWARE = true ] && echo 'Products transfer:' >> release.txt | |
| [ $COWTRANSFER_FIRMWARE = true ] && echo \ | |
| "🔗 [Cowtransfer](${{ steps.cowtransfer.outputs.url }})" >> release.txt | |
| [ $WETRANSFER_FIRMWARE = true ] && echo \ | |
| "🔗 [WeTransfer](${{ steps.wetransfer.outputs.url }})" >> release.txt | |
| echo "status=success" >> $GITHUB_OUTPUT | |
| - name: Upload firmware to release | |
| uses: softprops/action-gh-release@master | |
| if: steps.tag.outputs.status == 'success' && !cancelled() | |
| with: | |
| tag_name: ${{ steps.tag.outputs.release_tag }} | |
| body_path: release.txt | |
| files: ${{ env.FIRMWARE }}/* | |
| # clean: | |
| # name: Clean up old assets | |
| # runs-on: ubuntu-latest | |
| # permissions: | |
| # actions: write | |
| # contents: write | |
| # steps: | |
| # - name: Delete workflow runs | |
| # uses: Mattraks/delete-workflow-runs@main | |
| # with: | |
| # retain_days: 1 | |
| # keep_minimum_runs: 1 | |
| # - name: Remove old Releases | |
| # uses: dev-drprasad/delete-older-releases@master | |
| # if: env.RELEASE_FIRMWARE == 'true' && !cancelled() | |
| # with: | |
| # keep_latest: 3 | |
| # delete_tags: true | |
| # env: | |
| # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |