Bluefin Documentation

repository·main·Indexed 25 days ago

https://github.com/ublue-os/bluefin

A cloud-native desktop operating system built on Fedora and GNOME, designed for reliability and developer workflows. Documentation covers installation via the scene picker, Secure Boot configuration using the ujust utility, developer experience group management with bluefin-dx-groups, and technical details on its OCI-based build architecture, E2E testing pipeline, and bootc switch workflows.

Tokens
1.8K
Snippets
2
Records
12
Agent score
83%

What's inside Bluefin

  1. Compare projectbluefin/bluefin vs ublue-os/bluefin

    main

    This technical comparison report evaluates the differences between the projectbluefin/bluefin and ublue-os/bluefin repositories.

    Key architectural differences include:

    • Supply Chain Independence: projectbluefin builds directly on Fedora-based images (e.g., quay.io/fedora-ostree-desktops/silverblue:43) without depending on ublue-os/main-images.
    • Pipeline Maturity: projectbluefin implements a testing $\rightarrow$ E2E $\rightarrow$ promotion lifecycle, whereas ublue-os lacks an automated desktop E2E gate.
    • Security: projectbluefin utilizes keyless signing to eliminate secret management.
    • Developer Velocity: projectbluefin provides fast PR validation (1–2 minutes) via linting gates, compared to 40-minute full builds for non-image changes.
  2. Overview of the Bluefin Automated Desktop QA (Testsuite)

    main

    The Bluefin testsuite is a cloud-native QA pipeline designed to run automated desktop testing on standard GitHub Actions runners. It uses a KVM-accelerated QEMU VM to boot the OCI image, starts a GNOME session, and executes tests via the AT-SPI accessibility tree.

    Test Stack

    • BDD runner: behave (Gherkin .feature scenarios)
    • Session bridge: qecore-headless (Wayland/DBus bootstrap)
    • GUI automation: dogtail (AT-SPI accessibility-tree interactions)
    • Shell bridge: org.gnome.Shell.Eval (GNOME JS evaluation)
    • VM runtime: QEMU + KVM

    Integration Workflow

    1. Push to main: Triggers build-image-testing.yml to build images and upload digests.
    2. Post-testing: post-testing-e2e.yml downloads the digest and runs the testsuite.
    3. Weekly Promotion: weekly-testing-promotion.yml verifies that a successful E2E run exists for the current HEAD before promoting code to stable or latest branches.
  3. Understand the Bluefin build architecture and base images

    main

    Bluefin uses a multi-stage build process defined in a Containerfile. The architecture involves building from common and brew OCI layers using a single RUN --mount step, followed by a bootc container lint check.

    There are two primary implementation approaches for the base image:

    1. Ublue-based: Uses FROM ghcr.io/ublue-os/silverblue-main:42. This depends on the ublue-os/main-images pipeline.
    2. Fedora-direct (Project Bluefin): Uses FROM quay.io/fedora-ostree-desktops/silverblue:43@sha256:.... This builds directly on official Fedora images using a digest pin, providing full control over the supply chain and eliminating intermediate reprocessing dependencies.
  4. Validate local development environment with `pre-commit`

    main
    To ensure code quality before pushing, use pre-commit to run linting and formatting hooks. In the projectbluefin/bluefin implementation, the recommended validation command includes checking just syntax and shell scripts.
  5. Configure Secure Boot for Bluefin

    main

    Bluefin supports Secure Boot by default. During the initial installation, you will be prompted to enroll the Bluefin secure boot key in the BIOS. When prompted, enter the password:

    universalblue

    Manual Enrollment

    If you missed the prompt during setup, you can manually enroll the key using the ujust utility:

    ujust enroll-secure-boot-key

    Pre-installation Enrollment

    If you prefer to enroll the key before installing or rebasing, download the public key from the akmods repository and run:

    sudo mokutil --timeout -1
    sudo mokutil --import public_key.der
    ujust enroll-secure-boot-key
  6. Trigger on-demand E2E testing via PR comments

    main
    Maintainers can trigger an on-demand automated desktop test suite on any Pull Request by commenting /e2e. This workflow builds the PR image and runs the smoke, developer, and vanilla-gnome test suites, posting the results directly to the PR.
  7. Review projectbluefin/bluefin operational capabilities

    main

    The following capabilities are currently implemented and operational in the projectbluefin/bluefin repository:

    • Fedora-direct base image: Uses quay.io/fedora-ostree-desktops/silverblue to avoid upstream dependencies.
    • Keyless signing: Eliminates the need for cosign.pub or SIGNING_SECRET in workflows.
    • E2E gating: Uses post-testing-e2e.yml to pin the testsuite.
    • Weekly promotion: weekly-testing-promotion.yml ensures images are only promoted if E2E tests pass.
    • Merge queue: Requires validate status for branch protection.
    • Path-filtered PR builds: Uses dorny/paths-filter in build-image-testing.yml for efficient builds.
    • Renovate automerge: Automated dependency updates.
    • PR OCI artifacts: Supports local testing via podman save --format oci-dir for bootc switch workflows.
    • Declarative version pins: Uses image-versions.yml for structured, digest-pinned Renovate targets.
    • Fast PR validation: pr-validation.yml provides quick feedback (1–2 min) using shellcheck, actionlint, and pre-commit.
    • Build telemetry: Tracks duration for build, rechunk, and push steps in the GitHub action summary.
  8. Run local builds using `just`

    main

    Bluefin uses the just command runner to manage build recipes. You can trigger local builds using the build recipe. The interface is consistent across different repository implementations.

    # Local build
    just build bluefin latest main
    
    # CI build (requires sudo)
    sudo just build-ghcr bluefin testing main
  9. Manage developer experience groups with bluefin-dx-groups

    main

    The bluefin-dx-groups command is a system utility used to configure specific user groups required for the Bluefin developer experience (DX). It ensures that necessary groups exist in /etc/group and automatically adds members of the wheel group to these developer-centric groups.

    When executed, the script performs the following:

    1. Checks if the group setup has already been run by comparing versions in /etc/ublue/dx-groups.
    2. Appends the following groups to /etc/group if they are not already present:
      • docker
      • incus-admin
      • libvirt
    3. Iterates through all users currently in the wheel group and adds them to docker, incus-admin, and libvirt using usermod -aG.

    Note: This script is idempotent and tracks its execution state in /etc/ublue/dx-groups to prevent redundant runs.