项目文件夹

文件
wehub-resource-sync 3e779be6f3
CI / lint (push) Failing after 13m4s
CI / test (3.11, ubuntu-latest) (push) Failing after 2m4s
CI / test (3.13, ubuntu-latest) (push) Successful in 13m30s
CI / test (3.14, ubuntu-latest) (push) Successful in 17m21s
CI / test (3.12, ubuntu-latest) (push) Successful in 17m55s
CI / discover-apps-ps (push) Successful in 1m56s
CI / test (3.9, ubuntu-latest) (push) Successful in 13m17s
CI / test (3.10, ubuntu-latest) (push) Successful in 26m21s
CI / audit (push) Successful in 13m38s
Deploy site / deploy (push) Has been cancelled
CI / test (3.14, ubuntu-24.04-arm) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:37 +08:00

192 行
7.1 KiB
Markdown

# Contributing to WinPodX
**English** | [한국어](docs/CONTRIBUTING.ko.md)
Thank you for your interest in contributing to WinPodX! This guide will help you get started.
## Prerequisites
- Python 3.9+ (developed on 3.13; CI covers 3.9 / 3.10 / 3.11 / 3.12 / 3.13)
- FreeRDP 3+
## Build
```bash
git clone https://github.com/kernalix7/winpodx.git
cd winpodx
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
## Test
```bash
# Run tests
pytest tests/ -v
# Lint
ruff check src/ tests/
# Format check
ruff format --check src/ tests/
```
`pytest` runs on a Linux CI runner and cannot exercise the Windows guest. Any
change that touches the guest (`config/oem/`, `scripts/windows/`, the
reverse-open shim, `compose` ports/QEMU args, the agent, install flow, RAIL
launch) must also be smoke-tested against a real Windows guest before merge —
see [docs/RELEASE_TESTING.md](docs/RELEASE_TESTING.md) for the guest-side smoke
+ per-release checklist.
## Workflow
1. **Fork** the repository
2. Create a **feature branch** (`git checkout -b feat/my-feature`)
3. Write your changes following **conventional commits**
4. Submit a **Pull Request**
## PR Checklist
Before submitting a PR, ensure the following:
- [ ] `pytest tests/ -v` passes
- [ ] `ruff check src/ tests/` reports zero errors
- [ ] `ruff format --check src/ tests/` passes
- [ ] Documentation is updated (if applicable)
- [ ] No hardcoded credentials or secrets
## Commit Convention
This project follows [Conventional Commits](https://www.conventionalcommits.org/):
| Prefix | Purpose |
|--------|---------|
| `feat` | New feature |
| `fix` | Bug fix |
| `docs` | Documentation changes |
| `refactor` | Code refactoring (no feature change) |
| `test` | Adding or updating tests |
| `chore` | Maintenance tasks (CI, deps, etc.) |
### Examples
```
feat: add Wayland display detection
fix: resolve DPI scaling on multi-monitor setups
docs: update installation instructions
refactor: simplify backend abstraction layer
test: add unit tests for UNC path conversion
chore: update ruff to 0.8.x
```
### No AI tool co-author trailers
Do **not** add `Co-authored-by:` trailers that name AI tools / coding agents. This applies to all of:
- `Co-authored-by: Cursor <cursoragent@cursor.com>`
- `Co-authored-by: Claude <noreply@anthropic.com>` (and any other Anthropic email)
- `Co-authored-by: Copilot <...>` (any GitHub Copilot variant)
- `Co-authored-by: <any other AI tool / agent identity>`
You wrote the patch — the human author of record is you. AI tooling doesn't get co-authorship credit in this repo regardless of how much it contributed. If you forgot and a trailer slipped in, we'll ask you to amend (or, for already-merged PRs, propose a coordinated history-rewrite via a follow-up PR).
Human co-authors (e.g., a colleague who pair-programmed with you on the change) are fine and welcome — those should use real human identities + emails.
## Writing release notes
Each version section in `CHANGELOG.md` (and `docs/CHANGELOG.ko.md`) starts with `### Highlights` — a one-sentence headline followed by 3–6 scannable bullets. This is what users see at the top of the GitHub release page: `release.yml` extracts the version's section verbatim, so the first thing in the section is the first thing in the release body.
The detailed `### Added` / `### Changed` / `### Fixed` bullets follow underneath. They're for archeology and exhaustive tracking, not first-read.
Skeleton:
```markdown
## [X.Y.Z] - YYYY-MM-DD
### Highlights
**One-sentence headline.** Optional 1-2 sentence elaboration if needed.
- Most important user-visible change (one line, scannable)
- Second most important change
- (3-6 bullets max; no prose blocks)
### Added
- (detailed bullets)
### Changed
- (detailed bullets)
### Fixed
- (detailed bullets)
```
When cutting a release, also push the `REL-vX.Y.Z` marker tag — this is what fires `release.yml` (which builds the `wheel` + `sdist`, extracts the CHANGELOG section, and updates the GitHub release body). Without the REL- marker, the version tag (`vX.Y.Z`) triggers only the four packaging workflows (`obs-publish.yml`, `rhel-publish.yml`, `debs-publish.yml`, `aur-publish.yml`) but no `wheel` / `sdist` and no auto-extracted release body.
```bash
git tag vX.Y.Z <commit>
git tag REL-vX.Y.Z vX.Y.Z^{} # dereference to commit to avoid a nested-tag warning
git push origin vX.Y.Z REL-vX.Y.Z
```
### Crediting contributors in Highlights
When a Highlights bullet covers work that came from outside the
maintainer (external PR or external bug report / feature request),
credit the contributor inline. The convention:
| Source | Suffix |
|---|---|
| External PR (someone else's commits) | `(by @username, #PR)` |
| External issue / feature request (maintainer wrote the code) | `(reported by @username, #issue)` |
| Both — external report **and** external PR by the same person | `(by @username, #PR / #issue)` |
GitHub auto-renders both forms as the user's avatar + handle on the
release page, so the recognition surfaces without extra work.
Example:
```markdown
### Highlights
- Atomic Fedora flavours (Silverblue / Kinoite / Bazzite) now ship via the
OBS repo with `rpm-ostree install --apply-live`. (by @Zeik0s, #163)
- LTSC IoT and Win10 LTSC pickable from Settings or `--win-version`.
(reported by @gabe39, #178)
- Dynamic Desktop Window Resolution — Full Desktop sessions now resize
the FreeRDP client window automatically. (by @Zeik0s, #202)
- Ubuntu 26.04 build target + Wayland-friendly Recommends split.
(by @juampe, #206)
- `winpodx setup` rerun no longer overwrites the working Windows password
and locks the user out of their guest. (reported by @tolistim, #216)
- Host-adaptive Windows-on-KVM tuning — `cfg.pod.tuning_profile = "auto"`
detects host capability and applies `+invtsc` on x86_64 invariant-TSC
CPUs. (reported by @ismikes, #215)
- Fedora 42 / 43 / 44 install snippet now uses dnf5 syntax (`dnf
config-manager addrepo --from-repofile=<URL>`); the dnf4 form
failed on Fedora 41 +. (reported by @payayas, #228)
- `install.sh` re-verifies `/dev/kvm` after the package install loop
and refuses to proceed with an actionable BIOS / kernel-module /
kvm-group diagnostic when hardware virtualisation is off. README
gains a "Minimum requirements" section so users see the gating
checks before they curl-install. (reported by @pnogaret2019-code,
#220)
- `install.sh` picks `qemu-system-x86` (or `qemu-system-x86-hwe`)
on Ubuntu 24.04+ / Debian 13 where `qemu-kvm` became a virtual
package with no install candidate. Same probe pattern as the
freerdp2 → freerdp3 selector. (reported by @n-osennij, #200)
- Tray UX overhaul: auto-spawned from GUI / CLI, bundled SVG so the
indicator actually renders, Open Dashboard menu, Quit confirms +
stops pod, install.sh marker suppresses spurious recovery
notifications during Sysprep.
```
The "no AI tool co-author trailers" rule above is unrelated: it bans
machine-generated attribution. Human contributors are credited
liberally and explicitly.
## Security
If you discover a security vulnerability, please follow the process described in [SECURITY.md](SECURITY.md). **Do NOT open a public issue.**