Build AcreetionOS MATE ISO #1
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 MATE ISO | |
| on: | |
| schedule: | |
| - cron: '0 6 * * 1' | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: build-mate-${{ 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-mate | |
| 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 MATE"/' src/profiledef.sh 2>/dev/null || true | |
| sed -i 's/iso_name=.*/iso_name="AcreetionOS MATE"/' 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="mate" | |
| DATE_TAG=$(date +%Y%m%d) | |
| echo "slug=${SLUG}" >> $GITHUB_OUTPUT | |
| echo "date_tag=${DATE_TAG}" >> $GITHUB_OUTPUT | |
| ISO_NAME="mate-${DATE_TAG}.iso" | |
| echo "iso_name=${ISO_NAME}" >> $GITHUB_OUTPUT | |
| STATUS='{"edition":"MATE","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-MATE-latest.iso","iso_name":"'${ISO_NAME}'","desktop":"MATE","display":"XLibre","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="mate" | |
| 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="mate" | |
| 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 }}" \ | |
| "mate" \ | |
| "${{ 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="mate" | |
| if [ "${{ steps.iso.outputs.ok }}" = "true" ]; then | |
| STATUS='{"edition":"MATE","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":"MATE","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":"MATE","display":"XLibre","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 |