# # Copyright (C) 2023 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 = '' BRANCH = '' 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', '') BRANCH = jsonbody.get('branch', '') 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) set_output("BRANCH", BRANCH) # 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 }}. building arc-${{ env.MODEL }}-${{ env.VERSION }}, 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}-${{ env.BRANCH }}.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.VERSION }}.img.zip" arc.img UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ 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.VERSION }}.vmdk-dyn.zip" arc-dyn.vmdk UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ 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.VERSION }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ 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.VERSION }}.vhdx.zip" arc.vhdx UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ 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.VERSION }}.ova.zip" arc.ova UPLOAD="$(curl -k -F "file=@arc-${{ env.MODEL }}-${{ 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.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.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 }}