daml/release/RELEASE.md
Rohan Jacob-Rao 2b4a79c68f Tidy up release instructions (#3911)
* Tidy up first step of release instructions

* Minor adjustments to the rest of the instructions

* Fix

* Tweak
2019-12-20 11:12:12 +01:00

6.9 KiB

Making a Release

  1. Pull the latest master branch of the daml repository and create a new branch off it.

    Bump the version number in the VERSION file. In docs/source/support/release-notes.rst, add a new header and label for the new version. (See previous releases as examples.)

    Retrieve the new release notes using the command

    ./unreleased.sh <revision range>

    where <revision range> refers to all commits since the last release. For example, if the previous release was v0.13.36 then use the range v0.13.36.. to refer to all commits since that release tag. (See man gitrevisions for the full syntax of revision ranges.)

    This command outputs each change individually with its appropriate section. You need to group them into sections in the release-notes.rst file. (Again, see previous releases for examples.)

    The changelog may also specify edits to existing changelog additions. These are reported with the WARNING tag, for example:

    CHANGELOG_BEGIN
    
    WARNING: fix typo in entry "Adds new amdin API to upload DAR files" with the following.
    
    - [Sandbox] Adds new admin API to upload DAR files
    
    CHANGELOG_END
    

    You will need to manually incorporate such edits to the changelog.

    Once this is done, create a Github pull request (PR) with the above changes to the VERSION and release-notes.rst files. It is important that your PR changes exactly these two files. Both files must be modified, even if there are no additional release notes.

  2. Get a review and approval on your PR and then merge it into master.

  3. Once the CI checks have passed for the corresponding master build, the release should be available on Bintray, Maven Central and GitHub, and have a Git tag. The release should be visible on GitHub with prerelease status, meaning it's not yet ready for users to consume. The release notes should not be defined yet and will be adjusted later on. Maven central has a delay of around 20 minutes until the new version is visible.

  4. Run through the following test plan on one of Linux or MacOS:

    1. Install the new SDK using curl -sSL https://get.daml.com/ | sh -s X.XX.XX, where X.XX.XX is the new version number.
    2. Run daml version --assistant=yes and verify that the new version is selected as the assistant version and the default version for new projects.
    3. Create a new project with daml new quickstart quickstart-java and switch to it using cd quickstart.
    4. Run daml start. Your browser should be opened automatically at http://localhost:7500. Login as Alice and verify that there is 1 contract and 3 templates. Close the tab and kill daml start using Ctrl-C.
    5. Run daml build.
    6. In 3 separate terminals (since each command will block), run
      1. daml sandbox --port 6865 --scenario Main:setup .daml/dist/quickstart-0.0.1.dar
      2. daml navigator server localhost 6865 --port 7500
      3. mvn compile exec:java@run-quickstart

      Note: It takes some time for our artifacts to be available on Maven Central. If you try running the last command before the artifacts are available, you will get a "not found" error. Trying to build again in the next 24h will result in:

      Failure to find ... was cached in the local repository, resolution will not be reattempted until the update interval of digitalasset-releases has elapsed or updates are forced
      

      This is Maven telling you it has locally cached that "not found" result and will consider it valid for 24h. To bypass that and force Maven to try the network call again, add a -U option, as in mvn compile exec:java@run-quickstart -U. Note that this is required to bypass your local cache of the failure; it will not be required for a user trying to run the quickstart after the artifacts have been published.

    7. Point your browser to http://localhost:7500, login as Alice and verify that there is 1 contract, 3 templates and 1 owned IOU.
    8. Check that curl http://localhost:8080/iou returns
      {"0":{"issuer":"EUR_Bank","owner":"Alice","currency":"EUR","amount":100.0000000000,"observers":[]}}
      
    9. Kill all processes.
    10. Run daml studio --replace=always. This should open VSCode and trigger the DAML extension that's bundled with the new SDK version. (The new VSCode extension will not be in the marketplace at this point.)
    11. Open daml/Main.daml.
    12. Click on Scenario results above setup and wait for the scenario results to appear.
    13. Add + at the end of line 11, after "Alice" and confirm you get an error in line 12.
    14. Add 1 after the + and confirm you get an error in line 11.
    15. Delete the +1 and the e in Alice and verify that the scenario results are updated to the misspelled name.
    16. Right click on eurBank in line 17 and verify that "Go to Definition" takes you to the definition in line 14.
    17. Close all files.
  5. Run through the following test plan on Windows. This is slightly shortened to make testing faster and since most issues are not platform specific.

    1. Close any running SDK instance in PowerShell (Navigator or Sandbox).
    2. Download and run the Windows installer (the .exe file) from https://github.com/digital-asset/daml/releases.
    3. If asked if you want to remove an existing installation, click Yes.
    4. Open a new PowerShell.
    5. Run daml new quickstart to create a new project and switch to it using cd quickstart.
    6. Run daml start.
    7. Open your browser at http://localhost:7500, verify that you can login as Alice and there is one template and one contract.
    8. Kill daml start with Ctrl-C.
    9. Run daml studio --replace=always and open daml/Main.daml. Verify that the scenario result appears within 30 seconds.
    10. Add + at the end of line 26 after "Alice" and verify that you get an error.
  6. If there are no issues, the release can be made public. Go to the releases page and click on the Edit button for the new release. Combine the release notes from docs/source/support/release-notes.rst for all releases since the last public release, convert them from RST to Markdown format, and insert them in the textbox. Uncheck the This is a pre-release checkbox at the bottom and click Update release.

  7. Now go back to your original release PR on Github. Add the label Standard-Change and leave a comment like "All manual tests have passed".

  8. Finally, announce the release on the relevant internal Slack channels. An announcement on the external Slack channel linking to our blog should appear automatically.

  9. Documentation is published automatically once the release is public on Github, however it takes up to an hour to complete.

Thanks for making a release!