builds.sr.ht is a service on sr.ht that allows you to submit "build manifests" for us to work on. We spin up a virtual machine per your specifications and run your scripts in it. This is generally used to compile and test patches, deploy websites, build and publish packages, and so on.

See also:

How jobs are submitted

Unlike some other build systems, builds.sr.ht does not let you configure builds on the website itself. Instead, you write build manifests - YAML files that tell builds.sr.ht what to do. You can then submit these manifests via the API and we'll assign a runner and execute your job.

For convenience, there are ways of submitting builds automatically throughout the sr.ht ecosystem - for example by pushing to repositories on git.sr.ht. These integrations are discussed below. For details on submitting jobs via the API, see the API reference.

Build manifests

Build manifests are YAML files that contain a description of your build environment and steps to run in that environment. A very simple example could be:

image: alpine/edge
tasks:
- say-hello: |
   echo hello
- say-world: |
   echo world

When you submit this build, we'll fire up a virtual machine running an up-to-date image of Alpine Linux. Then, we'll copy your scripts into the machine and run them one at a time. More complex build jobs will probably use more features of the build.yml - here's an example that deploys web.synapse-bt.org:

image: archlinux
packages:
  - nodejs
  - npm
  - rsync
sources:
  - https://git.sr.ht/~sircmpwn/receptor
environment:
  deploy: synapse@synapse-bt.org
secrets:
  - 7ebab768-e5e4-4c9d-ba57-ec41a72c5665
tasks:
  - setup: |
      cd receptor
      npm install
  - build: |
      cd receptor
      npm run build:production
  - deploy: |
      cd receptor
      sshopts="ssh -o StrictHostKeyChecking=no"
      rsync --rsh="$sshopts" -rP index.html $deploy:/var/www/web.synapse-bt.org/
      rsync --rsh="$sshopts" -rP dist $deploy:/var/www/web.synapse-bt.org/

A full reference for build manifests is available.

Build images

Presently, the following build images are available:

  • alpine/edge
  • archlinux
  • debian/buster
  • debian/jessie
  • debian/sid
  • debian/stretch
  • freebsd

Additional images are easy to add so long as the guest OS supports SSH and POSIX shell, please email me if you'd like something added that you don't see here.

Secrets

builds.sr.ht can keep track of secrets for you, like SSH keys or PGP keys, and include them in builds for the purpose of deployment. You can manage your secrets at the secrets dashboard. Each secret will only be included in the runtime image if the job was submitted using an OAuth key which has access to the secrets specified in the build manifest.

Build environment

Each task's script is given a preamble that looks like this:

#!/usr/bin/env bash
. ~/.buildenv
set -x
set -e

The actual shell varies depending on your build image. ~/.buildenv contains the environment variables you specified in your manifest, but feel free to modify it to communicate state between build steps.

Integrations

Do you have something that integrates with builds.sr.ht? Submit a patch for this page!

dispatch.sr.ht

dispatch.sr.ht offers a variety of integrations with builds.sr.ht, including support for connecting builds.sr.ht to external services like GitHub. This should be your first stop when looking for an integration.

git.sr.ht

git.sr.ht will automatically submit builds for you if you store a manifest in the repository as .build.yml. Each time you push, a build with this manifest will be submitted. If the repo you pushed to is present in the manifest's sources array, we'll edit it to point to the ref you just pushed. You can also submit several builds on each push by providing .builds/*.yml.

Table of Contents

This commit

commit 118d9ed010807a82b1f4a1f772040971132568cc
Author: Euan Torano <euan@torano.co.uk>
Date:   2018-12-05T01:41:06

Spelling and structural changes for Git documentation.

Fixed some minor spelling mistakes in the index of the Git documentation, and fixed what appears to be an incorrect heading level.
Clone this wiki
man@man.sr.ht:root
https://man.sr.ht/root