mirror of
https://github.com/serokell/deploy-rs.git
synced 2024-09-17 13:37:39 +03:00
Minor flake and documentation fixes
This commit is contained in:
parent
518f7f5b4f
commit
219d55e99e
22
README.md
22
README.md
@ -14,12 +14,12 @@ A Simple, multi-profile Nix-flake deploy tool.
|
||||
|
||||
Basic usage: `deploy [options] <flake>`.
|
||||
|
||||
The given flake can be just a source `my-flake`, specify the node to deploy `my-flake#my-node`, or specify a profile too `my-flake#my-node.my-profile`.
|
||||
The given flake can be just a source `my-flake`, or optionally specify the node to deploy `my-flake#my-node`, or specify a profile too `my-flake#my-node.my-profile`.
|
||||
|
||||
You can try out this tool easily with `nix run`:
|
||||
- `nix run github:serokell/deploy-rs your-flake`
|
||||
|
||||
If your require a signing key to push closures to your server, specify the path to it in the `LOCAL_KEY` environment variable.
|
||||
If you require a signing key to push closures to your server, specify the path to it in the `LOCAL_KEY` environment variable.
|
||||
|
||||
Check out `deploy --help` for CLI flags! Remember to check there before making one-time changes to things like hostnames.
|
||||
|
||||
@ -27,18 +27,18 @@ Check out `deploy --help` for CLI flags! Remember to check there before making o
|
||||
|
||||
### Profile
|
||||
|
||||
This is the core of how `deploy-rs` was designed, any number of these can run on a node, as any user (see further down for specifying user information). If you want to mimick the behaviour of traditional tools like NixOps or Morph, try just defining one `profile` called `system`, as root, containing a nixosSystem.
|
||||
This is the core of how `deploy-rs` was designed, any number of these can run on a node, as any user (see further down for specifying user information). If you want to mimick the behaviour of traditional tools like NixOps or Morph, try just defining one `profile` called `system`, as root, containing a nixosSystem, and you can even similarly use [home-manager](https://github.com/nix-community/home-manager) on any non-privileged user.
|
||||
|
||||
```nix
|
||||
{
|
||||
# ...generic options... (see below)
|
||||
|
||||
# The command to bootstrap your profile, this is optional
|
||||
bootstrap = "mkdir xyz";
|
||||
|
||||
# A derivation containing your required software, and a script to activate it in `${path}/activate`
|
||||
# For ease of use, `deploy-rs` provides a function to easy all this required activation script to any derivation
|
||||
path = deploy-rs.lib.x86_64-linux.setActivate pkgs.hello "./bin/hello";
|
||||
|
||||
# ...generic options... (see lower section)
|
||||
}
|
||||
```
|
||||
|
||||
@ -48,8 +48,6 @@ This defines a single node/server, and the profiles you intend it to run.
|
||||
|
||||
```nix
|
||||
{
|
||||
# ...generic options... (see below)
|
||||
|
||||
# The hostname of your server, don't worry, this can be overridden at runtime if needed
|
||||
hostname = "my.server.gov";
|
||||
|
||||
@ -60,6 +58,8 @@ This defines a single node/server, and the profiles you intend it to run.
|
||||
system = {}; # Definition shown above
|
||||
something = {}; # Definition shown above
|
||||
};
|
||||
|
||||
# ...generic options... (see lower section)
|
||||
}
|
||||
```
|
||||
|
||||
@ -69,16 +69,16 @@ This is the top level attribute containing all of the options for this tool
|
||||
|
||||
```nix
|
||||
{
|
||||
# ...generic options... (see below)
|
||||
|
||||
nodes = {
|
||||
my-node = {}; # Definition shown above
|
||||
another-node = {}; # Definition shown above
|
||||
};
|
||||
|
||||
# ...generic options... (see lower section)
|
||||
}
|
||||
```
|
||||
|
||||
#### Generic options
|
||||
### Generic options
|
||||
|
||||
This is a set of options that can be put in any of the above definitions, with the priority being `profile > node > deploy`
|
||||
|
||||
@ -96,7 +96,7 @@ A stronger definition of the schema is in the [interface directory](./interface)
|
||||
|
||||
## Idea
|
||||
|
||||
`deploy-rs` is a simple Rust program that will take a Nix flake and use it to deploy any of your defined profiles to your nodes. This is _strongly_ based off of [serokell/deploy](https://github.com/serokell/deploy), with the intention of eventually replacing it.
|
||||
`deploy-rs` is a simple Rust program that will take a Nix flake and use it to deploy any of your defined profiles to your nodes. This is _strongly_ based off of [serokell/deploy](https://github.com/serokell/deploy), designed to replace it and expand upon it.
|
||||
|
||||
This type of design (as opposed to more traditional tools like NixOps or morph) allows for lesser-privileged deployments, and the ability to update different things independently of eachother.
|
||||
|
||||
|
13
default.nix
Normal file
13
default.nix
Normal file
@ -0,0 +1,13 @@
|
||||
(import
|
||||
(
|
||||
let
|
||||
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
|
||||
in
|
||||
fetchTarball {
|
||||
url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
|
||||
sha256 = lock.nodes.flake-compat.locked.narHash;
|
||||
}
|
||||
)
|
||||
{
|
||||
src = ./.;
|
||||
}).defaultNix
|
37
flake.lock
37
flake.lock
@ -1,8 +1,26 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1600853454,
|
||||
"narHash": "sha256-EgsgbcJNZ9AQLVhjhfiegGjLbO+StBY9hfKsCwc8Hw8=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "94cf59784c73ecec461eaa291918eff0bfb538ac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"naersk": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1597138680,
|
||||
@ -20,20 +38,6 @@
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1601091160,
|
||||
"narHash": "sha256-26UI9LGjRO8Sv253zJZkoapP260QkJPQ2+vRyC1i+kI=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2768436826543af2b1540e4fe6b5afa15850e155",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1600387253,
|
||||
"narHash": "sha256-WtdpHuiunPF9QMlcXrWJkESuIjSSjP9WMOKvYQS/D7M=",
|
||||
@ -51,8 +55,9 @@
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"naersk": "naersk",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"utils": "utils"
|
||||
}
|
||||
},
|
||||
|
50
flake.nix
50
flake.nix
@ -3,43 +3,53 @@
|
||||
# SPDX-License-Identifier: MPL-2.0
|
||||
|
||||
{
|
||||
description = "A Simple multi-profile Nix-flake deploy tool.";
|
||||
|
||||
inputs = {
|
||||
naersk.url = "github:nmattia/naersk/master";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
naersk = {
|
||||
url = "github:nmattia/naersk/master";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
utils.url = "github:numtide/flake-utils";
|
||||
flake-compat = {
|
||||
url = "github:edolstra/flake-compat";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, utils, naersk }:
|
||||
outputs = { self, nixpkgs, utils, naersk, ... }:
|
||||
utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
naersk-lib = pkgs.callPackage naersk { };
|
||||
setActivate = base: activate: pkgs.symlinkJoin {
|
||||
name = ("activatable-" + base.name);
|
||||
paths = [
|
||||
base
|
||||
(pkgs.writeTextFile {
|
||||
name = base.name + "-activate-path";
|
||||
text = ''
|
||||
#!${pkgs.runtimeShell}
|
||||
${activate}
|
||||
'';
|
||||
executable = true;
|
||||
destination = "/activate";
|
||||
})
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
defaultPackage = naersk-lib.buildPackage ./.;
|
||||
defaultPackage = self.packages."${system}".deploy-rs;
|
||||
packages.deploy-rs = naersk-lib.buildPackage ./.;
|
||||
|
||||
defaultApp = {
|
||||
defaultApp = self.apps."${system}".deploy-rs;
|
||||
apps.deploy-rs = {
|
||||
type = "app";
|
||||
program = "${self.defaultPackage."${system}"}/bin/deploy";
|
||||
};
|
||||
|
||||
lib = {
|
||||
inherit setActivate;
|
||||
setActivate = base: activate: pkgs.symlinkJoin {
|
||||
name = ("activatable-" + base.name);
|
||||
paths = [
|
||||
base
|
||||
(pkgs.writeTextFile {
|
||||
name = base.name + "-activate-path";
|
||||
text = ''
|
||||
#!${pkgs.runtimeShell}
|
||||
${activate}
|
||||
'';
|
||||
executable = true;
|
||||
destination = "/activate";
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
checkSchema = deploy: pkgs.runCommandNoCC "jsonschema-deploy-system" { }
|
||||
"${pkgs.python3.pkgs.jsonschema}/bin/jsonschema -i ${pkgs.writeText "deploy.json" (builtins.toJSON deploy)} ${./interface/deploy.json} && touch $out";
|
||||
|
Loading…
Reference in New Issue
Block a user