custom ARBER #2267
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) 2023 AuxXxilium <https://github.com/AuxXxilium> | |
# | |
# This is free software, licensed under the MIT License. | |
# See /LICENSE for more information. | |
# | |
name: Custom Build | |
on: | |
issues: | |
types: | |
- labeled | |
jobs: | |
build: | |
if: github.event.label.name == 'custom' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@main | |
- name: Init Env | |
run: | | |
git config --global user.email "info@auxxxilium.tech" | |
git config --global user.name "AuxXxilium" | |
sudo timedatectl set-timezone "Europe/Berlin" | |
- name: Check Custom | |
shell: python | |
run: | | |
# -*- coding: utf-8 -*- | |
import json, subprocess | |
def set_output(name, value): | |
subprocess.call(["echo '{}={}' >> $GITHUB_ENV".format(name, value)], shell=True) | |
issuetitle = ${{ toJSON(github.event.issue.title) }}; | |
issuebody = ${{ toJSON(github.event.issue.body) }}; | |
MODEL = '' | |
PRODUCTVER = '' | |
ADDONS = '' | |
KERNEL = '' | |
FORMAT = '' | |
try: | |
jsonbody = json.loads(issuebody) | |
MODEL = jsonbody.get('model', '') | |
PRODUCTVER = jsonbody.get('version', '') | |
ADDONS = jsonbody.get('addons', '') | |
KERNEL = jsonbody.get('kernel', '') | |
FORMAT = jsonbody.get('format', '') | |
except ValueError as e: | |
pass | |
set_output("MODEL", MODEL) | |
set_output("PRODUCTVER", PRODUCTVER) | |
set_output("ADDONS", ADDONS) | |
set_output("KERNEL", KERNEL) | |
set_output("FORMAT", FORMAT) | |
# calculates the version number and push | |
- name: Calculate Version | |
run: | | |
# Calculate Version | |
VERSION="`date +'%y.%-m.%-d'`-custom" | |
echo "Version: ${VERSION}" | |
echo "VERSION=${VERSION}" >> $GITHUB_ENV | |
- name: Update Comment Building | |
id: comment | |
uses: actions-cool/issues-helper@v3 | |
with: | |
actions: 'create-comment' | |
token: ${{ secrets.GITHUB_TOKEN }} | |
issue-number: ${{ github.event.issue.number }} | |
body: | | |
Hi @${{ github.event.issue.user.login }}. | |
arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }} is being build, it will be uploaded here and sent to your email later.. | |
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
---- | |
# Install dependencies | |
- name: Install Dependencies | |
run: | | |
sudo apt update | |
sudo apt install -y jq gawk cpio gettext libelf-dev qemu-utils busybox dialog curl sed | |
sudo pip install -r scripts/requirements.txt | |
sudo snap install yq | |
# Build incremental | |
- name: Build image | |
run: | | |
. scripts/func.sh | |
function writeConfigKey() { | |
[ "${2}" = "{}" ] && sudo yq eval '.'${1}' = {}' --inplace "${3}" 2>/dev/null || sudo yq eval '.'${1}' = "'"${2}"'"' --inplace "${3}" 2>/dev/null | |
} | |
TAG="$(curl -m 5 -kL https://api.github.com/repos/AuxXxilium/arc/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')" | |
curl -kL "https://github.com/AuxXxilium/arc/releases/download/${TAG}/arc-${TAG}.img.zip" -o "/tmp/arc.img.zip" | |
unzip -o "/tmp/arc.img.zip" -d "/tmp" | |
echo "Modify Arc Image" | |
IMAGE_FILE="/tmp/arc.img" | |
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" | |
echo "Set Custom Config" | |
PRESET_CONFIG_FILE="/tmp/p1/user-config.yml" | |
sudo touch "${PRESET_CONFIG_FILE}" | |
MODEL="${{ env.MODEL }}" | |
writeConfigKey "model" "${MODEL}" "${PRESET_CONFIG_FILE}" | |
PRODUCTVER="${{ env.PRODUCTVER }}" | |
PJ="$(python scripts/functions.py getpats4mv -m "${MODEL}" -v "${PRODUCTVER:0:3}")" | |
PAT_URL=$(echo "${PJ}" | jq -r ".\"${PRODUCTVER}\".url") | |
PAT_HASH=$(echo "${PJ}" | jq -r ".\"${PRODUCTVER}\".sum") | |
writeConfigKey "productver" "${PRODUCTVER:0:3}" "${PRESET_CONFIG_FILE}" | |
writeConfigKey "paturl" "${PAT_URL}" "${PRESET_CONFIG_FILE}" | |
writeConfigKey "pathash" "${PAT_HASH}" "${PRESET_CONFIG_FILE}" | |
if [ "${{ env.MODEL }}" = "SA6400" ]; then | |
writeConfigKey "kernel" "${{ env.KERNEL }}" "${PRESET_CONFIG_FILE}" | |
fi | |
writeConfigKey "addons" "{}" "${PRESET_CONFIG_FILE}" | |
if [ -n "${{ env.ADDONS }}" ]; then | |
for A in $(echo "${{ env.ADDONS }}" | tr ',' ' ' | sed 's/\[//g' | sed 's/\]//g'); do | |
VALUE="" | |
writeConfigKey "addons.\"${A}\"" "${VALUE}" "${PRESET_CONFIG_FILE}" | |
done | |
fi | |
writeConfigKey "automated" "true" "${PRESET_CONFIG_FILE}" | |
echo "$(cat "${PRESET_CONFIG_FILE}")" | |
sudo echo "arc-${MODEL}-${PRODUCTVER:0:3}-${TAG}" >"/tmp/automated" | |
sudo mv -f "/tmp/automated" "/tmp/p3/automated" | |
DSM_FILE="${PAT_HASH}.tar" | |
DSM_URL="https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/files/${MODEL/+/%2B}/${PRODUCTVER:0:3}/${PAT_HASH}.tar" | |
sudo curl -skL "${DSM_URL}" -o "/tmp/${DSM_FILE}" | |
[ -f "/tmp/${DSM_FILE}" ] && echo "dsm: download successful" || exit 1 | |
sudo mkdir -p "/tmp/p3/users" | |
sudo mv -f "/tmp/${DSM_FILE}" "/tmp/p3/users/${DSM_FILE}" | |
echo "Syncing files" | |
sync | |
echo "Unmount image file" | |
sudo umount "/tmp/p1" | |
sudo umount "/tmp/p3" | |
rmdir "/tmp/p1" | |
rmdir "/tmp/p3" | |
sudo losetup --detach ${LOOPX} | |
cp -f "${IMAGE_FILE}" "arc.img" | |
if [ "${{ env.FORMAT }}" = "dyn" ]; then | |
echo "Image Converter -> dyn" | |
qemu-img convert arc.img -O vmdk -o adapter_type=lsilogic,compat6 arc-dyn.vmdk | |
elif [ "${{ env.FORMAT }}" = "flat" ]; then | |
echo "Image Converter -> flat" | |
qemu-img convert arc.img -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat,compat6 arc.vmdk | |
elif [ "${{ env.FORMAT }}" = "vhdx" ]; then | |
echo "Image Converter -> vhdx" | |
qemu-img convert arc.img -O vhdx -o subformat=dynamic arc.vhdx | |
elif [ "${{ env.FORMAT }}" = "ova" ]; then | |
echo "Image Converter -> ova" | |
convertova "arc.img" "arc.ova" | |
fi | |
# Zip image and generate checksum | |
- name: Pack | |
run: | | |
if [ "${{ env.FORMAT }}" = "img" ]; then | |
zip -9 "arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.img.zip" arc.img | |
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.img.zip" "https://file.io")" | |
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then | |
echo "Upload failed" | |
exit 1 | |
fi | |
elif [ "${{ env.FORMAT }}" = "dyn" ]; then | |
zip -9 "arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.vmdk-dyn.zip" arc-dyn.vmdk | |
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.vmdk-dyn.zip" "https://file.io")" | |
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then | |
echo "Upload failed" | |
exit 1 | |
fi | |
elif [ "${{ env.FORMAT }}" = "flat" ]; then | |
zip -9 "arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk | |
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.vmdk-flat.zip" "https://file.io")" | |
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then | |
echo "Upload failed" | |
exit 1 | |
fi | |
elif [ "${{ env.FORMAT }}" = "vhdx" ]; then | |
zip -9 "arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.vhdx.zip" arc.vhdx | |
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.vhdx.zip" "https://file.io")" | |
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then | |
echo "Upload failed" | |
exit 1 | |
fi | |
elif [ "${{ env.FORMAT }}" = "ova" ]; then | |
zip -9 "arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.ova.zip" arc.ova | |
UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }}.ova.zip" "https://file.io")" | |
if ! echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+'; then | |
echo "Upload failed" | |
exit 1 | |
fi | |
fi | |
EMAIL=$(curl -s -H "Authorization: token ${{ secrets.ACTION }}" "https://api.github.com/users/${{ github.event.issue.user.login }}" | jq -r '.email') | |
FIOURL="$(echo "${UPLOAD}" | grep -oP '"link":\s*"\K[^"]+')" | |
echo "EMAIL=${EMAIL}" >> $GITHUB_ENV | |
echo "FIOURL=${FIOURL}" >> $GITHUB_ENV | |
- name: Send mail | |
if: success() && env.EMAIL != 'null' | |
uses: dawidd6/action-send-mail@v3 | |
with: | |
server_address: smtp.gmail.com | |
server_port: 587 | |
username: ${{ secrets.MAIL_USERNAME }} | |
password: ${{ secrets.MAIL_PASSWORD }} | |
subject: arc-${{ env.model }}-${{ env.PRODUCTVER }}-${{ env.VERSION }} | |
to: ${{ env.EMAIL }} | |
from: ${{ secrets.MAIL_USERNAME }} | |
body: | | |
${{ env.FIOURL }} | |
- name: Update Comment Success | |
if: success() | |
uses: actions-cool/issues-helper@v3 | |
with: | |
actions: 'update-comment' | |
token: ${{ secrets.GITHUB_TOKEN }} | |
comment-id: ${{ steps.comment.outputs.comment-id }} | |
update-mode: replace | |
body: | | |
Hi @${{ github.event.issue.user.login }}. | |
arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }} is ready to download: ${{ env.FIOURL }} | |
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
If this will not work, do not use customized Versions! | |
---- | |
- name: Update Comment Fail | |
if: failure() | |
uses: actions-cool/issues-helper@v3 | |
with: | |
actions: 'update-comment' | |
token: ${{ secrets.GITHUB_TOKEN }} | |
comment-id: ${{ steps.comment.outputs.comment-id }} | |
update-mode: replace | |
body: | | |
Hi @${{ github.event.issue.user.login }}. | |
arc-${{ env.MODEL }}-${{ env.PRODUCTVER }}-${{ env.VERSION }} failed to build and package, please try again. | |
> ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
If this will not work, do not use customized Versions! | |
---- | |
- name: Close Issues | |
if: success() | |
uses: actions-cool/issues-helper@v3 | |
with: | |
actions: 'close-issue' | |
token: ${{ secrets.GITHUB_TOKEN }} | |
issue-number: ${{ github.event.issue.number }} | |
comment: | |
if: github.event.label.name == 'bug' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Init Env | |
run: | | |
git config --global user.email "info@auxxxilium.tech" | |
git config --global user.name "AuxXxilium" | |
sudo timedatectl set-timezone "Europe/Berlin" | |
- name: Check Issues | |
run: | | |
if echo "${{ github.event.issue.body }}" | grep -q "Screenshots"; then | |
echo "FALG=true" >> $GITHUB_ENV | |
else | |
echo "FALG=false" >> $GITHUB_ENV | |
fi | |
- name: Create Issues comment | |
if: env.FALG == 'false' | |
uses: actions-cool/issues-helper@v3 | |
with: | |
actions: "create-comment" | |
token: ${{ secrets.GITHUB_TOKEN }} | |
issue-number: ${{ github.event.issue.number }} | |
body: | | |
**Describe the Bug** | |
A clear and concise description of what the bug is. | |
**Screenshots** | |
Screenshot the Systeminfo (Arc - Sysinfo) or use new "Full Sysinfo - Upload" Function provide the Code!!! <- IMPORTANT | |
**Hardware** | |
Add your Hardware Informations here. CPU / Board / Networkcontroller / Storagecontroller / ... | |
- name: Close Issues | |
if: env.FALG == 'false' | |
uses: actions-cool/issues-helper@v3 | |
with: | |
actions: 'close-issue' | |
token: ${{ secrets.GITHUB_TOKEN }} | |
issue-number: ${{ github.event.issue.number }} |