Skip to content

Commit

Permalink
Add fedora-cosmic-atomic-main
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanabx committed Feb 10, 2024
1 parent 53348f4 commit 783897c
Show file tree
Hide file tree
Showing 8 changed files with 293 additions and 9 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,9 @@ jobs:

- name: Gather image data from description
run: |
echo "IMAGE_NAME=$(yq '.name' ./desc.yml)" >> $GITHUB_ENV
echo "IMAGE_DESCRIPTION=$(yq '.description' ./desc.yml)" >> $GITHUB_ENV
echo "IMAGE_MAJOR_VERSION=$(yq '.image-version' ./desc.yml)" >> $GITHUB_ENV
echo "IMAGE_NAME=$(yq '.name' ./containers/fedora-cosmic-atomic/desc.yml)" >> $GITHUB_ENV
echo "IMAGE_DESCRIPTION=$(yq '.description' ./containers/fedora-cosmic-atomic/desc.yml)" >> $GITHUB_ENV
echo "IMAGE_MAJOR_VERSION=$(yq '.image-version' ./containers/fedora-cosmic-atomic/desc.yml)" >> $GITHUB_ENV
- name: Get current version
id: labels
Expand Down Expand Up @@ -133,7 +133,7 @@ jobs:
uses: redhat-actions/buildah-build@v2
with:
containerfiles: |
./Containerfile
./containers/fedora-cosmic-atomic/Containerfile
image: ${{ env.IMAGE_NAME }}
tags: |
${{ steps.generate-tags.outputs.alias_tags }}
Expand Down
167 changes: 167 additions & 0 deletions .github/workflows/build_main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
name: build
on: # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows
push:
branches:
- main
paths-ignore: # don't rebuild if only documentation has changed
- "**.md"
pull_request:
workflow_dispatch:

env:
IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}

# Only deploys the branch named "live". Ignores all other branches, to allow
# having "development" branches without interfering with GHCR image uploads.
jobs:
push-ghcr:
name: Build and push image
runs-on: ubuntu-22.04
permissions:
contents: read
packages: write
id-token: write
strategy:
fail-fast: false
matrix:
arch: [amd64] #add ,arm64 to add back arm build

steps:
- name: Maximize build space
uses: easimon/maximize-build-space@v10
with:
root-reserve-mb: 37500
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
remove-codeql: 'true'
remove-docker-images: 'true'

# Checkout push-to-registry action GitHub repository
- name: Checkout Push to Registry action
uses: actions/checkout@v4

- name: Add yq (for reading desc.yml)
uses: mikefarah/yq@v4.35.1

- name: Gather image data from description
run: |
echo "IMAGE_NAME=$(yq '.name' ./containers/fedora-cosmic-atomic-main/desc.yml)" >> $GITHUB_ENV
echo "IMAGE_DESCRIPTION=$(yq '.description' ./containers/fedora-cosmic-atomic-main/desc.yml)" >> $GITHUB_ENV
echo "IMAGE_MAJOR_VERSION=$(yq '.image-version' ./containers/fedora-cosmic-atomic-main/desc.yml)" >> $GITHUB_ENV
- name: Get current version
id: labels
run: |
ver=$(skopeo inspect docker://quay.io/fedora/fedora-silverblue:${{ env.IMAGE_MAJOR_VERSION }} | jq -r '.Labels["org.opencontainers.image.version"]')
echo "VERSION=$ver" >> $GITHUB_OUTPUT
- name: Generate tags
id: generate-tags
shell: bash
run: |
# Generate a timestamp for creating an image version history
TIMESTAMP="$(date +%Y%m%d)"
MAJOR_VERSION="$(echo ${{ steps.labels.outputs.VERSION }} | cut -d . -f 1)"
COMMIT_TAGS=()
BUILD_TAGS=()
# Have tags for tracking builds during pull request
SHA_SHORT="${GITHUB_SHA::7}"
# Using clever bash string templating, https://stackoverflow.com/q/40771781
# don't make malformed tags if $MAJOR_VERSION is empty (base-image didn't include proper labels) --
COMMIT_TAGS+=("pr-${{ github.event.number }}${MAJOR_VERSION:+-$MAJOR_VERSION}-${{ matrix.arch }}")
COMMIT_TAGS+=("${SHA_SHORT}${MAJOR_VERSION:+-$MAJOR_VERSION}-${{ matrix.arch }}")
BUILD_TAGS=("${MAJOR_VERSION}-${{ matrix.arch }}" "${MAJOR_VERSION:+$MAJOR_VERSION-}${TIMESTAMP}-${{ matrix.arch }}")
# --
BUILD_TAGS+=("${TIMESTAMP}-${{ matrix.arch }}")
BUILD_TAGS+=("latest-${{ matrix.arch }}")
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "Generated the following commit tags: "
for TAG in "${COMMIT_TAGS[@]}"; do
echo "${TAG}"
done
alias_tags=("${COMMIT_TAGS[@]}")
else
alias_tags=("${BUILD_TAGS[@]}")
fi
echo "Generated the following build tags: "
for TAG in "${BUILD_TAGS[@]}"; do
echo "${TAG}"
done
echo "alias_tags=${alias_tags[*]}" >> $GITHUB_OUTPUT
# Build metadata
- name: Image Metadata
uses: docker/metadata-action@v5
id: meta
with:
images: |
${{ env.IMAGE_NAME }}
labels: |
org.opencontainers.image.title=${{ env.IMAGE_NAME }}
org.opencontainers.image.version=${{ steps.labels.outputs.VERSION }}
org.opencontainers.image.description=${{ env.IMAGE_DESCRIPTION }}
io.artifacthub.package.readme-url=https://raw.githubusercontent.com/ryanabx/infinity/main/README.md
io.artifacthub.package.logo-url=https://avatars.githubusercontent.com/u/56272643?s=200&v=4
# Workaround bug where capital letters in your GitHub username make it impossible to push to GHCR.
# https://github.com/macbre/push-to-ghcr/issues/12
- name: Lowercase Registry
id: registry_case
uses: ASzc/change-string-case-action@v6
with:
string: ${{ env.IMAGE_REGISTRY }}

- name: Lowercase Image
id: image_case
uses: ASzc/change-string-case-action@v6
with:
string: ${{ env.IMAGE_NAME }}

- name: Install qemu dependency
run: |
sudo apt-get update
sudo apt-get install -y qemu-user-static
# Build image using Buildah action
- name: Build Image
id: build_image
uses: redhat-actions/buildah-build@v2
with:
containerfiles: |
./containers/fedora-cosmic-atomic-main/Containerfile
image: ${{ env.IMAGE_NAME }}
tags: |
${{ steps.generate-tags.outputs.alias_tags }}
archs: ${{ matrix.arch }}
build-args: |
IMAGE_MAJOR_VERSION=${{ env.IMAGE_MAJOR_VERSION }}
IMAGE_REGISTRY=${{ steps.registry_case.outputs.lowercase }}
labels: ${{ steps.meta.outputs.labels }}
oci: false

- name: 'Login to GitHub Container Registry'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{github.actor}}
password: ${{secrets.GITHUB_TOKEN}}

# Push the image to GHCR (Image Registry)
- name: Push To GHCR
uses: redhat-actions/push-to-registry@v2
id: push
with:
image: ${{ steps.build_image.outputs.image }}
tags: ${{ steps.build_image.outputs.tags }}
registry: ${{ steps.registry_case.outputs.lowercase }}
extra-args: |
--disable-content-trust
- name: Echo outputs
run: |
echo "${{ toJSON(steps.push.outputs) }}"
4 changes: 2 additions & 2 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2023 Drakulix
Copyright (c) 2023 Drakulix, ryanabx

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand All @@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@

This project has no association with **System76** and is not an officially endorsed installation method.

## Usage
## Pre-Install

1. Install Fedora Atomic variant:
[Silverblue](https://fedoraproject.org/atomic-desktops/silverblue/)
[Kinoite](https://fedoraproject.org/atomic-desktops/kinoite/)
2. Disable SELinux (edit `/etc/selinux/config`)
3. Run `sudo rpm-ostree rebase ostree-unverified-registry:ghcr.io/ryanabx/fedora-cosmic-atomic:latest-amd64`

Thanks to Drakulix for the original image. This image is up-to-date and makes some different decisions:
## Install Image
### cosmic-epoch without upgraded submodules (recommended)
Run `sudo rpm-ostree rebase ostree-unverified-registry:ghcr.io/ryanabx/fedora-cosmic-atomic:latest-amd64`
### cosmic-epoch with upgraded submodes (all submodules at their master branch, latest commit) (for real tinkerers ;D)
Run `sudo rpm-ostree rebase ostree-unverified-registry:ghcr.io/ryanabx/fedora-cosmic-atomic-main:latest-amd64`
> Note: This package is still updated whenever I (ryanabx) have time, but you may use the containerfile to build your own image if you need the latest and greatest off my schedule!
Thanks to Drakulix for the original image. Differences from her image:
* The image is based on Fedora's Base image instead of SilverBlue
* `cosmic-greeter` is swapped out with `SDDM` for the time being, as there's a problem that doesn't let cosmic-greeter start at the moment (see: https://github.com/pop-os/cosmic-greeter/issues/8)
* More up-to-date at the moment (hers is 3 months old)

## Obligatory neofetch
![Neofetch of COSMIC desktop in Fedora](./screenshot/1.png)
Expand Down
105 changes: 105 additions & 0 deletions containers/fedora-cosmic-atomic-main/Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
ARG IMAGE_MAJOR_VERSION=39
ARG BASE_IMAGE_URL=quay.io/fedora-ostree-desktops/base

FROM registry.fedoraproject.org/fedora:${IMAGE_MAJOR_VERSION} AS cosmic-builder

RUN dnf update -y
RUN dnf install -y git \
make \
which \
just \
rustc \
libglvnd-devel \
libseat-devel \
libxkbcommon-devel \
lld \
libinput-devel \
glib2-devel \
gtk3-devel \
dbus-devel \
wayland-devel \
clang-devel \
cargo \
mesa-libgbm-devel \
pipewire-devel \
pam-devel \
flatpak-devel
RUN git clone --recurse-submodules https://github.com/pop-os/cosmic-epoch
# This is where the magic happens
RUN git submodule update --remote
RUN cd cosmic-epoch && just sysext && rm -rf cosmic-sysext/usr/lib/extension-release.d


FROM registry.fedoraproject.org/fedora:${IMAGE_MAJOR_VERSION} AS launcher-builder

RUN dnf update -y
RUN dnf install -y git \
just \
rustc \
cargo \
libglvnd-devel \
libxkbcommon-devel
RUN git clone --recurse-submodules https://github.com/pop-os/launcher
RUN cd launcher && just build-release


FROM registry.fedoraproject.org/fedora:${IMAGE_MAJOR_VERSION} AS wallpapers-builder
RUN dnf update -y
RUN dnf install -y git
RUN git clone --recurse-submodules https://github.com/pop-os/system76-wallpapers


FROM ${BASE_IMAGE_URL}:${IMAGE_MAJOR_VERSION}


# Cosmic dependencies
RUN rpm-ostree install \
libseat \
pop-icon-theme \
greetd \
greetd-selinux \
cage \
mozilla-fira-mono-fonts \
mozilla-fira-sans-fonts \
sddm

# TODO: Remove SDDM once cosmic-greeter is stable

# Copy COSMIC
COPY --from=cosmic-builder /cosmic-epoch/cosmic-sysext/usr /usr
COPY --from=cosmic-builder /cosmic-epoch/cosmic-comp/config.ron /usr/etc/cosmic-comp/config.ron
COPY --from=cosmic-builder /cosmic-epoch/cosmic-greeter/cosmic-greeter.toml /usr/etc/greetd/cosmic-greeter.toml
COPY --from=cosmic-builder /cosmic-epoch/cosmic-greeter/debian/cosmic-greeter.service /usr/lib/systemd/system/cosmic-greeter.service

COPY --from=launcher-builder /launcher/target/release/pop-launcher-bin /usr/bin/pop-launcher
COPY --from=launcher-builder /launcher/plugins/src/calc/plugin.ron /usr/lib/pop-launcher/plugins/calc/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/calc/calc
COPY --from=launcher-builder /launcher/plugins/src/cosmic_toplevel/plugin.ron /usr/lib/pop-launcher/plugins/cosmic_toplevel/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/cosmic_toplevel/cosmic-toplevel
COPY --from=launcher-builder /launcher/plugins/src/desktop_entries/plugin.ron /usr/lib/pop-launcher/plugins/desktop_entries/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/desktop_entries/desktop-entries
COPY --from=launcher-builder /launcher/plugins/src/files/plugin.ron /usr/lib/pop-launcher/plugins/files/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/files/files
COPY --from=launcher-builder /launcher/plugins/src/find/plugin.ron /usr/lib/pop-launcher/plugins/find/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/find/find
COPY --from=launcher-builder /launcher/plugins/src/pulse/plugin.ron /usr/lib/pop-launcher/plugins/pulse/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/pulse/pulse
COPY --from=launcher-builder /launcher/plugins/src/recent/plugin.ron /usr/lib/pop-launcher/plugins/recent/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/recent/recent
COPY --from=launcher-builder /launcher/plugins/src/scripts/plugin.ron /usr/lib/pop-launcher/plugins/scripts/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/scripts/scripts
COPY --from=launcher-builder /launcher/plugins/src/terminal/plugin.ron /usr/lib/pop-launcher/plugins/terminal/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/terminal/terminal
COPY --from=launcher-builder /launcher/plugins/src/web/plugin.ron /usr/lib/pop-launcher/plugins/web/plugin.ron
RUN ln -s /usr/bin/pop-launcher /usr/lib/pop-launcher/plugins/web/web

COPY --from=wallpapers-builder /system76-wallpapers/backgrounds /usr/share/backgrounds/pop

# RUN ln -s /usr/lib/systemd/system/gdm.service /etc/systemd/system/display-manager.service

RUN rm -rf /var/lib/greetd

# TODO: Reenable once cosmic-greeter is reenabled

RUN rpm-ostree cleanup -m && ostree container commit

5 changes: 5 additions & 0 deletions containers/fedora-cosmic-atomic-main/desc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
title: Fedora COSMIC Atomic Main
name: fedora-cosmic-atomic-main
description: Fedora COSMIC Atomic Main ships the pre-alpha COSMIC desktop environment in an atomic fashion, with all the submodules updated to their master/main branch.
image-registry: ghcr.io
image-version: 39
File renamed without changes.
File renamed without changes.

0 comments on commit 783897c

Please sign in to comment.