1+ name : Build ISO
2+
3+ on :
4+ # Allows manual triggering
5+ workflow_dispatch :
6+ # Run daily at midnight UTC
7+ schedule :
8+ - cron : ' 0 0 * * *'
9+
10+ env :
11+ DOCKER_BUILDKIT : 1
12+ PACMAN_CACHE : /tmp/pacman-cache
13+ WORKSPACE : /workdir
14+ BUILD_DIR : /workdir/work
15+ OUTPUT_DIR : /workdir/out
16+
17+ jobs :
18+ build :
19+ name : Build Arch Linux ISO
20+ runs-on : ubuntu-latest
21+ timeout-minutes : 180 # Extended timeout for the full build process
22+
23+ steps :
24+ - name : Checkout Repository
25+ uses : actions/checkout@v4
26+
27+ - name : Setup Environment
28+ run : |
29+ echo "Setting up build environment"
30+ mkdir -p out work
31+ echo "ISO_DATE=$(date +'%Y.%m.%d')" >> $GITHUB_ENV
32+ echo "RELEASE_TAG=v$(date +'%Y.%m.%d')" >> $GITHUB_ENV
33+
34+ - name : Cache Pacman packages
35+ uses : actions/cache@v3
36+ with :
37+ path : ${{ env.PACMAN_CACHE }}
38+ key : archlinux-pacman-${{ github.run_id }}
39+ restore-keys : |
40+ archlinux-pacman-
41+
42+ - name : Set up Docker Container
43+ run : |
44+ mkdir -p ${{ env.PACMAN_CACHE }}
45+ docker build -t arch-iso-builder -f dockerfile .
46+
47+ - name : Build ISO
48+ run : |
49+ # Run the ISO build with privileged mode to allow loop device mounting
50+ docker run --rm --privileged \
51+ -v ${{ github.workspace }}:${{ env.WORKSPACE }} \
52+ -v ${{ env.PACMAN_CACHE }}:/var/cache/pacman/pkg \
53+ arch-iso-builder build out work
54+
55+ - name : Generate Checksums
56+ run : |
57+ cd out
58+ ISO_FILE=$(ls *.iso)
59+ echo "ISO_FILENAME=$ISO_FILE" >> $GITHUB_ENV
60+
61+ # Create checksums
62+ sha256sum "$ISO_FILE" > $ISO_FILE.sha256
63+ sha512sum "$ISO_FILE" > $ISO_FILE.sha512
64+
65+ # Rename ISO for better identification
66+ RENAMED_ISO="archlinux-nobeep-${{ env.ISO_DATE }}.iso"
67+ mv "$ISO_FILE" "$RENAMED_ISO"
68+ echo "RENAMED_ISO=$RENAMED_ISO" >> $GITHUB_ENV
69+
70+ - name : Generate Package Updates for Release Notes
71+ run : |
72+ docker run --rm \
73+ -v ${{ github.workspace }}:${{ env.WORKSPACE }} \
74+ arch-iso-builder bash -c "cd ${{ env.WORKSPACE }} && ./scripts/package_tracking/track_package_updates.sh"
75+
76+ # Prepare release notes
77+ echo "Generating release notes"
78+ {
79+ echo "# Arch Linux No Beep ISO - ${{ env.ISO_DATE }}"
80+ echo ""
81+ echo "## 📦 Automated Build"
82+ echo ""
83+ echo "This ISO was automatically built on $(date +'%Y-%m-%d %H:%M:%S %Z')"
84+ echo ""
85+ echo "### 🔧 Changes"
86+ echo ""
87+ echo "- Updated base packages to latest Arch Linux versions"
88+ echo "- All system beeps disabled by default"
89+ echo "- Performance optimizations for faster boot"
90+ echo ""
91+ if [ -f "/tmp/package-versions/package_updates.md" ]; then
92+ cat "/tmp/package-versions/package_updates.md"
93+ else
94+ echo "No detailed package information available for this build."
95+ fi
96+ } > release_notes.md
97+
98+ - name : Create GitHub Release
99+ uses : softprops/action-gh-release@v1
100+ with :
101+ files : |
102+ out/${{ env.RENAMED_ISO }}
103+ out/${{ env.RENAMED_ISO }}.sha256
104+ out/${{ env.RENAMED_ISO }}.sha512
105+ name : " Arch Linux No Beep - ${{ env.ISO_DATE }}"
106+ tag_name : ${{ env.RELEASE_TAG }}
107+ body_path : release_notes.md
108+ draft : false
109+ prerelease : false
110+ env :
111+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
112+
113+ - name : Clean Up
114+ if : always()
115+ run : |
116+ sudo rm -rf out/ work/
117+ docker image rm arch-iso-builder || true
0 commit comments