Skip to content

Packaging QEMU and others #213

Packaging QEMU and others

Packaging QEMU and others #213

#=====================================================================================
# Description: Packaging OpenWrt for qemu, allwinner, rockchip and amlogic
# Copyright (C) 2021 https://github.com/unifreq/openwrt_packit
# Copyright (C) 2021 https://github.com/ophub/flippy-openwrt-actions
#=====================================================================================
name: Packaging QEMU and others
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
- 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.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
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 OpenWrt
id: down
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/output"
[[ -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=OpenWrt_aarch64_${{ 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: Packaging OpenWrt
uses: ophub/flippy-openwrt-actions@main
if: ${{ steps.down.outputs.status }} == 'success' && !cancelled()
env:
OPENWRT_ARMVIRT: openwrt/output/*rootfs.tar.gz
SELECT_PACKITPATH: openwrt_packit
PACKAGE_SOC: ${{ inputs.openwrt_soc }}
CUSTOMIZE_RK3399: ${{ inputs.customize_rk3399 }}
KERNEL_REPO_URL: ${{ inputs.kernel_repo }}
KERNEL_VERSION_NAME: ${{ inputs.openwrt_kernel }}
KERNEL_AUTO_LATEST: ${{ inputs.auto_kernel }}
WHOAMI: ${{ inputs.builder_name }}
- name: Upload the packaged OpenWrt
uses: ncipollo/release-action@main
if: ${{ env.PACKAGED_STATUS }} == 'success' && !cancelled()
with:
tag: ${{ steps.down.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