- Run the full testsuite (``tests\testament\tester all``) and ensure it's green; actually ensure travis is green (Usually the case these days) - Update news.txt - write a news ticker entry - Update the version - In system.nim - Recompile koch! - Generate the full docs; koch web0 - Test the installers: koch testinstall - Tag the release, e.g. ```git tag -am "Version 0.15.0" v0.15.0``` - Push the tag: ```git push origin [tagname]``` - Run ``tools/winrelease`` For this you need to close VSCode so that 'nimsuggest' can be overwritten! - Upload the produced .zips. - Merge devel into master - Update csources via ``koch pushcsources`` **The following shell script shall be replaced by 'koch unixrelease'** Shell script to build a source tarball: ```sh #!/bin/sh set -eu tmp_dir=$(mktemp -d) cd $tmp_dir git clone -q --depth 1 https://github.com/nim-lang/Nim.git cd Nim git clone -q --depth 1 https://github.com/nim-lang/csources ( cd csources && sh build.sh ) bin/nim c koch ./koch boot -d:release ./koch web0 PATH=$PATH:$(pwd)/bin ./koch csource -d:release ./koch xz -d:release ``` ## Website ### Uploading the binaries - `scp nim-0.18.0.tar.xz username@servername:/var/www/nim-lang.org/download/nim-0.18.0.tar.xz` (change the version obviously) ### Generating the sha256's - `ssh username@servername` - `cd /var/www/nim-lang.org/download/` - `sha256sum nim-0.18.0.tar.xz > nim-0.18.0.tar.xz.sha256` ### Updating the blog/downloads page - Create a new blog post in `_drafts` titled: `version--released.md` where `` is the version without any dots, e.g. `0180` for `0.18.0`. - When ready to release: - move the blog post into `_posts`, making sure to append the current date to its filename: `2017-09-31-title.md`. - modify config.yml's `version` key to the new version - `git commit` - **TIP:** Here is a real-life example of a commit that signifies a release: https://github.com/nim-lang/website/commit/6f95916dee1212dcf5465d74dcff14e01f714503. The draft blog post was created in earlier commits, but hopefully it's pretty easy to figure out how it was made. - **TIP2:** You can see what a draft post looks like by running `jekyll serve --drafts` inside the website's `jekyll` directory. - `git push live master` (the `live` remote is a strict secret) ### Uploading docs - ``export NIM_VER=`` (for example ``export NIM_VER=0.19.0``). - Upload documentation to ``/var/www/nim-lang.org/$NIM_VER`` - Change ``docs`` symlink - ``cd /var/www/nim-lang.org/`` - ``ln -sfn $NIM_VER docs`` (change the version here) - Verify this worked using ``ls -la | grep "docs"`` ### Updating choosenim's channels Choosenim currently only supports gz so you will need to create a .tar.gz out of the .tar.xz: - ``export NIM_VER=`` - ``cd /var/www/nim-lang.org/download`` - ``cp nim-$NIM_VER.tar.xz nim-"$NIM_VER"_copy.tar.xz`` - ``unxz nim-"$NIM_VER"_copy.tar.xz`` - ``gzip --best nim-"$NIM_VER"_copy.tar`` - ``mv nim-"$NIM_VER"_copy.tar.gz nim-"$NIM_VER".tar.gz`` - ``sha256sum nim-"$NIM_VER".tar.gz > nim-"$NIM_VER".tar.gz.sha256`` Update the ``stable`` channel: - Update ``/var/www/nim-lang.org/channels`` using your favourite editor - ``vim /var/www/nim-lang.org/channels/stable``