--- name: Build disk images on: workflow_dispatch: inputs: upload-to-s3: description: "Upload to S3" required: false default: false type: boolean platform: required: true type: choice options: - amd64 - arm64 pull_request: branches: - main paths: - 'disk_config/disk.toml' - 'disk_config/iso-kde.toml' - '.github/workflows/build-disk.yml' env: IMAGE_NAME: ${{ github.event.repository.name }} # output of build.yml, keep in sync IMAGE_REGISTRY: "ghcr.io/${{ github.repository_owner }}" # do not edit DEFAULT_TAG: "latest" BIB_IMAGE: "quay.io/centos-bootc/bootc-image-builder:latest" concurrency: group: ${{ github.workflow }}-${{ github.ref || github.run_id }} cancel-in-progress: true jobs: build: name: Build disk images runs-on: ${{ inputs.platform == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }} strategy: fail-fast: false matrix: disk-type: ["qcow2", "anaconda-iso"] permissions: contents: read packages: read id-token: write steps: - name: Prepare environment run: | USER_UID=$(id -u) USER_GID=$(id -g) # Concatenate the types with a hyphen DISK_TYPE=$(echo "${{ matrix.disk-type }}" | tr ' ' '-') # Lowercase the image uri { echo "IMAGE_REGISTRY=${IMAGE_REGISTRY,,}" echo "IMAGE_NAME=${IMAGE_NAME,,}" echo "DISK_TYPE=${DISK_TYPE}" echo "USER_UID=${USER_UID}" echo "USER_GID=${USER_GID}" } >> "$GITHUB_ENV" - name: Install dependencies if: inputs.platform == 'arm64' run: | set -x sudo apt update -y sudo apt install -y \ podman - name: Maximize build space if: inputs.platform != 'arm64' uses: ublue-os/remove-unwanted-software@cc0becac701cf642c8f0a6613bbdaf5dc36b259e # v9 with: remove-codeql: true - name: Checkout uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - name: Build disk images id: build uses: osbuild/bootc-image-builder-action@cb4b3e9c112077ea96a191fad229d51d2a012885 # main with: builder-image: ${{ env.BIB_IMAGE }} rootfs: btrfs config-file: ${{ matrix.disk-type == 'anaconda-iso' && './disk_config/iso-kde.toml' || './disk_config/disk.toml' }} image: ${{ env.IMAGE_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEFAULT_TAG }} chown: ${{ env.USER_UID }}:${{ env.USER_GID }} types: ${{ matrix.disk-type }} additional-args: --use-librepo=True - name: Upload disk images and Checksum to Job Artifacts if: inputs.upload-to-s3 != true && github.event_name != 'pull_request' uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: path: ${{ steps.build.outputs.output-directory }} if-no-files-found: error retention-days: 0 compression-level: 0 overwrite: true - name: Upload to S3 if: inputs.upload-to-s3 == true && github.event_name != 'pull_request' shell: bash env: RCLONE_CONFIG_S3_TYPE: s3 RCLONE_CONFIG_S3_PROVIDER: ${{ secrets.S3_PROVIDER }} RCLONE_CONFIG_S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID }} RCLONE_CONFIG_S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY }} RCLONE_CONFIG_S3_REGION: ${{ secrets.S3_REGION }} RCLONE_CONFIG_S3_ENDPOINT: ${{ secrets.S3_ENDPOINT }} SOURCE_DIR: ${{ steps.build.outputs.output-directory }} run: | sudo apt-get update sudo apt-get install -y rclone rclone copy "$SOURCE_DIR" "S3:${{ secrets.S3_BUCKET_NAME }}"