Streamlined Build #400
This file contains hidden or 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: 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 |