VyOS arm64 build #172
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: VyOS arm64 build | |
| on: | |
| schedule: | |
| - cron: "0 1 * * 5" | |
| workflow_dispatch: | |
| inputs: | |
| BUILD_BY: | |
| description: 'Builder identifier (default: 1707683+huihuimoe@users.noreply.github.com)' | |
| default: '' | |
| build_version: | |
| description: 'Version number (default: YYYY.MM.DD-TIMESTAMP-rolling)' | |
| default: '' | |
| builder_image: | |
| description: 'Builder image (default: ghcr.io/huihuimoe/vyos-arm64-build/vyos-builder:rolling-arm64, official: docker.io/vyos/vyos-build:current-arm64)' | |
| default: '' | |
| env: | |
| DEBIAN_MIRROR: http://deb.debian.org/debian/ | |
| DEBIAN_SECURITY_MIRROR: http://deb.debian.org/debian-security | |
| # ~~no package on the official repo~~ fixed | |
| VYOS_MIRROR: https://packages.vyos.net/repositories/rolling/ | |
| # this repo doesn't seem to be updated anymore | |
| # https://dev.packages.vyos.net/?dir=repositories/current/dists/current | |
| # VYOS_MIRROR: https://rolling-packages.vyos.net/current/ | |
| jobs: | |
| build_generic_iso: | |
| runs-on: ubuntu-24.04-arm | |
| permissions: | |
| contents: write | |
| checks: read | |
| statuses: read | |
| container: | |
| # the official image too old, need to update | |
| # image: vyos/vyos-build:current-arm64 | |
| image: ${{ github.event.inputs.builder_image || 'ghcr.io/huihuimoe/vyos-arm64-build/vyos-builder:rolling-arm64' }} | |
| options: --sysctl net.ipv6.conf.lo.disable_ipv6=0 --privileged --user root | |
| defaults: | |
| run: | |
| shell: bash | |
| outputs: | |
| BUILD_BY: ${{ steps.set_env_variables.outputs.BUILD_BY }} | |
| build_version: ${{ steps.set_env_variables.outputs.build_version }} | |
| TIMESTAMP: ${{ steps.set_env_variables.outputs.TIMESTAMP }} | |
| PREVIOUS_SUCCESS_BUILD_TIMESTAMP: ${{ steps.set_env_variables.outputs.PREVIOUS_SUCCESS_BUILD_TIMESTAMP }} | |
| vyos_1x_ref: ${{ steps.find_vyos_1x_ref.outputs.sha }} | |
| generic_image_iso: ${{ steps.build_generic_iso.outputs.generic_image_iso }} | |
| generic_image_name: ${{ steps.build_generic_iso.outputs.generic_image_name }} | |
| steps: | |
| - name: Install Dependencies | |
| run: | | |
| source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| set -ex | |
| echo "HOME: $HOME" | |
| echo "PATH: $PATH" | |
| command -v go | |
| command -v opam | |
| lscpu | |
| free -m | |
| # Install missing packages | |
| apt-get update -qq | |
| apt-get install -y \ | |
| libsystemd-dev libglib2.0-dev libip4tc-dev libipset-dev libnfnetlink-dev \ | |
| libnftnl-dev libnl-nf-3-dev libpopt-dev libpcap-dev libbpf-dev \ | |
| bubblewrap git-lfs kpartx clang llvm cmake \ | |
| protobuf-compiler python3-cracklib python3-protobuf \ | |
| libreadline-dev liblua5.3-dev byacc flex \ | |
| curl jq | |
| # python3-cracklib: https://github.com/vyos/vyos-build/commit/e846e68f9f6457865f3e3af92adfe42933555c59 | |
| # protobuf-compiler: https://github.com/vyos/vyos-build/commit/0a6c197226400c4bbe210b435baaa716d4fb8377 | |
| # python3-protobuf: https://github.com/vyos/vyos-build/commit/dd2c245be73c1e83b6ca392924aa549f77c5586e | |
| apt-get upgrade -y | |
| - uses: actions/checkout@v7 | |
| with: | |
| lfs: true | |
| - name: "Initialization: set env variables" | |
| id: set_env_variables | |
| run: | | |
| source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| set -ex | |
| if [ -n "${{ github.event.inputs.BUILD_BY }}" ]; then | |
| echo "BUILD_BY=${{ github.event.inputs.BUILD_BY }}" >> $GITHUB_ENV | |
| echo "BUILD_BY=${{ github.event.inputs.BUILD_BY }}" >> $GITHUB_OUTPUT | |
| else | |
| echo "BUILD_BY=${{ github.repository_owner_id }}+${{ github.repository_owner }}@users.noreply.github.com" >> $GITHUB_ENV | |
| echo "BUILD_BY=${{ github.repository_owner_id }}+${{ github.repository_owner }}@users.noreply.github.com" >> $GITHUB_OUTPUT | |
| fi | |
| if [ -z "${{ github.event.inputs.build_version }}" ]; then | |
| echo "build_version=$(date -u +%Y.%m.%d-%H%M)-rolling" >> $GITHUB_OUTPUT | |
| else | |
| echo "build_version=${{ github.event.inputs.build_version }}" >> $GITHUB_OUTPUT | |
| fi | |
| echo "TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> $GITHUB_OUTPUT | |
| echo "PREVIOUS_SUCCESS_BUILD_TIMESTAMP=$(cat version.json | jq -r '.[0].timestamp')" >> $GITHUB_OUTPUT | |
| - name: Find latest successful vyos-1x rolling commit | |
| id: find_vyos_1x_ref | |
| env: | |
| GITHUB_TOKEN: ${{ github.token }} | |
| OWNER: vyos | |
| REPO: vyos-1x | |
| BRANCH: rolling | |
| run: | | |
| set -euo pipefail | |
| query=' | |
| query($owner: String!, $repo: String!, $branch: String!, $endCursor: String) { | |
| repository(owner: $owner, name: $repo) { | |
| object(expression: $branch) { | |
| ... on Commit { | |
| history(first: 100, after: $endCursor) { | |
| nodes { | |
| oid | |
| committedDate | |
| statusCheckRollup { | |
| state | |
| } | |
| } | |
| pageInfo { | |
| hasNextPage | |
| endCursor | |
| } | |
| } | |
| } | |
| } | |
| } | |
| }' | |
| cursor="" | |
| max_pages=5 | |
| for page in $(seq 1 "$max_pages"); do | |
| payload="$(jq -n \ | |
| --arg query "$query" \ | |
| --arg owner "$OWNER" \ | |
| --arg repo "$REPO" \ | |
| --arg branch "$BRANCH" \ | |
| --arg cursor "$cursor" \ | |
| '{ | |
| query: $query, | |
| variables: { | |
| owner: $owner, | |
| repo: $repo, | |
| branch: $branch, | |
| endCursor: (if $cursor == "" then null else $cursor end) | |
| } | |
| }')" | |
| resp="$(curl --fail-with-body --silent --show-error \ | |
| -H "Authorization: bearer $GITHUB_TOKEN" \ | |
| -H "Content-Type: application/json" \ | |
| --data "$payload" \ | |
| https://api.github.com/graphql)" | |
| sha="$( | |
| jq -r ' | |
| .data.repository.object.history.nodes[] | |
| | select(.statusCheckRollup.state == "SUCCESS") | |
| | .oid | |
| ' <<<"$resp" | head -n 1 | |
| )" | |
| if [ -n "$sha" ]; then | |
| echo "sha=$sha" >> "$GITHUB_OUTPUT" | |
| echo "latest successful vyos-1x rolling sha: $sha" | |
| exit 0 | |
| fi | |
| has_next="$(jq -r '.data.repository.object.history.pageInfo.hasNextPage' <<<"$resp")" | |
| if [ "$has_next" != "true" ]; then | |
| echo "No successful commit found on vyos/vyos-1x branch: $BRANCH" >&2 | |
| exit 1 | |
| fi | |
| cursor="$(jq -r '.data.repository.object.history.pageInfo.endCursor' <<<"$resp")" | |
| done | |
| echo "No successful commit found on vyos/vyos-1x branch: $BRANCH after $max_pages pages" >&2 | |
| exit 1 | |
| # - name: Build global deps | |
| # run: | | |
| # source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| # set -ex | |
| # eval $(opam env --root=/opt/opam --set-root) | |
| # mkdir global_deps | |
| # cd global_deps | |
| # global_deps=( | |
| # libvyosconfig | |
| # vyatta-bash | |
| # vyatta-biosdevname | |
| # vyatta-cfg | |
| # # https://github.com/vyos/vyos-1x/commit/d6a82c134bed0b0921595928b7ec600b2935327b | |
| # # vyatta-wanloadbalance | |
| # vyos-utils | |
| # # Architecture:all, can install directly | |
| # # vyos-user-utils | |
| # vyos-http-api-tools | |
| # # Architecture:all, can install directly | |
| # # vyos-cloud-init | |
| # ipaddrcheck | |
| # udp-broadcast-relay | |
| # hvinfo | |
| # # Architecture:all, can install directly | |
| # # live-boot | |
| # ) | |
| # for global_dep in ${global_deps[@]}; do | |
| # git clone https://github.com/vyos/$global_dep | |
| # cd $global_dep | |
| # echo "y" | mk-build-deps --install --remove | |
| # # should update libvyosconfig due to hardcode on vyos-1x | |
| # # https://github.com/vyos/vyos-1x/blob/e90a2781f9eae555097e078b9b11dd0dca6c0acd/python/vyos/configtree.py#L22 | |
| # # that will failed on reftree.cache | |
| # # 2025.03.05: fixed on https://github.com/vyos/vyos-1x/commit/731195c7adb21208767199f5487dfdf29ce09380 | |
| # # if [ "${global_dep}" = "libvyosconfig" ]; then | |
| # # ./build.sh | |
| # # cp _build/libvyosconfig.so /usr/lib/libvyosconfig.so.0 | |
| # # fi | |
| # dpkg-buildpackage -b -us -uc -tc | |
| # cd .. | |
| # done | |
| - name: Checkout vyos-build repo | |
| uses: actions/checkout@v7 | |
| with: | |
| repository: vyos/vyos-build | |
| path: vyos-build | |
| - name: Fix vyos-build | |
| env: | |
| MOK_KEY: ${{ secrets.MOK_KEY }} | |
| MINISIGN_PRIVATE_KEY: ${{ secrets.MINISIGN_PRIVATE_KEY }} | |
| run: | | |
| [ -n "$MOK_KEY" ] && echo "$MOK_KEY" > data/mok/MOK.key | |
| [ -n "$MINISIGN_PRIVATE_KEY" ] && echo "$MINISIGN_PRIVATE_KEY" > data/huihuimoe-vyos-arm64.minisign.key | |
| source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| set -ex | |
| ### vyos-1x | |
| git clone https://github.com/vyos/vyos-1x vyos-build/scripts/package-build/vyos-1x/vyos-1x | |
| git -C vyos-build/scripts/package-build/vyos-1x/vyos-1x checkout "${{ steps.find_vyos_1x_ref.outputs.sha }}" | |
| git -C vyos-build/scripts/package-build/vyos-1x/vyos-1x submodule update --init --recursive | |
| # fixing unknown internal blob file | |
| # i don't know what is this file and why it's not in the repo | |
| # without this file, the build will failed | |
| # https://github.com/vyos/vyos-1x/commit/bab186b493145ee42453196e8ef4670afc71f6f1 | |
| # https://github.com/vyos/vyos-1x/commit/dd5f9c19550c1f8ccb5e93bab0b604f9f9e1383e | |
| cp data/reftree.cache vyos-build/scripts/package-build/vyos-1x/vyos-1x/data/reftree.cache | |
| # apply patches | |
| # https://github.com/vyos/vyos-1x/commit/6f0dde5f151caa47048be8ebd8dcb17b544aba97 | |
| patch --no-backup-if-mismatch -p1 -d vyos-build/scripts/package-build/vyos-1x/vyos-1x < data/vyos-1x-001-system_console.patch | |
| # https://github.com/vyos/vyos-1x/commit/6f0dde5f151caa47048be8ebd8dcb17b544aba97 | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build/scripts/package-build/vyos-1x/vyos-1x < data/vyos-1x-002-boot_console.patch | |
| patch --no-backup-if-mismatch -p1 -d vyos-build/scripts/package-build/vyos-1x/vyos-1x < data/vyos-1x-003-increase_vyshim_init_timeout.patch | |
| # https://github.com/vyos/vyos-1x/commit/6349b4785454d7dc27f66c09cc4456bc26c985f5 | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build/scripts/package-build/vyos-1x/vyos-1x < data/vyos-1x-004-enable_telegraf_support.patch | |
| # Error: OCI runtime error: crun: cannot set memory+swap limit less than the memory limit | |
| patch --no-backup-if-mismatch -p1 -d vyos-build/scripts/package-build/vyos-1x/vyos-1x < data/vyos-1x-005-fix_podman_service.patch | |
| patch --no-backup-if-mismatch -p1 -d vyos-build/scripts/package-build/vyos-1x/vyos-1x < data/vyos-1x-006-install-image-reserve-gap.patch | |
| # https://github.com/vyos/vyos-1x/commit/1478516ae437f19ebeb7d6ff9b83dd74f8e76758 | |
| sed -i 's/all: clean copyright/all: clean/' vyos-build/scripts/package-build/vyos-1x/vyos-1x/Makefile | |
| # Commit patched changes so build.py's git checkout won't fail on dirty tree | |
| git -C vyos-build/scripts/package-build/vyos-1x/vyos-1x add -A | |
| git -C vyos-build/scripts/package-build/vyos-1x/vyos-1x \ | |
| -c user.name="build" -c user.email="build@localhost" \ | |
| commit -m "apply arm64 patches" | |
| # Point package.toml at the new commit so checkout is a no-op | |
| VYOS_1X_PATCHED_SHA=$(git -C vyos-build/scripts/package-build/vyos-1x/vyos-1x rev-parse HEAD) | |
| sed -i "s|commit_id = \"rolling\"|commit_id = \"${VYOS_1X_PATCHED_SHA}\"|" \ | |
| vyos-build/scripts/package-build/vyos-1x/package.toml | |
| ### vyos-build | |
| # add default and dhcpv4 configuration | |
| cp data/config.boot.default vyos-build/data/live-build-config/includes.chroot/opt/vyatta/etc/ | |
| cp data/config.boot.dhcp vyos-build/data/live-build-config/includes.chroot/opt/vyatta/etc/ | |
| # fix kernel config https://github.com/vyos/vyos-build/pull/1121 | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-001-kernel_config.patch | |
| # https://github.com/vyos/vyos-build/commit/88f11dc01bb676bf652512d6bf23ba0f10f5101f | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-003-fix_hardcoded_x86_64.patch | |
| # fix on https://github.com/vyos/vyos-build/commit/82a40e68c7e4b3ea45fb2bbc4a1a7cff92e41942 | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-004-fix_saltproject_package_url.patch | |
| patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-005-add_vim_link.patch | |
| # fix on https://github.com/vyos/vyos-build/commit/7e803f5000bd77b8cb172cf31b04146c4fc76c8a | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-006-fix_kernel_sign.patch | |
| # sign kernel module but donot sign vmlinuz | |
| patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-007-no_sbsign.patch | |
| # fixed by https://github.com/vyos/vyos-build/commit/5fe0c17b8c6cb8e244762dcb88eb9c0bf705d9f5 | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-008-fix_live_boot_initramfs_link.patch | |
| # https://github.com/vyos/vyos-build/commit/ff2a5df902ca31d51eda6744c94cb257d162fcfc | |
| #patch --no-backup-if-mismatch -p1 -d vyos-build < data/vyos-build-009-live_boot_serial_console_device.patch | |
| # https://github.com/vyos/vyos-build/blob/fd737172f1068870fe1ededbe9b2ed4a86663acd/data/live-build-config/includes.chroot/var/lib/shim-signed/mok/README.md | |
| if [ -f data/mok/MOK.key ]; then | |
| # https://github.com/vyos/vyos-build/commit/d552f7f8c38d7ad3bd28d9019a58b57e41b07f0b | |
| # data/live-build-config/includes.chroot/var/lib/shim-signed/mok -> vyos-build/data/certificates | |
| cp data/mok/MOK.key vyos-build/data/certificates/vyos-dev-2025-linux.key | |
| cp data/mok/MOK.pem vyos-build/data/certificates/vyos-dev-2025-linux.pem | |
| fi | |
| # add minisign pubkey | |
| cp data/huihuimoe-vyos-arm64.minisign.pub vyos-build/data/live-build-config/includes.chroot/usr/share/vyos/keys/ | |
| true | |
| - name: Build Image Packages | |
| run: | | |
| cd vyos-build/scripts/package-build | |
| source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| set -ex | |
| # packages=$(ls .) | |
| # packages="radvd vyos-1x linux-kernel" | |
| packages="vyos-1x" | |
| ignore_packages=(amazon-cloudwatch-agent amazon-ssm-agent xen-guest-agent) | |
| for package in $packages; do | |
| [ ! -d $package ] && continue | |
| [[ " ${ignore_packages[@]} " =~ " ${package} " ]] && continue | |
| cd $package | |
| [ $package == "keepalived" ] && apt-get install -y libsnmp-dev | |
| ./build.py | |
| [ $package == "keepalived" ] && apt-get remove -y libsnmp-dev | |
| # clean | |
| df -Th | |
| apt-get autoremove -y | |
| rm -rf $package *.gz *.xz $HOME/.cache/go-build $HOME/go/pkg/mod $HOME/.rustup | |
| df -Th | |
| cd .. | |
| done | |
| - name: Pick Packages | |
| run: | | |
| cd vyos-build | |
| source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| deb_files=$(find scripts/package-build -name "*.deb" -type f | \ | |
| grep -v -- -dbg | \ | |
| grep -v -- -dev | \ | |
| grep -v -- -doc | |
| ) | |
| ignore_packages=( | |
| charon-cmd | |
| dropbear-initramfs | |
| dropbear-run | |
| eapoltest | |
| frr-test-tools | |
| isc-dhcp-client-ddns | |
| isc-dhcp-common | |
| isc-dhcp-keama | |
| isc-dhcp-server | |
| isc-dhcp-server-ldap | |
| libnetsnmptrapd40 | |
| libsnmp-perl | |
| libtac2-bin | |
| libyang-modules | |
| libyang-tools | |
| # python3-nftables | |
| rtr-tools | |
| sflowovsd.deb | |
| snmptrapd | |
| strongswan-nm | |
| strongswan-pki | |
| tkmib | |
| waagent | |
| wide-dhcpv6-relay | |
| wide-dhcpv6-server | |
| vpp-plugin-devtools | |
| accel-ppp | |
| ) | |
| for deb_file in $deb_files; do | |
| if [[ " ${ignore_packages[@]} " =~ " $(basename $deb_file | cut -d_ -f1) " ]]; then | |
| echo "ignore $deb_file" | |
| continue | |
| fi | |
| cp $deb_file packages | |
| done | |
| # global_deb_files=$(find ../global_deps -name "*.deb" -type f | \ | |
| # grep -v -- -dbg | \ | |
| # grep -v -- -dev | \ | |
| # grep -v -- -doc | |
| # ) | |
| # for deb_file in $global_deb_files; do | |
| # cp $deb_file packages | |
| # done | |
| # # vpp addition files | |
| # find scripts/package-build/vpp -name "libvppinfra-dev*.deb" -type f -exec cp {} packages ';' | |
| # find scripts/package-build/vpp -name "vpp-dev*.deb" -type f -exec cp {} packages ';' | |
| ls -alh packages | |
| - name: Archive Packages | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: vyos-packages | |
| path: vyos-build/packages/ | |
| retention-days: 30 | |
| compression-level: 0 | |
| - name: Build generic ISO image | |
| id: build_generic_iso | |
| run: | | |
| cd vyos-build | |
| source <(sed -n '/enable programmable completion/,$p' /etc/skel/.bashrc) | |
| set -ex | |
| rm -rf packages/linux-headers-* | |
| ./build-vyos-image \ | |
| --architecture arm64 \ | |
| --build-by $BUILD_BY \ | |
| --build-type release \ | |
| --debian-mirror $DEBIAN_MIRROR \ | |
| --debian-security-mirror $DEBIAN_SECURITY_MIRROR \ | |
| --version ${{ steps.set_env_variables.outputs.build_version }} \ | |
| --vyos-mirror $VYOS_MIRROR \ | |
| --custom-package vim-tiny \ | |
| --custom-package neofetch \ | |
| --custom-package tree \ | |
| --custom-package btop \ | |
| --custom-package ripgrep \ | |
| --custom-package wget \ | |
| --custom-package ncdu \ | |
| --custom-package fastnetmon \ | |
| --custom-package containernetworking-plugins \ | |
| --custom-package qemu-guest-agent \ | |
| --custom-package mokutil \ | |
| --custom-package sbsigntool \ | |
| --custom-package grub-efi-arm64-signed \ | |
| --custom-package shim-signed \ | |
| generic | |
| # --custom-package cloud-init | |
| cd build | |
| # Determine image name and iso file | |
| GENERIC_IMAGE_NAME=$(jq --raw-output .artifacts[0] manifest.json | sed -e 's/.iso//') | |
| GENERIC_IMAGE_ISO=$(jq --raw-output .artifacts[0] manifest.json) | |
| echo "generic_image_name=${GENERIC_IMAGE_NAME}" >> $GITHUB_OUTPUT | |
| echo "generic_image_iso=${GENERIC_IMAGE_ISO}" >> $GITHUB_OUTPUT | |
| # Cryptographically sign the image | |
| MINISIGN_PUBKEY_FILE=$GITHUB_WORKSPACE/data/huihuimoe-vyos-arm64.minisign.pub | |
| MINISIGN_SECKEY_FILE=$GITHUB_WORKSPACE/data/huihuimoe-vyos-arm64.minisign.key | |
| if [ -f "$MINISIGN_SECKEY_FILE" ]; then | |
| $GITHUB_WORKSPACE/bin/minisign -s $MINISIGN_SECKEY_FILE -Sm ${GENERIC_IMAGE_ISO} | |
| $GITHUB_WORKSPACE/bin/minisign -Vm ${GENERIC_IMAGE_ISO} -x ${GENERIC_IMAGE_ISO}.minisig -p $MINISIGN_PUBKEY_FILE | |
| else | |
| # create a non-zero file to indicate failure | |
| echo "fake sign" > ${GENERIC_IMAGE_ISO}.minisig | |
| fi | |
| # Move artifacts to workspace to avoid nested path in artifact archive | |
| mv manifest.json ${GENERIC_IMAGE_ISO} ${GENERIC_IMAGE_ISO}.minisig $GITHUB_WORKSPACE | |
| - uses: actions/upload-artifact@v7 | |
| with: | |
| name: ${{ steps.build_generic_iso.outputs.generic_image_name }} | |
| path: | | |
| manifest.json | |
| ${{ steps.build_generic_iso.outputs.generic_image_iso }} | |
| ${{ steps.build_generic_iso.outputs.generic_image_iso }}.minisig | |
| retention-days: 15 | |
| if-no-files-found: error | |
| compression-level: 0 | |
| publish: | |
| needs: | |
| - build_generic_iso | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| contents: write | |
| # if: github.ref_name == "${{ github.event.repository.default_branch }}" | |
| if: github.ref_name == 'master' | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - name: Clone vyos-build repo | |
| uses: actions/checkout@v7 | |
| with: | |
| repository: vyos/vyos-build | |
| path: vyos-build | |
| fetch-depth: 0 | |
| - name: Clone vyos-1x source code | |
| uses: actions/checkout@v7 | |
| with: | |
| repository: vyos/vyos-1x | |
| path: vyos-1x | |
| ref: ${{ needs.build_generic_iso.outputs.vyos_1x_ref }} | |
| fetch-depth: 0 | |
| - id: commit_ids | |
| name: Get commit IDs for changelog | |
| run: | | |
| set -ex | |
| cd vyos-build | |
| VYOS_BUILD_REF=$(git rev-parse HEAD) | |
| echo "VYOS_BUILD_REF=${VYOS_BUILD_REF}" >> $GITHUB_OUTPUT | |
| git log --since "${{ needs.build_generic_iso.outputs.PREVIOUS_SUCCESS_BUILD_TIMESTAMP }}" --format="%H" --reverse | |
| CHANGELOG_COMMIT_VYOS_BUILD=$(git log --since "${{ needs.build_generic_iso.outputs.PREVIOUS_SUCCESS_BUILD_TIMESTAMP }}" --format="%H" --reverse | head -n1) | |
| [ -z "$CHANGELOG_COMMIT_VYOS_BUILD" ] && CHANGELOG_COMMIT_VYOS_BUILD="$VYOS_BUILD_REF" | |
| echo "CHANGELOG_COMMIT_VYOS_BUILD=${CHANGELOG_COMMIT_VYOS_BUILD}" >> $GITHUB_OUTPUT | |
| cd ../vyos-1x | |
| git log --since "${{ needs.build_generic_iso.outputs.PREVIOUS_SUCCESS_BUILD_TIMESTAMP }}" --format="%H" --reverse | |
| CHANGELOG_COMMIT_VYOS_1X=$(git log --since "${{ needs.build_generic_iso.outputs.PREVIOUS_SUCCESS_BUILD_TIMESTAMP }}" --format="%H" --reverse | head -n1) | |
| [ -z "$CHANGELOG_COMMIT_VYOS_1X" ] && CHANGELOG_COMMIT_VYOS_1X="${{ needs.build_generic_iso.outputs.vyos_1x_ref }}" | |
| echo "CHANGELOG_COMMIT_VYOS_1X=${CHANGELOG_COMMIT_VYOS_1X}" >> $GITHUB_OUTPUT | |
| - name: "Release publishing: generate changelog for vyos-1x" | |
| id: generate_changelog_for_vyos-1x | |
| uses: mikepenz/release-changelog-builder-action@v6.2.3 | |
| with: | |
| owner: "vyos" | |
| repo: "vyos-1x" | |
| fetchReviewers: false | |
| fromTag: ${{ steps.commit_ids.outputs.CHANGELOG_COMMIT_VYOS_1X }} | |
| toTag: ${{ needs.build_generic_iso.outputs.vyos_1x_ref }} | |
| configurationJson: | | |
| { | |
| "categories": [{"title": "", "labels": []}], | |
| "template": "#{{CHANGELOG}}", | |
| "pr_template": "- #{{TITLE}}\n - PR: vyos/vyos-1x##{{NUMBER}}" | |
| } | |
| - name: "Release publishing: generate changelog for vyos-build" | |
| id: generate_changelog_for_vyos-build | |
| uses: mikepenz/release-changelog-builder-action@v6.2.3 | |
| with: | |
| owner: "vyos" | |
| repo: "vyos-build" | |
| fetchReviewers: false | |
| fromTag: ${{ steps.commit_ids.outputs.CHANGELOG_COMMIT_VYOS_BUILD }} | |
| toTag: ${{ steps.commit_ids.outputs.VYOS_BUILD_REF }} | |
| configurationJson: | | |
| { | |
| "categories": [{"title": "", "labels": []}], | |
| "template": "#{{CHANGELOG}}", | |
| "pr_template": "- #{{TITLE}}\n - PR: vyos/vyos-build##{{NUMBER}}" | |
| } | |
| - name: "Release publishing: generate CHANGELOG.md" | |
| run: | | |
| cat <<EOF > CHANGELOG.md | |
| ## vyos-1x | |
| ${{ steps.generate_changelog_for_vyos-1x.outputs.changelog }} | |
| ## vyos-build | |
| ${{ steps.generate_changelog_for_vyos-build.outputs.changelog }} | |
| EOF | |
| cat CHANGELOG.md | |
| - name: "Release publishing: create version.json" | |
| uses: jsdaniell/create-json@v1.2.3 | |
| with: | |
| name: "version.json" | |
| json: | | |
| [ | |
| { | |
| "url": "https://github.com/${{ github.repository }}/releases/download/${{ needs.build_generic_iso.outputs.build_version }}/${{ needs.build_generic_iso.outputs.generic_image_iso }}", | |
| "version": "${{ needs.build_generic_iso.outputs.build_version }}", | |
| "timestamp": "${{ needs.build_generic_iso.outputs.TIMESTAMP }}" | |
| } | |
| ] | |
| - name: "Release publishing: check if the repository was modified during runtime to prevent autocommit failure" | |
| id: check_if_the_repository_was_modified_during_runtime | |
| run: | | |
| sudo chown -R $(whoami):$(whoami) ./* | |
| git pull --autostash --rebase | |
| - name: "Release publishing: create autocommit and tag" | |
| uses: stefanzweifel/git-auto-commit-action@v7 | |
| with: | |
| tagging_message: ${{ needs.build_generic_iso.outputs.build_version }} | |
| commit_message: ${{ needs.build_generic_iso.outputs.build_version }} | |
| commit_author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>" | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: ${{ needs.build_generic_iso.outputs.generic_image_name }} | |
| # https://github.com/actions/download-artifact/issues/374 | |
| # - uses: actions/download-artifact@v5 | |
| # with: | |
| # name: vyos-packages | |
| # decompress: false | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: vyos-packages | |
| path: packages | |
| - name: archive packages | |
| run: | | |
| set -ex | |
| tar -cvf vyos-packages.tar packages | |
| ls -alh vyos-packages.tar packages | |
| - name: "Release publishing: publish release" | |
| uses: softprops/action-gh-release@v3 | |
| with: | |
| body_path: CHANGELOG.md | |
| tag_name: ${{ needs.build_generic_iso.outputs.build_version }} | |
| fail_on_unmatched_files: true | |
| files: | | |
| ${{ needs.build_generic_iso.outputs.generic_image_iso }} | |
| ${{ needs.build_generic_iso.outputs.generic_image_iso }}.minisig | |
| vyos-packages.tar | |
| - uses: dev-drprasad/delete-older-releases@v0.3.4 | |
| with: | |
| keep_latest: 10 | |
| delete_tags: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |