Skip to content

Website Guardian: 1 issue(s) found #468

Website Guardian: 1 issue(s) found

Website Guardian: 1 issue(s) found #468

name: Build AcreetionOS Immutable ISO
on:
schedule:
- cron: '0 6 * * 1,4'
push:
paths:
- 'immutable/**'
- '.github/workflows/immutable-builder.yml'
workflow_dispatch:
jobs:
build:
strategy:
matrix:
edition:
- name: Cinnamon
repo: AcreetionOS-Code/acreetionos
output: immutable-cinnamon.iso
- name: XLibre
repo: AcreetionOS-Code/AcreetionOS-Cinnamon-XLibre
output: immutable-xlibre.iso
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
repository: ${{ matrix.edition.repo }}
path: src
submodules: false
- uses: actions/checkout@v4
with:
repository: spivanatalie64/immutable
path: patches
- name: Prepare build environment
run: |
cp patches/configs/immutable-patch.sh src/
[ -d src/airootfs ] && cp patches/configs/immutable-patch.sh src/airootfs/root/
# Fix build.sh — remove sudo (not needed in Docker)
sed -i 's/sudo //g' src/build.sh
# Fix mkarchiso.sh — output to mounted volume so ISO persists
echo 'export PACMAN_OPTS="--overwrite \"*\""' > src/mkarchiso.sh
echo 'mkarchiso -L AcreetionOS Immutable -v -o /workspace/out . -C ./pacman.conf' >> src/mkarchiso.sh
# Fix profiledef.sh — use non-deprecated boot modes
sed -i "s/bios.syslinux.mbr/bios.syslinux/" src/profiledef.sh
sed -i "s/bios.syslinux.eltorito/bios.syslinux/" src/profiledef.sh
- name: Build ISO in Docker
run: |
docker run --privileged --rm \
-v $PWD/src:/workspace \
-v $PWD/patches:/patches \
archlinux:latest \
bash -c "
pacman -Syu --noconfirm archiso grub && \
cd /workspace && \
chmod +x *.sh && \
bash build.sh 2>&1; \
find / -name '*.iso' -maxdepth 5 2>/dev/null;
" 2>&1 | tee /tmp/build.log
mkdir -p /tmp/iso /tmp/src
cp -r $PWD/src /tmp/src 2>/dev/null || true
# After build, copy ISO from the mounted volume
cp $PWD/src/out/*.iso /tmp/iso/ 2>/dev/null
ls -la /tmp/iso/ 2>/dev/null || echo "No ISO found"
ls -la /tmp/iso/ 2>/dev/null || echo "No ISO found"
- name: Upload ISO to R2
env:
CF_ACCOUNT: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
ISO=$(ls /tmp/iso/*.iso 2>/dev/null | head -1)
[ -z "$ISO" ] && echo "No ISO to upload" && exit 0
F="immutable-${{ matrix.edition.name }}-$(date +%Y%m%d).iso"
cp "$ISO" "/tmp/$F"
curl -s -X POST "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets" -H "Authorization: Bearer $CF_TOKEN" -d '{"name":"immutable-iso"}' || true
U=$(curl -s -X POST "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets/immutable-iso/objects/${F}/upload" -H "Authorization: Bearer $CF_TOKEN" -d '{}' | python3 -c "import sys,json; print(json.load(sys.stdin).get('result',{}).get('uploadURL',''))")
[ -n "$U" ] && curl -s -X PUT "$U" --data-binary @"/tmp/$F" && echo "✓ Uploaded $F" || echo "R2 upload failed"
cleanup:
needs: build
runs-on: ubuntu-latest
if: always()
steps:
- name: Delete ISOs older than 3 weeks
env:
CF_ACCOUNT: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
CUTOFF=$(date -d "21 days ago" +%s)
for obj in $(curl -s "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets/immutable-iso/objects" -H "Authorization: Bearer $CF_TOKEN" | python3 -c "import sys,json;[print(o['key']) for o in json.load(sys.stdin).get('result',{}).get('objects',[])]" 2>/dev/null); do
D=$(echo "$obj" | grep -oP '\d{8}') && [ -n "$D" ] && [ $(date -d "$D" +%s 2>/dev/null) -lt $CUTOFF ] 2>/dev/null && curl -s -X DELETE "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets/immutable-iso/objects/$obj" -H "Authorization: Bearer $CF_TOKEN" && echo "Deleted $obj"
done