https://github.com/edudobay/laika
Manage deployments from Git repositories with this command-line tool
https://github.com/edudobay/laika
deployment-automation devops
Last synced: 9 months ago
JSON representation
Manage deployments from Git repositories with this command-line tool
- Host: GitHub
- URL: https://github.com/edudobay/laika
- Owner: edudobay
- License: gpl-3.0
- Created: 2019-04-18T16:09:45.000Z (almost 7 years ago)
- Default Branch: main
- Last Pushed: 2021-07-15T14:27:15.000Z (over 4 years ago)
- Last Synced: 2024-10-28T12:11:33.018Z (over 1 year ago)
- Topics: deployment-automation, devops
- Language: Python
- Homepage:
- Size: 103 KB
- Stars: 4
- Watchers: 3
- Forks: 0
- Open Issues: 17
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Laika πΆ
A command-line utility for easy and reliable management of manual deployments from Git repositories.
Even manual deployments can be made reliable if some minimal automation is applied. This utility performs _atomic_ deployments from a Git repository, with an optional _build_ phase (e.g. installing dependencies). The previous deployment is not affected until the build completes successfully β no more inconsistency errors when you update your Git branch but your application is not yet fully updated β e.g. missing new dependencies from your package manager.
Each deployment is built in a new directory made just for that deployment. Previous deployments are kept (and can be later purged), and the target is only updated when the build completes β thatβs what we meant by _atomic_! If the build fails, the target will not be updated.
The meaning of _build_ is defined by the user; it can be any command runnable from a shell. Configuration is made in a simple `.ini` file.
## Installation
Requirements:
* Python β₯ 3.6 (has been tested with 3.6 and 3.7)
* Git β₯ 2.7 (depends on the `git worktree` feature)
Install via **pip**:
```
$ pip install laika-deploy
```
If this fails and you have no idea what to do, you can try adding the `--user` option after `pip install`, though other options can be better in the long run β e.g. you can use [pipx][], or simply create a **virtualenv** for your installed scripts.
## Usage
After [installing this utility](#installation), you can run `laika --help` for basic usage instructions.
The easiest way is to run `laika deploy `. But before first usage you must create a `deploy.ini` file with at least the settings below (look further for an example):
* `dirs.deploy`: directory where your application will be deployed. The current deployment will be available at `current` under this directory. This will be a symlink to the actual deployment directory.
So, for example, if you have a PHP application, you can point Nginx to the `/app/deployments/current` directory which will contain a working tree of your Git repository and will be updated whenever you deploy a new version, provided you add this to your `deploy.ini`:
```ini
[dirs]
deploy = /app/deployments
```
Each deployment will also live in this directory with a name containing the date/time of the deployment, the Git commit hash and the name of the branch/tag that was deployed.
* `build.run`: which command to run in the _build_ phase. Typical usages are running your package manager, copying configuration files, compiling assets.
This is run as a shell command line β so you can chain commands as in `npm install && npm run build`.
A complete configuration file would thus be:
```ini
[dirs]
deploy = /app/deployments
[build]
run = npm install && npm run build
```
**It is assumed that the build will be run in the same host where the application is to be deployed.** Also, the user running this script must have **permission to write on the deployment directory**.
### Purging old deployments
You can purge old deployments with `laika purge`. There are two ways to specify what exactly is to be removed:
* `--keep-latest N`: keep only the latest _N_ deployments (other than the current one). With _N=0_, only the current deployment is kept, and with _N=1_ only one deployment other than the current is kept.
* `--older-than DATETIME`: discard deployments with a timestamp strictly older than the given date/time. A wide range of both absolute and relative formats is accepted; see the [dateparser documentation](https://dateparser.readthedocs.io/en/latest/) for full information. Common cases may be written as `10d`, `1w` (10 days and 1 week, respectively).
## Development setup
If you want to set this project up for development, see [CONTRIBUTING.md](./CONTRIBUTING.md).
[pipx]: https://github.com/pipxproject/pipx/