Website Guardian: 1 issue(s) found #468
Workflow file for this run
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 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 |