{"id":17114904,"url":"https://github.com/bartfeenstra/backuppy","last_synced_at":"2026-02-11T04:01:31.018Z","repository":{"id":57413693,"uuid":"123780904","full_name":"bartfeenstra/backuppy","owner":"bartfeenstra","description":"Backuppy backs up and restores your data using rsync 🛸","archived":false,"fork":false,"pushed_at":"2018-07-14T12:08:56.000Z","size":194,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-27T07:13:05.246Z","etag":null,"topics":["back-up","backup","linux","rsync","ssh"],"latest_commit_sha":null,"homepage":"http://backuppy.readthedocs.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bartfeenstra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-04T11:11:56.000Z","updated_at":"2018-07-14T12:08:55.000Z","dependencies_parsed_at":"2022-09-05T03:50:43.525Z","dependency_job_id":null,"html_url":"https://github.com/bartfeenstra/backuppy","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/bartfeenstra/backuppy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartfeenstra%2Fbackuppy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartfeenstra%2Fbackuppy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartfeenstra%2Fbackuppy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartfeenstra%2Fbackuppy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bartfeenstra","download_url":"https://codeload.github.com/bartfeenstra/backuppy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bartfeenstra%2Fbackuppy/sbom","scorecard":{"id":226288,"data":{"date":"2025-08-11","repo":{"name":"github.com/bartfeenstra/backuppy","commit":"bd9e5f98e5431829054ba18c8c4096d4c548a5cb"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/10 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: backuppy/tests/resources/container/Dockerfile:1: pin your Docker image by updating rastasheep/ubuntu-sshd:18.04 to rastasheep/ubuntu-sshd:18.04@sha256:1df808ccf95c13b8e62548ad434829bc28ee701a65624e5c0440fc24482e4a62","Warn: pipCommand not pinned by hash: bin/build:6","Warn: pipCommand not pinned by hash: bin/build-dev:30","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-232r-66cg-79px","Warn: Project is vulnerable to: GHSA-f2j6-wrhh-v25m","Warn: Project is vulnerable to: PYSEC-2022-166","Warn: Project is vulnerable to: PYSEC-2022-43017 / GHSA-qwmp-2cf2-g9g6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T03:53:24.568Z","repository_id":57413693,"created_at":"2025-08-17T03:53:24.568Z","updated_at":"2025-08-17T03:53:24.568Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29326808,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T03:52:29.695Z","status":"ssl_error","status_checked_at":"2026-02-11T03:52:23.094Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["back-up","backup","linux","rsync","ssh"],"created_at":"2024-10-14T17:20:49.102Z","updated_at":"2026-02-11T04:01:31.002Z","avatar_url":"https://github.com/bartfeenstra.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Backuppy\n\n[![Build Status](https://travis-ci.org/bartfeenstra/backuppy.svg?branch=master)](https://travis-ci.org/bartfeenstra/backuppy) [![Coverage Status](https://coveralls.io/repos/github/bartfeenstra/backuppy/badge.svg?branch=master)](https://coveralls.io/github/bartfeenstra/backuppy?branch=master) ![Backuppy runs on Python 2.7, 3.5, and 3.6, and on PyPy](https://img.shields.io/badge/Python-2.7%2C%203.5%2C%203.6%2C%20PyPy-blue.svg) [![Latest release](https://img.shields.io/pypi/v/backuppy.svg)](https://pypi.org/project/backuppy/) ![Backuppy is released under the MIT license](https://img.shields.io/github/license/bartfeenstra/backuppy.svg)\n\n## About\nBackuppy backs up and restores your data using rsync, allowing different routes to the same, or different destinations.\n\nThe following instructions can be executed in any system Python environment, but you may want to use a\n[virtual environment](https://docs.python.org/3/library/venv.html). Alternatively, some actions can be performed using\n[tox](https://tox.readthedocs.io/) as well, which produces its own virtual environments in `.tox/py**`.\n\n## License\nBackuppy is released under the [MIT](./LICENSE) license.\n\n## Documentation\nExtended API documentation is available at [Read the Docs](https://backuppy.readthedocs.io/en/latest/).\n\n## Usage\n\n### Requirements\n- Python 2.7+\n\n### Installation\nIn any Python environment, run `pip install backuppy`.\n\n### Command line\n```bash\n$ backuppy --help\nusage: backuppy [-h] {backup,restore,init} ...\n\nBackuppy backs up and restores your data using rsync.\n\npositional arguments:\n  {backup,restore,init}\n    backup              Starts a back-up.\n    restore             Restores a back-up.\n    init                Initializes a new back-up configuration.\n\noptional arguments:\n  -h, --help            show this help message and exit\n```\n\n### Configuration\nConfiguration is written in [YAML](https://en.wikipedia.org/wiki/YAML) or [JSON](https://en.wikipedia.org/wiki/JSON),\nand can be stored anywhere as `*.yml`, `*.yaml`, or `*.json` files. An example of the smallest possible configuration\nfile:\n```yaml\nsource:\n  type: path\n  configuration:\n    path: ./source\ntarget:\n  type: path\n  configuration:\n    path: ./target\n```\n\nTo create a new back-up configuration without writing code, run `backuppy init` and follow the interactive wizard.\n\nTo tweak Backuppy's output:\n```yaml\n# An optional human-readable name for this back-up. It will default to the configuration file name.\nname: Test\n# Whether or not to generate verbose output. Defaults to `false`.\nverbose: true\n# Python logging configuration. This is specific to the Python version you are using. Defaults to `null` for no logging.\n# See https://docs.python.org/3.6/library/logging.config.html#logging-config-dictschema.\nlogging:\n  version: 1\n  # ...additional logger and handler configuration.\n```\n\nBackuppy supports plugins for back-up source and target locations, as well as notifications.\n\nTo configure a local path-based target:\n```yaml\ntype: path\nconfiguration:\n  # The local path to the target directory. If the path is relative, it will be resolved against the location of\n  # the configuration file.\n  path: ./target\n```\n\nTo configure a remote target over SSH:\n```yaml\ntype: ssh\nconfiguration:\n  # The host to connect to.\n  host: example.com\n  # The SSH port to use. Defaults to 22.\n  port: 22\n  # The name of the user on the remote system to log in as.\n  user: bart\n  # The absolute path to the target directory on the remote. \n  path: /home/bart/target\n```\nThe SSH key must have been accepted already, and the host must support Bash.\n\nTo specify multiple routes to the same target, such as one over a local network mount, and a fallback over SSH:\n```yaml\ntarget:\n  type: first_available\n  configuration:\n    targets:\n      - type: path\n        configuration:\n          path: ./target\n      - type: ssh\n        configuration:\n          host: example.com\n          user: bart \n          path: /home/bart/target\n```\n\nTo configure user-facing notifications:\n```yaml\n# An optional list of zero or more notification methods. Message types are:\n# - \"state\": unimportant, mass-generated, or debugging output which may be ignored.\n# - \"inform\": informative messages, such as those marking the start of an action.\n# - \"confirm\": confirmation messages, such as those marking the successful completion of an action.\n# - \"alert\": important messages that warrant someone's attention, such as in case of errors.\nnotifications: []\n```\n\nTo display notifications to stdout and stderr (terminal output):\n```yaml\nnotifications:\n  - type: stdio\n```\n\nTo display notifications using `notify-send`:\n```yaml\nnotifications:\n  - type: notify-send\n```\n\nTo process notifications through custom CLI commands:\n```yaml\nnotifications:\n  - type: command\n    # Commands are specified as CLI arguments. `fallback` is required if any of the others are missing.\n    configuration:\n      state:\n        - echo\n        - \"{message}\"\n      inform:\n        - echo\n        - \"{message}\"\n      confirm:\n        - echo\n        - \"{message}\"\n      alert:\n        - echo\n        - \"{message}\"\n      fallback:\n        - echo\n        - \"{message}\"\n```\n\nTo append notifications to files:\n```yaml\nnotifications:\n  - type: file\n    # Paths must be absolute. `fallback` is required if any of the others are missing.\n    configuration:\n      state:\n        - /var/log/backuppy\n      inform:\n        - /var/log/backuppy\n      confirm:\n        - /var/log/backuppy\n      alert:\n        - /var/log/backuppy\n      fallback:\n        - /var/log/backuppy\n```\n\n## Development\n\n### Requirements\n- The generic requirements documented earlier.\n- Bash (you're all good if `which bash` outputs a path in your terminal)\n\n### Installation\nRun `git clone https://github.com/bartfeenstra/backuppy.git`.\n\nIf you wish to contribute code changes, you may want to fork this project first, and clone your own forked repository\ninstead.\n\n### Building\nIn any Python environment, run `./bin/build-dev`.\n\nWith tox, run `tox --develop --notest`.\n\n### Testing\nIn any Python environment, run `./bin/test`.\n\nWith tox, run `tox --develop`\n\n### Viewing documentation\nIn any Python environment, run `./bin/build-docs`, and open `./docs-build/index.html`.\n\n### Fixing problems automatically\nIn any Python environment, run `./bin/fix`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartfeenstra%2Fbackuppy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbartfeenstra%2Fbackuppy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbartfeenstra%2Fbackuppy/lists"}