Refactor repository structure for easier maintenance
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- リファクタリング
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
- 領域
- tooling
調査の方向性
まず既存の index.yml とカテゴリディレクトリ配下にある各アプリケーションのマニフェストを読み、次に Bottles クライアントの現在のマニフェストスキャン動作を確認します。提案されている meta.yml、ファイル名から導出される名前とカテゴリ、および Icon、Event、Hidden フィールドを現在の形式と比較します。リポジトリ構造とクライアント動作が移行され、古いクライアントが失敗しない状態になれば完了です。
索引モデルが issue の本文から書いたものです。
説明
As discussed in #413:
Problem:
The index.yml is very often forgotten by people (even core contributors). Some people edit the manifest, some people edit the index, but 50% of the time one of them is forgotten. There's lots of metadata repetition, leading to maintainer and contributor mistakes.
Proposal:
- Delete:
index.yml(almost all of its fields are copy-pasted duplicates of the per-app manifests, causing a maintenance burden) - Add:
meta.ymlwith the following contents, to tell Bottles which sub-directories to scan for*.ymlmanifests:
categories:
- Games
- Software
- Modify
<app name>.ymlformat as follows:Name: Change this to be the "pretty display name" that used to only exist in the index, such as "GOG Galaxy". This field used to be redundant in the manifest and was always the same name as the manifest file minus the.ymlextension (so for example,epicgamestore.ymlhad aName: epicgamestorewhich is pointless and a source of potential typos). So let's instead track that internal "name" via the actual.ymlfilename, and use theNamefield to carry the UI display name.Category: Do not add this to the manifest. Instead, automatically detect it based on the name of the directory the manifest is inside, such as "Games" or "Software". That's one less source of typos.Icon: Add this to the manifest. It's the filename of the icon to display during installation.Event: If it's useful, add it to the manifest. I don't know the purpose. Only a few entries in the index currently have this value, and it's always a filename pointing at an installer file. It may be possible to just remove this entirely. Edit: Include it, I found its purpose and it looks like a great idea: https://github.com/bottlesdevs/programs/issues/414#issuecomment-3061658624Hidden: Add this optional field. If missing, assumefalse. Otherwise allow the manifest to containtrue/falsehere. If hidden istrue, do not display this manifest in the UI. The purpose is to allow an easy way to hide broken manifests without having to manually move them out of the auto-scanned manifest directories.
The scanning process for the client to index all manifests is then as follows:
for category in categories: # "categories" comes from meta.yml
category_dir = programs_dir / category # assumes pathlib.Path
for manifest_yml in category_dir.glob("*.yml"):
name = manifest_yml.stem
# We have now automatically derived the category and manifest name:
# category: Games
# name: epicgamestore
# Now read the manifest YAML file, and immediately skip the manifest
# if `Hidden` exists and is `true`. Do that check before any other parsing,
# to avoid trying to parse other possibly-outdated manifest structures.
With this repo structure, maintenance is only a matter of editing/moving a single .yml file per application.
Target: Bottles-Next, or possibly even the current public release. If targeting the current release, a simple migration solution is to put up a dummy index.yml file which is empty, so that outdated Bottles clients won't have any fatal errors and simply don't display any programs at all until the user has updated Bottles.
- 主要言語
- 言語のデータがありません
- スター
- 111
- フォーク
- 93
- 平均マージ
- 1日 1時間
- マージ済み PR(30日)
- 3
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
bottlesdevs/programs のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
bottlesdevs/programs#498 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
bottlesdevs/programs#490 · コメント 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
bottlesdevs/programs#429 · コメント 27 件 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 64/100
bottlesdevs/programs#497 ·
-
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
bottlesdevs/programs#495 ·
bottlesdevs/programs の issue をすべて見る
似ている issue
-
kaliscan.com オープンN: AdGuard for iOS P3: Medium T: Ads
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
AdguardTeam/AdguardFilters#242501 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
-
[BUG] createTool tools cannot be registered with Mastra when exactOptionalPropertyTypes is enabled オープンcustomer-eng status: needs triage
難易度 2/5 1〜3時間 初心者へのやさしさ 84/100
-
add-toolnames MCP Toolnames Toolnames checkup
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
rajbos/ai-engineering-fluency#2190 · コメント 3 件 ·
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
gajus/eslint-plugin-jsdoc#1776 · リアクション 1 件 ·