跳转到主要内容

另一个首次安装程序

项目描述

另一个首次安装程序

此应用程序负责在用户完成安装后首次启动时安装Flatpaks。它旨在作为自定义zenity对话框的替代品。

项目目标

  • 通过JSON/YAML配置文件驱动
  • 支持任意预安装和后安装命令
  • 配置驱动的屏幕
  • 屏幕独立的状态管理,可设置默认值
  • 可通过插入Python类/插件扩展功能

核心功能

这是首次安装程序每个功能的目标

标题屏幕

标题屏幕将包含三个主要元素。一个图像/图标,一个标题/主要文本,以及一个段落描述文本。


         ICON
      TITLE TEXT

  this is a description
  to accompany the title
  screen.

软件包屏幕

显示要安装的几个软件包组,允许展开每个组以单独选择离散的软件包或切换整个组的开/关。

例如

Core                [/] >
Gaming              [/] >
Office              [/] >

展开核心将显示

Core                [/] v
  firefox           [x]
  calculator        [x]
  text editor       [x]
  clocks            [x]
  fonts             [x]
Gaming              [/] >
Office              [/] >

然后应用程序将安装Flatpaks。可能/可以开发用于其他软件包系统的插件。

配置

title: uBlue First Boot
properties:
  mode: "run-on-change"
  path: "~/.config/yafti/last-run"
actions:
  pre:
  - run: /full/path/to/bin --with --params
  - run: /another/command run
  - yafti.plugin.flatpak:
      install: org.gnome.Calculator
  post:
  - run: /run/these/commands --after --all --screens
screens:
  first-screen:
    source: yafti.screen.title
    values:
      title: "That was pretty cool"
      icon: "/path/to/icon"
      description: |
        Time to play overwatch
  applications:
    source: yafti.screen.package
    values:
      title: Package Installation
      show_terminal: true
      package_manager: yafti.plugin.flatpak
      groups:
        Core:
          description: All the good stuff
          packages:
          - Calculator: org.gnome.Calculator
          - Firefox: org.mozilla.firefox
        Gaming:
          description: GAMES GAMES GAMES
          packages:
          - Steam: com.valvesoftware.Steam
          - Games: org.gnome.Games
        Office:
          description: All the work stuff
          packages:
          - LibreOffice: org.libreoffice.LibreOffice
          - Calendar: org.gnome.Calendar
  final-screen:
    source: yafti.screen.title
    values:
      title: "All done"
      icon: "/path/to/icon"
      description: |
        Thanks for installing, join the community, next steps

开发

本项目使用 Poetry 和 Python 3.11。请确保您已安装 Python 3.11 和 Poetry。检出仓库并导航到根项目目录。

先决条件

如果您使用的是 Ublue / 不变操作系统,您需要在工具箱中运行这些命令以及 poetry 安装。

sudo dnf install python3-devel cairo-devel gobject-introspection-devel cairo-gobject-devel
poetry install

运行

poetry run python -m yafti tests/example.yml

这将启动 Yafti 窗口。

从 Containerfile 运行

yafti 的主要用途之一是用于 Containerfile 中,以便在首次启动时处理 Flatpak 的安装。将以下内容添加到您的 Containerfile 中以将 yafti 添加到您的镜像

RUN pip install --prefix=/usr yafti

此外,您还需要一个脚本将 .desktop 文件复制到用户的主目录

然后,在 /etc/yafti.yml 中添加一个文件,包含您的自定义设置。查看 示例文件 以获取灵感。

测试

本项目使用 pytest、black、isort 和 ruff 进行测试和代码风格检查。

poetry run pytest --cov=yafti --cov-report=term-missing
poetry run black yafti
poetry run isort yafti
poetry run ruff yafti

贡献

本项目遵循 fork 和 pull request 风格的贡献。

创建 Fork

只需访问 GitHub 页面并 点击 "Fork" 按钮。完成之后,您可以使用您喜欢的 git 客户端克隆您的仓库或直接进入命令行。

# Clone your fork to your local machine
git clone git@github.com:USERNAME/FORKED-PROJECT.git

保持 Fork 更新

虽然这不是一个绝对必要的步骤,但如果您打算做任何事情(而不仅仅是快速修复),您将想要确保通过跟踪您 fork 的原始 "upstream" 仓库来保持您的 fork 更新。您可以通过 GitHub UI 或本地将此仓库作为上游添加来做到这一点。

# Add 'upstream' repo to list of remotes
git remote add upstream https://github.com/ublue-os/yafti.git

# Verify the new remote named 'upstream'
git remote -v

每当您想要更新您的 fork 以包含最新的 upstream 变更时,您首先需要获取 upstream 仓库的分支和最新提交,以便将它们引入您的仓库

# Fetch from upstream remote
git fetch upstream

# View all branches, including those from upstream
git branch -va

现在,检出您自己的 main 分支,并将其与 upstream 仓库的 main 分支合并

# Checkout your main branch and merge upstream
git checkout main
git merge --ff-only upstream/main

如果没有在本地 main 分支上创建任何独特的提交,git 将简单地执行快速前进。然而,如果您已经在 main 上进行了更改(在大多数情况下您不应该这样做 - 见下一节,您可能需要处理冲突。在处理冲突时,请务必尊重上游所做的更改。

现在,您的本地 main 分支已更新,与上游的所有更改保持一致。

进行工作

创建分支

每当您开始开发新功能或修复错误时,创建一个新分支非常重要。这不仅是一个合适的 git 工作流程,而且还能使您的更改保持组织化和与主分支分离,从而使您能够轻松提交和管理每个任务完成的多个 pull request。

要创建一个新分支并开始工作

# Checkout the main branch - you want your new branch to come from main
git checkout main

# Create a new branch named newfeature (give your branch its own simple informative name)
git checkbout -b newfeature

现在,您可以自由地修改并做出您想要的任何更改。

提交信息

我们使用 Conventional Commits,并通过机器人强制执行它们,以保持变更日志整洁。

chore: add Oyster build script
docs: explain hat wobble
feat: add beta sequence
fix: remove broken confirmation message
refactor: share logic between 4d3d3d3 and flarhgunnstow
style: convert tabs to spaces
test: ensure Tayne retains clothing

如果您有多个提交,在 提交更改 时,请确保使用符合常规提交风格的 PR 标题,因为此项目执行 squash 合并,这将用作您的贡献。

提交 pull request

清理工作

在提交 pull request 之前,您可能想要做一些事情来清理您的分支,使其尽可能简单,以便原始仓库的维护者可以测试、接受和合并您的作品。

如果上游主分支上有任何提交,您应该重新基础您的功能分支,以便合并时将是一个简单的快速前进,无需任何冲突解决工作。

# Fetch upstream main and merge with your repo's main branch
git fetch upstream
git checkout main
git merge upstream/main

# If there were any new commits, rebase your feature branch
git checkout newfeature
git rebase main

提交

一旦您将所有更改提交并推送到GitHub,请访问GitHub上您分支的页面,选择您的功能分支,然后点击拉取请求按钮。如果您需要调整拉取请求,只需将更新推送到GitHub即可。您的拉取请求将自动跟踪功能分支上的更改并进行更新。

接受和合并拉取请求

请注意,与前面各节从创建分支并生成拉取请求的人的角度撰写的不同,本节从处理传入拉取请求的原始存储库所有者的角度撰写。因此,“分支创建者”将原始存储库称为upstream,我们现在将其视为原始存储库的所有者和标准origin远程。

检出和测试拉取请求

有几种方法可以在本地检出拉取请求。检出拉取请求的方式使用标准的git操作完成。打开.git/config文件,并在[remote "origin"]下添加新行

fetch = +refs/pull/*/head:refs/pull/origin/*

现在您可以获取和检出任何拉取请求,以便您可以对其进行测试

# Fetch all pull request branches
git fetch origin

# Checkout out a given pull request branch based on its number
git checkout -b 9001 pull/origin/9001

请注意,这些分支将是只读的,您无法推送任何更改。

自动合并拉取请求

在合并将是简单的快进的情况下,您可以通过点击GitHub上拉取请求页面上的按钮来自动进行合并。

项目详情


下载文件

下载适合您平台的项目文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

yafti-0.9.0.tar.gz (26.0 kB 查看哈希)

上传时间

构建分布

yafti-0.9.0-py3-none-any.whl (33.8 kB 查看哈希)

上传时间 Python 3