NEWIFI D2 #81
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: Compile OpenWrt by GitHub Actions # | |
# Based on: https://github.com/P3TERX/Actions-OpenWrt # | |
# Author: Hyy2001X # | |
########################################################### | |
name: NEWIFI D2 | |
on: | |
repository_dispatch: | |
#push: | |
# branches: | |
# - master | |
#schedule: | |
# - cron: 0 8 * * 5 | |
#watch: | |
# types: [started] | |
workflow_dispatch: | |
inputs: | |
Tempoary_CONFIG: | |
description: '配置文件' | |
default: 'd-team_newifi-d2' | |
type: choice | |
options: | |
- 'd-team_newifi-d2' | |
- 'd-team_newifi-d2-Clash' | |
- 'd-team_newifi-d2-Lite' | |
Tempoary_FLAG: | |
description: '固件标签' | |
default: 'AUTO' | |
type: choice | |
options: | |
- 'AUTO' | |
- 'Full' | |
- 'Clash' | |
- 'Lite' | |
Tempoary_IP: | |
description: '固件 IP 地址 [可选]' | |
default: '' | |
UPLOAD_RELEASES: | |
description: '上传固件到 Releases' | |
default: 'true' | |
type: boolean | |
UPLOAD_ARTIFACTS: | |
description: '上传固件到 Artifacts' | |
default: 'false' | |
type: boolean | |
UPLOAD_BIN_ARTIFACTS: | |
description: '上传 bin 文件夹到 Artifacts' | |
default: 'false' | |
type: boolean | |
### 环境变量设置 | |
env: | |
# 编译时调用的 [.config] 文件名称 | |
CONFIG_FILE: d-team_newifi-d2 | |
# 源码仓库:分支 | |
DEFAULT_SOURCE: coolsnowwolf/lede:master | |
# 删除无用文件以增加编译空间 | |
DELETE_USELESS_FILES: true | |
# 删除早期的 workflow 任务 | |
DELETE_OLD_WORKFLOW: false | |
# Cache 加速编译 | |
CACHE_ACCELERATE: false | |
### 结束 | |
jobs: | |
Compile: | |
runs-on: ubuntu-20.04 | |
permissions: | |
issues: write | |
pull-requests: write | |
contents: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@main | |
with: | |
fetch-depth: 0 | |
- name: Load Custom Variables | |
run: | | |
if [ -n "${{ github.event.inputs.Tempoary_CONFIG }}" ] | |
then | |
if [ -f "$GITHUB_WORKSPACE/Configs/${{ github.event.inputs.Tempoary_CONFIG }}" ] | |
then | |
CONFIG_FILE=${{ github.event.inputs.Tempoary_CONFIG }} | |
else | |
CONFIG_FILE=${{ env.CONFIG_FILE }} | |
fi | |
else | |
CONFIG_FILE=${{ env.CONFIG_FILE }} | |
fi | |
if [ ! -f "$GITHUB_WORKSPACE/Configs/$CONFIG_FILE" ] | |
then | |
echo "CONFIG_FILE: [/Config/$CONFIG_FILE] is not detected ..." | |
exit 1 | |
else | |
echo "CONFIG_FILE: [/Config/$CONFIG_FILE]" | |
echo "CONFIG_FILE=$CONFIG_FILE" >> $GITHUB_ENV | |
fi | |
if [ -n "${{ github.event.inputs.Tempoary_IP }}" ] | |
then | |
echo "IP: [${{ github.event.inputs.Tempoary_IP }}]" | |
echo "Tempoary_IP=${{ github.event.inputs.Tempoary_IP }}" >> $GITHUB_ENV | |
fi | |
if [ -n "${{ github.event.inputs.Tempoary_FLAG }}" ] | |
then | |
echo "FLAG: [${{ github.event.inputs.Tempoary_FLAG }}]" | |
echo "Tempoary_FLAG=${{ github.event.inputs.Tempoary_FLAG }}" >> $GITHUB_ENV | |
fi | |
REPO_URL="https://github.com/$(cut -d \: -f 1 <<< ${{ env.DEFAULT_SOURCE }})" | |
REPO_BRANCH=$(cut -d \: -f 2 <<< ${{ env.DEFAULT_SOURCE }}) | |
echo "REPO_URL=$REPO_URL" >> $GITHUB_ENV | |
echo "REPO_BRANCH=$REPO_BRANCH" >> $GITHUB_ENV | |
echo "Compile_Date=$(date +%Y%m%d%H%M)" >> $GITHUB_ENV | |
echo "Display_Date=$(date +%Y/%m/%d)" >> $GITHUB_ENV | |
if [[ -z "${{ github.event.inputs.Tempoary_CONFIG }}" ]]; then | |
echo "TIMED_TRIGGER=true" >> $GITHUB_ENV | |
else | |
echo "UPLOAD_RELEASES=${{ github.event.inputs.UPLOAD_RELEASES }}" >> $GITHUB_ENV | |
echo "UPLOAD_ARTIFACTS=${{ github.event.inputs.UPLOAD_ARTIFACTS }}" >> $GITHUB_ENV | |
echo "UPLOAD_BIN_ARTIFACTS=${{ github.event.inputs.UPLOAD_BIN_ARTIFACTS }}" >> $GITHUB_ENV | |
fi | |
- name: TIMED_TRIGGER | |
if: env.TIMED_TRIGGER == 'true' | |
env: | |
UPLOAD_RELEASES: true | |
UPLOAD_ARTIFACTS: false | |
UPLOAD_BIN_ARTIFACTS: false | |
run: | | |
echo "UPLOAD_RELEASES=${UPLOAD_RELEASES}" >> $GITHUB_ENV | |
echo "UPLOAD_ARTIFACTS=${UPLOAD_ARTIFACTS}" >> $GITHUB_ENV | |
echo "UPLOAD_BIN_ARTIFACTS=${UPLOAD_BIN_ARTIFACTS}" >> $GITHUB_ENV | |
- name: Initialize Environment | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo mkdir -p /workdir | |
sudo chown $USER:$GROUPS /workdir | |
if [ "${{ env.DELETE_USELESS_FILES }}" == true ] | |
then | |
docker rmi $(docker images -q) | |
sudo -E rm -rf /etc/apt/sources.list.d/* /usr/share/dotnet /usr/local/lib/android /opt/ghc /etc/mysql /etc/php | |
sudo -E apt-get -y purge azure-cli* docker* ghc* zulu* hhvm* llvm* firefox* google* dotnet* aspnetcore* powershell* openjdk* adoptopenjdk* mysql* php* mongodb* moby* snap* || true | |
sudo -E apt-mark hold grub-efi-amd64-signed | |
sudo -E apt update | |
sudo -E apt -y purge azure-cli* docker* ghc* zulu* llvm* firefox google* dotnet* powershell* openjdk* mysql* php* mongodb* dotnet* snap* | |
fi | |
sudo -E apt update | |
sudo -E apt -y full-upgrade | |
sudo -E apt-get -y install busybox build-essential cmake asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib g++-multilib p7zip p7zip-full msmtp libssl-dev texinfo libreadline-dev libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint ccache curl wget vim nano python2.7 python3 python3-pip python3-ply haveged lrzsz device-tree-compiler scons antlr3 gperf intltool mkisofs rsync | |
sudo -E systemctl daemon-reload | |
sudo -E apt -y autoremove --purge | |
sudo -E apt clean | |
sudo timedatectl set-timezone "Asia/Shanghai" | |
- name: Clone Openwrt Source Code | |
run: | | |
git clone -b $REPO_BRANCH $REPO_URL openwrt | |
ln -sf /workdir/openwrt $GITHUB_WORKSPACE/openwrt | |
cd openwrt | |
./scripts/feeds update -a | |
./scripts/feeds install -a | |
- name: Accelerate | |
if: env.CACHE_ACCELERATE == 'true' | |
uses: klever1988/cachewrtbuild@main | |
with: | |
ccache: false | |
toolchain: true | |
skip: true | |
clean: true | |
prefix: ${{ github.workspace }}/openwrt | |
- name: Run Diy Scripts | |
run: | | |
echo "Free space:" | |
df -h | |
chmod +x Scripts/AutoBuild_*.sh | |
cd openwrt | |
if [ "${{ env.CACHE_ACCELERATE }}" == true ] | |
then | |
echo -e "\nCONFIG_DEVEL=y\nCONFIG_CCACHE=y\n" >> $GITHUB_WORKSPACE/Configs/$CONFIG_FILE | |
fi | |
cp $GITHUB_WORKSPACE/Configs/$CONFIG_FILE .config | |
source $GITHUB_WORKSPACE/Scripts/AutoBuild_DiyScript.sh | |
source $GITHUB_WORKSPACE/Scripts/AutoBuild_Function.sh | |
make defconfig | |
Firmware_Diy_Before | |
rm -f .config && cp $GITHUB_WORKSPACE/Configs/$CONFIG_FILE .config | |
Firmware_Diy_Main | |
Firmware_Diy | |
Firmware_Diy_Other | |
- name: Pre-download Libraries | |
run: | | |
cd openwrt | |
./scripts/feeds install -a | |
make defconfig | |
make download -j8 | |
- name: Build OpenWrt | |
id: compile | |
run: | | |
cd openwrt | |
make -j4 || make -j1 V=s | |
[ "$?" == 0 ] && echo "Compile_Result=true" >> $GITHUB_ENV || echo "Compile_Result=false" >> $GITHUB_ENV | |
- name: Checkout Firmware | |
if: steps.compile.outcome == 'success' && !cancelled() | |
run: | | |
cd openwrt | |
source $GITHUB_WORKSPACE/Scripts/AutoBuild_Function.sh | |
Firmware_Diy_End | |
- name: Upload Firmware to Artifacts | |
uses: actions/upload-artifact@main | |
if: env.UPLOAD_ARTIFACTS == 'true' && steps.compile.outcome == 'success' && !cancelled() | |
with: | |
name: ${{ env.CONFIG_FILE }}_firmware_${{ env.Compile_Date }} | |
path: openwrt/bin/Firmware | |
- name: Upload bin to Artifacts | |
uses: actions/upload-artifact@main | |
if: env.UPLOAD_BIN_ARTIFACTS == 'true' && steps.compile.outcome == 'success' && !cancelled() | |
with: | |
name: ${{ env.CONFIG_FILE }}_bin_${{ env.Compile_Date }} | |
path: openwrt/bin | |
- name: Upload Firmware to Release | |
uses: svenstaro/upload-release-action@v2 | |
if: env.UPLOAD_RELEASES == 'true' && steps.compile.outcome == 'success' && !cancelled() | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: openwrt/bin/Firmware/* | |
file_glob: true | |
tag: AutoUpdate | |
overwrite: true | |
- name: Refresh API (1/2) | |
if: env.UPLOAD_RELEASES == 'true' && steps.compile.outcome == 'success' && !cancelled() | |
run: | | |
wget https://api.github.com/repos/${{github.repository}}/releases/tags/AutoUpdate -O API | |
- name: Refresh API (2/2) | |
if: env.UPLOAD_RELEASES == 'true' && steps.compile.outcome == 'success' && !cancelled() | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: ./API | |
file_glob: true | |
tag: AutoUpdate | |
overwrite: true | |
- name: Delete old Workflow Runs | |
continue-on-error: true | |
if: env.DELETE_OLD_WORKFLOW == 'true' && !cancelled() | |
uses: Mattraks/delete-workflow-runs@v2 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
repository: ${{ github.repository }} | |
retain_days: 3 | |
keep_minimum_runs: 0 |