grim/convey

Port from logrus to log/slog
default tip
5 months ago, Elliott Sales de Andrade
c588f9b3f559
Port from logrus to log/slog

This doesn't really take much advantage of structured logging beyond what is already done (`id` and `idColor`), and consequently the log handler does not try to do any handling of anything more than that (i.e., grouping, or arbitrary attributes beyond those defined).

One should maybe have a `Context` available to pass in, but there isn't one, and anyway, the log handler doesn't use it, so I've passed in a `TODO` instead.

Everything else is just normal import/rename changes.

Testing Done:
Ran `go run . run`

Reviewed at https://reviews.imfreedom.org/r/2871/
# Examples
This section contains a number of examples.
## Traditional Build
This example shows your traditional clone, test, build, deploy, and report for
a project.
```yaml
tasks:
clone-source:
type: podman/run
image: docker.io/rwgrim/docker-noop
run-linter:
type: podman/run
image: docker.io/rwgrim/docker-noop
run-tests:
type: podman/run
image: docker.io/rwgrim/docker-noop
build:
type: podman/run
image: docker.io/rwgrim/docker-noop
deploy-dev:
type: podman/run
image: docker.io/rwgrim/docker-noop
deploy-docs:
type: podman/run
image: docker.io/rwgrim/docker-noop
report-build-status:
type: podman/run
image: docker.io/rwgrim/docker-noop
plans:
default:
stages:
- name: prepare
tasks:
- clone-source
- name: testing
tasks:
- run-linter
- run-tests
- name: build
tasks:
- build
- name: deploy
tasks:
- deploy-dev
- deploy-docs
concurrent: true
- name: report
tasks:
- report-build-status
run: always
```
## Metaplans
You can use metaplans to group separate plans into a single plan.
```yaml
default-plan: everything
tasks:
one:
type: podman/run
image: docker.io/alpine:edge
command: echo one
two:
type: podman/run
image: docker.io/alpine:edge
command: echo two
plans:
plan1:
stages:
- tasks:
- one
plan2:
stages:
- tasks:
- two
meta-plans:
default:
plans:
- plan1
- plan2
```
## Login/Logout
This example logs into the registry at the start of the plan and regardless
of the result of the plan will always logout before exiting. It also will look
for the `REGISTRY_USERNAME` and `REGISTRY_PASSWORD` on the host to keep them
out of `convey.yml`.
```yaml
environment:
- REGISTRY_HOSTNAME=registry.example.com
- REGISTRY_USERNAME
- REGISTRY_PASSWORD
tasks:
login:
type: registry/login
server: ${REGISTRY_HOSTNAME}
username: ${REGISTRY_USERNAME}
password: ${REGISTRY_PASSWORD}
logout:
type: registry/logout
server: ${REGISTRY_HOSTNAME}
plans:
default:
stages:
- tasks:
- login
- tasks:
- logout
run: always
```