Patch v6 #3
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: Patch v6 | |
on: | |
workflow_dispatch: | |
permissions: | |
contents: write | |
env: | |
MIKRO_NPK_SIGN_PUBLIC_KEY: C293CED638A2A33C681FC8DE98EE26C54EADC5390C2DFCE197D35C83C416CF59 | |
MIKRO_LICENSE_PUBLIC_KEY: 8E1067E4305FCDC0CFBF95C10F96E5DFE8C49AEF486BD1A4E2E96C27F01E3E32 | |
CUSTOM_NPK_SIGN_PRIVATE_KEY: 7D008D9B80B036FB0205601FEE79D550927EBCA937B7008CC877281F2F8AC640 | |
CUSTOM_NPK_SIGN_PUBLIC_KEY: 28F886E32C141123126CFBCAD56766E99D1720CEB1F12BE2468BEBE7662FBEDB | |
CUSTOM_LICENSE_PRIVATE_KEY: 9DBC845E9018537810FDAE62824322EEE1B12BAD81FCA28EC295FB397C61CE0B | |
CUSTOM_LICENSE_PUBLIC_KEY: 723A34A6E3300F23E4BAA06156B9327514AEC170732655F16E04C17928DD770F | |
jobs: | |
patch: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Get latest version | |
id: get_latest | |
run: | | |
echo $(uname -a) | |
NEWEST=$(curl -s https://upgrade.mikrotik.com/routeros/NEWEST6.stable) | |
LATEST_VERSION=$(echo "$NEWEST" | cut -d' ' -f1) | |
BUILD_TIME=$(echo "$NEWEST" | cut -d' ' -f2) | |
echo Latest Version: $LATEST_VERSION | |
echo Build Time: $BUILD_TIME | |
_LATEST_VERSION=$(cat latest6.txt | cut -d ' ' -f1) | |
if [ "$_LATEST_VERSION" == "$LATEST_VERSION" ]; then | |
echo "No new version found" | |
echo "has_new_version=false" >> $GITHUB_OUTPUT | |
exit 0 | |
fi | |
echo "has_new_version=true" >> $GITHUB_OUTPUT | |
curl -s -o CHANGELOG https://upgrade.mikrotik.com/routeros/$LATEST_VERSION/CHANGELOG | |
cat CHANGELOG | |
echo "NEWEST=${NEWEST}" >> $GITHUB_ENV | |
echo "LATEST_VERSION=${LATEST_VERSION}" >> $GITHUB_ENV | |
sudo apt-get update > /dev/null | |
- name: Cache mikrotik-${{ env.LATEST_VERSION }}.iso | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
id: cache_mikrotik | |
uses: actions/cache@v4 | |
with: | |
path: mikrotik.iso | |
key: mikrotik-${{ env.LATEST_VERSION }}-x86 | |
- name: Get mikrotik-${{ env.LATEST_VERSION }}.iso | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_mikrotik.outputs.cache-hit != 'true' | |
run: | | |
sudo curl -s -o mikrotik.iso https://download.mikrotik.com/routeros/$LATEST_VERSION/mikrotik-$LATEST_VERSION.iso | |
- name: Patch mikrotik-${{ env.LATEST_VERSION }}.iso | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
run: | | |
sudo apt-get install -y mkisofs xorriso > /dev/null | |
sudo mkdir ./iso | |
sudo mount -o loop,ro mikrotik.iso ./iso | |
sudo mkdir ./new_iso | |
sudo cp -r ./iso/* ./new_iso/ | |
sudo rsync -a ./iso/ ./new_iso/ | |
sudo umount ./iso | |
sudo rm -rf ./iso | |
sudo mv ./new_iso/system-$LATEST_VERSION.npk ./ | |
sudo -E python3 patch.py npk system-$LATEST_VERSION.npk | |
sudo -E python3 patch.py kernel ./new_iso/isolinux/initrd.rgz | |
NPK_FILES=$(find ./new_iso/*.npk) | |
for file in $NPK_FILES; do | |
sudo -E python3 npk.py sign $file $file | |
done | |
sudo cp system-$LATEST_VERSION.npk ./new_iso/ | |
sudo mkisofs -o mikrotik-$LATEST_VERSION-patched.iso \ | |
-V "MikroTik $LATEST_VERSION" \ | |
-sysid "" -preparer "MiKroTiK" \ | |
-publisher "" -A "MiKroTiK RouterOS" \ | |
-input-charset utf-8 \ | |
-b isolinux/isolinux.bin \ | |
-c isolinux/boot.cat \ | |
-no-emul-boot \ | |
-boot-load-size 4 \ | |
-boot-info-table \ | |
-R -J \ | |
./new_iso | |
sudo mkdir ./all_packages | |
sudo cp ./new_iso/*.npk ./all_packages/ | |
sudo rm -rf ./new_iso | |
cd ./all_packages | |
sudo zip ../all_packages-x86-$LATEST_VERSION-patched.zip *.npk | |
cd .. | |
- name: Cache install-image-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
id: cache_install_image | |
uses: actions/cache@v4 | |
with: | |
path: install-image.zip | |
key: install-image-${{ env.LATEST_VERSION }}-x86 | |
- name: Get install-image-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_install_image.outputs.cache-hit != 'true' | |
run: | | |
sudo curl -s -o install-image.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/install-image-$LATEST_VERSION.zip | |
- name: Patch install-image-${{ env.LATEST_VERSION }}.img | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
run: | | |
sudo apt-get install -y qemu-utils extlinux > /dev/null | |
sudo unzip install-image.zip | |
sudo modprobe nbd | |
sudo qemu-nbd -c /dev/nbd0 -f raw install-image-$LATEST_VERSION.img | |
sudo mkdir ./install | |
sudo mount /dev/nbd0 ./install | |
sudo -E python3 patch.py kernel ./install/initrd.rgz | |
sudo rm -rf ./install/*.npk | |
NPK_FILES=($(find ./all_packages/*.npk)) | |
for ((i=1; i<=${#NPK_FILES[@]}; i++)) | |
do | |
echo "${NPK_FILES[$i-1]}=>$i.npk" | |
sudo cp ${NPK_FILES[$i-1]} ./install/$i.npk | |
done | |
sudo umount /dev/nbd0 | |
sudo qemu-nbd -d /dev/nbd0 | |
sudo rm -rf ./install | |
sudo mv install-image-$LATEST_VERSION.img install-image-$LATEST_VERSION-patched.img | |
sudo qemu-img convert -f raw -O qcow2 install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.qcow2 | |
sudo qemu-img convert -f raw -O vmdk install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vmdk | |
sudo qemu-img convert -f raw -O vpc install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vhd | |
sudo qemu-img convert -f raw -O vhdx install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vhdx | |
sudo qemu-img convert -f raw -O vdi install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vdi | |
sudo zip install-image-$LATEST_VERSION-patched.qcow2.zip install-image-$LATEST_VERSION-patched.qcow2 | |
sudo zip install-image-$LATEST_VERSION-patched.vmdk.zip install-image-$LATEST_VERSION-patched.vmdk | |
sudo zip install-image-$LATEST_VERSION-patched.vhd.zip install-image-$LATEST_VERSION-patched.vhd | |
sudo zip install-image-$LATEST_VERSION-patched.vhdx.zip install-image-$LATEST_VERSION-patched.vhdx | |
sudo zip install-image-$LATEST_VERSION-patched.vdi.zip install-image-$LATEST_VERSION-patched.vdi | |
sudo zip install-image-$LATEST_VERSION-patched.img.zip install-image-$LATEST_VERSION-patched.img | |
sudo rm install-image-$LATEST_VERSION-patched.qcow2 | |
sudo rm install-image-$LATEST_VERSION-patched.vmdk | |
sudo rm install-image-$LATEST_VERSION-patched.vhd | |
sudo rm install-image-$LATEST_VERSION-patched.vhdx | |
sudo rm install-image-$LATEST_VERSION-patched.vdi | |
sudo rm install-image-$LATEST_VERSION-patched.img | |
- name: Cache chr-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
id: cache_chr_img | |
uses: actions/cache@v4 | |
with: | |
path: chr.img.zip | |
key: chr-${{ env.LATEST_VERSION }}-x86 | |
- name: Get chr-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_chr_img.outputs.cache-hit != 'true' | |
run: | | |
sudo curl -s -o chr.img.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/chr-$LATEST_VERSION.img.zip | |
- name: Patch chr-${{ env.LATEST_VERSION }}.img | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
run: | | |
sudo apt-get install -y qemu-utils extlinux > /dev/null | |
sudo unzip chr.img.zip | |
sudo modprobe nbd | |
sudo qemu-nbd -c /dev/nbd0 -f raw chr-$LATEST_VERSION.img | |
sudo mkdir -p ./chr/{boot,routeros} | |
sudo -E python3 patch.py block /dev/nbd0p1 boot/initrd.rgz | |
sudo mount /dev/nbd0p1 ./chr | |
sudo cp ./all_packages/dude-$LATEST_VERSION.npk ./chr/var/pdb/dude/image | |
sudo -E python3 patch.py npk ./chr/var/pdb/routeros-x86/image | |
sudo cp ./chr/var/pdb/routeros-x86/image ./all_packages/routeros-x86-$LATEST_VERSION.npk | |
sudo cp ./all_packages/routeros-x86-$LATEST_VERSION.npk ./routeros-x86-$LATEST_VERSION-patched.npk | |
sudo umount ./chr | |
sudo qemu-nbd -d /dev/nbd0 | |
sudo rm -rf ./chr | |
sudo cp chr-$LATEST_VERSION.img chr-$LATEST_VERSION-patched.img | |
sudo qemu-img convert -f raw -O qcow2 chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.qcow2 | |
sudo qemu-img convert -f raw -O vmdk chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vmdk | |
sudo qemu-img convert -f raw -O vpc chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vhd | |
sudo qemu-img convert -f raw -O vhdx chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vhdx | |
sudo qemu-img convert -f raw -O vdi chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vdi | |
sudo zip chr-$LATEST_VERSION-patched.qcow2.zip chr-$LATEST_VERSION-patched.qcow2 | |
sudo zip chr-$LATEST_VERSION-patched.vmdk.zip chr-$LATEST_VERSION-patched.vmdk | |
sudo zip chr-$LATEST_VERSION-patched.vhd.zip chr-$LATEST_VERSION-patched.vhd | |
sudo zip chr-$LATEST_VERSION-patched.vhdx.zip chr-$LATEST_VERSION-patched.vhdx | |
sudo zip chr-$LATEST_VERSION-patched.vdi.zip chr-$LATEST_VERSION-patched.vdi | |
sudo zip chr-$LATEST_VERSION-patched.img.zip chr-$LATEST_VERSION-patched.img | |
sudo rm chr-$LATEST_VERSION-patched.qcow2 | |
sudo rm chr-$LATEST_VERSION-patched.vmdk | |
sudo rm chr-$LATEST_VERSION-patched.vhd | |
sudo rm chr-$LATEST_VERSION-patched.vhdx | |
sudo rm chr-$LATEST_VERSION-patched.vdi | |
sudo rm chr-$LATEST_VERSION-patched.img | |
- name: Update latest version | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
run: | | |
echo $NEWEST > latest6.txt | |
git config user.name "github-actions[bot]" | |
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git add latest6.txt | |
git commit -m "Update latest version" | |
git push | |
- name: Create Release tag ${{ env.LATEST_VERSION }} | |
if: steps.get_latest.outputs.has_new_version == 'true' | |
uses: softprops/action-gh-release@v2 | |
with: | |
name: "RouterOS ${{ env.LATEST_VERSION }}" | |
body_path: "CHANGELOG" | |
tag_name: ${{ env.LATEST_VERSION }} | |
make_latest: true | |
files: | | |
mikrotik-${{ env.LATEST_VERSION }}-patched.iso | |
install-image-${{ env.LATEST_VERSION }}-patched.*.zip | |
chr-${{ env.LATEST_VERSION }}-patched.*.zip | |
routeros-x86-${{ env.LATEST_VERSION }}-patched.npk | |
all_packages-x86-${{ env.LATEST_VERSION }}-patched.zip |