nim-wiki/BuildServices.asciidoc

190 lines
5.3 KiB
Plaintext
Raw Normal View History

2017-02-25 17:08:29 +00:00
## Building Nim projects on Circle CI
Building your code on Circle CI is useful to check regressions against the master and devel branches of Nim.
Same for your code documentation.
2018-10-14 15:36:45 +00:00
The Nim docker image contains the latest version.
2018-06-08 21:12:48 +00:00
Use this .circleci/config.yml
2017-08-26 14:55:12 +00:00
[source,yaml]
----
version: 2
jobs:
build:
2018-10-14 15:36:45 +00:00
docker:
- image: nimlang/nim
2017-08-26 14:55:12 +00:00
steps:
2018-10-14 15:36:45 +00:00
- run: echo 'export PATH=~/.nimble/bin:$PATH' >> $BASH_ENV
2017-08-26 14:55:12 +00:00
- checkout
2018-10-14 15:36:45 +00:00
# Reuse cached directories
2017-08-26 14:55:12 +00:00
- restore_cache:
2018-10-14 15:36:45 +00:00
key: nim-0000
2017-08-26 14:55:12 +00:00
- run:
command: |
2018-10-14 15:36:45 +00:00
# Example: adding OS libraries
apt-get update
apt-get install -y --no-install-recommends libsodium23
2017-08-26 14:55:12 +00:00
- save_cache:
2018-10-14 15:36:45 +00:00
key: nim-0000
2017-08-26 14:55:12 +00:00
paths:
2018-10-14 15:36:45 +00:00
- .nimble
2017-08-26 14:55:12 +00:00
- run: nimble build -y
- run: nim c -r <mytest.nim>
- store_artifacts:
path: test-reports/
destination: tr1
- store_test_results:
path: test-reports/
----
2017-08-26 13:16:58 +00:00
## Building Nim projects on Circle CI v2.0 with Docker
2017-06-25 22:14:48 +00:00
2017-08-26 13:16:58 +00:00
On Circle CI 2.0 you can use Docker containers to perform builds. The following example is taken from the following guide and builds against the current Nim version on both Ubuntu and Alpine Linux: https://www.euantorano.co.uk/posts/nim-circle-ci/[Continuous Integration for Nim using Circle CI]
2017-06-25 22:14:48 +00:00
[source,yaml]
----
version: 2
jobs:
build:
working_directory: /usr/src/dotenv
docker:
- image: nimlang/nim
branches:
only:
- master
steps:
- checkout
- run:
name: test
command: nim c -r tests/main.nim
build_alpine:
working_directory: /usr/src/dotenv
docker:
- image: nimlang/nim:alpine
branches:
only:
- master
steps:
- checkout
- run:
name: test
command: nim c -r tests/main.nim
workflows:
version: 2
build_and_test:
jobs:
- build
- build_alpine
----
2017-02-25 17:08:29 +00:00
## Building Nim projects on Travis CI
Building your code on Travis CI is useful to check regressions against the master and devel branches of Nim.
Same for your code documentation.
Detailed guide, which the following example originates from: +
http://blaxpirit.com/blog/22/advanced-uses-of-travis-ci-with-nim.html[Advanced uses of Travis CI with Nim]
If you don't want to rebuild the Nim compiler you can instead install the .deb packages listed on the CircleCI guide above using https://docs.travis-ci.com/user/installing-dependencies[this config]
[source,yaml]
----
# Copied from https://github.com/nim-lang/Nim/wiki/TravisCI
language: c
env:
# Build and test against the master and devel branches of Nim
- BRANCH=master
- BRANCH=devel
compiler:
# Build and test using both gcc and clang
- gcc
- clang
matrix:
allow_failures:
# Ignore failures when building against the devel Nim branch
- env: BRANCH=devel
fast_finish: true
install:
- |
if [ ! -x nim-$BRANCH/bin/nim ]; then
git clone -b $BRANCH --depth 1 git://github.com/nim-lang/nim nim-$BRANCH/
cd nim-$BRANCH
git clone --depth 1 git://github.com/nim-lang/csources csources/
cd csources
sh build.sh
cd ..
rm -rf csources
bin/nim c koch
./koch boot -d:release
else
cd nim-$BRANCH
git fetch origin
if ! git merge FETCH_HEAD | grep "Already up-to-date"; then
bin/nim c koch
./koch boot -d:release
fi
fi
cd ..
before_script:
- export PATH="nim-$BRANCH/bin${PATH:+:$PATH}"
script:
# Replace uppercase strings!
- nim c --cc:$CC --verbosity:0 -r MYFILE.nim
# Optional: build docs.
- nim doc --docSeeSrcUrl:https://github.com/AUTHOR/MYPROJECT/blob/master --project MYFILE.nim
cache:
directories:
- nim-master
- nim-devel
branches:
except:
- gh-pages
----
2017-02-25 18:10:48 +00:00
## Appveyor
Create .appveyor.yml
[source,yaml]
----
version: '{build}'
cache:
- nim-0.16.0_x64.zip
- x86_64-4.9.2-release-win32-seh-rt_v4-rev4.7z
matrix:
fast_finish: true
environment:
matrix:
- MINGW_ARCHIVE: x86_64-4.9.2-release-win32-seh-rt_v4-rev4.7z
MINGW_DIR: mingw64
MINGW_URL: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/seh/x86_64-4.9.2-release-win32-seh-rt_v4-rev4.7z/download
NIM_ARCHIVE: nim-0.16.0_x64.zip
NIM_DIR: nim-0.16.0
NIM_URL: https://nim-lang.org/download/nim-0.16.0_x64.zip
platform: x64
install:
- MKDIR %CD%\tools_tmp
- IF not exist "%MINGW_ARCHIVE%" appveyor DownloadFile "%MINGW_URL%" -FileName "%MINGW_ARCHIVE%"
- 7z x -y "%MINGW_ARCHIVE%" -o"%CD%\tools_tmp"> nul
2017-02-25 18:10:48 +00:00
- IF not exist "%NIM_ARCHIVE%" appveyor DownloadFile "%NIM_URL%" -FileName "%NIM_ARCHIVE%"
- 7z x -y "%NIM_ARCHIVE%" -o"%CD%\tools_tmp"> nul
2017-02-25 18:10:48 +00:00
- SET PATH=%CD%\tools_tmp\%NIM_DIR%\bin;%CD%\tools_tmp\%MINGW_DIR%\bin;%PATH%
build_script:
- nimble.exe install CHANGEME -y
- nim.exe c -p:. ./tests/CHANGEME.nim
test_script:
- ./tests/CHANGEME
deploy: off
----
You may encounter an issue with Sourceforge download and download just a webpage. In that case replace the generic URL by a direct link into a mirror like 'https://ayera.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.2/threads-win32/seh/x86_64-4.9.2-release-win32-seh-rt_v4-rev4.7z'