Skip to content

(testing1) friWrt Firmware #76

(testing1) friWrt Firmware

(testing1) friWrt Firmware #76

Workflow file for this run

#=====================================================================================
# Description: Build OpenWrt and ImmortalWrt with Image Builder
# Instructions: https://openwrt.org/docs/guide-user/additional-software/imagebuilder
# Download from: https://downloads.openwrt.org/releases
# https://downloads.immortalwrt.org/releases
#=====================================================================================
name: (testing1) friWrt Firmware
on:
workflow_dispatch:
inputs:
target:
description: "Select device target:"
required: true
default: "Raspberry Pi 4B"
type: choice
options:
- all
- Raspberry Pi 3B
- Raspberry Pi 4B
- NanoPi-R5S
- x86-64
release_branch:
description: "Select the release branch:"
required: true
default: "openwrt:23.05.2"
type: choice
options:
- openwrt:snapshots
- openwrt:21.02.7
- openwrt:23.05.2
- immortalwrt:snapshots
- immortalwrt:21.02.7
- immortalwrt:23.05.1
tunnel:
description: "Select VPN Client app (!passwall only support for newer branch with fw4 firewall!):"
required: true
default: "all"
type: choice
options:
- all
- openclash
- passwall
- openclash-passwall
- no-tunnel
clean:
description: "Do 'make clean' for each run"
required: false
default: "true"
type: boolean
squashfs:
description: "Generate squashfs image"
required: false
default: "true"
type: boolean
upload-artifacts:
description: "Upload compiled image to Artifacts only"
required: false
default: "false"
type: boolean
env:
RELEASE_BRANCH: ${{ inputs.release_branch }}
ROOTFS_SQUASHFS: ${{ inputs.squashfs }}
TUNNEL: ${{ inputs.tunnel }}
CLEAN: ${{ inputs.clean }}
TZ: Asia/Jakarta
jobs:
prebuild:
runs-on: ubuntu-latest
name: ${{ inputs.release_branch }}
outputs:
target: ${{ steps.set-matrix.outputs.target }}
steps:
- id: set-matrix
run: |
if [ "${{ inputs.target }}" == "all" ]; then
echo "target=['Raspberry Pi 3B','Raspberry Pi 4B','x86-64']" >> $GITHUB_OUTPUT
else
echo "target=['${{ inputs.target }}']" >> $GITHUB_OUTPUT
fi
Generate:
needs: prebuild
runs-on: ubuntu-latest
name: "${{ matrix.target }}; ${{ inputs.tunnel }}"
strategy:
fail-fast: false
matrix:
target: ${{fromJSON(needs.prebuild.outputs.target)}}
steps:
- name: Initialization System Environment
run: |
sudo apt-get -qq update
sudo apt-get -qq install build-essential libncurses5-dev libncursesw5-dev zlib1g-dev gawk git gettext libssl-dev xsltproc rsync wget unzip tar gzip qemu-utils mkisofs
sudo timedatectl set-timezone "$TZ"
echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV
- name: Setup Environment Variables
run: |
if [ "$TARGET" == "Raspberry Pi 3B" ]; then
echo "PROFILE=rpi-3" >> $GITHUB_ENV
echo "TARGET_SYSTEM=bcm27xx/bcm2710" >> $GITHUB_ENV
echo "TARGET_NAME=bcm27xx-bcm2710" >> $GITHUB_ENV
echo "ARCH_1=armv7" >> $GITHUB_ENV
echo "ARCH_2=aarch64" >> $GITHUB_ENV
echo "ARCH_3=aarch64_cortex-a53" >> $GITHUB_ENV
elif [ "$TARGET" == "Raspberry Pi 4B" ]; then
echo "PROFILE=rpi-4" >> $GITHUB_ENV
echo "TARGET_SYSTEM=bcm27xx/bcm2711" >> $GITHUB_ENV
echo "TARGET_NAME=bcm27xx-bcm2711" >> $GITHUB_ENV
echo "ARCH_1=arm64" >> $GITHUB_ENV
echo "ARCH_2=aarch64" >> $GITHUB_ENV
echo "ARCH_3=aarch64_cortex-a72" >> $GITHUB_ENV
elif [ "$TARGET" == "NanoPi-R5S" ]; then
echo "PROFILE=friendlyarm_nanopi-r5s" >> $GITHUB_ENV
echo "TARGET_SYSTEM=rockchip/armv8" >> $GITHUB_ENV
echo "TARGET_NAME=rockchip-armv8" >> $GITHUB_ENV
echo "ARCH_1=armv8" >> $GITHUB_ENV
echo "ARCH_2=aarch64" >> $GITHUB_ENV
echo "ARCH_3=aarch64_generic" >> $GITHUB_ENV
elif [ "$TARGET" == "x86-64" ]; then
echo "PROFILE=generic" >> $GITHUB_ENV
echo "TARGET_SYSTEM=x86/64" >> $GITHUB_ENV
echo "TARGET_NAME=x86-64" >> $GITHUB_ENV
echo "ARCH_1=amd64" >> $GITHUB_ENV
echo "ARCH_2=x86_64" >> $GITHUB_ENV
echo "ARCH_3=x86_64" >> $GITHUB_ENV
fi
echo "WORKING_DIR="${RELEASE_BRANCH%:*}"-imagebuilder-"$TARGET_NAME".Linux-x86_64" >> $GITHUB_ENV
echo "DOWNLOAD_BASE=https://downloads."${RELEASE_BRANCH%:*}".org" >> $GITHUB_ENV
echo "BASE=${RELEASE_BRANCH%:*}" >> $GITHUB_ENV
echo "BRANCH=${RELEASE_BRANCH#*:}" >> $GITHUB_ENV
echo "tags=$( [[ "${RELEASE_BRANCH#*:}" == "21.02.7" ]] && echo "21.02" )" >> $GITHUB_ENV
echo "DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV
echo "DATETIME=$(date +'%Y.%m.%d-%H:%M:%S')" >> $GITHUB_ENV
echo "DATEMONTH=$(date +"%B-%Y" | awk '{print tolower($0)}')" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
with:
path: origin
- name: Download Image Builder
id: download
run: |
SNAPSHOTS="$DOWNLOAD_BASE/$BRANCH/targets/$TARGET_SYSTEM/$BASE-imagebuilder-$TARGET_NAME.Linux-x86_64.tar.xz"
RELEASE="$DOWNLOAD_BASE/releases/$BRANCH/targets/$TARGET_SYSTEM/$BASE-imagebuilder-$BRANCH-$TARGET_NAME.Linux-x86_64.tar.xz"
[ "$BRANCH" == "snapshots" ] && wget -nv "$SNAPSHOTS" || wget -nv "$RELEASE"
tar -xJf *-imagebuilder-* && sync && rm -f *-imagebuilder-*.tar.xz && mv *-imagebuilder-* $WORKING_DIR && sync
cp -r $GITHUB_WORKSPACE/origin/* $GITHUB_WORKSPACE/$WORKING_DIR
echo "status=success" >> $GITHUB_OUTPUT
- name: Download External Packages
id: packages
if: steps.download.outputs.status == 'success' && !cancelled()
run: |
cd $WORKING_DIR
bash external-package-urls.sh
[ "$ARCH_1" == "amd64" ] && ARCH_1=x86
if [[ "$BRANCH" == "21.02.7" ]]; then
grep -E "^all-all|^old-$tags|^$ARCH_1-$tags|^$ARCH_1" external-package-urls.txt | awk '{print $2}' > output_url.txt
else
grep -E "^all-all|^all|^$ARCH_1" external-package-urls.txt | grep -vE "^$ARCH_1-$tags" | awk '{print $2}' > output_url.txt
fi
wget --no-check-certificate -i output_url.txt -nv -P packages
echo "status=success" >> $GITHUB_OUTPUT
- name: Run Patch and DIY Scripts
id: scripts
if: steps.packages.outputs.status == 'success' && !cancelled()
run: |
cd $WORKING_DIR
bash scripts/builder-patch.sh
bash scripts/agh-core.sh
bash scripts/misc.sh
if [[ "$TUNNEL" == "all" && "$BRANCH" != "21.02.7" ]]; then
echo "VPN Client: $TUNNEL"
bash scripts/tunnel_app.sh openclash-passwall
elif [[ ("$TUNNEL" == "passwall" || "$TUNNEL" == "openclash-passwall") && "$BRANCH" != "21.02.7" || "$TUNNEL" == "openclash" ]]; then
echo "VPN Client: $TUNNEL"
bash scripts/tunnel_app.sh "$TUNNEL"
elif [[ "$TUNNEL" == "all" && "$BRANCH" = "21.02.7" ]]; then
echo "VPN Client: $TUNNEL"
bash scripts/tunnel_app.sh openclash
else
echo "No VPN Client selected"
fi
if [ "$TUNNEL" = "openclash" ] || [ "$TUNNEL" = "openclash-passwall" ] || [ "$TUNNEL" = "all" ]; then bash scripts/clash-core.sh; fi
ls packages
echo "status=success" >> $GITHUB_OUTPUT
echo -e "Server space usage before starting to compile: \n$(df -hT ${PWD}) \n"
- name: Compile Firmware
id: compile
if: steps.scripts.outputs.status == 'success' && !cancelled()
run: |
cd $WORKING_DIR
mkdir -p compiled_images
if [[ "$TUNNEL" == "all" && "$BRANCH" != "21.02.7" ]]; then
for t in openclash-passwall openclash passwall no-tunnel; do
echo "Compiling with VPN Client: $t"
if [ "$CLEAN" == "true" ]; echo "Start 'make clean' before building images."; then make clean; fi
time bash make-build.sh $PROFILE $t
rm -rf bin/targets/"$TARGET_SYSTEM"/*.{json,manifest,bin,*-rootfs*,*factory*,sha256sums}
for file in bin/targets/"$TARGET_SYSTEM"/*-"$TARGET_NAME"-*.img.gz; do mv "$file" compiled_images/fri_$(basename "$file" .img.gz)$( echo "_$t" )_$DATE.img.gz; done
done
elif [[ "$TUNNEL" == "all" && "$BRANCH" = "21.02.7" ]]; then
for t in openclash no-tunnel; do
echo "Compiling with VPN Client: $t"
if [ "$CLEAN" == "true" ]; echo "Start 'make clean' before building images."; then make clean; fi
time bash make-build.sh $PROFILE $t
rm -rf bin/targets/"$TARGET_SYSTEM"/*.{json,manifest,bin,*-rootfs*,*factory*,sha256sums}
for file in bin/targets/"$TARGET_SYSTEM"/*-"$TARGET_NAME"-*.img.gz; do mv "$file" compiled_images/fri_$(basename "$file" .img.gz)$( echo "_$t" )_$DATE.img.gz; done
done
elif [[ ("$TUNNEL" == "passwall" || "$TUNNEL" == "openclash-passwall") && "$BRANCH" != "21.02.7" || "$TUNNEL" == "openclash" || "$TUNNEL" == "no-tunnel" ]]; then
echo "Compiling with VPN Client: $TUNNEL"
bash make-build.sh $PROFILE $TUNNEL
rm -rf bin/targets/"$TARGET_SYSTEM"/*.{json,manifest,bin,*-rootfs*,*factory*,sha256sums}
for file in bin/targets/"$TARGET_SYSTEM"/*-"$TARGET_NAME"-*.img.gz; do mv "$file" compiled_images/fri_$(basename "$file" .img.gz)$( echo "_$TUNNEL" )_$DATE.img.gz; done
fi
sha256sum compiled_images/fri_*.img.gz > compiled_images/sha256sums
ls compiled_images
echo "status=success" >> $GITHUB_OUTPUT
echo -e "Server space usage after compilation: \n$(df -hT ${PWD}) \n"
- name: Upload All Firmware to Artifacts
if: github.event.inputs.upload-artifacts == 'true'
uses: actions/upload-artifact@v4
with:
name: ${{ env.PROFILE }}-${{ env.BASE }}-${{ env.BRANCH }}-${{ env.DATEMONTH }}
path: ${{ env.WORKING_DIR }}/compiled_images//*
- name: Upload Firmware to Release
uses: termux/upload-release-action@v4.0.2
if: github.event.inputs.upload-artifacts == 'false'
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file_glob: true
file: ${{ env.WORKING_DIR }}/compiled_images//*
asset_name: ${{ github.event.repository.name }}-${{ github.sha }}
tag: ${{ env.PROFILE }}-${{ env.BASE }}-${{ env.BRANCH }}-${{ env.DATEMONTH }}
overwrite: true
prerelease: true
body: |
### friWrt ${{ env.BASE }}-${{ env.BRANCH }} Image information
Build date: ${{ env.DATETIME }}
See [here](https://github.com/frizkyiman/friWrt-MyWrtBuilder?tab=readme-ov-file#firmware-details) for more detail feature and other information.
- Default IP: 192.168.1.1
- Default username: root
- Default password: friwrt
- Default WIFI name: friWrt_2g | friWrt_5g (if device supported)
- Default WIFI password: friwrt2023 (if device supported)