Packaging OpenWrt #350
This file contains 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
#========================================================================== | |
# Description: Packaging OpenWrt | |
# Copyright (C) 2021 https://github.com/unifreq/openwrt_packit | |
# Copyright (C) 2021 https://github.com/ophub/flippy-openwrt-actions | |
#========================================================================== | |
name: Packaging OpenWrt | |
on: | |
repository_dispatch: | |
workflow_dispatch: | |
inputs: | |
openwrt_soc: | |
description: "Select device board." | |
required: false | |
default: "all" | |
type: choice | |
options: | |
- all | |
- s922x_s905x3_s905x2_s912_s905d_s905 | |
- ak88 | |
- beikeyun | |
- cm3 | |
- e25 | |
- e52c | |
- ht2 | |
- e20c | |
- h28k | |
- h66k | |
- h68k | |
- h69k | |
- h69k-max | |
- h88k | |
- h88k-v3 | |
- l1pro | |
- photonicat | |
- qemu | |
- r66s | |
- r68s | |
- jp-tvbox | |
- watermelon-pi | |
- rock5b | |
- rock5c | |
- rk3399 | |
- s905 | |
- s905d | |
- s905x2 | |
- s905x3 | |
- s912 | |
- s922x | |
- s922x-n2 | |
- vplus | |
- zcube1-max | |
- diy | |
customize_rk3399: | |
description: "Set customize rk3399 devices" | |
required: false | |
default: "tvi3315a:rk3399-tvi3315a.dtb/sw799:rk3399-bozz-sw799.dtb" | |
openwrt_kernel: | |
description: "Select kernel version" | |
required: false | |
default: "6.1.y_6.6.y" | |
type: choice | |
options: | |
- 5.4.y | |
- 5.10.y | |
- 5.15.y | |
- 6.1.y | |
- 6.6.y | |
- 6.1.y_6.6.y | |
- 5.15.y_5.10.y | |
kernel_repo: | |
description: "Set the kernel repository" | |
required: false | |
default: "ophub/kernel" | |
type: choice | |
options: | |
- ophub/kernel | |
- breakings/OpenWrt | |
auto_kernel: | |
description: "Auto use the latest kernel" | |
required: false | |
default: true | |
type: boolean | |
script_diy_path: | |
description: "Set custom script loading path" | |
required: false | |
default: "" | |
openwrt_storage: | |
description: "Select image storage type." | |
required: false | |
default: "save" | |
type: choice | |
options: | |
- save | |
- temp | |
builder_name: | |
description: "Set OpenWrt builder signature." | |
required: false | |
default: "ophub" | |
type: choice | |
options: | |
- ophub | |
- angel | |
- yourname | |
env: | |
TZ: America/New_York | |
jobs: | |
build: | |
runs-on: ubuntu-22.04 | |
if: ${{ github.event.repository.owner.id }} == ${{ github.event.sender.id }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Initialization environment | |
id: init | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
docker rmi $(docker images -q) 2>/dev/null | |
[[ -n "${AGENT_TOOLSDIRECTORY}" ]] && sudo rm -rf "${AGENT_TOOLSDIRECTORY}" | |
sudo rm -rf /usr/share/dotnet /etc/apt/sources.list.d /usr/local/lib/android 2>/dev/null | |
sudo swapoff -a | |
sudo rm -f /swapfile /mnt/swapfile | |
sudo -E apt-get -y update | |
sudo -E apt-get -y purge azure-cli ghc* zulu* llvm* firefox google* dotnet* powershell openjdk* mongodb* moby* || true | |
sudo -E apt-get -y install $(curl -fsSL https://is.gd/depend_ubuntu2204_openwrt) | |
sudo -E systemctl daemon-reload | |
#sudo -E apt-get -y full-upgrade | |
sudo -E apt-get -y autoremove --purge | |
sudo -E apt-get clean | |
sudo sed -i '/NVM_DIR/d;/skel/d' /root/{.bashrc,.profile} | |
sudo rm -rf ~/{.cargo,.dotnet,.rustup} | |
sudo timedatectl set-timezone "${TZ}" | |
echo "status=success" >> ${GITHUB_OUTPUT} | |
- name: Create simulated physical disk | |
run: | | |
mnt_size=$(expr $(df -h /mnt | tail -1 | awk '{print $4}' | sed 's/[[:alpha:]]//g' | sed 's/\..*//') - 1) | |
root_size=$(expr $(df -h / | tail -1 | awk '{print $4}' | sed 's/[[:alpha:]]//g' | sed 's/\..*//') - 4) | |
sudo truncate -s "${mnt_size}"G /mnt/mnt.img | |
sudo truncate -s "${root_size}"G /root.img | |
sudo losetup /dev/loop6 /mnt/mnt.img | |
sudo losetup /dev/loop7 /root.img | |
sudo pvcreate /dev/loop6 | |
sudo pvcreate /dev/loop7 | |
sudo vgcreate github /dev/loop6 /dev/loop7 | |
sudo lvcreate -n runner -l 100%FREE github | |
sudo mkfs.xfs /dev/github/runner | |
sudo mkdir -p /builder | |
sudo mount /dev/github/runner /builder | |
sudo chown -R runner.runner /builder | |
df -Th | |
- name: Download armvirt file | |
id: download | |
working-directory: /builder | |
if: ${{ steps.init.outputs.status }} == 'success' && !cancelled() | |
run: | | |
armvirt_tarfile_repo="ophub/amlogic-s9xxx-openwrt" | |
releases_tag_keywords="OpenWrt_lede" | |
armvirt_tarfile_path="openwrt/bin/targets/armvirt/64" | |
[[ -d "${armvirt_tarfile_path}" ]] || mkdir -p ${armvirt_tarfile_path} | |
ln -sf /builder/openwrt ${GITHUB_WORKSPACE}/openwrt | |
latest_version="$(curl -s \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ | |
https://api.github.com/repos/${armvirt_tarfile_repo}/releases?per_page=100 | | |
jq '.[]' | | |
jq -s --arg RTK "${releases_tag_keywords}" '.[] | select(.tag_name | contains($RTK))' | | |
jq -s '.[].assets[] | {data:.updated_at, url:.browser_download_url}' | | |
jq -s --arg BOARD "-rootfs.tar.gz" '.[] | select(.url | endswith($BOARD))' | | |
jq -s 'sort_by(.data)|reverse[]' | | |
jq -s '.[0]' -c | |
)" | |
[[ "${latest_version}" == "null" ]] && echo "Invalid OpenWrt rootfs download address." && exit 1 | |
latest_updated_at="$(echo ${latest_version} | jq -r '.data')" | |
latest_url="$(echo ${latest_version} | jq -r '.url')" | |
openwrt_filename="${latest_url##*/}" | |
curl -fsSL "${latest_url}" -o "${armvirt_tarfile_path}/${openwrt_filename}" | |
[[ "${?}" -ne "0" ]] && echo "Invalid OpenWrt rootfs download address." && exit 1 | |
echo "build_tag=${releases_tag_keywords}_${{ inputs.openwrt_storage }}_$(date +"%Y.%m")" >> ${GITHUB_OUTPUT} | |
echo "status=success" >> ${GITHUB_OUTPUT} | |
- name: Clone packit source code | |
working-directory: /builder | |
if: ${{ steps.init.outputs.status }} == 'success' && !cancelled() | |
run: | | |
SCRIPT_REPO_URL="https://github.com/unifreq/openwrt_packit" | |
SCRIPT_REPO_BRANCH="master" | |
SELECT_PACKITPATH="openwrt_packit" | |
git clone -q --single-branch --depth=1 --branch=${SCRIPT_REPO_BRANCH} ${SCRIPT_REPO_URL} ${SELECT_PACKITPATH} | |
ln -sf /builder/${SELECT_PACKITPATH} /opt/${SELECT_PACKITPATH} | |
- name: Package OpenWrt Firmware | |
uses: ophub/flippy-openwrt-actions@main | |
if: ${{ steps.download.outputs.status }} == 'success' && !cancelled() | |
env: | |
OPENWRT_ARMVIRT: openwrt/bin/targets/*/*/*rootfs.tar.gz | |
SELECT_PACKITPATH: openwrt_packit | |
PACKAGE_SOC: ${{ inputs.openwrt_soc }} | |
KERNEL_REPO_URL: ${{ inputs.kernel_repo }} | |
KERNEL_VERSION_NAME: ${{ inputs.openwrt_kernel }} | |
KERNEL_AUTO_LATEST: ${{ inputs.auto_kernel }} | |
CUSTOMIZE_RK3399: ${{ inputs.customize_rk3399 }} | |
SCRIPT_DIY_PATH: ${{ inputs.script_diy_path }} | |
WHOAMI: ${{ inputs.builder_name }} | |
- name: Upload OpenWrt Firmware to Release | |
uses: ncipollo/release-action@main | |
if: ${{ env.PACKAGED_STATUS }} == 'success' && !cancelled() | |
with: | |
tag: ${{ steps.download.outputs.build_tag }} | |
artifacts: ${{ env.PACKAGED_OUTPUTPATH }}/* | |
allowUpdates: true | |
removeArtifacts: false | |
replacesArtifacts: true | |
token: ${{ secrets.GITHUB_TOKEN }} | |
body: | | |
### OpenWrt Image information | |
- Default IP: 192.168.1.1 | |
- Default username: root | |
- Default password: password | |
- Default WIFI name: OpenWrt | |
- Default WIFI password: none | |
### Install to EMMC | |
- Login to OpenWrt → System → Amlogic Service → Install OpenWrt | |
### OpenWrt source code | |
- [lede](https://github.com/coolsnowwolf/lede) | |
### OpenWrt Image Verification | |
- sha256sum |