Merge pull request #49 from Githubguy132010/WFRework #84
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
| name: Build ISO | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| - cron: '0 0 * * *' # Run the workflow every day at midnight | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| paths-ignore: | |
| - '**.md' | |
| - '.gitignore' | |
| env: | |
| DOCKER_BUILDKIT: 1 | |
| ISO_FILENAME: Arch.iso | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 120 # Set a timeout to prevent hung builds | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| - name: Set up environment variables | |
| id: env | |
| run: | | |
| echo "DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV | |
| echo "VERSION=$(date +'%Y.%m.%d')" >> $GITHUB_ENV | |
| echo "WORKSPACE=${GITHUB_WORKSPACE}" >> $GITHUB_ENV | |
| - name: Set up Arch Linux Container | |
| run: | | |
| docker run --privileged --name arch-container -d \ | |
| -v ${{ env.WORKSPACE }}:/workdir \ | |
| -v /tmp/pacman-cache:/var/cache/pacman/pkg \ | |
| archlinux:latest sleep infinity | |
| - name: Initialize Container | |
| run: | | |
| docker exec arch-container bash -c " | |
| set -euo pipefail | |
| # Update package database and system | |
| pacman -Syu --noconfirm | |
| # Install required packages | |
| pacman -S --noconfirm --needed \ | |
| git \ | |
| archiso \ | |
| grub \ | |
| curl \ | |
| jq \ | |
| gnupg \ | |
| make \ | |
| sudo | |
| # Verify installation | |
| command -v mkarchiso >/dev/null 2>&1 || { | |
| echo '::error::mkarchiso not found' | |
| exit 1 | |
| } | |
| " | |
| - name: Build ISO | |
| id: build | |
| run: | | |
| docker exec arch-container bash -c " | |
| set -euo pipefail | |
| cd /workdir | |
| # Cleanup any previous builds | |
| rm -rf workdir/ out/ | |
| mkdir -p out/ | |
| # Build the ISO with verbose output | |
| mkarchiso -v -w workdir/ -o out/ . 2>&1 | tee build.log || { | |
| echo '::error::ISO build failed!' | |
| tail -n 50 build.log | |
| exit 1 | |
| } | |
| # Verify ISO was created | |
| [ -f out/*.iso ] || { | |
| echo '::error::ISO file not found after build' | |
| exit 1 | |
| } | |
| " | |
| - name: Generate Checksums | |
| run: | | |
| docker exec arch-container bash -c " | |
| set -euo pipefail | |
| cd /workdir/out | |
| # Generate checksums | |
| for iso in *.iso; do | |
| sha256sum \"\$iso\" > \"\${iso}.sha256sum\" | |
| sha512sum \"\$iso\" > \"\${iso}.sha512sum\" | |
| done | |
| " | |
| - name: Rename and Move ISO | |
| run: | | |
| docker exec arch-container bash -c " | |
| set -euo pipefail | |
| cd /workdir/out | |
| for f in *.iso; do | |
| newname=\"arch-linux-no-beeps-${{ env.VERSION }}.iso\" | |
| mv \"\$f\" \"\$newname\" | |
| mv \"\$f.sha256sum\" \"\$newname.sha256sum\" | |
| mv \"\$f.sha512sum\" \"\$newname.sha512sum\" | |
| done | |
| " | |
| - name: Clean Up | |
| if: always() | |
| run: | | |
| if docker ps -a | grep -q arch-container; then | |
| docker stop arch-container || true | |
| docker rm -f arch-container || true | |
| fi | |
| sudo rm -rf workdir/ out/ /tmp/pacman-cache/* | |
| create-release: | |
| needs: build | |
| if: github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Nodig voor git history | |
| - name: Generate Release Notes | |
| id: release_notes | |
| run: | | |
| # Create a temporary file for release notes | |
| TEMP_RELEASE_NOTES=$(mktemp) | |
| { | |
| echo "🚀 Arch Linux ISO without system beeps (build ${{ env.DATE }})" | |
| echo "" | |
| echo "### Changes" | |
| # Get changes since last release | |
| if git tag | grep -q .; then | |
| LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo '') | |
| if [ ! -z "$LAST_TAG" ]; then | |
| echo "#### Commits since last release:" | |
| git log "$LAST_TAG"..HEAD --pretty=format:'- %s' | grep -v 'Merge' | |
| echo "" | |
| fi | |
| fi | |
| echo "### Download" | |
| echo "- Download the ISO and verify checksums before use" | |
| echo "" | |
| echo "### Checksums" | |
| echo "SHA256 and SHA512 checksums are available in the uploaded files." | |
| } > $TEMP_RELEASE_NOTES | |
| echo "RELEASE_NOTES<<EOF" >> $GITHUB_ENV | |
| cat $TEMP_RELEASE_NOTES >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| rm -f $TEMP_RELEASE_NOTES | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ env.VERSION }} | |
| name: "Arch Linux without the beeps v${{ env.VERSION }}" | |
| body: ${{ env.RELEASE_NOTES }} | |
| draft: false | |
| prerelease: false | |
| files: | | |
| ${{ env.WORKSPACE }}/out/*.iso | |
| ${{ env.WORKSPACE }}/out/*.sha*sum | |
| upload-logs: | |
| needs: build | |
| if: failure() | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Upload Build Logs | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-logs | |
| path: | | |
| ${{ env.WORKSPACE }}/build.log | |
| retention-days: 5 | |
| compression-level: 9 |