summaryrefslogtreecommitdiff
path: root/release.txt
blob: cd133a5d593d924bded5e5c6d4ee78b5fe4730aa (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
TODO
====

@@ Local Clang test is broken and disabled, using FreeBSD for Clang testing

Notes
=====

* Be very careful with submodules if fixing anything, remember to update
  build2-toolchain.


Setup
=====

* Make symlinks to development b, bpkg in /usr/local/bin/, used as the latest
  toolchain.

* Set passwordless sudo, logins to freebsd, cppget1, rbook (Mac OS)

  For Mac OS:
    echo "boris ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers

- Boot cppget1, freebsd VMs, make sure data/time is correct.

+ Copy prerequisites into build2-X.Y/, generate sha256 sums in BINARY (-b)

+ Build new prerequisites (if any) on local, freebsd (install to /usr/local).

+ If new preprequisites/version, need to update manifests.

Prelude
=======

+ Remove etc/ from modules in etc/git/modules.

+ Review '@@' items [note: etc, private excluded]

  etc/review | less -R

+ Need to make sure Intro is still accurate wrt output, etc. Use -s switch
  to etc/intro to compare:

  etc/intro -s `pwd`/hello/repository/1/

+ Increment version to final.

  * Need to update versions/dates for man generation (cli.sh in build2,
    bpkg, brep, and built2-toolchain).

  * Review manifests for any other changes (new entries/files, etc).

+ 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; see upgrade test).

+ Need to update submodules? Remember to push first.

+ Need to regenerate ODB files, CLI documentation, in build2-toolchin!

+ Update everything:

  b libbutl/ build2/ libbpkg/ bpkg/ brep/ build2-toolchain-default/

- Run tests for each project:

  * b 'test(libbutl/ libbpkg/)'

  * Manually in build2/

  * Manually in bpkg/; test (valgrind/asan), publish, test remote with -v,
    FreeBSD tools:

    ./test.sh -v --remote --fetch fetch --fetch-option --no-verify-peer \
      --tar bsdtar --sha256 sha256-freebsd

  * Update cppget repository (existing packages, not publishing yet):

    @@ What is the purpose of this step? It will mess up upgrade test
    below.

    -t /home/boris/work/build2/etc1/install/0.2.0 -e queue

    cd cppget.org
    git -C repository status
    ./update repository/1/

    This might not work in the early stage (backwards-incompatible)

    ./test -c cxx \
    -c config.cxx.loptions=-L/usr/local/lib \
    -c config.cxx.poptions="-I/usr/include/apache2 -I/usr/include/apr-1.0" \
      repository/1/

  * Test dev integration of brep/ on hello and cppget repos

    First check if Apache2 configuration needs updating (INSTALL-DEV). Then
    from build2/ work root:

    # This will have broken links since we are not running it as /pkg/hello.
    #
    brep/migrate/brep-migrate --recreate
    brep/load/brep-load hello/brep-loader-home.conf
    sudo /etc/init.d/apache2 restart

    brep/migrate/brep-migrate --recreate
    brep/load/brep-load cppget.org/brep-loader-home.conf
    sudo /etc/init.d/apache2 restart

    If need to drop the entire database, one way to do it is by executing:

    DROP OWNED BY <user>;

Procession
==========

- Generate distribution (use -t for toolchain-only, without brep). The
  result is placed into the queue.

  etc/dist 2>&1 | tee dist.log

- @@ Would be nice to test packages for missing files, etc., before upgrade.

- Test upgrade from previous version (replace Y in 0.Y.0).

  etc/test-upgrade -c cxx \
    -c config.cxx.loptions=-L/usr/local/lib \
    -c config.cxx.poptions="-I/usr/include/apache2 -I/usr/include/apr-1.0" \
    /home/boris/work/build2/etc1/install/0.Y.0

- Update and test hello repository

  cd hello
  for d in hello libhello libprint libformat repository; do \
    git -C $d status; done
  ./release -a

- Test Intro steps on the local hello repository

  etc/intro `pwd`/hello/repository/1/

- Publish hello repository, commit but don't push.

  [We need to publish now because etc/test uses it.]

  @@ Ideally we would want to stage it.

  ./release -p

- Test Intro steps on the remote hello repository

  etc/intro https://build2.org/pkg/1/hello/

- Stage queue to cppget.org

  etc/stage --dry-run
  etc/stage

- Regenerate other cppget.org sections with the new toolchain

  cd cppget.org
  git -C repository status
  ./update -e queue repository/1/

- Determine the earliest supported backwards-compatible toolchain (see
  requires: in manifests), update etc/test

- Test

  etc/test 2>&1 | tee test.log
  grep -i warning test.log

- Upgrade brep on build2.org (via package/queue upgrade if possible),
  verify works.

  Backup configs if changed:

  cd private/
  scp -r lists.build2.org:/home/brep/config lists.build2.org/home/brep/

- Move packages from queue to alpha, regenerate repositories.

  ./update repository/1/

- Publish to production (build2.org/cppget.org).

  etc/publish

- Test production and save a copy of toolchain in etc1/install/X.Y.Z

  etc/install -t -i "etc1/install/`cat build2-toolchain/version`" \
    https://download.build2.org/0.Y/build2-toolchain-0.Y.0.tar.gz \
    https://pkg.cppget.org/1/alpha

- Upgrade brep on cppget.org (via package/alpha upgrade if possible),
  verify works.

  Note that here we also have queue:

  install/bin/brep-migrate -n brep_queue
  install/bin/brep-load -n brep_queue config/brep-queue-load.conf

  Backup configs if changed:

  cd private/
  scp -r lists.cppget.org:/home/brep/config lists.cppget.org/home/brep/

- Tag (review tag_modules)

  etc/tag
  ./push.sh

- Commit and push cppget.org, hello git repositories

Release
=======

- Update style/ submodule in private/

- Write release notes, use placeholder for announcement URL. Add link to
  the doc page.

- Any new FAQ entries or any other updates (main page, etc)?

- Update download page.

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

- Test local, publish, test production:

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

- Write and send announcements

  Remember upgrade instructions.

  cat `ls -1 *.sha256`

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

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

Postlude
========

- Need to regenerate/republish hello/ repository?

- Increment and open schema versions. Maybe not. Maybe we should only do that
  when there is a model change.

- Increment project versions to alpha1, open master for business

- Commit changes to etc/, add it back to etc/git/modules.