Add native application verison: Source build, aur (makepkg) #1
204
README.md
204
README.md
@@ -9,14 +9,13 @@ Relibre is a simple, free, and open-source landing-page generator—an alternati
|
|||||||
|
|
||||||
## What you get
|
## What you get
|
||||||
- A clean, responsive, single-file HTML page for a release
|
- A clean, responsive, single-file HTML page for a release
|
||||||
- No trackers, no analytics, no lock-in
|
- No trackers, no analytics
|
||||||
- Host it anywhere (object storage, GitHub/Gitea Pages, your own server, IPFS, etc.)
|
- Host it anywhere (Neocities, object storage, GitHub/Gitea Pages, your own server, IPFS, etc.)
|
||||||
- Optional native desktop app (Go + WebKit webview) that can save directly to your **Downloads** folder
|
- Optional native desktop app (only Arch Linux and Flatpak supported for now)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick start (static site)
|
## Quick start (static site)
|
||||||
This repo already contains `index.html` and the generator under `/ui`.
|
|
||||||
|
|
||||||
Open locally:
|
Open locally:
|
||||||
```bash
|
```bash
|
||||||
@@ -38,97 +37,21 @@ Relibre ships multiple compose variants so you can choose your reverse proxy. Al
|
|||||||
- `docker-compose.yml.caddy`
|
- `docker-compose.yml.caddy`
|
||||||
- `docker-compose.yml.apache`
|
- `docker-compose.yml.apache`
|
||||||
- `docker-compose.yml.nginx`
|
- `docker-compose.yml.nginx`
|
||||||
- `proxy/` (proxy configs)
|
- `proxy/`
|
||||||
- `Dockerfile` (optional static Nginx serve; not required when using the variants above)
|
- `Dockerfile`
|
||||||
|
|
||||||
### Docker
|
|
||||||
```bash
|
```bash
|
||||||
# HAProxy
|
|
||||||
docker compose -f docker-compose.yml.haproxy up -d --build
|
|
||||||
|
|
||||||
# Caddy
|
|
||||||
docker compose -f docker-compose.yml.caddy up -d --build
|
|
||||||
|
|
||||||
# Apache
|
|
||||||
docker compose -f docker-compose.yml.apache up -d --build
|
|
||||||
|
|
||||||
# Nginx
|
|
||||||
docker compose -f docker-compose.yml.nginx up -d --build
|
|
||||||
```
|
|
||||||
Open: http://localhost:8080
|
|
||||||
|
|
||||||
### Podman
|
|
||||||
```bash
|
|
||||||
# If you have podman-compose:
|
|
||||||
podman-compose -f docker-compose.yml.nginx up -d --build
|
|
||||||
|
|
||||||
# Or via podman directly (example for Nginx)
|
|
||||||
podman build -t relibre-web -f Dockerfile.web .
|
|
||||||
podman run --name relibre-web -d --rm -p 8081:80 relibre-web
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Production note:** put a TLS-terminating proxy (Caddy/Traefik/HAProxy/Nginx) in front, or your existing edge/load balancer. These examples run HTTP only.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Native desktop build (Go webview app)
|
## Native desktop build (Go webview app)
|
||||||
|
|
||||||
Builds a single executable that opens Relibre inside the OS webview (WebKitGTK on Linux, WebView2 on Windows, WKWebView on macOS). The app runs a tiny localhost server and can save the generated HTML directly to your **Downloads** folder.
|
Builds a single executable that opens Relibre inside the OS webview. The app runs a tiny localhost server and can save the generated HTML directly to your **Downloads** folder.
|
||||||
|
|
||||||
### Prereqs
|
### Prereqs
|
||||||
- **Arch:** `sudo pacman -S --needed base-devel go webkit2gtk gtk3 pkgconf`
|
- **Arch:** `sudo pacman -S --needed base-devel go webkit2gtk gtk3 pkgconf`
|
||||||
- **Debian/Ubuntu:**
|
|
||||||
```bash
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y build-essential golang pkg-config libgtk-3-dev libwebkit2gtk-4.1-dev libsoup-3.0-dev
|
|
||||||
```
|
|
||||||
- **macOS:** Install Go (Homebrew is fine). WebKit is built-in.
|
|
||||||
- **Windows:** Install Go and the **WebView2** runtime (Win11 has it by default).
|
|
||||||
|
|
||||||
> If your distro provides only `webkit2gtk-4.1.pc` and the module looks for `4.0`, you can locally add a compat symlink:
|
|
||||||
> - Arch: `sudo ln -s /usr/lib/pkgconfig/webkit2gtk-4.1.pc /usr/lib/pkgconfig/webkit2gtk-4.0.pc`
|
> - Arch: `sudo ln -s /usr/lib/pkgconfig/webkit2gtk-4.1.pc /usr/lib/pkgconfig/webkit2gtk-4.0.pc`
|
||||||
> - Debian/Ubuntu: `sudo ln -s /usr/lib/x86_64-linux-gnu/pkgconfig/webkit2gtk-4.1.pc /usr/lib/x86_64-linux-gnu/pkgconfig/webkit2gtk-4.0.pc`
|
|
||||||
|
|
||||||
### Build
|
### Build
|
||||||
At the repo **root** (next to `index.html`, `ui/`, `images/`), add these files if they aren’t already present:
|
|
||||||
|
|
||||||
`go.mod`
|
|
||||||
```mod
|
|
||||||
module relibre
|
|
||||||
|
|
||||||
go 1.22
|
|
||||||
```
|
|
||||||
|
|
||||||
`Makefile`
|
|
||||||
```makefile
|
|
||||||
APP=relibre-app
|
|
||||||
|
|
||||||
.PHONY: deps run build clean
|
|
||||||
deps:
|
|
||||||
go get github.com/webview/webview_go@latest
|
|
||||||
go mod tidy
|
|
||||||
|
|
||||||
run:
|
|
||||||
go run .
|
|
||||||
|
|
||||||
build:
|
|
||||||
go build -trimpath -ldflags "-s -w" -o $(APP)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f $(APP)
|
|
||||||
```
|
|
||||||
|
|
||||||
`main.go` (excerpt – already in repo if you followed earlier steps)
|
|
||||||
```go
|
|
||||||
//go:embed index.html ui/* images/*
|
|
||||||
var content embed.FS
|
|
||||||
|
|
||||||
// POST /save writes to ~/Downloads when running the native app
|
|
||||||
// (see main.go in the repo for full implementation)
|
|
||||||
```
|
|
||||||
|
|
||||||
Build & run:
|
|
||||||
```bash
|
|
||||||
make deps
|
make deps
|
||||||
make build
|
make build
|
||||||
./relibre-app
|
./relibre-app
|
||||||
@@ -138,64 +61,7 @@ make build
|
|||||||
|
|
||||||
## Arch Linux (AUR) packaging
|
## Arch Linux (AUR) packaging
|
||||||
|
|
||||||
You can publish two AUR packages:
|
|
||||||
|
|
||||||
- **`relibre`** – builds from source
|
- **`relibre`** – builds from source
|
||||||
- **`relibre-bin`** – installs a prebuilt binary from your Releases
|
|
||||||
|
|
||||||
### From source (local PKGBUILD)
|
|
||||||
Create `PKGBUILD`:
|
|
||||||
```bash
|
|
||||||
pkgname=relibre
|
|
||||||
pkgver=0.1.0
|
|
||||||
pkgrel=1
|
|
||||||
pkgdesc="Native webview app to generate single-file landing pages for music releases"
|
|
||||||
arch=('x86_64')
|
|
||||||
url="https://git.circlewithadot.net/incentive/relibre"
|
|
||||||
license=('MIT')
|
|
||||||
depends=('gtk3' 'webkit2gtk' 'libsoup3')
|
|
||||||
makedepends=('go' 'git')
|
|
||||||
provides=('relibre')
|
|
||||||
|
|
||||||
source=("${pkgname}::git+${url}.git#tag=v${pkgver}")
|
|
||||||
sha256sums=('SKIP')
|
|
||||||
|
|
||||||
prepare() {
|
|
||||||
cd "${srcdir}/${pkgname}"
|
|
||||||
export GOPATH="${srcdir}/gopath"
|
|
||||||
export GOMODCACHE="${GOPATH}/pkg/mod"
|
|
||||||
go mod download
|
|
||||||
}
|
|
||||||
|
|
||||||
build() {
|
|
||||||
cd "${srcdir}/${pkgname}"
|
|
||||||
export CGO_ENABLED=1
|
|
||||||
go build -trimpath -ldflags "-s -w" -o relibre
|
|
||||||
}
|
|
||||||
|
|
||||||
package() {
|
|
||||||
cd "${srcdir}/${pkgname}"
|
|
||||||
install -Dm755 relibre "${pkgdir}/usr/bin/relibre"
|
|
||||||
|
|
||||||
install -Dm644 dist/com.circlewithadot.Relibre.desktop "${pkgdir}/usr/share/applications/com.circlewithadot.Relibre.desktop"
|
|
||||||
install -Dm644 dist/com.circlewithadot.Relibre.png "${pkgdir}/usr/share/icons/hicolor/512x512/apps/com.circlewithadot.Relibre.png"
|
|
||||||
|
|
||||||
install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Build locally:
|
|
||||||
```bash
|
|
||||||
makepkg -si
|
|
||||||
```
|
|
||||||
|
|
||||||
Publish to AUR (once your AUR repo is created):
|
|
||||||
```bash
|
|
||||||
makepkg --printsrcinfo > .SRCINFO
|
|
||||||
git add PKGBUILD .SRCINFO
|
|
||||||
git commit -m "relibre ${pkgver}"
|
|
||||||
git push # to your AUR remote
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -203,67 +69,9 @@ git push # to your AUR remote
|
|||||||
|
|
||||||
Relibre works well as a Flatpak using the GNOME runtime (WebKitGTK included).
|
Relibre works well as a Flatpak using the GNOME runtime (WebKitGTK included).
|
||||||
|
|
||||||
Create `com.circlewithadot.Relibre.yml` at repo root:
|
|
||||||
```yaml
|
|
||||||
app-id: com.circlewithadot.Relibre
|
|
||||||
runtime: org.gnome.Platform
|
|
||||||
runtime-version: '46'
|
|
||||||
sdk: org.gnome.Sdk
|
|
||||||
command: relibre
|
|
||||||
finish-args:
|
|
||||||
- --share=network
|
|
||||||
- --socket=wayland
|
|
||||||
- --socket=fallback-x11
|
|
||||||
- --filesystem=xdg-download
|
|
||||||
modules:
|
|
||||||
- name: relibre
|
|
||||||
buildsystem: simple
|
|
||||||
build-commands:
|
|
||||||
- go env -w CGO_ENABLED=1
|
|
||||||
- go mod download
|
|
||||||
- go build -trimpath -ldflags "-s -w" -o /app/bin/relibre
|
|
||||||
- install -Dm644 dist/com.circlewithadot.Relibre.desktop /app/share/applications/com.circlewithadot.Relibre.desktop
|
|
||||||
- install -Dm644 dist/com.circlewithadot.Relibre.png /app/share/icons/hicolor/512x512/apps/com.circlewithadot.Relibre.png
|
|
||||||
sources:
|
|
||||||
- type: dir
|
|
||||||
path: .
|
|
||||||
```
|
|
||||||
|
|
||||||
Also add:
|
|
||||||
- `dist/com.circlewithadot.Relibre.desktop`
|
|
||||||
```ini
|
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=Relibre
|
|
||||||
Comment=Generate single-file landing pages for music releases
|
|
||||||
Exec=relibre
|
|
||||||
Icon=com.circlewithadot.Relibre
|
|
||||||
Categories=AudioVideo;Utility;
|
|
||||||
Terminal=false
|
|
||||||
```
|
|
||||||
- `dist/com.circlewithadot.Relibre.png` (512×512 icon – you can copy `images/relibre_logo.png`)
|
|
||||||
|
|
||||||
Build & run locally:
|
Build & run locally:
|
||||||
```bash
|
```bash
|
||||||
flatpak install -y org.gnome.Platform//46 org.gnome.Sdk//46
|
flatpak install -y org.gnome.Platform//46 org.gnome.Sdk//46
|
||||||
flatpak-builder --user --install --force-clean build-dir com.circlewithadot.Relibre.yml
|
flatpak-builder --user --install --force-clean build-dir com.circlewithadot.Relibre.yml
|
||||||
flatpak run com.circlewithadot.Relibre
|
flatpak run com.circlewithadot.Relibre
|
||||||
```
|
|
||||||
|
|
||||||
### Submit to Flathub (outline)
|
|
||||||
1. Ensure the app uses an **appstream** file: `dist/com.circlewithadot.Relibre.metainfo.xml`.
|
|
||||||
2. Host a signed source archive or tag (Git).
|
|
||||||
3. Fork the Flathub repo, add your manifest under `com.circlewithadot.Relibre`, open a PR.
|
|
||||||
4. CI will build and review; address any sandboxing requests (portals, permissions).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## License
|
|
||||||
MIT — see `LICENSE`.
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
PRs welcome!
|
|
||||||
- Features: templates, themes, icon sets, translations
|
|
||||||
- Packaging: help maintain Flatpak & AUR recipes
|
|
||||||
- Docs: quickstart guides for common hosts (Netlify, Pages, S3, IPFS)
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user