chore: add prepare flathub script (#24)

Reviewed-on: #24
Co-authored-by: Ren Amamiya <reya@lume.nu>
Co-committed-by: Ren Amamiya <reya@lume.nu>
This commit was merged in pull request #24.
This commit is contained in:
2026-03-20 06:20:06 +00:00
committed by reya
parent b41de00c95
commit a52e1877fe
3 changed files with 388 additions and 0 deletions

129
flathub/README.md Normal file
View File

@@ -0,0 +1,129 @@
# Flathub Submission for Coop
This directory contains the files needed to submit Coop to Flathub.
## Prerequisites
- Flatpak installed
- `flatpak-builder` installed
- Rust/Cargo installed (for vendoring)
## Quick Start
Run the preparation script from the repo root:
```bash
./script/prepare-flathub.sh
```
This will:
1. Vendor all Rust dependencies (crates.io + git)
2. Generate the metainfo.xml with proper release info
3. Create `su.reya.coop.yml` - the Flatpak manifest for Flathub
## Files Generated
| File | Purpose |
|------|---------|
| `su.reya.coop.yml` | Main Flatpak manifest (submit this to Flathub) |
| `su.reya.coop.metainfo.xml` | AppStream metadata with release info |
| `vendor.tar.gz` | Vendored Rust dependencies |
| `cargo-config.toml` | Cargo configuration for offline builds |
| `release-info.xml` | Release info snippet for metainfo |
## Testing Locally
Before submitting to Flathub, test the build:
```bash
cd flathub
# Build and install locally
flatpak-builder --user --install --force-clean build su.reya.coop.yml
# Test the app
flatpak run su.reya.coop
# Run the Flathub linter (must pass!)
flatpak run --command=flatpak-builder-lint org.flatpak.Builder manifest su.reya.coop.yml
flatpak run --command=flatpak-builder-lint org.flatpak.Builder repo repo
```
## Submitting to Flathub
### 1. Prepare Your Release
Ensure you have:
- [ ] Committed all changes
- [ ] Tagged the release: `git tag -a v1.0.0-beta2 -m "Release v1.0.0-beta2"`
- [ ] Pushed the tag: `git push origin v1.0.0-beta2`
- [ ] Run `./script/prepare-flathub.sh` to regenerate files
### 2. Fork and Submit
```bash
# Fork https://github.com/flathub/flathub on GitHub first
# Clone your fork (use the new-pr branch!)
git clone --branch=new-pr git@github.com:YOUR_USERNAME/flathub.git
cd flathub
# Create a new branch
git checkout -b su.reya.coop
# Copy ONLY the manifest file from your project
cp /path/to/coop/flathub/su.reya.coop.yml .
# Commit and push
git add su.reya.coop.yml
git commit -m "Add su.reya.coop"
git push origin su.reya.coop
```
### 3. Open Pull Request
1. Go to your fork on GitHub
2. Click "Compare & pull request"
3. **Important:** Set base branch to `new-pr` (not `master`!)
4. Fill in the PR template
5. Submit and wait for review
## What Happens Next?
1. Flathub's automated CI will build your app
2. A maintainer will review your submission
3. Once approved, a new repo `flathub/su.reya.coop` will be created
4. You'll get write access to maintain the app
5. Future updates: Push new commits to `flathub/su.reya.coop`
## Updating the App
To release a new version:
1. Update version in workspace `Cargo.toml`
2. Tag the new release: `git tag -a v1.0.0-beta3 -m "Release v1.0.0-beta3"`
3. Push the tag: `git push origin v1.0.0-beta3`
4. Run `./script/prepare-flathub.sh` to regenerate
5. Clone the flathub repo: `git clone https://github.com/flathub/su.reya.coop.git`
6. Update the manifest with new commit/tag and hashes
7. Submit PR to `flathub/su.reya.coop`
## Troubleshooting
### Build fails with "network access not allowed"
- Make sure `CARGO_NET_OFFLINE=true` is set in the manifest
- Ensure `vendor.tar.gz` is properly extracted before building
### Linter complains about metainfo
- Ensure `su.reya.coop.metainfo.xml` has at least one `<release>` entry
- Check that screenshots are accessible URLs
### Missing dependencies
- If new git dependencies are added, re-run `prepare-flathub.sh`
- The script vendors all dependencies from `Cargo.lock`
## Resources
- [Flathub Submission Docs](https://docs.flathub.org/docs/for-app-authors/submission)
- [Flatpak Manifest Reference](https://docs.flatpak.org/en/latest/manifests.html)
- [AppStream Metainfo Guide](https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html)