@@ No upgrade testing

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

- Replace 0.6.0 and 0.6 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]

  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.

- 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 but watch
    out for stage (grep afterwards):

    etc/intro -s -p https://hello.stage.build2.org/1

- 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

  - 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

  - 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
    ./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.

- Release

  - Update submodules (style/) in private/.

  - Write release notes, use placeholder for announcement URL. 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`

  - 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 the announcement URL in release notes, re-publish.

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

  - Commit and tag private/

    git tag -a 0.6.0 -m "Tag version 0.6.0" && git push --tags

- Tag & Commit hello

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

  cd hello
  ./foreach-git stat

  ./foreach-git -x libhello-1.0 tag -a build2-0.6.0 -m "Tag for build2 version 0.6.0"
  git -C libhello-1.0 tag -a 1.0/build2-0.6.0 -m "Tag for build2 version 0.6.0"
  ./foreach-git push --tags

- Tag & Commit

  - commit cppget.org/repository/ (see commit history for procedure)

  - Tag and push all released packages, some by hand, some with tag scripts
    (see etc/stage for list).

    cd <proj>

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

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

    ./tag.sh 0.6.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

    b '{clean update}(build2/ libbutl/)'

    cd ../odb/builds/default/
    b update # errors are ok
    b update

    b clean libbpkg/
    cd bpkg/bpkg
    b clean
    b --match-only # errors are ok
    ./odb.sh
    cd ..
    b

    cd brep
    b clean
    b --match-only # errors are ok
    cd libbrep
    b hxx{version}
    ./odb.sh
    cd ..
    b

    ~ the rest is like in local test above

  - 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). Update version file.

  - 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.6.0 -m "Tag version 0.6.0" && git push --tags

- Snapshot buildos-5 subvolume as buildos-5-0.6.0

  btrfs subvolume snapshot buildos-5 buildos-5-0.6.0