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.2

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.2
File Size Uploaded
spkrepo-0.8.2.tar.gz 1.1 MB Details

Built distribution (wheel)

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

Total release size: 2.2 MB

Release files / spkrepo-0.8.2.tar.gz

Download URL spkrepo-0.8.2.tar.gz
Size 1.1 MB
Tags Source
SHA-256 checksum
How to use checksums
ae3466bd4bbe97bc4ebc0a52c3547f51284b27aba60bed40120acea7b0006023
BLAKE2b-256 checksum
How to use checksums
ccaba9f0fe1808c2a4c1178551700d7df4005b41b9d45f30b09d8ce7b7ea586b
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.2-py3-none-any.whl

Download URL spkrepo-0.8.2-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
a841f34153358abf9285fb75f98c10334b03ec5cf7e0da304f69c5e62f2bf8de
BLAKE2b-256 checksum
How to use checksums
e772e3a793f60b200c43508e6d5eb7dac0f6ed1403cfe4bff335e6e7139680d4
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

0.8.3

2 release files

This release

0.8.2 This release

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