name: Build ISOs on: workflow_dispatch: workflow_call: concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }}-iso cancel-in-progress: true jobs: build-iso: runs-on: ubuntu-latest permissions: contents: read packages: write id-token: write strategy: fail-fast: false matrix: image_name: - bazzite - bazzite-nvidia - bazzite-nvidia-open - bazzite-gnome - bazzite-gnome-nvidia - bazzite-gnome-nvidia-open - bazzite-deck - bazzite-deck-gnome - bazzite-ally - bazzite-ally-gnome - bazzite-asus - bazzite-gnome-asus - bazzite-asus-nvidia - bazzite-gnome-asus-nvidia - bazzite-asus-nvidia-open - bazzite-gnome-asus-nvidia-open major_version: [41] steps: - name: Free Disk Space (Ubuntu) uses: jlumbroso/free-disk-space@v1.3.1 - name: Checkout Repo uses: actions/checkout@v4 - name: Set Image Tag id: generate-tag shell: bash run: | TAG="stable" if [[ "${{ github.ref_name }}" == "testing" ]]; then TAG="testing" fi # Would like to implement in the future. This will allow us to support image tags from a PR. #if [[ github.event.number ]]; then # TAG="pr-${{ github.event.number }}-${{ matrix.major_version }}" #fi echo "tag=${TAG}" >> $GITHUB_OUTPUT - name: Set Flatpaks Directory Shortname id: generate-flatpak-dir-shortname shell: bash run: | FLATPAK_DIR_SHORTNAME="installer/kde_flatpaks" if [[ "${{ matrix.image_name }}" =~ "gnome" ]]; then FLATPAK_DIR_SHORTNAME="installer/gnome_flatpaks" fi echo "flatpak-dir-shortname=${FLATPAK_DIR_SHORTNAME}" >> $GITHUB_OUTPUT - name: Determine Flatpak Dependencies id: flatpak_dependencies shell: bash run: | set -ex image="ghcr.io/ublue-os/${{ matrix.image_name }}:${{ steps.generate-tag.outputs.tag }}" # Make temp space TEMP_FLATPAK_INSTALL_DIR=$(mktemp -d -p ${{ github.workspace }} flatpak.XXX) # Get list of refs from directory FLATPAK_REFS_DIR=${{ github.workspace }}/${{ steps.generate-flatpak-dir-shortname.outputs.flatpak-dir-shortname }} FLATPAK_REFS_DIR_LIST=$(cat ${FLATPAK_REFS_DIR}/* | tr '\n' ' ' ) # Generate install script cat << EOF > ${TEMP_FLATPAK_INSTALL_DIR}/script.sh cat /temp_flatpak_install_dir/script.sh mkdir -p /flatpak/flatpak /flatpak/triggers mkdir /var/tmp || true chmod -R 1777 /var/tmp flatpak config --system --set languages "*" flatpak remote-add --system flathub https://flathub.org/repo/flathub.flatpakrepo flatpak install --system -y ${FLATPAK_REFS_DIR_LIST} ostree refs --repo=\${FLATPAK_SYSTEM_DIR}/repo | grep '^deploy/' | grep -v 'org\.freedesktop\.Platform\.openh264' | sed 's/^deploy\///g' > /output/flatpaks_with_deps EOF docker run --rm --privileged \ --entrypoint bash \ -e FLATPAK_SYSTEM_DIR=/flatpak/flatpak \ -e FLATPAK_TRIGGERSDIR=/flatpak/triggers \ --volume ${FLATPAK_REFS_DIR}:/output \ --volume ${TEMP_FLATPAK_INSTALL_DIR}:/temp_flatpak_install_dir \ ${image} /temp_flatpak_install_dir/script.sh docker rmi ${image} - name: Setup Bazzite Repo id: setup-bazzite-repo shell: bash run: | curl -Lo ${{ github.workspace }}/bazzite.repo https://copr.fedorainfracloud.org/coprs/kylegospo/bazzite/repo/fedora-${{ matrix.major_version }}/kylegospo-bazzite-fedora-${{ matrix.major_version }}.repo - name: Build ISOs uses: jasonn3/build-container-installer@v1.2.3 id: build with: arch: x86_64 image_name: ${{ matrix.image_name }} image_repo: ghcr.io/ublue-os variant: 'Kinoite' version: ${{ matrix.major_version }} image_tag: ${{ steps.generate-tag.outputs.tag }} secure_boot_key_url: 'https://github.com/ublue-os/bazzite/raw/main/secure_boot.der' enrollment_password: 'universalblue' iso_name: ${{ matrix.image_name }}-${{ steps.generate-tag.outputs.tag }}.iso enable_cache_dnf: "false" enable_cache_skopeo: "false" flatpak_remote_refs_dir: ${{ steps.generate-flatpak-dir-shortname.outputs.flatpak-dir-shortname }} enable_flatpak_dependencies: "false" extra_boot_params: ${{ steps.generate-extra-params.outputs.extra-boot-params }} additional_templates: '/github/workspace/installer/lorax_templates/remove_root_password_prompt.tmpl /github/workspace/installer/lorax_templates/set_default_user.tmpl' repos: '/github/workspace/bazzite.repo /etc/yum.repos.d/fedora.repo /etc/yum.repos.d/fedora-updates.repo' - name: Move ISOs to Upload Directory id: upload-directory shell: bash run: | ISO_UPLOAD_DIR=${{ github.workspace }}/upload mkdir ${ISO_UPLOAD_DIR} mv ${{ steps.build.outputs.iso_path }}/${{ steps.build.outputs.iso_name }} ${ISO_UPLOAD_DIR} mv ${{ steps.build.outputs.iso_path }}/${{ steps.build.outputs.iso_name }}-CHECKSUM ${ISO_UPLOAD_DIR} echo "iso-upload-dir=${ISO_UPLOAD_DIR}" >> $GITHUB_OUTPUT - name: Upload ISOs and Checksum to Job Artifacts if: github.ref_name == 'testing' #if: github.event_name == 'pull_request' uses: actions/upload-artifact@v4 with: name: ${{ matrix.image_name }}-${{ steps.generate-tag.outputs.tag }}-${{ matrix.major_version}} path: ${{ steps.upload-directory.outputs.iso-upload-dir }} if-no-files-found: error retention-days: 0 compression-level: 0 overwrite: true - name: Upload ISOs and Checksum to R2 if: github.event_name == 'workflow_dispatch' && github.ref_name == 'main' shell: bash env: RCLONE_CONFIG_R2_TYPE: s3 RCLONE_CONFIG_R2_PROVIDER: Cloudflare RCLONE_CONFIG_R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }} RCLONE_CONFIG_R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }} RCLONE_CONFIG_R2_REGION: auto RCLONE_CONFIG_R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }} SOURCE_DIR: ${{ steps.upload-directory.outputs.iso-upload-dir }} run: | sudo apt-get update sudo apt-get install -y rclone rclone copy $SOURCE_DIR R2:bazzite