summaryrefslogtreecommitdiff
path: root/documentation/release.md
blob: 7629c4716b8d76cc32e8d0c6bfd1903059e296a6 (plain)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Release process for the Guix-Science channel #

## Introduction

A "release of the Guix-Science channel" is a Guix-Science commit
associated to a Guix revision against which the channel is guaranteed
to build.

A "release of the Guix-Science channel" is done by:
  * tagging a specific commit of the repository, the tag name being
    formatted as `vYYYYMMDD`, with a tag annotation described in the
    next section,
  * generating the corresponding `channels-YYYYMMD.scm` file with
    pinned revisions for both the Guix and the Guix-Science channels,
    using the commits above,
  * providing the `channels-YYYYMMDD.scm` file in the Releases space
    of the Codeberg repository.

## Tag message format

The tag message should embed the full `channels.scm` file content,
which would include some metadata in the form of Scheme comments at
the beginning of the message:
  * first line should contain the Guix-Science release,
  * second line should contain a blank line,
  * third line should contain the Guix revision,
  * the rest of the message should contain the corresponding list of
    channels as a Guile object.

Below is an example for the message that would be included in tag
`v20260304` for a Guix-Science release at revision
`8c2f79e97cff0003a0fcbab2e3bc4267d48c116c` against Guix revision
`259643c993c6bba89a66da3b84329dd2e1dc439d`:

```scheme
;; Guix-Science release v20260304
;;
;; Guix revision: 259643c993c6bba89a66da3b84329dd2e1dc439d
(list (channel
        (name 'guix-science)
        (url "https://codeberg.org/guix-science/guix-science.git")
        (branch "master")
        (commit
          "8c2f79e97cff0003a0fcbab2e3bc4267d48c116c")
        (introduction
          (make-channel-introduction
            "b1fe5aaff3ab48e798a4cce02f0212bc91f423dc"
            (openpgp-fingerprint
              "CA4F 8CF4 37D7 478F DA05  5FD4 4213 7701 1A37 8446"))))
      (channel
        (name 'guix)
        (url "https://git.guix.gnu.org/guix.git")
        (branch "master")
        (commit
          "259643c993c6bba89a66da3b84329dd2e1dc439d")
        (introduction
          (make-channel-introduction
            "9edb3f66fd807b096b48283debdcddccfea34bad"
            (openpgp-fingerprint
              "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA")))))

```

## Tagging a release

A specific commit should be tagged using the script provided in the
`./etc` directory at the root of the Guix-Science repository:

```shell
# Create the tag in the local checkout.
# -c defaults to git HEAD.
# -g default to current Guix describe output.
./etc/tag-release.scm vYYYYMMDD [-c GUIX-SCIENCE-COMMIT] [-g GUIX-COMMIT]
# Push the tag to the remote.
git push --tags
```

After pushing the new tag to the remote repository, the Forgejo action
defined in `publish-release.yml` will be executed, effectively
creating a new entry in the Releases section of the Guix-Science
repository, with the corresponding `channels.scm` file available for
download.

## Retrieving the Guix revision information manually from the tag

In order to print the Guix revision information embedded with the tag,
the following command can be issued:

```shell
git show vYYYYMMDD --format=%N --no-patch | awk '/;; Guix revision/ {print $4}'
```

## Retrieving the `channels.scm` information embedded in the tag

The `channels.scm` file content corresponding to the `vYYYYMMDD` tag
can be retrieved with the following command:

```shell
# This will print the information on screen. Redirect it to a file
# by appending e.g. "> channels.scm" at the end of the command.
git show vYYYYMMDD --format=%N --no-patch | tail -n +4 | head -n -15
```