nim-wiki/Creating-a-release.md

2.7 KiB

  • 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
    • In compiler.nimble
    • In lib/stdlib.nimble
  • 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]

  • The CI generates the installers. Download from ci.nim-lang.org

  • Merge devel into master

  • Update csources via koch pushcsources

Shell script to build a source tarball:

#!/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

Shell script, work in progress:

#!/bin/sh

set -eu

# Test and release a new Nim version

ask() {
    echo "$1 Enter to continue, Ctrl-C to stop"
    read _
}

ask "Ensure that https://travis-ci.org/nim-lang/Nim is green"

ask "Ensure the last build on http://ci.nim-lang.org/ is successful"

orig_dir=$(pwd)
tmp_dir=$(mktemp -d)
cd $tmp_dir

# Clone repos

#git clone https://github.com/nim-lang/nim.git --depth 1
cp -a /tmp/nim .
cd nim
#git clone https://github.com/nim-lang/nimble.git --depth 1
cp -a /tmp/nimble .
#git clone --depth 1 https://github.com/nim-lang/csources
cp -a /tmp/csources .

# Build Nim

cd csources && sh build.sh
cd ..
bin/nim c koch
./koch boot -d:release

# Run the full testsuite (tests\testament\tester all) and ensure it's green; actually ensure travis is green (Usually the case these days)

# Set version

old_version=$(grep ^version compiler.nimble | cut -d'"' -f2)
nim_major="$1"
nim_minor="$2"
nim_patch="$3"
new_version="$nim_major.$nim_minor.$nim_patch"

ask "Old version is $old_version - new version is $new_version"

# Update the version

sed -i "s/^  NimMajor\*: int = [0-9]*$/  NimMajor*: int = $nim_major/" lib/system.nim
sed -i "s/^  NimMinor\*: int = [0-9]*$/  NimMinor*: int = $nim_minor/" lib/system.nim
sed -i "s/^  NimPatch\*: int = [0-9]*$/  NimPatch*: int = $nim_patch/" lib/system.nim

sed -i "s/version = .*/version = \"$new_version\"/" compiler.nimble
sed -i "s/version       = .*/version       = \"$new_version\"/" lib/stdlib.nimble

git diff | cat -n

ask "Ensure the version was updated in 3 files"

# Update news.txt
# write a news ticker entry

# Generate the full docs

./koch web0

# Generate the installers

./koch csource -d:release
./koch xz -d:release
./koch nsis