# jx

# Purpose

These tools work with YAML descriptions of resources (E.g. files, users, containers, etc) for (de)serializing the state of the given resource.  This enables more generically describing the state of a supported resource type, pipeling state transformations and enabling the use of other tools in that process.

# Dependencies

* Go >= 1.21.1

# Testing

Testing the current version involves checking out main and building.

```
git clone https://gitea.rosskeen.house/doublejynx/jx.git

make test

make build
```

# Command-line

# Update Resource state

`jx apply decl-runner.yaml`

Create the resources specified in a resource document HTTP endpoint.

`jx apply http://localhost/resources`


# Read resource state

Read the state of an existing resource (URI) and generate a YAML representation of it.

`jx import -resource file://COPYRIGHT`

![Import Resource](md-images/import-resource.gif)

Import the contents of a tar archive into a resource document.

`jx import ./test.tgz`

Read a resource document from an http endpoint.

`jx import http://localhost/resources`

# Diff resource documents

![Diff Resources](md-images/jx-diff.gif)

# Examples

Resources:

* [file](examples/file.yaml) [schema](internal/resource/schemas/file.jsonschema)
* [http](examples/http.yaml) [schema](internal/resource/schemas/http.jsonschema)
* [user](examples/user.yaml) [schema](internal/resource/schemas/user.jsonschema)
* [package](examples/package.yaml) [schema](internal/resource/schemas/package.jsonschema)
* [container](examples/container.yaml) [schema](internal/resource/schemas/container.jsonschema)
* [network_route](examples/network_route.yaml) [schema](internal/resource/schemas/network_route.jsonschema)
