Build Armbian x86 server image #1
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
| #========================================================================== | |
| # Description: Build Armbian x86 server image | |
| # Copyright (C) 2021 https://github.com/ophub/amlogic-s9xxx-armbian | |
| #========================================================================== | |
| name: Build Armbian x86 server image | |
| on: | |
| repository_dispatch: | |
| workflow_dispatch: | |
| inputs: | |
| set_release: | |
| description: "Select OS Release." | |
| required: false | |
| default: "noble" | |
| type: choice | |
| options: | |
| - trixie | |
| - bookworm | |
| - noble | |
| - jammy | |
| publish_docker: | |
| description: "Publish Docker image" | |
| required: false | |
| default: "none" | |
| type: choice | |
| options: | |
| - ophub/armbian | |
| - none | |
| env: | |
| TZ: Etc/UTC | |
| ROOTFS_SCRIPT: compile-kernel/tools/script/docker/build_armbian_rootfs_file.sh | |
| MAKE_DOCKER_SH: compile-kernel/tools/script/docker/build_armbian_docker_image.sh | |
| DOCKER_OUTPATH: out | |
| jobs: | |
| build: | |
| runs-on: ubuntu-24.04 | |
| if: ${{ github.event.repository.owner.id }} == ${{ github.event.sender.id }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Initialization environment | |
| id: init | |
| env: | |
| DEBIAN_FRONTEND: noninteractive | |
| run: | | |
| docker rmi -f $(docker images -q) 2>/dev/null || true | |
| [[ -n "${AGENT_TOOLSDIRECTORY}" ]] && sudo rm -rf "${AGENT_TOOLSDIRECTORY}" | |
| sudo rm -rf /usr/share/dotnet /usr/local/lib/android 2>/dev/null | |
| sudo swapoff -a | |
| sudo rm -f /swapfile /mnt/swapfile | |
| sudo -E apt-get -y update | |
| sudo -E apt-get -y purge azure-cli ghc* zulu* llvm* firefox google* dotnet* powershell openjdk* mongodb* moby* || true | |
| sudo -E apt-get -y install $(curl -fsSL https://ophub.org/ubuntu2404-build-armbian-depends) | |
| sudo -E systemctl daemon-reload | |
| #sudo -E apt-get -y full-upgrade | |
| sudo -E apt-get -y autoremove --purge | |
| sudo -E apt-get clean | |
| sudo sed -i '/NVM_DIR/d;/skel/d' /root/{.bashrc,.profile} | |
| sudo rm -rf ~/{.cargo,.dotnet,.rustup} | |
| sudo -E timedatectl set-timezone "${TZ:-Etc/UTC}" | |
| sudo -E ntpdate ntp.ubuntu.com 0.pool.ntp.org || true | |
| sudo -E timedatectl set-ntp true | |
| date -u | |
| timedatectl status || true | |
| echo "status=success" >> ${GITHUB_OUTPUT} | |
| - name: Create simulated physical disk | |
| run: | | |
| mnt_size=$(expr $(df -h /mnt | tail -1 | awk '{print $4}' | sed 's/[[:alpha:]]//g' | sed 's/\..*//') - 1) | |
| root_size=$(expr $(df -h / | tail -1 | awk '{print $4}' | sed 's/[[:alpha:]]//g' | sed 's/\..*//') - 4) | |
| sudo truncate -s "${mnt_size}"G /mnt/mnt.img | |
| sudo truncate -s "${root_size}"G /root.img | |
| sudo losetup /dev/loop6 /mnt/mnt.img | |
| sudo losetup /dev/loop7 /root.img | |
| sudo pvcreate /dev/loop6 | |
| sudo pvcreate /dev/loop7 | |
| sudo vgcreate github /dev/loop6 /dev/loop7 | |
| sudo lvcreate -n runner -l 100%FREE github | |
| sudo mkfs.xfs -f -i sparse=0 -b size=4096 /dev/github/runner | |
| sudo mkdir -p /builder | |
| sudo mount /dev/github/runner /builder | |
| sudo chown -R runner:runner /builder | |
| # Prepare cached directory | |
| echo "Preparing cached directory..." | |
| sudo cp -af /home/runner/actions-runner/cached /builder/cached | |
| rm -rf /home/runner/actions-runner/cached | |
| sudo ln -sf /builder/cached /home/runner/actions-runner/cached | |
| echo "_diag directory content:" | |
| ls -lh /home/runner/actions-runner/cached/_diag/ 2>/dev/null | |
| echo "Verifying the symbolic link..." | |
| ls -ld /home/runner/actions-runner/cached | |
| df -Th /home/runner/actions-runner/cached | |
| echo "Server disk layout:" | |
| df -Th | |
| echo "status=success" >> ${GITHUB_OUTPUT} | |
| - name: Download source code | |
| id: down | |
| working-directory: /builder | |
| if: ${{ steps.init.outputs.status }} == 'success' && !cancelled() | |
| run: | | |
| df -hT ${PWD} | |
| git clone -q --single-branch --depth=1 --branch=main https://github.com/armbian/build.git build | |
| ln -sf /builder/build ${{ github.workspace }}/build | |
| echo "status=success" >> ${GITHUB_OUTPUT} | |
| - name: Compile Armbian [ ${{ inputs.set_release }} ] | |
| id: compile | |
| working-directory: /builder | |
| if: ${{ steps.down.outputs.status }} == 'success' && !cancelled() | |
| run: | | |
| # Compile method and parameter description: https://docs.armbian.com/Developer-Guide_Build-Options | |
| cd build/ | |
| ./compile.sh RELEASE=${{ inputs.set_release }} BOARD=uefi-x86 BRANCH=current BUILD_MINIMAL=no \ | |
| BUILD_ONLY=default HOST=armbian BUILD_DESKTOP=no EXPERT=yes KERNEL_CONFIGURE=no \ | |
| COMPRESS_OUTPUTIMAGE="sha" SHARE_LOG=yes | |
| echo "status=success" >> ${GITHUB_OUTPUT} | |
| - name: Organize files and clear space | |
| id: clean | |
| if: ${{ steps.compile.outputs.status }} == 'success' && !cancelled() | |
| run: | | |
| # Organize and keep essential files, delete unnecessary files | |
| chmod +x ${ROOTFS_SCRIPT} | |
| ${ROOTFS_SCRIPT} -v ${{ inputs.set_release }} -s true -c true -k false -p amd64 | |
| # Clean build directory except output folder | |
| [[ -d "armbian" ]] || mkdir armbian | |
| cp -af build/output/images/* armbian/ | |
| rm -rf build | |
| # Output cleaning result information | |
| df -hT ${PWD} | |
| echo "build_tag=Armbian_${{ inputs.set_release }}_amd64_server_$(date +"%Y.%m")" >> ${GITHUB_OUTPUT} | |
| echo "status=success" >> ${GITHUB_OUTPUT} | |
| - name: Upload Armbian image to Release | |
| uses: ncipollo/release-action@main | |
| if: ${{ steps.clean.outputs.status }} == 'success' && !cancelled() | |
| with: | |
| tag: ${{ steps.clean.outputs.build_tag }} | |
| artifacts: armbian/* | |
| allowUpdates: true | |
| makeLatest: true | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| body: | | |
| ### Armbian Image information | |
| - Default username: root | |
| - Default password: 1234 | |
| ### Applicable platform | |
| - amd64(uefi-x86) | |
| - name: Build the Docker image | |
| id: makedocker | |
| if: ${{ inputs.publish_docker != 'none' && !cancelled() }} | |
| run: | | |
| chmod +x ${MAKE_DOCKER_SH} | |
| ${MAKE_DOCKER_SH} | |
| echo "status=success" >> ${GITHUB_OUTPUT} | |
| - name: Set up Docker Buildx | |
| id: buildx | |
| if: ${{ steps.makedocker.outputs.status == 'success' && !cancelled() }} | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| id: login | |
| if: ${{ steps.makedocker.outputs.status == 'success' && !cancelled() }} | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
| - name: Push to Docker Hub | |
| id: push | |
| if: ${{ steps.makedocker.outputs.status == 'success' && !cancelled() }} | |
| uses: docker/build-push-action@v5 | |
| with: | |
| push: true | |
| platforms: linux/amd64 | |
| context: ${{ env.DOCKER_OUTPATH }} | |
| tags: | | |
| "${{ inputs.publish_docker }}-${{ inputs.set_release }}:amd64" |