Build Arc Image #877
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
# | |
# Copyright (C) 2024 AuxXxilium <https://github.com/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 | |
next: | |
description: "next" | |
default: true | |
type: boolean | |
stable: | |
description: "stable" | |
default: true | |
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 == true }} | |
uses: ophub/delete-releases-workflows@main | |
with: | |
delete_releases: true | |
releases_keep_latest: 1 | |
delete_workflows: false | |
delete_tags: true | |
gh_token: ${{ secrets.GITHUB_TOKEN }} | |
# Install Dependencies | |
- name: Install Dependencies | |
if: ${{ inputs.runs == 'ubuntu-latest' }} | |
run: | | |
git config --global user.email "[email protected]" | |
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/func.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" | |
getBuildrootx "brx" | |
getBuildroots "brs" | |
# 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 "BRXTAG=${BRXTAG}" >> $GITHUB_ENV | |
echo "BRSTAG=${BRSTAG}" >> $GITHUB_ENV | |
echo "BUILD_TIME=$(date +'%Y-%m-%d %H:%M')" >> $GITHUB_ENV | |
echo "OK" | |
# Build incremental | |
- name: Build Next Image | |
if: ${{ inputs.next == true }} | |
run: | | |
. scripts/func.sh | |
# Modify Source File | |
ARC_BUILD="`date +'%y%m%d'`" | |
ARC_VERSION="${{ inputs.version }}" | |
ARC_BRANCH="next" | |
echo "${ARC_BUILD}" >files/p1/ARC-BUILD | |
echo "${ARC_VERSION}" >files/p1/ARC-VERSION | |
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH | |
echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV | |
echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV | |
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 "brx/bzImage-arc" ] || [ ! -f "brx/initrd-arc" ] && return 1 | |
echo "Repack initrd" | |
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc" | |
repackInitrd "brx/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 Next Image | |
if: ${{ inputs.next == true }} | |
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) | |
fi | |
# Cleanup | |
- name: Cleanup | |
run: | | |
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc-flat.vmdk" "arc.vhd" "arc.ova" "arc.vmc" | |
# Build incremental | |
- name: Build Stable Image | |
if: ${{ inputs.stable == true }} | |
run: | | |
. scripts/func.sh | |
# Modify Source File | |
ARC_BUILD="`date +'%y%m%d'`" | |
ARC_VERSION="${{ inputs.version }}" | |
ARC_BRANCH="stable" | |
echo "${ARC_BUILD}" >files/p1/ARC-BUILD | |
echo "${ARC_VERSION}" >files/p1/ARC-VERSION | |
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH | |
echo "ARC_BUILD=${ARC_BUILD}" >> $GITHUB_ENV | |
echo "ARC_VERSION=${ARC_VERSION}" >> $GITHUB_ENV | |
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 "brs/bzImage-arc" ] || [ ! -f "brs/initrd-arc" ] && return 1 | |
echo "Repack initrd" | |
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc" | |
#cp -f "brs/initrd-arc" "files/p3/initrd-arc" | |
repackInitrd "brs/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 Stable Image | |
if: ${{ inputs.stable == true }} | |
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) | |
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: | |
- Full Changelog is available in my Discord | |
- Discord Account for Arc Patch needed | |
### Versions: | |
- stable: Stable Image (Full Image, all dependencies are included, less hardware support) | |
- next: Next Image (Full Image, all dependencies are included, more hardware support, new features to test) | |
### Dependencies: | |
- Addons: ${{ env.ADDONTAG }} | |
- Modules: ${{ env.MODULETAG }} | |
- Configs: ${{ env.CONFIGTAG }} | |
- Patches: ${{ env.PATCHTAG }} | |
- Custom: ${{ env.CUSTOMTAG }} | |
- LKMs: ${{ env.LKMTAG }} | |
- Buildroot Stable: ${{ env.BRSTAG }} | |
- Buildroot Next: ${{ env.BRXTAG }} | |
### Release | |
- ${{ env.BUILD_TIME }} | |
artifacts: | | |
arc-*.zip | |
update-*.zip |