# # Copyright (C) 2025 AuxXxilium # # This is free software, licensed under the MIT License. # See /LICENSE for more information. # name: Build Arc Image on: workflow_dispatch: inputs: runs: description: "runs-on" type: choice options: - ubuntu-latest - self-hosted version: description: "version (1.0.0)" required: true type: string notice: description: "Notice here" required: false type: string latest: description: "latest" default: true type: boolean prerelease: description: "pre release" default: false type: boolean clean: description: "clean" default: false type: boolean jobs: build: runs-on: ${{ inputs.runs }} steps: - name: Checkout uses: actions/checkout@main - name: Delete releases and workflows runs if: ${{ inputs.clean }} uses: ophub/delete-releases-workflows@main with: delete_releases: true releases_keep_latest: 1 delete_workflows: false delete_tags: true gh_token: ${{ secrets.BUILD_TOKEN }} # Install Dependencies - name: Install Dependencies if: ${{ inputs.runs == 'ubuntu-latest' }} run: | git config --global user.email "info@auxxxilium.tech" git config --global user.name "AuxXxilium" sudo timedatectl set-timezone "Europe/Berlin" sudo apt update sudo apt install -y locales busybox dialog gettext sed gawk jq curl sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd # sudo snap install yq if ! command -v yq &>/dev/null || ! yq --version 2>/dev/null | grep -q "v4."; then sudo curl -kL https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -o /usr/bin/yq && sudo chmod a+x /usr/bin/yq fi df -h # Get extractor, LKM, Addons, Modules, Theme and Configs - name: Get Dependencies for all Image run: | . scripts/functions.sh "${{ secrets.BUILD_TOKEN }}" echo "Get Dependencies" getAddons "files/p3/addons" getModules "files/p3/modules" getConfigs "files/p3/configs" getPatches "files/p3/patches" getCustom "files/p3/custom" getOffline "files/p3/configs" getLKMs "files/p3/lkms" getTheme "files/p1/boot/grub" getBuildroot "evo" "br" # Export Dependencies Version to env echo "ADDONTAG=${ADDONTAG}" >> $GITHUB_ENV echo "MODULETAG=${MODULETAG}" >> $GITHUB_ENV echo "CONFIGTAG=${CONFIGTAG}" >> $GITHUB_ENV echo "PATCHTAG=${PATCHTAG}" >> $GITHUB_ENV echo "CUSTOMTAG=${CUSTOMTAG}" >> $GITHUB_ENV echo "LKMTAG=${LKMTAG}" >> $GITHUB_ENV echo "THEMETAG=${THEMETAG}" >> $GITHUB_ENV echo "BRTAG=${BRTAG}" >> $GITHUB_ENV echo "BUILD_TIME=$(date +'%Y-%m-%d %H:%M')" >> $GITHUB_ENV echo "OK" # Build incremental - name: Build Image run: | . scripts/functions.sh # Modify Source File ARC_BUILD="$(date +'%y%m%d')" ARC_VERSION="${{ inputs.version }}" ARC_BRANCH="evo" echo "${ARC_BUILD}" > "files/p1/ARC-BUILD" echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV echo "${ARC_VERSION}" > "files/p1/ARC-VERSION" echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV echo "${ARC_BRANCH}" > "files/p1/ARC-BRANCH" echo "ARC_BRANCH=${ARC_BRANCH}" >> $GITHUB_ENV echo "Create Arc Image" IMAGE_FILE="arc.img" gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}" fdisk -l "${IMAGE_FILE}" LOOPX=$(sudo losetup -f) sudo losetup -P "${LOOPX}" "${IMAGE_FILE}" echo "Mounting Image File" mkdir -p "/tmp/p1" mkdir -p "/tmp/p3" sudo mount ${LOOPX}p1 "/tmp/p1" sudo mount ${LOOPX}p3 "/tmp/p3" [ ! -f "br/bzImage-arc" ] || [ ! -f "br/initrd-arc" ] && return 1 echo "Repack initrd" cp -f "br/bzImage-arc" "files/p3/bzImage-arc" repackInitrd "br/initrd-arc" "files/initrd" "files/p3/initrd-arc" echo "Copying files" sudo cp -rf "files/p1/"* "/tmp/p1" sudo cp -rf "files/p3/"* "/tmp/p3" sudo sync echo "Unmount image file" sudo umount "/tmp/p1" sudo umount "/tmp/p3" rmdir "/tmp/p1" rmdir "/tmp/p3" sudo losetup --detach ${LOOPX} echo "Image Converter" qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk echo "Create Arc vhd" createvmc "arc.vmc" qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd echo "Create Arc ova" convertova "${IMAGE_FILE}" "arc.ova" # Zip image and generate checksum - name: Pack Image run: | if [ -n "${{ env.ARC_VERSION }}" ]; then zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova (cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3) sha256sum update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip >"update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.hash" fi # Publish a release if is a tag - name: Release if: success() && env.ARC_VERSION != '' uses: ncipollo/release-action@v1 with: tag: ${{ env.ARC_VERSION }} prerelease: ${{ inputs.prerelease }} makeLatest: ${{ inputs.latest }} allowUpdates: true body: | ### Note: - ${{ inputs.notice }} ### Information: - Discord Account for Arc Patch needed - Changelog is available in my Discord - Based on VisionZ Evolution Code Base ### Dependencies: - Addons: ${{ env.ADDONTAG }} - Modules: ${{ env.MODULETAG }} - Configs: ${{ env.CONFIGTAG }} - Patches: ${{ env.PATCHTAG }} - Custom: ${{ env.CUSTOMTAG }} - LKMs: ${{ env.LKMTAG }} - Basesystem: ${{ env.BRTAG }} ### Release - ${{ env.BUILD_TIME }} artifacts: | arc-*.zip update-*.zip update-*.hash