summaryrefslogtreecommitdiff
path: root/release.txt
blob: f436a72e9557e5546306d4371289a96282b831df (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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
@@ Need to sync hello/* projects with latest bdep-new output

@@ No upgrade testing

- Add new bot machines/configurations/options from stage to queue to public

  @@ See paper in Build OS filder.

  @@ Might have to be done at release if things are incompatible. Maybe
     better/cleaner to always do this at release.

- Replace 0.7.0 and 0.7 in this document with the new version.

- Remove etc/ and private/ from modules in etc/git/modules to reduce
  noise during stat. Also, review for any new modules.

- Review '@@' items [private/ excluded, update with new modules, at least
  look for @@ TMP; also check the review script for any new modules]:

  etc/review | less -R

- Identify packages that will be released (see etc/stage). They should all be
  staged and built successfully, including submodule-updated build2-toolchain
  and baseutils/mingw. Review stageing/0/ and staging/1/ for anything stray.

- Update and test local builds:

  b test: build2/ bpkg/ bdep/ brep/ bbot/ libbutl/ libbpkg/ libbbot/
  b msvc-linux/

- Stage hello projects and test:

  cd hello
  ./foreach-git pull
  ./foreach-git stat
  ./stage

  cd ..
  etc/intro -s `pwd`/hello/repository/1/
  etc/intro -s https://hello.stage.build2.org/1

  - Make sure all the bot builds are successful (drop build db).

- Test bootstrap build2-toolchain using scripts/batch files (bot builds
  are using makefile). Need to test build.sh, build-*.bat. Now test via
  automated install files: see private/install/testing.txt for details.

- Update NEWS files in all project that will have non-pre-release version.

- Review documentation for (1) sample output changes and (2) still being
  relevant/making sense:

  - Testscript manual (for 1, see hello/hello-testscript).

  - Install guide for (for 1 & 2).

  - Introduction for (for 1 & 2). Use intro script to get output:

    ./intro2-tldr 2>&1 | tee intro2-tldr.out
    ./intro2-tour 2>&1 | tee intro2-tour.out

- Change to final versions for all packages being released, some by hand,
  some with version scripts (see etc/stage for list + msvc-linux).

    - Close schema versions. Review schema changlog difference from previous
      release (tag) for any data migration that may be required (would also
      need to test this).

    - Push and update all submodules in buil2-toolchain

    - Regenerate all odb & docs (in both packages and inside build2-toolchain)

    - Bootstrap then update and test local

      cd build2
      b clean
      git cout build2/version.hxx build2/b-options.?xx
      ./bootstrap.sh g++-6

      cd ..
      b-boot '{clean update}(libbutl/ build2/)'

      b clean: bpkg/ bdep/ brep/ bbot/ libbpkg/ libbbot/ msvc-linux/

      Then the local test step above.

    - Cleanup staging repo:

      rm -r staging/0/*
      rm -r staging/repository/1/*/

    - Restage with -b:

      etc/stage -b

    - Check /0/ and /1/ for anything stray

    - restage hello (libstd-modules)

- Upgrade brep on cppget.org (queue and main repo) using stage

- Queue packages:

  - Change BUILD2_REPO in build2_toolchain build scripts to queue

  - Cleanup queue repo:

    rm -rf cppget.org/0/*
    rm -rf cppget.org/repository/1/queue/*/

  - Queue

    etc/stage -q -b

  - check /0/ and /1/ for anything stray

    @@ Add extra packages (cli, libcutl, mysql/mariadb).

  - Make sure bot builds are successful

- Upgrade brep on build2.org (hello) using queue

- Publish and test hello

    cd hello
    ./foreach-git stat
    ./stage -p

    cd ..
    etc/intro -s https://build2.org/pkg/1/hello

  - Drop build database (package versions do not change)

  - Make sure bot builds are successful

- Publish and test toolchain

  - Change BUILD2_REPO in build2-toolchain build script to public

  - Regenerate build2-toolchain package in cppget.org/0/

    etc/stage -p

    @@ Remove *-queue install scripts.

  - Move packages (manually for now):

    - old/replaced/FTB packages either to legacy or delete

    - from queue to appropriate repositories (don't override existing)

  - Regenerate the repository

    cd cppget.org
    git -C repository add .
    git -C repository status  # Review changes.
    ./update

  - Disable the queue toolchain on bbots (moved packages from queue/),
    delete distribution

    echo disabled | ssh build2.org tee >/dev/null \
      /var/www/download.build2.org/public/queue/toolchain.sha256

    ssh build2.org rm -r /var/www/download.build2.org/public/queue/*/

  - Publish everything to build2.org/cppget.org

    etc/publish

  - Make sure bot builds are successful, drop hello build database again.

    @@ First test automated install scripts.

- Release

  - Update submodules (style/) in private/.

  - Write release notes, use placeholder for announcement URL (or guess).
    Add link from the doc page.

  - Any new FAQ entries or any other updates (main page, etc)? Any new
    documentation to link from the doc page?

  - Update download page.

    cat `ls -1 *.sha256`

  - Update install page.

    cat toolchain.sha256

  - Regenerate documentation (./cli.sh) for all hosts.

  - Test locally, publish, test production

    cd private/
    ./publish --dry-run
    ./publish

  - Write and send the announcement to mailing lists.

    cat `ls -1 *.sha256`

    - Remember upgrade instructions.

    - Add reply-to: header for users@ announcement.

  - Patch/verify the announcement URL in release notes, re-publish.

  - Announce on reddit and other places (see doc/ann/).

  - Commit and tag private/ and style/

    git tag -a 0.7.0 -m "Tag version 0.7.0" && git push --follow-tags

- Tag & Commit hello

  cd hello
  ./foreach-git stat

  - commit hello/repository/ (see commit history for procedure)

    git tag -a build2-0.7.0 -m "Tag for build2 version 0.7.0" && git push --follow-tags


- Tag & Commit

  - commit & push cppget.org/repository/ (see commit history for procedure;
    commit big chunks first, then reorder with rebase).

  - Tag and push all released packages, some by hand, some with tag scripts
    (see etc/stage for list but also packages added ad hoc with etc/stage-pkg).

    @@ Use vX.Y.Z tag for packages that are bpkg/bdep-ready (i.e., have
       suitable repositories.manifest if required).

    cd <proj>

    # X.Y.Z
    v="$(sed -n -re 's/version: ([^ ]+)/\1/p' manifest)"; echo $v; read; \
      git tag -a $v -m "Tag version $v" && git push --follow-tags

    # vX.Y.Z
    v="$(sed -n -re 's/version: ([^ ]+)/\1/p' manifest)"; echo v$v; read; \
      git tag -a v$v -m "Tag version $v" && git push --follow-tags

    For build2 projects, review tag_modules in etc/git/modules, then:

    ./tag.sh 0.7.0
    ./push.sh

- Increment versions and open master for business

  - Change to next development versions for all released packages, some by
    hand, some with version scripts (see etc/stage for list + msvc-linux).

    cd <proj>

    ~ edit manifest

    v="$(sed -n -re 's/version: ([^ ]+)/\1/p' manifest)"; echo $v; read; \
      git ci -a -m "Bump version to $v, master is open for business" && git push

  - In build2-toolchain, update all submodules (including libodb*, etc),
    change BUILD2_REPO to staging.

  - Regenerate odb & cli docs everywhere (packages and build2-toolchain).

    New sequence:

    ~ rebuild ODB compiler

    @@ bdep sync -fura
    @@ b hxx{version} # first lib*, then projects, then odb.sh

  - Update/test local (see early steps of this list).

  - Make symlinks for new version in baseutils (for both baseutils and mingw,
    the idea is that we will start with those and maybe upgrade during
    development).

  - Restage

    rm -r staging/0/*
    rm -r staging/repository/1/*/

    etc/stage -b

    - Make sure bbot builds of the new development snapshot are successful.

- Commit etc/

  - Restore changes to etc/git/modules

  - Change all '+ ' back to '- '.

  - Commit and tag

    git tag -a 0.7.0 -m "Tag version 0.7.0" && git push --follow-tags

- Snapshot buildos subvolumes as buildos-0.7.0

  btrfs subvolume snapshot buildos-3 buildos-3-0.7.0
  btrfs subvolume snapshot buildos-6 buildos-6-0.7.0