From 593b173e951cb6ce9a6bad69af688d31f14bef30 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Fri, 8 Aug 2025 09:24:25 -0400 Subject: [PATCH] Add Briefcase packaging docs and scripts --- docs/packaging.md | 38 ++++++++++++++++++++++++++++++++++ packaging/build-linux.sh | 5 +++++ packaging/build-macos.sh | 5 +++++ packaging/build-windows.ps1 | 3 +++ packaging/flatpak/seedpass.yml | 18 ++++++++++++++++ packaging/snapcraft.yaml | 22 ++++++++++++++++++++ pyproject.toml | 8 ++++++- 7 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 docs/packaging.md create mode 100755 packaging/build-linux.sh create mode 100755 packaging/build-macos.sh create mode 100644 packaging/build-windows.ps1 create mode 100644 packaging/flatpak/seedpass.yml create mode 100644 packaging/snapcraft.yaml diff --git a/docs/packaging.md b/docs/packaging.md new file mode 100644 index 0000000..03a095c --- /dev/null +++ b/docs/packaging.md @@ -0,0 +1,38 @@ +# Packaging SeedPass + +This guide describes how to build platform-native packages for SeedPass using [BeeWare Briefcase](https://briefcase.readthedocs.io/). + +## Prerequisites + +* Python 3.12 with development headers (`python3-dev` on Debian/Ubuntu). +* Briefcase installed in your virtual environment: + +```bash +pip install briefcase +``` + +## Linux + +The helper script in `packaging/build-linux.sh` performs `briefcase create`, `build`, and `package` for the current project. + +```bash +./packaging/build-linux.sh +``` + +Briefcase outputs its build artifacts in `build/seedpass-gui/ubuntu/noble/`. These files can be bundled in container formats such as Flatpak or Snap. Example manifests are included: + +* `packaging/flatpak/seedpass.yml` targets the `org.gnome.Platform` runtime and copies the Briefcase build into the Flatpak bundle. +* `packaging/snapcraft.yaml` stages the Briefcase build and lists GTK libraries in `stage-packages` so the Snap includes its GUI dependencies. + +## macOS and Windows + +Scripts are provided to document the commands expected on each platform. They must be run on their respective operating systems: + +* `packaging/build-macos.sh` +* `packaging/build-windows.ps1` + +Each script runs Briefcase's `create`, `build`, and `package` steps with `--no-input`. + +## Reproducible Releases + +The `packaging/` directory contains the scripts and manifests needed to regenerate desktop packages. Invoke the appropriate script on the target OS, then use the supplied Flatpak or Snap manifest to bundle additional dependencies for Linux. diff --git a/packaging/build-linux.sh b/packaging/build-linux.sh new file mode 100755 index 0000000..e496261 --- /dev/null +++ b/packaging/build-linux.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e +briefcase create linux --no-input +briefcase build linux --no-input +briefcase package linux --no-input diff --git a/packaging/build-macos.sh b/packaging/build-macos.sh new file mode 100755 index 0000000..df2bbc0 --- /dev/null +++ b/packaging/build-macos.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e +briefcase create macos --no-input +briefcase build macos --no-input +briefcase package macos --no-input diff --git a/packaging/build-windows.ps1 b/packaging/build-windows.ps1 new file mode 100644 index 0000000..3defff0 --- /dev/null +++ b/packaging/build-windows.ps1 @@ -0,0 +1,3 @@ +briefcase create windows --no-input +briefcase build windows --no-input +briefcase package windows --no-input diff --git a/packaging/flatpak/seedpass.yml b/packaging/flatpak/seedpass.yml new file mode 100644 index 0000000..b49d3ec --- /dev/null +++ b/packaging/flatpak/seedpass.yml @@ -0,0 +1,18 @@ +app-id: io.seedpass.SeedPass +runtime: org.gnome.Platform +runtime-version: '46' +sdk: org.gnome.Sdk +command: seedpass-gui +modules: + - name: seedpass + buildsystem: simple + build-commands: + - mkdir -p /app/bin + - cp -r ../../build/seedpass-gui/ubuntu/noble/* /app/bin/ + sources: + - type: dir + path: ../../ +finish-args: + - --share=network + - --socket=fallback-x11 + - --socket=wayland diff --git a/packaging/snapcraft.yaml b/packaging/snapcraft.yaml new file mode 100644 index 0000000..a965aae --- /dev/null +++ b/packaging/snapcraft.yaml @@ -0,0 +1,22 @@ +name: seedpass +base: core22 +version: '0.1.0' +summary: Deterministic password manager +description: | + SeedPass deterministically generates passwords using BIP-39 seeds. +grade: devel +confinement: strict +apps: + seedpass-gui: + command: bin/seedpass-gui + plugs: + - network + - x11 +parts: + seedpass: + plugin: dump + source: build/seedpass-gui/ubuntu/noble/app + stage-packages: + - libgtk-3-0 + - libglib2.0-0 + - libgdk-pixbuf2.0-0 diff --git a/pyproject.toml b/pyproject.toml index 6c5841a..6379d99 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,10 +60,15 @@ python_version = "3.11" strict = true mypy_path = "src" +[tool.briefcase] +project_name = "SeedPass" +bundle = "io.seedpass" +version = "0.1.0" + [tool.briefcase.app.seedpass-gui] formal-name = "SeedPass" description = "Deterministic password manager with a BeeWare GUI" -sources = ["src"] +sources = ["src/seedpass_gui"] requires = [ "toga-core>=0.5.2", "colorama>=0.4.6", @@ -94,6 +99,7 @@ requires = [ "argon2-cffi", ] icon = "logo/png/SeedPass-Logo-24.png" +license = { file = "LICENSE" } [build-system] requires = ["poetry-core"]