acid(1)
=======
:doctype: manpage
:manmanual: acid Manual
:mansource: acid {release-version}

Name
----
acid - A Continuous Integration Daemon

Synopsis
--------
*acid* [_OPTION_]... acid.yaml [_COMMAND_...]

Description
-----------
*acid* run without command arguments will start an HTTP server that creates
and executes tasks against *git*(1) commits from a particular Gitea instance,
in accordance with the passed configuration file.

When a command is passed, *acid* will relay it to that running instance
of itself as an RPC call.

Tasks can be triggered to run either upon receiving Gitea push events
on the */push* endpoint, and/or using the RPC commands.

Options
-------
*-version*::
	Output version information and exit.

Commands
--------
*enqueue* _OWNER_ _REPO_ _REF_ [_RUNNER_]...::
	Create new or restart existing tasks for the given reference,
	which will be resolved to a full commit hash.
*restart* [_ID_]...::
	Schedule tasks with the given IDs to be rerun.
	Run this command without arguments to pick up external database changes.
*reload*::
	Reload configuration.

Configuration
-------------
For help with creating the configuration file, consult the _acid.yaml.example_
file present in the distribution.

All paths are currently relative to the directory you launch *acid* from.

The *notify*, *setup*, *build*, and *deploy* scripts are processed using Go's
_text/template_ package, and take an object describing the task,
which has the following fields:

*ID*::
	Unique integer ID for each task.

*Owner*::
	Gitea user owning the repository.
*Repo*::
	Name of the repository.
*FullName*::
	Full name of the repository, including the owner.
*Hash*::
	Commit hash pertaining to the task.
*Runner*::
	Runner ID.
*RunnerName*::
	Descriptive name of the runner.

// Intentionally not documenting CreatedUnix, ChangedUnix, DurationSeconds,
// which can be derived from the objects.
*Created*, *Changed*::
	`*time.Time` of task creation and last task state change respectively,
	or nil if not known.
*CreatedAgo*, *ChangedAgo*::
	Abbreviated human-friendly relative elapsed time duration
	since *Created* and *Changed* respectively.
*Duration*::
	`*time.Duration` of the last run in seconds, or nil if not known.

*URL*::
	*acid* link to the task, where its log output can be seen.
*RepoURL*::
	Gitea link to the repository.
*CommitURL*::
	Gitea link to the commit.
*CloneURL*::
	Gitea link for cloning the repository over HTTP.

The special *quote* template function quotes fields for safe usage
in *sh*(1) command arguments.

Runners
-------
Runners and deploy scripts receive the following additional
environment variables:

*ACID_ROOT*::   The same as the base directory for configuration.
*ACID_RUNNER*:: The same as *Runner* in script templates.

Reporting bugs
--------------
Use https://git.janouch.name/p/acid to report bugs, request features,
or submit pull requests.

See also
--------
*git*(1), *sh*(1)
