zensols.grsync


Namezensols.grsync JSON
Version 0.4.1 PyPI version JSON
download
home_pagehttps://github.com/plandes/grsync
SummarySynchronize and manage multiple GitHub repositories
upload_time2024-03-10 12:49:33
maintainer
docs_urlNone
authorPaul Landes
requires_python
license
keywords tooling configuration
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 0.26564s