Skip to content

Streamlined Build

Streamlined Build #400

Workflow file for this run

name: Streamlined Build
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * *"
permissions: write-all
jobs:
check:
runs-on: ubuntu-latest
name: Check New Version
outputs:
versions: ${{ steps.needs-versions.outputs.result }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get RouterOS "stable" version
id: get-stable
run: |
ROSVER=`curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.stable | awk 'FS=" " {print $1}'`
echo version=$ROSVER >> $GITHUB_OUTPUT
echo $ROSVER
- name: Get RouterOS "testing" version
id: get-testing
run: |
ROSVER=`curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.testing | awk 'FS=" " {print $1}'`
echo version=$ROSVER >> $GITHUB_OUTPUT
echo $ROSVER
- name: Get RouterOS "development" version
id: get-dev
run: |
ROSVER=`curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.development | awk 'FS=" " {print $1}'`
echo version=$ROSVER >> $GITHUB_OUTPUT
echo $ROSVER
- name: Get RouterOS "long-term" version
id: get-longterm
run: |
ROSVER=`curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.long-term | awk 'FS=" " {print $1}'`
echo version=$ROSVER >> $GITHUB_OUTPUT
echo $ROSVER
- name: Check "stable" channel is release
id: has-stable
uses: insightsengineering/release-existence-action@v1.0.0
with:
release-tag: ${{ steps.get-stable.outputs.version }}
- name: Check "testing" channel is release
id: has-testing
uses: insightsengineering/release-existence-action@v1.0.0
with:
release-tag: ${{ steps.get-testing.outputs.version }}
- name: Check "development" channel is release
id: has-dev
uses: insightsengineering/release-existence-action@v1.0.0
with:
release-tag: ${{ steps.get-dev.outputs.version }}
- name: Check "long-term" channel is release
id: has-longterm
uses: insightsengineering/release-existence-action@v1.0.0
with:
release-tag: ${{ steps.get-longterm.outputs.version }}
- name: Build Versions for Build "Matrix"
id: needs-versions
uses: actions/github-script@v6
with:
result-encoding: json
script: |
var versions = []
if (!${{ steps.has-stable.outputs.release-exists }}) {
versions.push("${{ steps.get-stable.outputs.version }}")
}
if (!${{ steps.has-testing.outputs.release-exists }}) {
versions.push("${{ steps.get-testing.outputs.version }}")
}
if (!${{ steps.has-dev.outputs.release-exists }}) {
versions.push("${{ steps.get-dev.outputs.version }}")
}
if (!${{ steps.has-longterm.outputs.release-exists }}) {
versions.push("${{ steps.get-longterm.outputs.version }}")
}
console.log(versions)
return versions
- name: Log Results
run: |
echo '${{ steps.needs-versions.outputs.result }}'
echo '${{ fromJSON(steps.needs-versions.outputs.result)[0] != null }}'
build:
needs: check
permissions:
contents: write
name: Build Image
runs-on: ubuntu-latest
if: ${{ fromJSON(needs.check.outputs.versions)[0] != null }}
strategy:
matrix:
version: ${{ fromJSON(needs.check.outputs.versions) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Initialize environment
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo -E apt update
sudo -E apt -y install curl qemu-utils rsync unzip zip
- name: Load nbd module
run: |
sudo -E modprobe nbd
- name: Download
run: |
curl -skL --retry 3 --connect-timeout 3 -o chr.img.zip https://download.mikrotik.com/routeros/${{matrix.version}}/chr-${{matrix.version}}.img.zip
unzip chr.*.zip
rm -rf chr.*.zip
- name: Convert to qcow2
run: |
qemu-img convert -f raw -O qcow2 chr-*.img chr.qcow2
cp -af chr.qcow2 chr-efi.qcow2
rm -rf chr-*.img
- name: Connect ndb
run: |
sudo -E qemu-nbd -c /dev/nbd0 chr.qcow2
sudo -E qemu-nbd -c /dev/nbd1 chr-efi.qcow2
- name: Format boot partition
run: |
sudo -E mkfs -t fat /dev/nbd1p1
- name: Create tmp dir
run: |
sudo -E rm -rf /tmp/chr*
sudo -E mkdir /tmp/chr-bios/
sudo -E mkdir /tmp/chr-efi/
- name: Mount
run: |
sudo -E mount /dev/nbd0p1 /tmp/chr-bios/
sudo -E mount /dev/nbd1p1 /tmp/chr-efi/
- name: Sync files
run: |
sudo -E rsync -a /tmp/chr-bios/ /tmp/chr-efi/
- name: Umount
run: |
sudo -E umount /dev/nbd0p1
sudo -E umount /dev/nbd1p1
- name: remove tmp dir
run: |
sudo -E rm -rf /tmp/chr*
- name: Disconnect ndb
run: |
sudo -E qemu-nbd -d /dev/nbd0
sudo -E qemu-nbd -d /dev/nbd1
- name: Remove old
run: |
rm -rf chr.qcow2
- name: Convert images
run: |
mkdir -p ./Firmware/
cp -f chr-efi.qcow2 ./Firmware/
qemu-img convert -f qcow2 -O vmdk chr-efi.qcow2 ./Firmware/chr-efi.vmdk
qemu-img convert -f qcow2 -O vpc chr-efi.qcow2 ./Firmware/chr-efi.vhd
qemu-img convert -f qcow2 -O vhdx chr-efi.qcow2 ./Firmware/chr-efi.vhdx
qemu-img convert -f qcow2 -O vdi chr-efi.qcow2 ./Firmware/chr-efi.vdi
qemu-img convert -f qcow2 -O raw chr-efi.qcow2 ./Firmware/chr-efi.img
ls -l ./Firmware
- name: Zip images
run: |
cd ./Firmware/
zip chr-${{matrix.version}}.qcow2.zip chr-efi.qcow2
zip chr-${{matrix.version}}.vmdk.zip chr-efi.vmdk
zip chr-${{matrix.version}}.vhd.zip chr-efi.vhd
zip chr-${{matrix.version}}.vhdx.zip chr-efi.vhdx
zip chr-${{matrix.version}}.vdi.zip chr-efi.vdi
zip chr-${{matrix.version}}.img.zip chr-efi.img
ls -l ./
- name: Upload Firmware to release
uses: ncipollo/release-action@v1
with:
name: ${{matrix.version}}
allowUpdates: true
removeArtifacts: true
tag: ${{matrix.version}}
commit: main
token: ${{ secrets.GITHUB_TOKEN }}
artifacts: ./Firmware/*.zip