Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions RELEASE_PROCESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@ deployment workflow. Pushing the version tag does not trigger it.
2. Uploaded to [wlanpi/dev](https://packagecloud.io/wlanpi/dev). Packagecloud
receives that `.deb` unchanged.
3. Test the package
4. Once verified, promote from `dev` to `main` in Packagecloud
4. After that test, the maintainer promotes the package by hand from
`wlanpi/dev` to `wlanpi/main`. See
[Deploy to Packagecloud](#deploy-to-packagecloud).

The `~gha<UTC timestamp>` suffix is only on the GitHub Actions artifact
name, not on the package version. `sbuild-pkg` and `sbuild-deploy-pkg` set
Expand Down Expand Up @@ -122,6 +124,9 @@ git tag -a v1.2.3 -m "Release version 1.2.3"
git push origin v1.2.3
```

Which repos call `tag-release`, and which tags are missing or behind the
changelog, is recorded in [REPOS.md](REPOS.md#release-tags).

## GitHub workflows

### Build and archive
Expand All @@ -147,9 +152,11 @@ Maintained by:
`get-formatted-version-string`, `tag-release`)
- Workflow files in each repo, which call the reusable workflows above

Promotion from the Packagecloud `dev` repository to `main`: Manually done on
Packagecloud (or, for repos that provide it, via a manual `promote-to-main.yml`
workflow).
Promotion from Packagecloud `wlanpi/dev` to `wlanpi/main` is a manual step.
The maintainer does it after testing. Deploy workflows upload to `wlanpi/dev`
only. `wlanpi-desktop` is the only repo with `promote-to-main.yml`, and that
workflow runs only on `workflow_dispatch`. It builds the package and pushes
the `.deb` to `wlanpi/main`. See [REPOS.md](REPOS.md#ci).

### Version gate

Expand Down
143 changes: 113 additions & 30 deletions REPOS.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ Target conventions live in [Contributing](CONTRIBUTING.md),

| Repository | Default branch | Long-lived branches | Packaging | Python | Lint / format | License | README std |
|------------|----------------|---------------------|-----------|--------|---------------|---------|------------|
| `scandump` | `main` | `main` | `dh` native (fork of `intuitibits/scandump`) | n/a (C) | none | GPL-3.0 | no |
| `wlanpi-app` | `main` | `main` | none (Flutter mobile app) | n/a | n/a | BSD-3-Clause | no |
| `wlanpi-bluetooth` | `main` | `main`, `debian/bullseye` | `dh` native (systemd) | n/a (shell) | shellcheck (`lint.yml`) | BSD-3-Clause | no |
| `wlanpi-bridge` | `main` | `main`, `debian/bullseye` | `dh` native | n/a | none | MIT | no |
| `wlanpi-chat-bot` | `main` | `main` | `dh_virtualenv` | 3.11, `setup.py` | none | MIT | partial (archived) |
| `wlanpi-common` | `main` | `main`, `debian/bullseye` | `dh` native | n/a (shell) | shellcheck (`lint.yml`) | BSD-3-Clause | link only |
| `wlanpi-core` | `main` | `main`, `debian/bookworm`, `debian/bullseye` | `dh_virtualenv` | py313 | ruff, mypy | BSD-3-Clause | badge only |
Expand All @@ -30,10 +30,8 @@ Target conventions live in [Contributing](CONTRIBUTING.md),
| `wlanpi-misc-firmware` | `main` | `main`, `debian/bullseye` | `dh` native (firmware) | n/a | shellcheck (`lint.yml`) | BSD-3-Clause | no |
| `wlanpi-persistent-identity` | `main` | `main` | `dh` native | n/a (shell) | none | BSD-3-Clause | no |
| `wlanpi-profiler` | `main` | `main`, `debian/bullseye` | `dh_virtualenv` | py313 | ruff, mypy | BSD-3-Clause | badge only |
| `wlanpi-server` | `main` | `main`, `debian/bullseye` | `dh` native | n/a (shell) | none | BSD-3-Clause | no |
| `wlanpi-shell-config` | `main` | `main` | `dh` native | n/a (shell) | shellcheck (`lint.yml`) | BSD-3-Clause | no |
| `wlanpi-usb-ethernet` | `main` | `main`, `debian/bullseye` | `dh` native | n/a (shell) | shellcheck (`lint.yml`) | BSD-3-Clause | no |
| `wlanpi-wconsole` | `main` | `main`, `debian/bullseye` | `dh` native | n/a (shell) | none | MIT | no |
| `wlanpi-webui` | `main` | `main`, `debian/bullseye` | `dh_virtualenv` | py313 | ruff, mypy | BSD-3-Clause | badge only |
| `wlanpi-wipry` | `main` | `main`, `debian/bullseye` | `dh` native | n/a | none | BSD-3-Clause | no |

Expand All @@ -43,8 +41,28 @@ Target conventions live in [Contributing](CONTRIBUTING.md),
|------------|----------------|----------|-----------|-------|
| `wlanpi-kernel` | `7.3-trixie` | per-version, e.g. `6.12-bookworm`, `7.2-trixie`, `7.3-trixie` | kernel `.deb` | `AGENTS.md`; dual-kernel support |
| `wlanpi-misc-packages` | `main` | `main` | multi-package repo | third-party package rebuilds |
| `pi-gen` | `trixie64` | `trixie64` | OS image (pi-gen) | Current image repo. Fork of `RPi-Distro/pi-gen`. 25 branches on the repo. Dependabot covers `github-actions` only. No `pr-size.yml`. |
| `pi-gen-bookworm` | `bookworm` | `bookworm` | OS image (pi-gen) | no Dependabot, no `pr-size.yml`; Slack action on `@master` |

## Tooling

| Repository | Default branch | Branches | Packaging | Notes |
|------------|----------------|----------|-----------|-------|
| `gh-workflows` | `main` | `main` | reusable workflows | Files under `.github/workflows/` on `main`: `check-py-deb-pkg-versions-match.yml`, `get-formatted-version-string.yml`, `lint.yml`, `pr-size.yml`, `sbuild-deploy-pkg.yml`, `sbuild-pkg.yml`, `tag-release.yml`. BSD-3-Clause. |
| `sbuild-debian-package` | `main` | `dev`, `main`, `sbuild` | GitHub Action (`action.yml`) | Composite action that builds a Debian package with sbuild. Fork of `danielmundi/sbuild-debian-package`. MIT. |
| `.github` | `main` | `main` | none | Org community health files. `docs/pull_request_template.md`, issue templates, and `profile/README.md`. No `LICENSE` file. |

## Retired

`wlanpi-bridge`, `wlanpi-server`, and `wlanpi-wconsole` are off Packagecloud for
trixie, on both `wlanpi/dev` and `wlanpi/main`, and `trixie64` images do not
install them. That removal is recorded in
[wlanpi-common#111](https://github.com/WLAN-Pi/wlanpi-common/issues/111).
[pi-gen#108](https://github.com/WLAN-Pi/pi-gen/issues/108) records the same
removal for `wlanpi-server`, and the `pi-gen` comments that still name it.

`wlanpi-bridge`, `wlanpi-server`, and `wlanpi-wconsole` are archived.

## Deviations from target

Grouped by the fix that would resolve them. These are the actionable items; open
Expand All @@ -58,24 +76,23 @@ the file. Each of them build-depends on `debhelper (>= N)`, not on

| Repository | compat |
|------------|--------|
| `wlanpi-bridge` | 10 |
| `wlanpi-ctx` | 11 |
| `wlanpi-grafana` | 10 |
| `wlanpi-librespeed-cli` | 12 |
| `wlanpi-profiler` | 11 |
| `wlanpi-server` | 10 |
| `wlanpi-webui` | 12 |
| `wlanpi-wconsole` | 10 |
| `wlanpi-wipry` | 10 |

`scandump` has `debian/compat` level 12 and build-depends on `debhelper (>=9)`.

`wlanpi-grafana` also overrides `dh_installinit` and `dh_systemd_start`
instead of `dh_installsystemd`.

Source format and changelog version, against
[Source Format and Version](architecture/PACKAGING.md#source-format-and-version).
Checked on each repo's default branch.

Already `3.0 (native)` with no Debian revision: `wlanpi-desktop` (1.0.5),
Already `3.0 (native)` with no Debian revision: `wlanpi-desktop` (1.0.6),
`wlanpi-misc-firmware` (1.0.20), `wlanpi-shell-config` (1.1.5),
`wlanpi-usb-ethernet` (1.5.4).

Expand All @@ -85,7 +102,7 @@ Already `3.0 (native)` with no Debian revision: `wlanpi-desktop` (1.0.5),
upload should move to `3.0 (native)` at a higher upstream version (`1.2.3-1`
sorts above `1.2.3`):

- `wlanpi-core` `2.4.10-1`
- `wlanpi-core` `2.4.11-1`
- `wlanpi-ctx` `1.0.2-2`
- `wlanpi-fpms` `1.4.25-1`
- `wlanpi-hwtest` `1.2.0-1`
Expand All @@ -94,9 +111,9 @@ sorts above `1.2.3`):
- `wlanpi-webui` `1.21.18-1`

No `debian/source/format` (lintian warning `missing-debian-source-format`),
and the version has no revision, so it is implicitly native: `wlanpi-bluetooth`,
`wlanpi-bridge`, `wlanpi-common`, `wlanpi-grafana`, `wlanpi-hotspot`,
`wlanpi-server`, `wlanpi-wconsole`, `wlanpi-wipry`.
and the version has no revision, so it is implicitly native: `scandump`,
`wlanpi-bluetooth`, `wlanpi-common`, `wlanpi-grafana`, `wlanpi-hotspot`,
`wlanpi-wipry`.

No `debian/source/format`, and the version has a revision (same lintian error
once the source package is checked):
Expand All @@ -106,10 +123,9 @@ once the source package is checked):
- `wlanpi-persistent-identity` `1.1.0-1` is first-party. The next upload
should be `3.0 (native)` at a higher upstream version.

`debian/copyright` is missing on `wlanpi-bluetooth`, `wlanpi-bridge`,
`debian/copyright` is missing on `scandump`, `wlanpi-bluetooth`,
`wlanpi-common`, `wlanpi-grafana`, `wlanpi-hotspot`, `wlanpi-mcp`,
`wlanpi-persistent-identity`, `wlanpi-server`, `wlanpi-webui`,
`wlanpi-wconsole`, and `wlanpi-wipry`.
`wlanpi-persistent-identity`, `wlanpi-webui`, and `wlanpi-wipry`.

`wlanpi-core`'s `debian/wlanpi-core.install` still installs units into
`/lib/systemd/system`. On Trixie that is the `aliased-location` error.
Expand All @@ -126,17 +142,17 @@ or already name `usr/lib/systemd/system` in the `.install` file
| `4.6.2` | `wlanpi-persistent-identity`, `wlanpi-shell-config`, `wlanpi-usb-ethernet` |
| `4.6.0` | `wlanpi-ctx`, `wlanpi-desktop`, `wlanpi-fpms`, `wlanpi-grafana`, `wlanpi-profiler` |
| `4.3.0` | `wlanpi-librespeed-cli` |
| `3.9.8` | `wlanpi-bridge`, `wlanpi-server`, `wlanpi-wconsole` |
| absent | `wlanpi-wipry` |
| absent | `scandump`, `wlanpi-wipry` |

### CI

- `wlanpi-profiler`: workflow is `python-style-police.yml`; other repos use
`python-format-police.yml` + `python-lint-police.yml`.
- `wlanpi-ctx` and `wlanpi-profiler` use `python-style-police.yml`.
`wlanpi-core`, `wlanpi-fpms`, `wlanpi-mcp`, and `wlanpi-webui` use
`python-format-police.yml` and `python-lint-police.yml`.
- Shell/action lint (`shellcheck` + `actionlint` via `lint.yml`): missing in
`wlanpi-bridge`, `wlanpi-ctx`, `wlanpi-persistent-identity`,
`wlanpi-server`, `wlanpi-wconsole`, and `wlanpi-wipry`. Their shell scripts
may need shellcheck fixes when it is added.
`wlanpi-ctx`, `wlanpi-persistent-identity`, and `wlanpi-wipry`. Their shell
scripts may need shellcheck fixes when it is added. `scandump` also has no
`lint.yml`.
- Workflow security is the policy in
[Style/Workflow](style/WORKFLOW.md#workflow-security) (SHA-pin third-party
actions, and a Dependabot `github-actions` entry). It is not yet true of
Expand All @@ -148,23 +164,35 @@ or already name `usr/lib/systemd/system` in the `.install` file
`Gamesight/slack-workflow-status@master`, has no `permissions:` block in
its build workflow, and has no `dependabot.yml`. Under the read-only
token default, that Slack notification step may fail.
- `wlanpi-core`: the Dependabot `pip` job has failed on every run since at
least 2026-08-31 (`dependency_file_not_resolvable`).
- Dependabot `pip` failed with `private_source_authentication_failure`
against `https://www.piwheels.org/simple` on `wlanpi-core`, `wlanpi-fpms`,
and `wlanpi-ctx`. The updater records that error. The proxy log in each run
says `egress not allowlisted www.piwheels.org` and returns HTTP 403.
Runs: [wlanpi-core](https://github.com/WLAN-Pi/wlanpi-core/actions/runs/39988244728),
[wlanpi-fpms](https://github.com/WLAN-Pi/wlanpi-fpms/actions/runs/39772518294),
[wlanpi-ctx](https://github.com/WLAN-Pi/wlanpi-ctx/actions/runs/39690740125).
Each `requirements.txt` sets `--extra-index-url https://www.piwheels.org/simple`.
The default branches now declare a `piwheels` registry of type
`python-index` at that URL:
[wlanpi-core#430](https://github.com/WLAN-Pi/wlanpi-core/pull/430),
[wlanpi-fpms#211](https://github.com/WLAN-Pi/wlanpi-fpms/pull/211), and
[wlanpi-ctx#9](https://github.com/WLAN-Pi/wlanpi-ctx/pull/9).
- PR size check (`pr-size.yml`, calling the reusable
`WLAN-Pi/gh-workflows/.github/workflows/pr-size.yml`): present on the
active non-fork application, kernel, and `wlanpi-misc-packages` repos, and
on `developers`. `pi-gen-bookworm` does not have it. `pi-gen` is a fork of
`RPi-Distro/pi-gen` and also does not have it. Copy
`RPi-Distro/pi-gen` and also does not have it. `scandump` is a fork of
`intuitibits/scandump` and does not have it. Copy
`developers/.github/workflows/pr-size.yml` into new repos unchanged.
- Build and deploy workflows. The target is the reusable `sbuild-pkg` /
`sbuild-deploy-pkg` workflows. These default branches call them:
`wlanpi-core`, `wlanpi-ctx`, `wlanpi-hwtest`, `wlanpi-mcp`,
`wlanpi-profiler`. These still inline `wlan-pi/sbuild-debian-package` and
the `package_cloud` push: `wlanpi-bluetooth`, `wlanpi-bridge`,
the `package_cloud` push: `scandump`, `wlanpi-bluetooth`,
`wlanpi-common`, `wlanpi-desktop`, `wlanpi-fpms`, `wlanpi-grafana`,
`wlanpi-hotspot`, `wlanpi-librespeed-cli`, `wlanpi-misc-firmware` (the
action is pinned to a SHA), `wlanpi-server`, `wlanpi-shell-config`,
`wlanpi-wconsole`, `wlanpi-webui`, `wlanpi-wipry`, and the deploy workflow
action is pinned to a SHA), `wlanpi-shell-config`,
`wlanpi-webui`, `wlanpi-wipry`, and the deploy workflow
of `wlanpi-persistent-identity` and `wlanpi-usb-ethernet`.
`wlanpi-persistent-identity` and `wlanpi-usb-ethernet` build with an inline
`dpkg-buildpackage` step rather than `sbuild-pkg`. Image and kernel repos
Expand All @@ -174,6 +202,60 @@ or already name `usr/lib/systemd/system` in the `.install` file
and the org is on the free plan, so it cannot read the org
`SLACK_WEBHOOK_URL` secret; it needs a repo-level one. shellcheck and
actionlint pass.
- Packagecloud promotion. Shared `sbuild-deploy-pkg` pushes to `wlanpi/dev`
(`wlanpi/dev/debian/<distro>`, or `wlanpi/dev/raspbian/<distro>` for
`armhf`). Moving a package to `wlanpi/main` is a manual step the maintainer
does after testing. Only `wlanpi-desktop` has
[`promote-to-main.yml`](https://github.com/WLAN-Pi/wlanpi-desktop/blob/main/.github/workflows/promote-to-main.yml),
and that workflow runs only on `workflow_dispatch`. It builds the package
and pushes the `.deb` to `wlanpi/main`. See
[Release Process](RELEASE_PROCESS.md#4-deploy-to-packagecloud).

### Release Tags

[Contributing](CONTRIBUTING.md) says to tag releases on `main` as `vX.Y.Z`.
[Release Process](RELEASE_PROCESS.md#5-tag-the-release) says the same, and
says to skip the manual tag when deploy calls `tag-release`. The shared
workflow is
[`tag-release.yml`](https://github.com/WLAN-Pi/gh-workflows/blob/main/.github/workflows/tag-release.yml).

`wlanpi-bluetooth`, `wlanpi-core`, `wlanpi-librespeed-cli`, and `wlanpi-mcp`
call it from `deploy-to-packagecloud.yml` on the default branch.
`wlanpi-core` tag `v2.4.11` matches changelog `2.4.11-1`. `wlanpi-mcp` tag
`v0.7.0` matches `0.7.0-1`. `wlanpi-librespeed-cli` tag `v1.0.14` is changelog
`1.0.14-1wlanpi1` with the Debian revision removed. `wlanpi-bluetooth` calls
the job and has no tags.
[wlanpi-bluetooth#25](https://github.com/WLAN-Pi/wlanpi-bluetooth/pull/25) and
[wlanpi-librespeed-cli#13](https://github.com/WLAN-Pi/wlanpi-librespeed-cli/pull/13)
added the job on those two repos. The other repos in the table do not call it.

`wlanpi-hwtest`, `wlanpi-profiler`, and `wlanpi-shell-config` have tags, and
the newest tag is behind the changelog. Archived `wlanpi-chat-bot` and the
retired repos are omitted.
`wlanpi-kernel`, `pi-gen`, and `pi-gen-bookworm` use other tag names.
`wlanpi-misc-packages` has no root `debian/changelog` and no tags.

| Repository | Changelog | Newest tag | Calls `tag-release` |
|------------|-----------|------------|---------------------|
| `scandump` | `2.2.1` | none | no |
| `wlanpi-bluetooth` | `1.0.14` | none | yes |
| `wlanpi-common` | `1.1.65` | none | no |
| `wlanpi-core` | `2.4.11-1` | `v2.4.11` | yes |
| `wlanpi-ctx` | `1.0.2-2` | none | no |
| `wlanpi-desktop` | `1.0.6` | none | no |
| `wlanpi-fpms` | `1.4.25-1` | none | no |
| `wlanpi-grafana` | `1.1.5` | none | no |
| `wlanpi-hotspot` | `1.0.22` | none | no |
| `wlanpi-hwtest` | `1.2.0-1` | `v1.0.12` | no |
| `wlanpi-librespeed-cli` | `1.0.14-1wlanpi1` | `v1.0.14` | yes |
| `wlanpi-mcp` | `0.7.0-1` | `v0.7.0` | yes |
| `wlanpi-misc-firmware` | `1.0.20` | none | no |
| `wlanpi-persistent-identity` | `1.1.0-1` | none | no |
| `wlanpi-profiler` | `2.1.8-1` | `v1.0.18` | no |
| `wlanpi-shell-config` | `1.1.5` | `v1.1.2` | no |
| `wlanpi-usb-ethernet` | `1.5.4` | none | no |
| `wlanpi-webui` | `1.21.18-1` | none | no |
| `wlanpi-wipry` | `1.0.3` | none | no |

### Documentation and licensing

Expand All @@ -184,7 +266,8 @@ or already name `usr/lib/systemd/system` in the `.install` file
`wlanpi-hwtest`.
- `docs/` layout ([Documentation Types](style/README_STANDARDS.md#documentation-types)):
no repo uses the four type folders yet. `wlanpi-app`, `wlanpi-core`,
`wlanpi-mcp`, `wlanpi-misc-firmware`, `wlanpi-profiler`, and
`wlanpi-mcp`, `wlanpi-misc-firmware`, `wlanpi-profiler`, `pi-gen`, and
`pi-gen-bookworm` have flat or ad-hoc `docs/` folders.
- BSD-3-Clause migration: `wlanpi-bridge`, `wlanpi-chat-bot` (archived),
`wlanpi-kernel`, `wlanpi-misc-packages`, and `wlanpi-wconsole` are MIT.
- BSD-3-Clause migration: `wlanpi-chat-bot` (archived),
`wlanpi-kernel`, and `wlanpi-misc-packages` are MIT. `scandump` is
GPL-3.0, the upstream license of `intuitibits/scandump`.