148 lines
5.0 KiB
YAML
148 lines
5.0 KiB
YAML
name: Build packages
|
||
on:
|
||
push:
|
||
tags:
|
||
- v*
|
||
|
||
jobs:
|
||
build:
|
||
name: Build podkop and luci-app-podkop
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4.2.1
|
||
|
||
- name: Build and push
|
||
uses: docker/build-push-action@v6.9.0
|
||
with:
|
||
context: .
|
||
tags: podkop:ci
|
||
|
||
- name: Create Docker container
|
||
run: docker create --name podkop podkop:ci
|
||
|
||
- name: Copy file from Docker container
|
||
run: |
|
||
docker cp podkop:/builder/bin/packages/x86_64/utilites/. ./bin/
|
||
docker cp podkop:/builder/bin/packages/x86_64/luci/. ./bin/
|
||
|
||
- name: Filter IPK files
|
||
run: |
|
||
# Извлекаем версию из тега, убирая префикс 'v'
|
||
VERSION=${GITHUB_REF#refs/tags/v}
|
||
|
||
mkdir -p ./filtered-bin
|
||
cp ./bin/luci-i18n-podkop-ru_*.ipk "./filtered-bin/luci-i18n-podkop-ru_${VERSION}.ipk"
|
||
cp ./bin/podkop_*.ipk ./filtered-bin/
|
||
cp ./bin/luci-app-podkop_*.ipk ./filtered-bin/
|
||
|
||
- name: Generate install script
|
||
run: |
|
||
VERSION=${GITHUB_REF#refs/tags/v}
|
||
cat > "./filtered-bin/install-v${VERSION}.sh" << 'EOFMARKER'
|
||
#!/bin/sh
|
||
|
||
REPO="https://api.github.com/repos/itdoginfo/podkop/releases/tags/v$VERSION"
|
||
|
||
DOWNLOAD_DIR="/tmp/podkop"
|
||
COUNT=3
|
||
|
||
rm -rf "$DOWNLOAD_DIR"
|
||
mkdir -p "$DOWNLOAD_DIR"
|
||
|
||
main() {
|
||
check_system
|
||
|
||
opkg update
|
||
|
||
if [ -f "/etc/init.d/podkop" ]; then
|
||
echo "Remove current vesrion podkop"
|
||
opkg remove luci-i18n-podkop-ru luci-app-podkop podkop
|
||
rm /etc/config/podkop
|
||
else
|
||
echo "Installed podkop..."
|
||
fi
|
||
|
||
wget -qO- "$REPO" | grep -o 'https://[^"[:space:]]*\.ipk' | while read -r url; do
|
||
filename=$(basename "$url")
|
||
filepath="$DOWNLOAD_DIR/$filename"
|
||
|
||
attempt=0
|
||
while [ $attempt -lt $COUNT ]; do
|
||
if [ -f "$filepath" ] && [ -s "$filepath" ]; then
|
||
echo "$filename has already been uploaded"
|
||
break
|
||
fi
|
||
|
||
echo "Download $filename (count $((attempt+1)))..."
|
||
wget -q -O "$filepath" "$url"
|
||
|
||
if [ -s "$filepath" ]; then
|
||
echo "$filename successfully downloaded"
|
||
else
|
||
echo "Download error $filename. Retry..."
|
||
rm -f "$filepath"
|
||
fi
|
||
attempt=$((attempt+1))
|
||
done
|
||
done
|
||
|
||
for pkg in podkop luci-app-podkop; do
|
||
file=$(ls "$DOWNLOAD_DIR" | grep "^$pkg" | head -n 1)
|
||
if [ -n "$file" ]; then
|
||
echo "Installing $file"
|
||
opkg install "$DOWNLOAD_DIR/$file"
|
||
fi
|
||
done
|
||
|
||
ru=$(ls "$DOWNLOAD_DIR" | grep "luci-i18n-podkop-ru" | head -n 1)
|
||
if [ -n "$ru" ]; then
|
||
printf "\033[32;1mРусский язык интерфейса ставим? y/n (Need a Russian translation?)\033[0m "
|
||
while true; do
|
||
read -r -p '' RUS
|
||
case $RUS in
|
||
y)
|
||
opkg install "$DOWNLOAD_DIR/$ru"
|
||
break
|
||
;;
|
||
n)
|
||
break
|
||
;;
|
||
*)
|
||
echo "Введите y или n"
|
||
;;
|
||
esac
|
||
done
|
||
fi
|
||
|
||
rm -f $DOWNLOAD_DIR/podkop*.ipk $DOWNLOAD_DIR/luci-app-podkop*.ipk $DOWNLOAD_DIR/luci-i18n-podkop-ru*.ipk
|
||
}
|
||
|
||
check_system() {
|
||
# Get router model
|
||
MODEL=$(cat /tmp/sysinfo/model)
|
||
echo "Router model: $MODEL"
|
||
|
||
if ! nslookup google.com >/dev/null 2>&1; then
|
||
log "DNS not working"
|
||
exit 1
|
||
fi
|
||
|
||
if opkg list-installed | grep -qE "iptables|kmod-iptab"; then
|
||
printf "\033[31;1mFound incompatible iptables packages. If you're using FriendlyWrt: https://t.me/itdogchat/44512/181082\033[0m\n"
|
||
fi
|
||
}
|
||
|
||
main
|
||
EOFMARKER
|
||
# Make the script executable
|
||
chmod +x "./filtered-bin/install-v${VERSION}.sh"
|
||
# Replace the VERSION placeholder with actual version
|
||
sed -i "s/\$VERSION/${VERSION}/g" "./filtered-bin/install-v${VERSION}.sh"
|
||
|
||
- name: Remove Docker container
|
||
run: docker rm podkop
|
||
|
||
- name: Release
|
||
uses: softprops/action-gh-release@v2.0.8
|
||
with:
|
||
files: ./filtered-bin/* |