Build SSR #542
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
name: Build SSR | |
on: | |
schedule: | |
- cron: 0 17 * * * | |
repository_dispatch: | |
workflow_dispatch: | |
inputs: | |
ssh: | |
description: 'SSH connection to Actions' | |
required: false | |
default: false | |
type: boolean | |
env: | |
UPLOAD_FIRMWARE: false | |
UPLOAD_RELEASE: true | |
TZ: Asia/Shanghai | |
jobs: | |
build: | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@main | |
- name: Initialization environment | |
env: | |
DEBIAN_FRONTEND: noninteractive | |
run: | | |
sudo apt-get update -y | |
sudo apt-get full-upgrade -y | |
sudo apt-get install -y expect ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential bzip2 ccache cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext gcc-multilib g++-multilib git git-core gperf haveged help2man intltool lib32gcc1 libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncurses5-dev libreadline-dev libssl-dev libtool libz-dev lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip python3-ply python-docutils qemu-utils re2c rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev | |
echo "update完成" | |
- name: Rclone-Install | |
run: wget 'https://raw.githubusercontent.com/wekingchen/my-file/master/rclone/rclone.zip' --no-check-certificate && sudo unzip rclone.zip && sudo chmod a+x rclone && sudo rm -f rclone.zip | |
- name: Rclone-Config | |
env: | |
RCLONE_CONFIG: ${{ secrets.RCLONE_CONFIG }} | |
run: | | |
# 写配置文件 | |
mkdir -p ~/.config/rclone/ | |
cat << EOF > ~/.config/rclone/rclone.conf | |
$RCLONE_CONFIG | |
EOF | |
- name: Create new user | |
run: | | |
sudo adduser "builder" <<EOF | |
12345 | |
12345 | |
EOF | |
echo "新建用户完成" | |
expect -c " | |
spawn su - builder | |
expect \":\" | |
send \"12345\r\" | |
interact | |
" | |
echo "用户切换成功" | |
- name: Clone source code | |
run: | | |
git config --global user.email "[email protected]" | |
git config --global user.name "Your Name" | |
git clone https://github.com/wekingchen/gl-infra-builder.git | |
echo "源码抓取完毕" | |
cd gl-infra-builder | |
python3 setup.py -c config-siflower-18.x.yml | |
echo "config-siflower-18.x.yml完毕" | |
cd openwrt-18.06/siflower/openwrt-18.06 | |
./scripts/gen_config.py target_siflower_gl-sft1200 | |
echo "target_siflower_gl-sft1200完毕" | |
# 使用旧版1.80.0的boost | |
rm -rf feeds/packages/libs/boost | |
wget 'https://github.com/${{ GITHUB.REPOSITORY }}/raw/main/myfiles/package.zip' --no-check-certificate && unzip -o package.zip && rm -f package.zip | |
sed -i "/helloworld/d" "feeds.conf.default" | |
echo "src-git helloworld https://github.com/fw876/helloworld.git" >> "feeds.conf.default" | |
echo "helloworld完毕" | |
./scripts/feeds update helloworld | |
./scripts/feeds install -a -f -p helloworld | |
echo "feeds更新完毕" | |
rm -rf .config | |
echo "删除配置完毕" | |
wget https://github.com/${{ GITHUB.REPOSITORY }}/raw/main/ssr/.config | |
echo "配置抓取完毕" | |
- name: Setup Debug Session | |
if: ${{ inputs.ssh }} | |
uses: csexton/debugger-action@master | |
- name: Build source code | |
run: | | |
cd gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06 | |
make -j8 download V=s | |
echo "下载完毕" | |
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: Rclone-Run | |
run: | | |
# Rclone-Run | |
# 延迟函数 | |
delay() | |
{ | |
random_time=$(($RANDOM % $1)) | |
echo "等待 ${random_time} 分钟后开始同步" | |
for((i=1;i<=${random_time};i++)); | |
do | |
echo "倒计时 $[${random_time}-$i] 分钟" | |
sleep 1m | |
done | |
} | |
# 随机延迟0~15分钟后再进行操作,可自行设置时间 | |
delay 1 | |
pwd | |
Date=$(date +"%Y%m%d") | |
./rclone sync -v /home/runner/work/Actions-SFT1200-OpenWrt/Actions-SFT1200-OpenWrt/gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06/bin/ seafile:/ssr/$Date/ | |
echo "SeaFile已上传 $Date 文件夹完毕" | |
DELTIME=`date -d "7 days ago" +%Y%m%d` | |
./rclone purge seafile:/ssr/$DELTIME | |
echo "SeaFile已删除旧文件夹 $DELTIME" | |
- 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: gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06/bin | |
- name: Organize files | |
id: organize | |
if: env.UPLOAD_FIRMWARE == 'true' && !cancelled() | |
run: | | |
cd "/home/runner/work/Actions-SFT1200-OpenWrt/Actions-SFT1200-OpenWrt/gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06/bin/" | |
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: Generate release tag | |
id: tag | |
if: env.UPLOAD_RELEASE == 'true' && !cancelled() | |
run: | | |
echo "::set-output name=release_tag::$(date +"%Y.%m.%d-%H%M"-ssr)" | |
touch 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.TOKEN_GITHUB }} | |
with: | |
tag_name: ${{ steps.tag.outputs.release_tag }} | |
body_path: release.txt | |
files: /home/runner/work/Actions-SFT1200-OpenWrt/Actions-SFT1200-OpenWrt/gl-infra-builder/openwrt-18.06/siflower/openwrt-18.06/bin/targets/siflower/openwrt-*squashfs* | |
- name: Delete workflow runs | |
uses: GitRML/delete-workflow-runs@main | |
with: | |
retain_days: 1 | |
keep_minimum_runs: 10 | |
- name: Remove old Releases | |
uses: dev-drprasad/[email protected] | |
if: env.UPLOAD_RELEASE == 'true' && !cancelled() | |
with: | |
keep_latest: 3 | |
delete_tags: true | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |