Skip to content

Build AcreetionOS GNOME ISO #1

Build AcreetionOS GNOME ISO

Build AcreetionOS GNOME ISO #1

Workflow file for this run

name: Build AcreetionOS GNOME ISO
on:
schedule:
- cron: '0 6 * * 1'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: build-gnome-${{ github.sha }}
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Checkout edition repo
uses: actions/checkout@v4
with:
repository: spivanatalie64/acreetionos-gnome
path: src
- name: Apply AcreetionOS branding and repos
run: |
# Remove sudo from build.sh (not needed in Docker)
sed -i 's/sudo //g' src/build.sh 2>/dev/null || true
# Set ISO volume label to show AcreetionOS edition name
sed -i 's/iso_label=.*/iso_label="AcreetionOS GNOME"/' src/profiledef.sh 2>/dev/null || true
sed -i 's/iso_name=.*/iso_name="AcreetionOS GNOME"/' src/profiledef.sh 2>/dev/null || true
sed -i 's/iso_publisher=.*/iso_publisher="AcreetionOS Project <https:\/\/acreetionos.org>"/' src/profiledef.sh 2>/dev/null || true
sed -i 's/iso_application=.*/iso_application="AcreetionOS Linux Distribution"/' src/profiledef.sh 2>/dev/null || true
- name: Write build start status
id: start
env:
CF_ACCOUNT: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
SLUG="gnome"
DATE_TAG=$(date +%Y%m%d)
echo "slug=${SLUG}" >> $GITHUB_OUTPUT
echo "date_tag=${DATE_TAG}" >> $GITHUB_OUTPUT
ISO_NAME="gnome-${DATE_TAG}.iso"
echo "iso_name=${ISO_NAME}" >> $GITHUB_OUTPUT
STATUS='{"edition":"GNOME","slug":"'${SLUG}'","status":"building","started":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","run_url":"https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}","output":"AcreetionOS-GNOME-latest.iso","iso_name":"'${ISO_NAME}'","desktop":"GNOME","display":"Wayland","arch":"x86_64"}'
echo "$STATUS" > /tmp/build-status.json
if [ -n "$CF_TOKEN" ]; then
curl -s -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets/build-status/objects/${SLUG}-status.json" -H "Authorization: Bearer $CF_TOKEN" --data-binary @/tmp/build-status.json -H "Content-Type: application/json" || true
fi
- name: Build ISO in Docker
id: build
run: |
mkdir -p /tmp/iso
SLUG="gnome"
docker run --privileged --rm \
-v $PWD/src:/workspace \
archlinux@sha256:fb47d15e0fd28369c700edcfa46dd44e234d8ab6fee9627ee5f1ead5f1fc6c21 \
bash -c '
pacman -Syu --noconfirm archiso grub && \
cd /workspace && \
chmod +x *.sh 2>/dev/null; \
bash build.sh 2>&1 || { echo "BUILD_FAILED"; exit 1; }
' 2>&1 | tee /tmp/build.log
find / -name '*.iso' -maxdepth 5 | head -5
ls -la src/out/ 2>/dev/null && cp src/out/*.iso /tmp/iso/ 2>/dev/null || true
find / -name '*.iso' -maxdepth 5 2>/dev/null | head -5
ls -la /tmp/iso/ 2>/dev/null || echo "No ISO found"
if [ -z "$(ls /tmp/iso/*.iso 2>/dev/null)" ]; then
echo "BUILD_FAILED"
echo "build_ok=false" >> $GITHUB_OUTPUT
else
echo "BUILD_OK"
echo "build_ok=true" >> $GITHUB_OUTPUT
fi
- name: Upload build log to R2
if: always()
env:
CF_ACCOUNT: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
SLUG="gnome"
LOG_KEY="${SLUG}-build.log"
if [ -n "$CF_TOKEN" ] && [ -f /tmp/build.log ]; then
curl -s -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets/build-status/objects/${LOG_KEY}" -H "Authorization: Bearer $CF_TOKEN" --data-binary @/tmp/build.log -H "Content-Type: text/plain" || echo "Log upload failed"
fi
- name: Prepare ISO for upload
id: iso
if: steps.build.outputs.build_ok == 'true'
run: |
ISO=$(ls /tmp/iso/*.iso 2>/dev/null | head -1)
if [ -z "$ISO" ]; then
find / -name '*.iso' -maxdepth 5 -exec cp {} /tmp/iso/ \; 2>/dev/null || true
ISO=$(ls /tmp/iso/*.iso 2>/dev/null | head -1)
fi
if [ -n "$ISO" ]; then
FINAL="${{ steps.start.outputs.iso_name }}"
cp "$ISO" "/tmp/${FINAL}"
echo "iso_path=/tmp/${FINAL}" >> $GITHUB_OUTPUT
echo "iso_name=${FINAL}" >> $GITHUB_OUTPUT
echo "ok=true" >> $GITHUB_OUTPUT
else
echo "ok=false" >> $GITHUB_OUTPUT
fi
- name: Upload ISO to all mirrors
if: steps.iso.outputs.ok == 'true'
env:
CF_ACCOUNT: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
bash scripts/upload-iso.sh \
"${{ steps.iso.outputs.iso_path }}" \
"gnome" \
"${{ steps.start.outputs.date_tag }}"
- name: Update build status in R2
if: always()
env:
CF_ACCOUNT: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
CF_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
run: |
SLUG="gnome"
if [ "${{ steps.iso.outputs.ok }}" = "true" ]; then
STATUS='{"edition":"GNOME","slug":"'${SLUG}'","status":"success","finished":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","run_url":"https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}","iso_name":"${{ steps.iso.outputs.iso_name }}","download_url":"https://pub-173a1f638a3b4c95b5f58b09c0b968aa.r2.dev/${{ steps.iso.outputs.iso_name }}"}'
else
STATUS='{"edition":"GNOME","slug":"'${SLUG}'","status":"failed","finished":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","run_url":"https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}","desktop":"GNOME","display":"Wayland","arch":"x86_64"}'
fi
echo "$STATUS" > /tmp/build-status.json
if [ -n "$CF_TOKEN" ]; then
curl -s -X PUT "https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT/r2/buckets/build-status/objects/${SLUG}-status.json" -H "Authorization: Bearer $CF_TOKEN" --data-binary @/tmp/build-status.json -H "Content-Type: application/json" || true
fi