# GRSync: Persist create build out environments
[![PyPI][pypi-badge]][pypi-link]
[![Python 3.10][python310-badge]][python310-link]
[![Python 3.11][python311-badge]][python311-link]
[![Build Status][build-badge]][build-link]
This program captures your home directory and synchronize it with another host
using Git repo metadata, symbolic links and persisted files.
I wrote this because I couldn't find anything that creates repositories with
the idea of having a portable and easy to recreate your home directory on
another host. If I've reinvented the wheel, please let me know :)
More specifically: it persists and creates build out environments in a nascent
account. The program *memorizing* a users home directory and building it out
on another system (see [overview](#overview)). This is done by:
1. Copying files, directories and git repos configuration.
2. Creating a distribution compressed file.
3. Uncompress on the destination system and create repos.
A future release will also synchronize and manage multiple GitHub repositories.
A [utility script] also provided to do operations on all configured local git
repositories.
## Documentation
See the [full documentation](https://plandes.github.io/grsync/index.html). The
[API reference](https://plandes.github.io/grsync/api.html) is also available.
## Obtaining
The easist way to install the command line program is via the `pip` installer:
```bash
pip install zensols.grsync
```
Binaries are also available on [pypi].
## Overview
Not only is the aim to create a repproducable development (or like)
environment, it is also to create a *clean* environment. This means we have
temporary directories we might expect to exist for our process(es), and of
course repositories cloned in their nascent state. These steps are summarized
below:
1. **Freeze**: This process captures the current host's setup and
configuration (specified in the [configuration file]) and includes:
* Empty directories.
* Git repository meta data.
* Locations of files to copy, top level directories of files to recursively
copy, where symlinks are considered files as well and currently not
followed. See [caveat](#symbolic-links).
A sub-step of this process is *discover*, which reads the file system as
indicated by the configuration file. This includes reading git repostiory
metadata, identifying file metadata (i.e. permissions) etc.
1. **Bootstraping**: create an Python virtual environment on the target machine
that can be loaded with this program and depenedencies. This is not a
necessary step as the program is available as a [pip] install. However, if
this step can be used to help automate new environments, after which, you
could futher add/install software with tools such as [Puppet].
3. **Thaw**: This includes two steps:
1. **File Extraction**: extracts the files from the distribution zip created
in the *freeze* step.
2. **Repo Cloning**: this step recursively clones all repositories.
## Usage
The program has two phases: *freeze* and *thaw* (see [overview](#overview)).
The command line program is used twice: first on the *freeze* on the source
system and then *thaw* on the target machine.
See [usage](https://plandes.github.io/grsync/doc/usage.html) for more information.
## Configuration
The configuration is used the *freeze* phase to create the distribution file.
This fil contains all git repositories, files, empty directory paths on the
current file system that is stored to be *thawed* on the target system.
See [configuration](doc/configuration.md) for detailed documentation on
configuration [test case yaml file](test-resources/midsize-test.yml) for an
example of a simple configuration file to capture a set of git repositories and
small set of files. The freeze/thaw/move test case uses [this configuration
file](test-resources/fs-test.yml), which is more comprehensive and up to date.
## Symbolic Links
As mentioned in the [usage](#usage) section, symbolic links pointing to any
file in a repository are *froozen*, which means that integrity at thaw time is
ensured. However, links **not** pointing to a repository are persisted, but
the files and directories they point to are not.
A future release might have a *follow symbolic links* type functionality that
allows this. However, for now, you must include both the link and the data it
points to get this integrity.
## Changelog
An extensive changelog is available [here](CHANGELOG.md).
## Community
Please star this repository and let me know how and where you use this API.
Contributions as pull requests, feedback and any input is welcome.
## License
[MIT License](LICENSE.md)
Copyright (c) 2020 - 2023 Paul Landes
<!-- links -->
[pypi]: https://pypi.org/project/zensols.grsync/
[pypi-link]: https://pypi.python.org/pypi/zensols.grsync
[pypi-badge]: https://img.shields.io/pypi/v/zensols.grsync.svg
[python310-badge]: https://img.shields.io/badge/python-3.10-blue.svg
[python310-link]: https://www.python.org/downloads/release/python-3100
[python311-badge]: https://img.shields.io/badge/python-3.11-blue.svg
[python311-link]: https://www.python.org/downloads/release/python-3110
[build-badge]: https://github.com/plandes/grsync/workflows/CI/badge.svg
[build-link]: https://github.com/plandes/grsync/actions
[Python 3.9]: https://www.python.org
[PyYAML]: https://pyyaml.org
[test configuration]: test-resources/grsync-test.yml
[maven profiles]: https://maven.apache.org/guides/introduction/introduction-to-profiles.html
[configuration file]: test-resources/midsize-test.yml#L29
[configuration file profile entry]: test-resources/midsize-test.yml#L29
[pip]: https://docs.python.org/3/installing/index.html
[Puppet]: https://en.wikipedia.org/wiki/Puppet_(software)
[utility script]: https://plandes.github.io/grsync/doc/usage.html#utility-git-script
Raw data
{
"_id": null,
"home_page": "https://github.com/plandes/grsync",
"name": "zensols.grsync",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "tooling,configuration",
"author": "Paul Landes",
"author_email": "landes@mailc.net",
"download_url": "https://github.com/plandes/grsync/releases/download/v0.4.1/zensols.grsync-0.4.1-py3-none-any.whl",
"platform": null,
"description": "# GRSync: Persist create build out environments\n\n[![PyPI][pypi-badge]][pypi-link]\n[![Python 3.10][python310-badge]][python310-link]\n[![Python 3.11][python311-badge]][python311-link]\n[![Build Status][build-badge]][build-link]\n\nThis program captures your home directory and synchronize it with another host\nusing Git repo metadata, symbolic links and persisted files.\n\nI wrote this because I couldn't find anything that creates repositories with\nthe idea of having a portable and easy to recreate your home directory on\nanother host. If I've reinvented the wheel, please let me know :)\n\nMore specifically: it persists and creates build out environments in a nascent\naccount. The program *memorizing* a users home directory and building it out\non another system (see [overview](#overview)). This is done by:\n1. Copying files, directories and git repos configuration.\n2. Creating a distribution compressed file.\n3. Uncompress on the destination system and create repos.\n\nA future release will also synchronize and manage multiple GitHub repositories.\n\nA [utility script] also provided to do operations on all configured local git\nrepositories.\n\n\n## Documentation\n\nSee the [full documentation](https://plandes.github.io/grsync/index.html). The\n[API reference](https://plandes.github.io/grsync/api.html) is also available.\n\n\n## Obtaining\n\nThe easist way to install the command line program is via the `pip` installer:\n```bash\npip install zensols.grsync\n```\n\nBinaries are also available on [pypi].\n\n## Overview\n\nNot only is the aim to create a repproducable development (or like)\nenvironment, it is also to create a *clean* environment. This means we have\ntemporary directories we might expect to exist for our process(es), and of\ncourse repositories cloned in their nascent state. These steps are summarized\nbelow:\n\n1. **Freeze**: This process captures the current host's setup and\nconfiguration (specified in the [configuration file]) and includes:\n* Empty directories.\n* Git repository meta data.\n* Locations of files to copy, top level directories of files to recursively\ncopy, where symlinks are considered files as well and currently not\nfollowed. See [caveat](#symbolic-links).\n\nA sub-step of this process is *discover*, which reads the file system as\nindicated by the configuration file. This includes reading git repostiory\nmetadata, identifying file metadata (i.e. permissions) etc.\n1. **Bootstraping**: create an Python virtual environment on the target machine\nthat can be loaded with this program and depenedencies. This is not a\nnecessary step as the program is available as a [pip] install. However, if\nthis step can be used to help automate new environments, after which, you\ncould futher add/install software with tools such as [Puppet].\n3. **Thaw**: This includes two steps:\n1. **File Extraction**: extracts the files from the distribution zip created\nin the *freeze* step.\n2. **Repo Cloning**: this step recursively clones all repositories.\n\n\n## Usage\n\nThe program has two phases: *freeze* and *thaw* (see [overview](#overview)).\nThe command line program is used twice: first on the *freeze* on the source\nsystem and then *thaw* on the target machine.\n\nSee [usage](https://plandes.github.io/grsync/doc/usage.html) for more information.\n\n\n## Configuration\n\nThe configuration is used the *freeze* phase to create the distribution file.\nThis fil contains all git repositories, files, empty directory paths on the\ncurrent file system that is stored to be *thawed* on the target system.\n\nSee [configuration](doc/configuration.md) for detailed documentation on\nconfiguration [test case yaml file](test-resources/midsize-test.yml) for an\nexample of a simple configuration file to capture a set of git repositories and\nsmall set of files. The freeze/thaw/move test case uses [this configuration\nfile](test-resources/fs-test.yml), which is more comprehensive and up to date.\n\n\n## Symbolic Links\n\nAs mentioned in the [usage](#usage) section, symbolic links pointing to any\nfile in a repository are *froozen*, which means that integrity at thaw time is\nensured. However, links **not** pointing to a repository are persisted, but\nthe files and directories they point to are not.\n\nA future release might have a *follow symbolic links* type functionality that\nallows this. However, for now, you must include both the link and the data it\npoints to get this integrity.\n\n\n## Changelog\n\nAn extensive changelog is available [here](CHANGELOG.md).\n\n\n## Community\n\nPlease star this repository and let me know how and where you use this API.\nContributions as pull requests, feedback and any input is welcome.\n\n\n## License\n\n[MIT License](LICENSE.md)\n\nCopyright (c) 2020 - 2023 Paul Landes\n\n\n<!-- links -->\n[pypi]: https://pypi.org/project/zensols.grsync/\n[pypi-link]: https://pypi.python.org/pypi/zensols.grsync\n[pypi-badge]: https://img.shields.io/pypi/v/zensols.grsync.svg\n[python310-badge]: https://img.shields.io/badge/python-3.10-blue.svg\n[python310-link]: https://www.python.org/downloads/release/python-3100\n[python311-badge]: https://img.shields.io/badge/python-3.11-blue.svg\n[python311-link]: https://www.python.org/downloads/release/python-3110\n[build-badge]: https://github.com/plandes/grsync/workflows/CI/badge.svg\n[build-link]: https://github.com/plandes/grsync/actions\n\n[Python 3.9]: https://www.python.org\n[PyYAML]: https://pyyaml.org\n[test configuration]: test-resources/grsync-test.yml\n\n[maven profiles]: https://maven.apache.org/guides/introduction/introduction-to-profiles.html\n[configuration file]: test-resources/midsize-test.yml#L29\n[configuration file profile entry]: test-resources/midsize-test.yml#L29\n[pip]: https://docs.python.org/3/installing/index.html\n[Puppet]: https://en.wikipedia.org/wiki/Puppet_(software)\n[utility script]: https://plandes.github.io/grsync/doc/usage.html#utility-git-script\n",
"bugtrack_url": null,
"license": "",
"summary": "Synchronize and manage multiple GitHub repositories",
"version": "0.4.1",
"project_urls": {
"Download": "https://github.com/plandes/grsync/releases/download/v0.4.1/zensols.grsync-0.4.1-py3-none-any.whl",
"Homepage": "https://github.com/plandes/grsync"
},
"split_keywords": [
"tooling",
"configuration"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "01201afc426c0d9a2e2e551301795d3eb30234362a9bea25b62c7ea294761108",
"md5": "b27d1ea70435479d3d3d875a8a26b54e",
"sha256": "81e3bb7ab8318901bfe3f8ea47f3d37872def698e6e8bd1a42bf7209b2f9745e"
},
"downloads": -1,
"filename": "zensols.grsync-0.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b27d1ea70435479d3d3d875a8a26b54e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 26025,
"upload_time": "2024-03-10T12:49:33",
"upload_time_iso_8601": "2024-03-10T12:49:33.085221Z",
"url": "https://files.pythonhosted.org/packages/01/20/1afc426c0d9a2e2e551301795d3eb30234362a9bea25b62c7ea294761108/zensols.grsync-0.4.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-10 12:49:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "plandes",
"github_project": "grsync",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "zensols.grsync"
}