aboutsummaryrefslogtreecommitdiffstats
path: root/builds.sr.ht/deploy.md
blob: a6990db94f6a5209661b3748955f1ce0ca21c3b4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
---
title: Internal deployment documentation
---

This is internal documentation for deploying builds.sr.ht updates to the
SourceHut hosted services.

## Updating images

When a patch for an image comes in, ensure that it meets all of the criteria set
out in [image maintenance][0] before applying. Every step is essential to ensure
that there is no downtime for any image while upgrading -- review the patch
carefully.

[0]: https://man.sr.ht/builds.sr.ht/image-maintenance.md

The deployment process for new images is the following:

1. Apply and push the changes to the upstream repository
1. Manually submit builds to build and deploy the new images
1. Tag a new release and push it to the Alpine repos
1. Log into the build workers and run `apk upgrade -U`. At this point the new
   image scripts are available and builds can be run against the new images.
1. Run sanity test builds against the new images to verify them
1. Apply patches for compatibility.md in sr.ht-docs

When deprecating images, identify users who have submitted builds using the
affected image in the past 90 days with a SQL query similar to the following:

```
SELECT
  DISTINCT "user".email,
  job.created
FROM job
JOIN "user" ON "user".id = job.owner_id
WHERE image = 'ubuntu/kinetic' AND job.created >= '2023-06-01'
ORDER BY job.created DESC;
```

Send an email to each affected user with two weeks notice before deploying an
image deprecation. The compatibility.md matrix should be updated right away to
remove the affected image, to avoid new users appearing during the notice
period.

## crontab & submit_image_build

These are not updated automatically during deployments, when changed you need to
deploy them manually. submit\_image\_build is stored in /usr/local/bin and the
crontab runs on sircmpwn's account.