diff --git a/.github/workflows/build-openwrt.yml b/.github/workflows/build-openwrt.yml new file mode 100644 index 0000000..9f583f1 --- /dev/null +++ b/.github/workflows/build-openwrt.yml @@ -0,0 +1,190 @@ +# +# Copyright (c) 2019-2020 P3TERX +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# +# https://github.com/P3TERX/Actions-OpenWrt +# Description: Build OpenWrt using GitHub Actions +# + +name: Build OpenWrt + +on: + repository_dispatch: + workflow_dispatch: + inputs: + ssh: + description: 'SSH connection to Actions' + required: false + default: 'false' + +env: + REPO_URL: https://github.com/coolsnowwolf/lede + REPO_BRANCH: master + FEEDS_CONF: feeds.conf.default + CONFIG_FILE: .config + DIY_P1_SH: diy-part1.sh + DIY_P2_SH: diy-part2.sh + UPLOAD_BIN_DIR: false + UPLOAD_FIRMWARE: true + UPLOAD_COWTRANSFER: false + UPLOAD_WETRANSFER: false + UPLOAD_RELEASE: false + TZ: Asia/Shanghai + +jobs: + build: + runs-on: ubuntu-18.04 + + 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 -E apt-get -qq update + sudo -E apt-get -qq install $(curl -fsSL git.io/depends-ubuntu-1804) + sudo -E apt-get -qq autoremove --purge + sudo -E apt-get -qq clean + sudo timedatectl set-timezone "$TZ" + sudo mkdir -p /workdir + sudo chown $USER:$GROUPS /workdir + + - name: Clone source code + working-directory: /workdir + run: | + df -hT $PWD + git clone $REPO_URL -b $REPO_BRANCH openwrt + ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt + + - name: Load custom feeds + run: | + [ -e $FEEDS_CONF ] && mv $FEEDS_CONF openwrt/feeds.conf.default + chmod +x $DIY_P1_SH + cd openwrt + $GITHUB_WORKSPACE/$DIY_P1_SH + + - name: Update feeds + run: cd openwrt && ./scripts/feeds update -a + + - name: Install feeds + run: cd openwrt && ./scripts/feeds install -a + + - name: Load custom configuration + run: | + [ -e files ] && mv files openwrt/files + [ -e $CONFIG_FILE ] && mv $CONFIG_FILE openwrt/.config + chmod +x $DIY_P2_SH + cd openwrt + $GITHUB_WORKSPACE/$DIY_P2_SH + + - name: SSH connection to Actions + uses: P3TERX/ssh2actions@v1.0.0 + if: (github.event.inputs.ssh == 'true' && github.event.inputs.ssh != 'false') || contains(github.event.action, 'ssh') + env: + TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} + TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} + + - name: Download package + id: package + 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 + echo "::set-output name=status::success" + 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")" >> $GITHUB_ENV + + - name: Check space usage + if: (!cancelled()) + run: df -hT + + - name: Upload bin directory + uses: actions/upload-artifact@main + if: steps.compile.outputs.status == 'success' && env.UPLOAD_BIN_DIR == 'true' + with: + name: OpenWrt_bin${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} + path: openwrt/bin + + - name: Organize files + id: organize + if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() + run: | + cd openwrt/bin/targets/*/* + rm -rf packages + echo "FIRMWARE=$PWD" >> $GITHUB_ENV + echo "::set-output name=status::success" + + - name: Upload firmware directory + uses: actions/upload-artifact@main + if: steps.organize.outputs.status == 'success' && !cancelled() + with: + name: OpenWrt_firmware${{ env.DEVICE_NAME }}${{ env.FILE_DATE }} + path: ${{ env.FIRMWARE }} + + - name: Upload firmware to cowtransfer + id: cowtransfer + if: steps.organize.outputs.status == 'success' && env.UPLOAD_COWTRANSFER == '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 "::warning file=cowtransfer.com::$(cat cowtransfer.log | grep https)" + echo "::set-output name=url::$(cat cowtransfer.log | grep https | cut -f3 -d" ")" + + - name: Upload firmware to WeTransfer + id: wetransfer + if: steps.organize.outputs.status == 'success' && env.UPLOAD_WETRANSFER == 'true' && !cancelled() + run: | + curl -fsSL git.io/file-transfer | sh + ./transfer wet -s -p 16 --no-progress ${FIRMWARE} 2>&1 | tee wetransfer.log + echo "::warning file=wetransfer.com::$(cat wetransfer.log | grep https)" + echo "::set-output name=url::$(cat wetransfer.log | grep https | cut -f3 -d" ")" + + - name: Generate release tag + id: tag + if: env.UPLOAD_RELEASE == 'true' && !cancelled() + run: | + echo "::set-output name=release_tag::$(date +"%Y.%m.%d-%H%M")" + touch release.txt + [ $UPLOAD_COWTRANSFER = true ] && echo "πŸ”— [Cowtransfer](${{ steps.cowtransfer.outputs.url }})" >> release.txt + [ $UPLOAD_WETRANSFER = true ] && echo "πŸ”— [WeTransfer](${{ steps.wetransfer.outputs.url }})" >> release.txt + echo "::set-output name=status::success" + + - name: Upload firmware to release + uses: softprops/action-gh-release@v1 + if: steps.tag.outputs.status == 'success' && !cancelled() + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ steps.tag.outputs.release_tag }} + body_path: release.txt + files: ${{ env.FIRMWARE }}/* + + - name: Delete workflow runs + uses: GitRML/delete-workflow-runs@main + with: + retain_days: 1 + keep_minimum_runs: 3 + + - name: Remove old Releases + uses: dev-drprasad/delete-older-releases@v0.1.0 + if: env.UPLOAD_RELEASE == 'true' && !cancelled() + with: + keep_latest: 3 + delete_tags: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update-checker.yml b/.github/workflows/update-checker.yml new file mode 100644 index 0000000..9344c8e --- /dev/null +++ b/.github/workflows/update-checker.yml @@ -0,0 +1,58 @@ +# +# Copyright (c) 2019-2021 P3TERX +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# +# https://github.com/P3TERX/Actions-OpenWrt +# File: .github/workflows/update-checker.yml +# Description: Source code update checker +# + +name: Update Checker + +env: + REPO_URL: https://github.com/coolsnowwolf/lede + REPO_BRANCH: master + +on: + workflow_dispatch: +# schedule: +# - cron: 0 */18 * * * + +jobs: + check: + runs-on: ubuntu-latest + + steps: + + - name: Get Commit Hash + id: getHash + run: | + git clone --depth 1 $REPO_URL -b $REPO_BRANCH . + echo "::set-output name=commitHash::$(git rev-parse HEAD)" + + - name: Compare Commit Hash + id: cacheHash + uses: actions/cache@v2 + with: + path: .commitHash + key: HEAD-${{ steps.getHash.outputs.commitHash }} + + - name: Save New Commit Hash + if: steps.cacheHash.outputs.cache-hit != 'true' + run: | + echo ${{ steps.getHash.outputs.commitHash }} | tee .commitHash + + - name: Trigger build + if: steps.cacheHash.outputs.cache-hit != 'true' + uses: peter-evans/repository-dispatch@v1 + with: + token: ${{ secrets.ACTIONS_TRIGGER_PAT }} + event-type: Source Code Update + + - name: Delete workflow runs + uses: GitRML/delete-workflow-runs@main + with: + retain_days: 1 + keep_minimum_runs: 1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6123c79 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019-2020 P3TERX + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec5250a --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Actions-OpenWrt + +[![LICENSE](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat-square&label=LICENSE)](https://github.com/P3TERX/Actions-OpenWrt/blob/master/LICENSE) +![GitHub Stars](https://img.shields.io/github/stars/P3TERX/Actions-OpenWrt.svg?style=flat-square&label=Stars&logo=github) +![GitHub Forks](https://img.shields.io/github/forks/P3TERX/Actions-OpenWrt.svg?style=flat-square&label=Forks&logo=github) + +Build OpenWrt using GitHub Actions + +[Read the details in my blog (in Chinese) | 中文教程](https://p3terx.com/archives/build-openwrt-with-github-actions.html) + +## Usage + +- Click the [Use this template](https://github.com/P3TERX/Actions-OpenWrt/generate) button to create a new repository. +- Generate `.config` files using [Lean's OpenWrt](https://github.com/coolsnowwolf/lede) source code. ( You can change it through environment variables in the workflow file. ) +- Push `.config` file to the GitHub repository. +- Select `Build OpenWrt` on the Actions page. +- Click the `Run workflow` button. +- When the build is complete, click the `Artifacts` button in the upper right corner of the Actions page to download the binaries. + +## Tips + +- It may take a long time to create a `.config` file and build the OpenWrt firmware. Thus, before create repository to build your own firmware, you may check out if others have already built it which meet your needs by simply [search `Actions-Openwrt` in GitHub](https://github.com/search?q=Actions-openwrt). +- Add some meta info of your built firmware (such as firmware architecture and installed packages) to your repository introduction, this will save others' time. + +## Acknowledgments + +- [Microsoft Azure](https://azure.microsoft.com) +- [GitHub Actions](https://github.com/features/actions) +- [OpenWrt](https://github.com/openwrt/openwrt) +- [Lean's OpenWrt](https://github.com/coolsnowwolf/lede) +- [tmate](https://github.com/tmate-io/tmate) +- [mxschmitt/action-tmate](https://github.com/mxschmitt/action-tmate) +- [csexton/debugger-action](https://github.com/csexton/debugger-action) +- [Cowtransfer](https://cowtransfer.com) +- [WeTransfer](https://wetransfer.com/) +- [Mikubill/transfer](https://github.com/Mikubill/transfer) +- [softprops/action-gh-release](https://github.com/softprops/action-gh-release) +- [ActionsRML/delete-workflow-runs](https://github.com/ActionsRML/delete-workflow-runs) +- [dev-drprasad/delete-older-releases](https://github.com/dev-drprasad/delete-older-releases) +- [peter-evans/repository-dispatch](https://github.com/peter-evans/repository-dispatch) + +## License + +[MIT](https://github.com/P3TERX/Actions-OpenWrt/blob/main/LICENSE) Β© P3TERX diff --git a/diy-part1.sh b/diy-part1.sh new file mode 100755 index 0000000..b4e843c --- /dev/null +++ b/diy-part1.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# +# Copyright (c) 2019-2020 P3TERX +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# +# https://github.com/P3TERX/Actions-OpenWrt +# File name: diy-part1.sh +# Description: OpenWrt DIY script part 1 (Before Update feeds) +# + +# Uncomment a feed source +#sed -i 's/^#\(.*helloworld\)/\1/' feeds.conf.default + +# Add a feed source +#sed -i '$a src-git lienol https://github.com/Lienol/openwrt-package' feeds.conf.default diff --git a/diy-part2.sh b/diy-part2.sh new file mode 100755 index 0000000..45acc88 --- /dev/null +++ b/diy-part2.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# +# Copyright (c) 2019-2020 P3TERX +# +# This is free software, licensed under the MIT License. +# See /LICENSE for more information. +# +# https://github.com/P3TERX/Actions-OpenWrt +# File name: diy-part2.sh +# Description: OpenWrt DIY script part 2 (After Update feeds) +# + +# Modify default IP +#sed -i 's/192.168.1.1/192.168.50.5/g' package/base-files/files/bin/config_generate