Skip to main content

spkrepo

Synology Package Repository

Build Discord

Development

Requirements

  1. Install docker and docker-compose
  2. Install uv
  3. Install pre-commit e.g. uv tool install pre-commit

Installation

  1. Run postgres, e.g. using docker with docker compose up db
  2. Install dependencies with uv sync
  3. Create the tables with uv run flask db upgrade
  4. Populate the database with some fake packages with uv run flask spkrepo populate_db
  5. Add an admin account with uv run flask spkrepo create_admin -u admin -e admin@synocommunity.com -p adminadmin

To clean data created by fake packages, run uv run flask spkrepo depopulate_db

Run

  1. Start postgres with docker compose up db
  2. Start the development server with uv run flask run
  3. Website is available at http://localhost:5000
  4. Admin interface is available at http://localhost:5000/admin
  5. NAS interface is available at http://localhost:5000/nas
  6. API is available at http://localhost:5000/api
  7. Run the test suite with uv run pytest -v

spkrepo CLI Usage

Usage: flask spkrepo [OPTIONS] COMMAND [ARGS]...

  Spkrepo admin commands.

Options:
  --help  Show this message and exit.

Commands:
  clean          Clean data path.
  create_admin   Create a new admin user.
  create_user    Create a new user with an activated account.
  depopulate_db  Depopulate database.
  populate_db    Populate the database with some packages.
  1. Add a user with uv run flask spkrepo create_user -u admin -e admin@synocommunity.com -p adminadmin
  2. Grant the created user with Administrator permissions uv run flask roles add admin@synocommunity.com admin
  3. Grant the created user with Package Administrator permissions uv run flask roles add admin@synocommunity.com package_admin
  4. Grant the created user with Developer permissions uv run flask roles add admin@synocommunity.com developer

Docker Compose Run

  • If you also want to run the app in docker you can with docker compose up app
  • You can run both postgres and the app with docker compose up

Deployment

Configuration

Create a config file ./config.py to disable debug logs, connect to a database, set a secure key and optionally set a cache:

Use LC_CTYPE=C tr -cd '[:print:]' < /dev/urandom | head -c 64 or base64 < /dev/urandom | head -c 64 to get a random string

DEBUG = False
TESTING = False
SECRET_KEY = "Please-change-me-to-some-random-string"
SQLALCHEMY_ECHO = False
SQLALCHEMY_DATABASE_URI = "postgresql://user:pass@localhost/dbname"
# https://pythonhosted.org/Flask-Caching/#configuring-flask-caching
CACHE_TYPE= "SimpleCache"
# For signing packages
GNUPG_PATH= "/usr/local/bin/gpg"

Run Tests & Linters

uv run pytest -v
uvx pre-commit run --all-files

Docker

Example usage:

docker run -it --rm --name spkrepo -v $(pwd)/data:/data -p 8000:8000 ghcr.io/synocommunity/spkrepo

Additional configuration can be mounted in the container and loaded by putting the path into SPKREPO_CONFIG environment variable.

e.g.

docker run -it --rm --name spkrepo -v $(pwd)/data:/data -v $(pwd)/docker-config.py:/docker-config.py -e SPKREPO_CONFIG=/docker-config.py -p 8000:8000 ghcr.io/synocommunity/spkrepo

Serve app via a WSGI server.

Example:

# Production
SPKREPO_CONFIG="$PWD/config.py" gunicorn -w 4 'wsgi:app'
# Development
SPKREPO_CONFIG="$PWD/config.py" uv run gunicorn -b 0.0.0.0:8080 -w 4 wsgi:app

Add migration

uv run flask db revision -m "update build path length"

Test NAS API

curl "http://localhost:5000/nas?package_update_channel=beta&build=24922&language=enu&major=6&micro=2&arch=x86_64&minor=2"

Metadata

Release files for spkrepo 0.8.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spkrepo 0.8.3
File Size Uploaded
spkrepo-0.8.3.tar.gz 1.1 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for spkrepo 0.8.3
File Interpreter ABI Platform
spkrepo-0.8.3-py3-none-any.whl Python 3 none any Details

Total release size: 2.2 MB

Release files / spkrepo-0.8.3.tar.gz

Download URL spkrepo-0.8.3.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
8b200c288cec79e8f1db615297261bc23733ade9315593ab93b4e7bc1b08cd40
BLAKE2b-256 checksum
How to use checksums
e63253ef77377cf969a38799629f9a624e1e68d232cee39721af02a949dad58a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / spkrepo-0.8.3-py3-none-any.whl

Download URL spkrepo-0.8.3-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
99a70539cc42b00175f79db50d206de4fc4ff75ff9b18ccf854ed07dd0613c12
BLAKE2b-256 checksum
How to use checksums
dfd2a4e900dc7859dd3b460c47a24402b8f7694a320b334d334185524900ea04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.8.9

2 release files

0.8.8

2 release files

0.8.7

2 release files

0.8.6

2 release files

0.8.5

2 release files

0.8.4

2 release files

This release

0.8.3 This release

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.9

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.9

2 release files

0.5.8

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.9

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page