diff --git a/.github/workflows/build-check.yml b/.github/workflows/build-check.yml index 285b24aab..de131c65b 100644 --- a/.github/workflows/build-check.yml +++ b/.github/workflows/build-check.yml @@ -1,14 +1,12 @@ -name: Check if ISO can be built +name: Build ISO on: - push: - branches: [ "main" ] pull_request: - branches: [ "main" ] + branches: + - main workflow_dispatch: schedule: - # Run the workflow every day at midnight - - cron: 0 0 * * * + - cron: '0 0 * * *' # Run the workflow every day at midnight jobs: build: @@ -20,17 +18,86 @@ jobs: - name: Set up Arch Linux Container run: | - if ! docker run --privileged --name arch-container -d -v ${{ github.workspace }}:/workdir archlinux:latest sleep infinity; then - echo "Failed to start Arch Linux container." && exit 1 - fi + docker run --privileged --name arch-container -d -v ${{ github.workspace }}:/workdir archlinux:latest sleep infinity - - name: Update and Build ISO in Arch Container + - name: Build ISO in Arch Container run: | - if ! docker exec arch-container bash -c " + set -e + docker exec arch-container bash -c " pacman -Syu --noconfirm && pacman -S --noconfirm git archiso grub && cd /workdir && mkarchiso -v -w workdir/ -o out/ . - "; then - echo "Failed to build ISO." && exit 1 - fi + " + + - name: Rename ISO to Arch.iso + run: | + set -e + docker exec arch-container bash -c " + iso_file=\$(ls /workdir/out/*.iso 2>/dev/null | head -n 1) && + [ -n \"\$iso_file\" ] && mv \$iso_file /workdir/out/Arch.iso || echo 'No ISO file found.' + " + + - name: List ISO files + run: | + docker exec arch-container bash -c "ls -l /workdir/out/" || echo 'Failed to list files.' + + - name: Copy ISO to Host + run: | + docker cp arch-container:/workdir/out/Arch.iso ${{ github.workspace }}/ || echo 'Failed to copy ISO to host.' + + - name: Get current date + id: date + run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT + + # Create a release on GitHub using GITHUB_TOKEN + - name: Create GitHub Release + id: create_release # Adding an ID to reference the release step + uses: actions/create-release@v1.1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ github.run_id }}-release + release_name: "Arch Linux Release" + body: | + This release contains the Arch Linux ISO built on ${{ steps.date.outputs.date }}. + draft: false + prerelease: false + + # Upload the ISO to the GitHub release with a specific, predictable name + - name: Upload ISO to GitHub Release + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ${{ github.workspace }}/Arch.iso + asset_name: Arch.iso + asset_content_type: application/octet-stream + + # Delete the release after uploading the asset + - name: Delete GitHub Release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_ID: ${{ steps.create_release.outputs.release_id }} + run: | + curl -X DELETE \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/releases/$RELEASE_ID + + # Delete the tag associated with the release + - name: Delete Git Tag + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG_NAME: v${{ github.run_id }}-release + run: | + curl -X DELETE \ + -H "Authorization: token $GITHUB_TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/${{ github.repository }}/git/refs/tags/$TAG_NAME + + - name: Clean Up + run: | + docker stop arch-container || echo 'Failed to stop the container.' + docker rm arch-container || echo 'Failed to remove the container.'