buildarr


Namebuildarr JSON
Version 0.7.1 PyPI version JSON
download
home_pagehttps://buildarr.github.io
SummaryConstructs and configures Arr PVR stacks
upload_time2023-11-13 06:35:54
maintainer
docs_urlNone
authorCallum Dickinson
requires_python>=3.8,<4.0
licenseGPL-3.0-or-later
keywords buildarr sonarr radarr prowlarr
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Welcome to Buildarr!

[![Docker Version](https://img.shields.io/docker/v/callum027/buildarr?sort=semver)](https://hub.docker.com/r/callum027/buildarr) [![PyPI](https://img.shields.io/pypi/v/buildarr)](https://pypi.org/project/buildarr) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/buildarr) [![GitHub](https://img.shields.io/github/license/buildarr/buildarr)](https://github.com/buildarr/buildarr/blob/main/LICENSE) ![Pre-commit hooks](https://github.com/buildarr/buildarr/actions/workflows/pre-commit.yml/badge.svg) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

This is Buildarr, a solution to automating deployment and configuration of your *Arr stack.

Have you spent many hours getting your setup for one or more linked Sonarr/Radarr/Prowlarr instances just right, only to have no way to reproduce this setup apart from UI screenshots and database backups?

Buildarr aims to alleviate those concerns by using a static configuration file to store settings for all your *Arr applications, and automatically configure them as defined. It can just once using an ad-hoc user command, or as a service to keep your application configurations up to date. Buildarr runs idempotently, only making changes to your instance if they are required.

It can also automatically retrieve optimal configuration values from TRaSH-Guides for many things such as quality definitions and release profiles, so not only is there no need to manually input them into your configuration, Buildarr will also continually keep them up to date for you.

The full documentation for Buildarr is available [here](http://buildarr.github.io).

## Similar projects

Buildarr attempts to fulfill some of the needs of users of the following projects.

* [Bobarr](https://github.com/iam4x/bobarr) - An all-in-one package containing Sonarr, Radarr, Jackett etc
    * Still requires manual configuration of many components, and there is no way to store the configuration as code.
* [Flemmarr](https://github.com/Flemmarr/Flemmarr) - Uses API parameters stored in YAML configuration files to push configuration changes to Sonarr, Radarr, Lidarr etc
    * Requires users to comprehensively learn how the APIs of each application work, going through often poor documentation.
    * Since the values are machine-oriented, configuration files are difficult to write and understand.
    * Does not support idempotent updates ([at this time](https://github.com/Flemmarr/Flemmarr/pull/14)).
* [Recyclarr](https://github.com/recyclarr/recyclarr) - Automatically syncs recommended TRaSH-Guides settings to Sonarr/Radarr instances
    * Buildarr has support for this built-in, and in the case of Sonarr release profiles, supports the same filtering syntax.

## Installation

Buildarr is available on Docker Hub as a Docker image.

```bash
$ docker pull callum027/buildarr:latest
```

[All available plugins](#plugins) at the time of release are bundled into the official Docker container for Buildarr, so you can manage instances of those types right away.

Buildarr can also be installed using `pip`. Python 3.8 or later is required. Windows is natively supported.

As of version 0.4.0, the Python package for Buildarr no longer includes plugins for applications. In order to use Buildarr to manage an application instance, you will also need to install its corresponding plugin.

```bash
$ python3 -m venv buildarr-venv
$ . buildarr-venv/bin/activate
$ python3 -m pip install buildarr
```

You can deploy Buildarr as a service within a [Docker Compose](https://docs.docker.com/compose) environment, or use configuration management tools such as [Ansible](https://www.ansible.com) to automatically deploy it.

For more information, check the [installation instructions](http://buildarr.github.io/installation).

## Plugins

Buildarr supports external plugins to allow additional applications to be supported.

At the time of this release the following plugins are available:

* [`buildarr-sonarr`](https://buildarr.github.io/plugins/sonarr) - [Sonarr](https://sonarr.tv) PVR for TV shows
* [`buildarr-radarr`](https://buildarr.github.io/plugins/radarr) - [Radarr](https://radarr.video) PVR for movies
* [`buildarr-prowlarr`](https://buildarr.github.io/plugins/prowlarr) - [Prowlarr](https://prowlarr.com) indexer manager for Arr applications
* [`buildarr-jellyseerr`](https://buildarr.github.io/plugins/jellyseerr) - [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) media request manager for Jellyfin, Sonarr and Radarr

For more information on installing plugins, check the [plugin documentation](http://buildarr.github.io/plugins).

## Configuration

Buildarr uses YAML as its configuration file format. By default, Buildarr looks for `buildarr.yml` in the current directory.

It contains not only the settings for Buildarr itself, but also the application instances to be managed. Multiple instances of the same application type can be defined (for example, a common use case would be separate Sonarr instances for HD TV shows, 4K TV shows, and anime).

Any configuration on the remote instance not explicitly defined in the Buildarr configuration is not modified.

For more information on how Buildarr uses configuration and how to configure Buildarr itself, check the [configuration documentation](https://buildarr.github.io/configuration).

Here is an example of a simple Buildarr configuration that changes some settings on a Sonarr instance:

```yaml
---
# buildarr.yml
# Buildarr example configuration file.

# Buildarr configuration (all settings have sane default values)
buildarr:
  watch_config: true
  update_days:
    - "monday"
    - "tuesday"
    - "wednesday"
    - "thursday"
    - "friday"
    - "saturday"
    - "sunday"
  update_times:
    - "03:00"

# Sonarr instance configuration
sonarr:
  hostname: "localhost"
  port: 8989
  protocol: "http"
  settings:
    # General settings (all options supported except for changing the API key)
    general:
      host:
        instance_name: "Sonarr (Buildarr Example)"
```

If you have an already configured application instance, its configuration can be dumped. For example, to get the configuration of a Sonarr instance, this can be done using the following command (Buildarr will prompt for your API key):

```bash
$ docker run -it --rm callum027/buildarr:latest sonarr dump-config http://sonarr.example.com:8989
```

Once you have this configuration, you can insert it into `buildarr.yml` and ensure this configuration is maintained.

## Running Buildarr

Once you have a valid configuration file, you can try Buildarr on your local machine using the Docker image.

The following command will mount the current folder into the Docker container so `buildarr.yml` can be read, and start Buildarr in daemon mode.

```bash
$ docker run -d --name buildarr -v $(pwd):/config -e PUID=$(id -u) -e PGID=$(id -g) callum027/buildarr:latest
```

If installed using `pip`, simply run the `buildarr` CLI command.

```bash
$ buildarr daemon
```

On startup, Buildarr daemon will do an initial sync with the defined instances, updating their configuration immediately.
After this initial run, Buildarr will wake up at the scheduled times to periodically run updates as required.

```txt
2023-11-12 10:00:29,220 buildarr:1 buildarr.cli.daemon [INFO] Buildarr version 0.7.0 (log level: INFO)
2023-11-12 10:00:29,220 buildarr:1 buildarr.cli.daemon [INFO] Loading configuration file '/config/buildarr.yml'
2023-11-12 10:00:29,775 buildarr:1 buildarr.cli.daemon [INFO] Finished loading configuration file
2023-11-12 10:00:29,775 buildarr:1 buildarr.cli.daemon [INFO] Daemon configuration:
2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]  - Watch configuration files: No
2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]  - Update at:
2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]    - Monday 03:00
2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]    - Tuesday 03:00
2023-11-12 10:00:29,777 buildarr:1 buildarr.cli.daemon [INFO]    - Wednesday 03:00
2023-11-12 10:00:29,777 buildarr:1 buildarr.cli.daemon [INFO]    - Thursday 03:00
2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO]    - Friday 03:00
2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO]    - Saturday 03:00
2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO]    - Sunday 03:00
2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO] Scheduling update jobs
2023-11-12 10:00:29,779 buildarr:1 buildarr.cli.daemon [INFO] Finished scheduling update jobs
2023-11-12 10:00:29,779 buildarr:1 buildarr.cli.daemon [INFO] Config file monitoring is already disabled
2023-11-12 10:00:29,779 buildarr:1 buildarr.cli.daemon [INFO] Applying initial configuration
2023-11-12 10:00:29,932 buildarr:1 buildarr.cli.run [INFO] Loaded plugins: jellyseerr (0.3.0), prowlarr (0.5.0), radarr (0.2.0), sonarr (0.6.0)
2023-11-12 10:00:29,932 buildarr:1 buildarr.cli.run [INFO] Loading instance configurations
2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Finished loading instance configurations
2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Running with plugins: prowlarr, sonarr, radarr, jellyseerr
2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Resolving instance dependencies
2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Finished resolving instance dependencies
2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Fetching TRaSH metadata
2023-11-12 10:00:36,723 buildarr:1 buildarr.cli.run [INFO] Finished fetching TRaSH metadata
2023-11-12 10:00:36,723 buildarr:1 buildarr.cli.run [INFO] Rendering instance configuration dynamic attributes
2023-11-12 10:00:36,739 buildarr:1 buildarr.cli.run [INFO] Finished rendering instance configuration dynamic attributes
2023-11-12 10:00:37,273 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Fetching instance secrets
2023-11-12 10:00:37,273 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished fetching instance secrets
2023-11-12 10:00:37,273 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Running connection test
2023-11-12 10:00:37,343 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Connection test successful
2023-11-12 10:00:38,112 buildarr:1 buildarr.cli.run [INFO] Performing post-initialisation configuration render
2023-11-12 10:00:39,292 buildarr:1 buildarr.cli.run [INFO] Finished performing post-initialisation configuration render
2023-11-12 10:00:39,292 buildarr:1 buildarr.cli.run [INFO] Updating configuration on remote instances
2023-11-12 10:00:39,292 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Fetching remote configuration to check if updates are required
2023-11-12 10:00:39,738 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished fetching remote configuration
2023-11-12 10:00:39,810 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Updating remote configuration
2023-11-12 10:00:39,850 buildarr:1 buildarr.config.base [INFO] <sonarr> (default) sonarr.settings.general.host.instance_name: 'Sonarr' -> 'Sonarr (Buildarr Example)'
2023-11-12 10:00:39,933 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Remote configuration successfully updated
2023-11-12 10:00:40,574 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished updating remote configuration
2023-11-12 10:00:49,722 buildarr:1 buildarr.cli.run [INFO] Finished updating configuration on remote instances
2023-11-12 10:00:49,722 buildarr:1 buildarr.cli.run [INFO] Deleting unmanaged/unused resources on remote instances
2023-11-12 10:00:52,579 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Refetching remote configuration to delete unused resources
2023-11-12 10:00:52,714 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished refetching remote configuration
2023-11-12 10:00:52,771 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Deleting unmanaged/unused resources on the remote instance
2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Remote configuration is clean
2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished deleting unmanaged/unused resources on the remote instance
2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] Finished deleting unmanaged/unused resources on remote instances
2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] Deleting downloaded TRaSH metadata
2023-11-12 10:00:52,873 buildarr:1 buildarr.cli.run [INFO] Finished deleting downloaded TRaSH metadata
2023-11-12 10:00:52,874 buildarr:1 buildarr.cli.daemon [INFO] Finished applying initial configuration
2023-11-12 10:00:52,874 buildarr:1 buildarr.cli.daemon [INFO] Setting up signal handlers
2023-11-12 10:00:52,875 buildarr:1 buildarr.cli.daemon [INFO] Finished setting up signal handlers
2023-11-12 10:00:52,875 buildarr:1 buildarr.cli.daemon [INFO] The next run will be at 2023-11-13 03:00
2023-11-12 10:00:52,875 buildarr:1 buildarr.cli.daemon [INFO] Buildarr ready.
```

For more information on how to interfact with Buildarr, check the [usage documentation](https://buildarr.github.io/usage).

## To-do list

* Test updates for all available attributes in the existing Sonarr plugin
* Unit tests and code coverage
* Split Sonarr plugin to its own repository (completed in [version 0.4.0](https://buildarr.github.io/release-notes/#v040-2023-03-31))
* Create plugins for the following applications:
    * Sonarr V4
    * Radarr (now available as [`buildarr-radarr`](https://buildarr.github.io/plugins/radarr))
    * Prowlarr (now available as [`buildarr-prowlarr`](https://buildarr.github.io/plugins/prowlarr))
    * Jellyseerr (now available as [`buildarr-jellyseerr`](https://buildarr.github.io/plugins/jellyseerr))
    * Bazarr
    * Unmanic
    * Tdarr (maybe)
    * Unpackerr
    * Lidarr
* Instance linking (e.g. Prowlarr-to-Sonarr/Radarr) and dependency resolution (added in [version 0.3.0](https://buildarr.github.io/release-notes/#v030-2023-03-15))
* Stable plugin API between major versions
* Auto-generation of Docker Compose environment files reflecting the Buildarr configuration (added in [version 0.4.0](https://buildarr.github.io/release-notes/#v040-2023-03-31))

## Contributions

Buildarr is still early in development, and even currently implemented features still require testing and fixing. There are so many possible configurations to cover that I simply cannot feasibly test every feature at this time.

If you encounter an issue or error while using Buildarr, please do a Buildarr ad-hoc run with verbose log output by executing `buildarr --log-level DEBUG run` and making an issue on [our GitHub repository](https://github.com/buildarr/buildarr/issues/new) explaining the issue and attaching the output. (Please ensure that any API keys or other sensitive information are obfuscated before submitting.)

```bash
$ docker run -d --name buildarr -v $(pwd):/config -e PUID=$(id -u) -e PGID=$(id -g) callum027/buildarr:latest --log-level DEBUG run
```

Bug reports and pull requests for Buildarr itself are welcome in the Buildarr base package repository. For reporting issues and making contributions to application plugins, check out their repositories:

* Sonarr plugin: [https://github.com/buildarr/buildarr-sonarr](https://github.com/buildarr/buildarr-sonarr)

For developers looking to make a contribution to this project, thank you! Documentation of the internal APIs is still in the works, so for now, the best way to learn how Buildarr works is to clone the project and have a look at the comments and docstrings.

Pre-commit hooks are configured for this project. In this pre-commit hook, [Black](https://black.readthedocs.io/en/stable), [Ruff](https://beta.ruff.rs/docs) and [Mypy](https://mypy-lang.org) are run to automatically format source files, ensure grammatical correctness and variable type consistency.

To enable them, ensure the `pre-commit` Python package is installed in your local environment and run the following command:

```bash
$ pre-commit install
```

Poetry is used to manage the Python package definition and dependencies in this project.

If you're looking to develop a new plugin for adding support for a new application, please develop it as a new package and configure entry points in your Python package definitions to allow Buildarr to load your plugin.

Setuptools `setup.py` entry point definition example:
```python
from setuptools import setup

setup(
    # ...,
    entry_points={
        "buildarr.plugins": [
            "example = buildarr_example.plugin:ExamplePlugin",
        ],
    },
)
```

Setuptools `setup.cfg` entry point definition example:
```ini
[options.entry_points]
buildarr.plugins =
    example = buildarr_example.plugin:ExamplePlugin
```

Setuptools `pyproject.toml` entry point definition example:
```toml
[project.entry-points."buildarr.plugins"]
"example" = "buildarr_example.plugin:ExamplePlugin"
```

Poetry plugin definition example:
```toml
[tool.poetry.plugins."buildarr.plugins"]
"example" = "buildarr_example.plugin:ExamplePlugin"
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://buildarr.github.io",
    "name": "buildarr",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8,<4.0",
    "maintainer_email": "",
    "keywords": "buildarr,sonarr,radarr,prowlarr",
    "author": "Callum Dickinson",
    "author_email": "callum.dickinson.nz@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/37/aa/c87c73a3b31f751f1598d385fd8be88de487d24f2a12a664343c425011c4/buildarr-0.7.1.tar.gz",
    "platform": null,
    "description": "# Welcome to Buildarr!\n\n[![Docker Version](https://img.shields.io/docker/v/callum027/buildarr?sort=semver)](https://hub.docker.com/r/callum027/buildarr) [![PyPI](https://img.shields.io/pypi/v/buildarr)](https://pypi.org/project/buildarr) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/buildarr) [![GitHub](https://img.shields.io/github/license/buildarr/buildarr)](https://github.com/buildarr/buildarr/blob/main/LICENSE) ![Pre-commit hooks](https://github.com/buildarr/buildarr/actions/workflows/pre-commit.yml/badge.svg) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nThis is Buildarr, a solution to automating deployment and configuration of your *Arr stack.\n\nHave you spent many hours getting your setup for one or more linked Sonarr/Radarr/Prowlarr instances just right, only to have no way to reproduce this setup apart from UI screenshots and database backups?\n\nBuildarr aims to alleviate those concerns by using a static configuration file to store settings for all your *Arr applications, and automatically configure them as defined. It can just once using an ad-hoc user command, or as a service to keep your application configurations up to date. Buildarr runs idempotently, only making changes to your instance if they are required.\n\nIt can also automatically retrieve optimal configuration values from TRaSH-Guides for many things such as quality definitions and release profiles, so not only is there no need to manually input them into your configuration, Buildarr will also continually keep them up to date for you.\n\nThe full documentation for Buildarr is available [here](http://buildarr.github.io).\n\n## Similar projects\n\nBuildarr attempts to fulfill some of the needs of users of the following projects.\n\n* [Bobarr](https://github.com/iam4x/bobarr) - An all-in-one package containing Sonarr, Radarr, Jackett etc\n    * Still requires manual configuration of many components, and there is no way to store the configuration as code.\n* [Flemmarr](https://github.com/Flemmarr/Flemmarr) - Uses API parameters stored in YAML configuration files to push configuration changes to Sonarr, Radarr, Lidarr etc\n    * Requires users to comprehensively learn how the APIs of each application work, going through often poor documentation.\n    * Since the values are machine-oriented, configuration files are difficult to write and understand.\n    * Does not support idempotent updates ([at this time](https://github.com/Flemmarr/Flemmarr/pull/14)).\n* [Recyclarr](https://github.com/recyclarr/recyclarr) - Automatically syncs recommended TRaSH-Guides settings to Sonarr/Radarr instances\n    * Buildarr has support for this built-in, and in the case of Sonarr release profiles, supports the same filtering syntax.\n\n## Installation\n\nBuildarr is available on Docker Hub as a Docker image.\n\n```bash\n$ docker pull callum027/buildarr:latest\n```\n\n[All available plugins](#plugins) at the time of release are bundled into the official Docker container for Buildarr, so you can manage instances of those types right away.\n\nBuildarr can also be installed using `pip`. Python 3.8 or later is required. Windows is natively supported.\n\nAs of version 0.4.0, the Python package for Buildarr no longer includes plugins for applications. In order to use Buildarr to manage an application instance, you will also need to install its corresponding plugin.\n\n```bash\n$ python3 -m venv buildarr-venv\n$ . buildarr-venv/bin/activate\n$ python3 -m pip install buildarr\n```\n\nYou can deploy Buildarr as a service within a [Docker Compose](https://docs.docker.com/compose) environment, or use configuration management tools such as [Ansible](https://www.ansible.com) to automatically deploy it.\n\nFor more information, check the [installation instructions](http://buildarr.github.io/installation).\n\n## Plugins\n\nBuildarr supports external plugins to allow additional applications to be supported.\n\nAt the time of this release the following plugins are available:\n\n* [`buildarr-sonarr`](https://buildarr.github.io/plugins/sonarr) - [Sonarr](https://sonarr.tv) PVR for TV shows\n* [`buildarr-radarr`](https://buildarr.github.io/plugins/radarr) - [Radarr](https://radarr.video) PVR for movies\n* [`buildarr-prowlarr`](https://buildarr.github.io/plugins/prowlarr) - [Prowlarr](https://prowlarr.com) indexer manager for Arr applications\n* [`buildarr-jellyseerr`](https://buildarr.github.io/plugins/jellyseerr) - [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) media request manager for Jellyfin, Sonarr and Radarr\n\nFor more information on installing plugins, check the [plugin documentation](http://buildarr.github.io/plugins).\n\n## Configuration\n\nBuildarr uses YAML as its configuration file format. By default, Buildarr looks for `buildarr.yml` in the current directory.\n\nIt contains not only the settings for Buildarr itself, but also the application instances to be managed. Multiple instances of the same application type can be defined (for example, a common use case would be separate Sonarr instances for HD TV shows, 4K TV shows, and anime).\n\nAny configuration on the remote instance not explicitly defined in the Buildarr configuration is not modified.\n\nFor more information on how Buildarr uses configuration and how to configure Buildarr itself, check the [configuration documentation](https://buildarr.github.io/configuration).\n\nHere is an example of a simple Buildarr configuration that changes some settings on a Sonarr instance:\n\n```yaml\n---\n# buildarr.yml\n# Buildarr example configuration file.\n\n# Buildarr configuration (all settings have sane default values)\nbuildarr:\n  watch_config: true\n  update_days:\n    - \"monday\"\n    - \"tuesday\"\n    - \"wednesday\"\n    - \"thursday\"\n    - \"friday\"\n    - \"saturday\"\n    - \"sunday\"\n  update_times:\n    - \"03:00\"\n\n# Sonarr instance configuration\nsonarr:\n  hostname: \"localhost\"\n  port: 8989\n  protocol: \"http\"\n  settings:\n    # General settings (all options supported except for changing the API key)\n    general:\n      host:\n        instance_name: \"Sonarr (Buildarr Example)\"\n```\n\nIf you have an already configured application instance, its configuration can be dumped. For example, to get the configuration of a Sonarr instance, this can be done using the following command (Buildarr will prompt for your API key):\n\n```bash\n$ docker run -it --rm callum027/buildarr:latest sonarr dump-config http://sonarr.example.com:8989\n```\n\nOnce you have this configuration, you can insert it into `buildarr.yml` and ensure this configuration is maintained.\n\n## Running Buildarr\n\nOnce you have a valid configuration file, you can try Buildarr on your local machine using the Docker image.\n\nThe following command will mount the current folder into the Docker container so `buildarr.yml` can be read, and start Buildarr in daemon mode.\n\n```bash\n$ docker run -d --name buildarr -v $(pwd):/config -e PUID=$(id -u) -e PGID=$(id -g) callum027/buildarr:latest\n```\n\nIf installed using `pip`, simply run the `buildarr` CLI command.\n\n```bash\n$ buildarr daemon\n```\n\nOn startup, Buildarr daemon will do an initial sync with the defined instances, updating their configuration immediately.\nAfter this initial run, Buildarr will wake up at the scheduled times to periodically run updates as required.\n\n```txt\n2023-11-12 10:00:29,220 buildarr:1 buildarr.cli.daemon [INFO] Buildarr version 0.7.0 (log level: INFO)\n2023-11-12 10:00:29,220 buildarr:1 buildarr.cli.daemon [INFO] Loading configuration file '/config/buildarr.yml'\n2023-11-12 10:00:29,775 buildarr:1 buildarr.cli.daemon [INFO] Finished loading configuration file\n2023-11-12 10:00:29,775 buildarr:1 buildarr.cli.daemon [INFO] Daemon configuration:\n2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]  - Watch configuration files: No\n2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]  - Update at:\n2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]    - Monday 03:00\n2023-11-12 10:00:29,776 buildarr:1 buildarr.cli.daemon [INFO]    - Tuesday 03:00\n2023-11-12 10:00:29,777 buildarr:1 buildarr.cli.daemon [INFO]    - Wednesday 03:00\n2023-11-12 10:00:29,777 buildarr:1 buildarr.cli.daemon [INFO]    - Thursday 03:00\n2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO]    - Friday 03:00\n2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO]    - Saturday 03:00\n2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO]    - Sunday 03:00\n2023-11-12 10:00:29,778 buildarr:1 buildarr.cli.daemon [INFO] Scheduling update jobs\n2023-11-12 10:00:29,779 buildarr:1 buildarr.cli.daemon [INFO] Finished scheduling update jobs\n2023-11-12 10:00:29,779 buildarr:1 buildarr.cli.daemon [INFO] Config file monitoring is already disabled\n2023-11-12 10:00:29,779 buildarr:1 buildarr.cli.daemon [INFO] Applying initial configuration\n2023-11-12 10:00:29,932 buildarr:1 buildarr.cli.run [INFO] Loaded plugins: jellyseerr (0.3.0), prowlarr (0.5.0), radarr (0.2.0), sonarr (0.6.0)\n2023-11-12 10:00:29,932 buildarr:1 buildarr.cli.run [INFO] Loading instance configurations\n2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Finished loading instance configurations\n2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Running with plugins: prowlarr, sonarr, radarr, jellyseerr\n2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Resolving instance dependencies\n2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Finished resolving instance dependencies\n2023-11-12 10:00:29,973 buildarr:1 buildarr.cli.run [INFO] Fetching TRaSH metadata\n2023-11-12 10:00:36,723 buildarr:1 buildarr.cli.run [INFO] Finished fetching TRaSH metadata\n2023-11-12 10:00:36,723 buildarr:1 buildarr.cli.run [INFO] Rendering instance configuration dynamic attributes\n2023-11-12 10:00:36,739 buildarr:1 buildarr.cli.run [INFO] Finished rendering instance configuration dynamic attributes\n2023-11-12 10:00:37,273 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Fetching instance secrets\n2023-11-12 10:00:37,273 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished fetching instance secrets\n2023-11-12 10:00:37,273 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Running connection test\n2023-11-12 10:00:37,343 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Connection test successful\n2023-11-12 10:00:38,112 buildarr:1 buildarr.cli.run [INFO] Performing post-initialisation configuration render\n2023-11-12 10:00:39,292 buildarr:1 buildarr.cli.run [INFO] Finished performing post-initialisation configuration render\n2023-11-12 10:00:39,292 buildarr:1 buildarr.cli.run [INFO] Updating configuration on remote instances\n2023-11-12 10:00:39,292 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Fetching remote configuration to check if updates are required\n2023-11-12 10:00:39,738 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished fetching remote configuration\n2023-11-12 10:00:39,810 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Updating remote configuration\n2023-11-12 10:00:39,850 buildarr:1 buildarr.config.base [INFO] <sonarr> (default) sonarr.settings.general.host.instance_name: 'Sonarr' -> 'Sonarr (Buildarr Example)'\n2023-11-12 10:00:39,933 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Remote configuration successfully updated\n2023-11-12 10:00:40,574 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished updating remote configuration\n2023-11-12 10:00:49,722 buildarr:1 buildarr.cli.run [INFO] Finished updating configuration on remote instances\n2023-11-12 10:00:49,722 buildarr:1 buildarr.cli.run [INFO] Deleting unmanaged/unused resources on remote instances\n2023-11-12 10:00:52,579 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Refetching remote configuration to delete unused resources\n2023-11-12 10:00:52,714 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished refetching remote configuration\n2023-11-12 10:00:52,771 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Deleting unmanaged/unused resources on the remote instance\n2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Remote configuration is clean\n2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] <sonarr> (default) Finished deleting unmanaged/unused resources on the remote instance\n2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] Finished deleting unmanaged/unused resources on remote instances\n2023-11-12 10:00:52,843 buildarr:1 buildarr.cli.run [INFO] Deleting downloaded TRaSH metadata\n2023-11-12 10:00:52,873 buildarr:1 buildarr.cli.run [INFO] Finished deleting downloaded TRaSH metadata\n2023-11-12 10:00:52,874 buildarr:1 buildarr.cli.daemon [INFO] Finished applying initial configuration\n2023-11-12 10:00:52,874 buildarr:1 buildarr.cli.daemon [INFO] Setting up signal handlers\n2023-11-12 10:00:52,875 buildarr:1 buildarr.cli.daemon [INFO] Finished setting up signal handlers\n2023-11-12 10:00:52,875 buildarr:1 buildarr.cli.daemon [INFO] The next run will be at 2023-11-13 03:00\n2023-11-12 10:00:52,875 buildarr:1 buildarr.cli.daemon [INFO] Buildarr ready.\n```\n\nFor more information on how to interfact with Buildarr, check the [usage documentation](https://buildarr.github.io/usage).\n\n## To-do list\n\n* Test updates for all available attributes in the existing Sonarr plugin\n* Unit tests and code coverage\n* Split Sonarr plugin to its own repository (completed in [version 0.4.0](https://buildarr.github.io/release-notes/#v040-2023-03-31))\n* Create plugins for the following applications:\n    * Sonarr V4\n    * Radarr (now available as [`buildarr-radarr`](https://buildarr.github.io/plugins/radarr))\n    * Prowlarr (now available as [`buildarr-prowlarr`](https://buildarr.github.io/plugins/prowlarr))\n    * Jellyseerr (now available as [`buildarr-jellyseerr`](https://buildarr.github.io/plugins/jellyseerr))\n    * Bazarr\n    * Unmanic\n    * Tdarr (maybe)\n    * Unpackerr\n    * Lidarr\n* Instance linking (e.g. Prowlarr-to-Sonarr/Radarr) and dependency resolution (added in [version 0.3.0](https://buildarr.github.io/release-notes/#v030-2023-03-15))\n* Stable plugin API between major versions\n* Auto-generation of Docker Compose environment files reflecting the Buildarr configuration (added in [version 0.4.0](https://buildarr.github.io/release-notes/#v040-2023-03-31))\n\n## Contributions\n\nBuildarr is still early in development, and even currently implemented features still require testing and fixing. There are so many possible configurations to cover that I simply cannot feasibly test every feature at this time.\n\nIf you encounter an issue or error while using Buildarr, please do a Buildarr ad-hoc run with verbose log output by executing `buildarr --log-level DEBUG run` and making an issue on [our GitHub repository](https://github.com/buildarr/buildarr/issues/new) explaining the issue and attaching the output. (Please ensure that any API keys or other sensitive information are obfuscated before submitting.)\n\n```bash\n$ docker run -d --name buildarr -v $(pwd):/config -e PUID=$(id -u) -e PGID=$(id -g) callum027/buildarr:latest --log-level DEBUG run\n```\n\nBug reports and pull requests for Buildarr itself are welcome in the Buildarr base package repository. For reporting issues and making contributions to application plugins, check out their repositories:\n\n* Sonarr plugin: [https://github.com/buildarr/buildarr-sonarr](https://github.com/buildarr/buildarr-sonarr)\n\nFor developers looking to make a contribution to this project, thank you! Documentation of the internal APIs is still in the works, so for now, the best way to learn how Buildarr works is to clone the project and have a look at the comments and docstrings.\n\nPre-commit hooks are configured for this project. In this pre-commit hook, [Black](https://black.readthedocs.io/en/stable), [Ruff](https://beta.ruff.rs/docs) and [Mypy](https://mypy-lang.org) are run to automatically format source files, ensure grammatical correctness and variable type consistency.\n\nTo enable them, ensure the `pre-commit` Python package is installed in your local environment and run the following command:\n\n```bash\n$ pre-commit install\n```\n\nPoetry is used to manage the Python package definition and dependencies in this project.\n\nIf you're looking to develop a new plugin for adding support for a new application, please develop it as a new package and configure entry points in your Python package definitions to allow Buildarr to load your plugin.\n\nSetuptools `setup.py` entry point definition example:\n```python\nfrom setuptools import setup\n\nsetup(\n    # ...,\n    entry_points={\n        \"buildarr.plugins\": [\n            \"example = buildarr_example.plugin:ExamplePlugin\",\n        ],\n    },\n)\n```\n\nSetuptools `setup.cfg` entry point definition example:\n```ini\n[options.entry_points]\nbuildarr.plugins =\n    example = buildarr_example.plugin:ExamplePlugin\n```\n\nSetuptools `pyproject.toml` entry point definition example:\n```toml\n[project.entry-points.\"buildarr.plugins\"]\n\"example\" = \"buildarr_example.plugin:ExamplePlugin\"\n```\n\nPoetry plugin definition example:\n```toml\n[tool.poetry.plugins.\"buildarr.plugins\"]\n\"example\" = \"buildarr_example.plugin:ExamplePlugin\"\n```\n",
    "bugtrack_url": null,
    "license": "GPL-3.0-or-later",
    "summary": "Constructs and configures Arr PVR stacks",
    "version": "0.7.1",
    "project_urls": {
        "Changes": "https://buildarr.github.io/release-notes",
        "Documentation": "https://buildarr.github.io",
        "Homepage": "https://buildarr.github.io",
        "Issue Tracker": "https://github.com/buildarr/buildarr/issues",
        "Repository": "https://github.com/buildarr/buildarr"
    },
    "split_keywords": [
        "buildarr",
        "sonarr",
        "radarr",
        "prowlarr"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5155ffc005f0aa8eea77e835dc3584b5cd8a2ac33bac28484a3e8be8116cfe45",
                "md5": "2292928184c4964155eeef1158f5ab67",
                "sha256": "a7118eaa57dc093a2b61baf98a77a47a86f2c35dc33000ab6cbefc090aade19c"
            },
            "downloads": -1,
            "filename": "buildarr-0.7.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2292928184c4964155eeef1158f5ab67",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8,<4.0",
            "size": 101273,
            "upload_time": "2023-11-13T06:35:52",
            "upload_time_iso_8601": "2023-11-13T06:35:52.120870Z",
            "url": "https://files.pythonhosted.org/packages/51/55/ffc005f0aa8eea77e835dc3584b5cd8a2ac33bac28484a3e8be8116cfe45/buildarr-0.7.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "37aac87c73a3b31f751f1598d385fd8be88de487d24f2a12a664343c425011c4",
                "md5": "9e160ed0a889e7a871766acc113571b8",
                "sha256": "1666050a17a1c0d60aec3fb006e8ee101974d92c5d283ed4042ee319179eaa73"
            },
            "downloads": -1,
            "filename": "buildarr-0.7.1.tar.gz",
            "has_sig": false,
            "md5_digest": "9e160ed0a889e7a871766acc113571b8",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8,<4.0",
            "size": 70966,
            "upload_time": "2023-11-13T06:35:54",
            "upload_time_iso_8601": "2023-11-13T06:35:54.223740Z",
            "url": "https://files.pythonhosted.org/packages/37/aa/c87c73a3b31f751f1598d385fd8be88de487d24f2a12a664343c425011c4/buildarr-0.7.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-13 06:35:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "buildarr",
    "github_project": "buildarr",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "buildarr"
}
        
Elapsed time: 0.26207s