build: setup nimbus-build-system and basic project structure

This commit is contained in:
Michael Bradley, Jr 2021-01-06 04:48:10 -06:00 committed by Michael Bradley
parent 27b257abeb
commit 8753fdd53a
18 changed files with 268 additions and 0 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
* text=auto eol=lf

77
.github/workflows/test.yml vendored Normal file
View File

@ -0,0 +1,77 @@
name: Tests
on:
pull_request:
push:
branches:
- master
jobs:
tests:
env:
NPROC: 2
strategy:
fail-fast: false
matrix:
platform:
- {
icon: 🏁,
os: windows,
shell: msys2
}
- {
icon: 🍎,
os: macos,
shell: bash --noprofile --norc -eo pipefail
}
- {
icon: 🐧,
os: ubuntu,
shell: bash --noprofile --norc -eo pipefail
}
name: ${{ matrix.platform.icon }} ${{ matrix.platform.os }}
runs-on: ${{ matrix.platform.os }}-latest
defaults:
run:
shell: ${{ matrix.platform.shell }} {0}
steps:
- name: Install awk (gawk) and coreutils via Homebrew
if: matrix.platform.os == 'macos'
run: |
brew install coreutils gawk
- uses: msys2/setup-msys2@v2
if: matrix.platform.os == 'windows'
with:
msystem: MINGW64
update: true
install: >
base-devel
git
mingw-w64-x86_64-toolchain
- uses: actions/checkout@v2
with:
fetch-depth: 0
submodules: recursive
- name: Calculate cache key from submodules tree
id: calc-cache-key
run: |
echo "::set-output name=hash::$(git submodule foreach --quiet --recursive 'git rev-parse $(git rev-parse --abbrev-ref HEAD)' | sha1sum | awk '{print $1}')"
- uses: actions/cache@v2
with:
path: vendor/nimbus-build-system/vendor/Nim/bin
key: ${{ matrix.platform.os }}-${{ steps.calc-cache-key.outputs.hash }}
- name: Install and build dependencies
run: |
make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 update
make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 deps
- name: Build and run tests
run: |
make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC}" V=1 test

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
.DS_Store
/.idea
/.update.timestamp
/.vscode
/task_runner.nims
/nimcache
/test/build
/vendor/.nimble
TODO

14
.gitmodules vendored Normal file
View File

@ -0,0 +1,14 @@
[submodule "vendor/nimbus-build-system"]
path = vendor/nimbus-build-system
url = https://github.com/status-im/nimbus-build-system.git
branch = master
ignore = dirty
[submodule "vendor/nim-chronos"]
path = vendor/nim-chronos
url = https://github.com/status-im/nim-chronos.git
[submodule "vendor/nim-stew"]
path = vendor/nim-stew
url = https://github.com/status-im/nim-stew.git
[submodule "vendor/nim-bearssl"]
path = vendor/nim-bearssl
url = https://github.com/status-im/nim-bearssl.git

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Status Research & Development GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

59
Makefile Normal file
View File

@ -0,0 +1,59 @@
SHELL := bash # the shell used internally by "make"
# used inside the included makefiles
BUILD_SYSTEM_DIR := vendor/nimbus-build-system
# we don't want an error here, so we can handle things later, in the ".DEFAULT" target
-include $(BUILD_SYSTEM_DIR)/makefiles/variables.mk
.PHONY: \
all \
clean \
deps \
test \
update
ifeq ($(NIM_PARAMS),)
# "variables.mk" was not included, so we update the submodules.
GIT_SUBMODULE_UPDATE := git submodule update --init --recursive
.DEFAULT:
+@ echo -e "Git submodules not found. Running '$(GIT_SUBMODULE_UPDATE)'.\n"; \
$(GIT_SUBMODULE_UPDATE) && \
echo
# Now that the included *.mk files appeared, and are newer than this file, Make will restart itself:
# https://www.gnu.org/software/make/manual/make.html#Remaking-Makefiles
#
# After restarting, it will execute its original goal, so we don't have to start a child Make here
# with "$(MAKE) $(MAKECMDGOALS)". Isn't hidden control flow great?
else # "variables.mk" was included. Business as usual until the end of this file.
# default target, because it's the first one that doesn't start with '.'
all: test
# must be included after the default target
-include $(BUILD_SYSTEM_DIR)/makefiles/targets.mk
ifeq ($(OS),Windows_NT)
# is Windows_NT on XP, 2000, 7, Vista, 10...
detected_OS := Windows
else ifeq ($(strip $(shell uname)),Darwin)
detected_OS := macOS
else
# e.g. Linux
detected_OS := $(strip $(shell uname))
endif
clean: | clean-common clean-build-dirs
clean-build-dirs:
rm -rf test/build
deps: | deps-common
update: | update-common
test: | deps
$(ENV_SCRIPT) nimble tests
endif # "variables.mk" was not included

View File

@ -1 +1,6 @@
# nim-task-runner
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
![Stability: experimental](https://img.shields.io/badge/Stability-experimental-orange.svg)
[![Tests (GitHub Actions)](https://github.com/status-im/nim-task-runner/workflows/Tests/badge.svg?branch=master)](https://github.com/status-im/nim-task-runner/actions?query=workflow%3ATests+branch%3Amaster)
General purpose background task runner for Nim programs

7
env.sh Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
# We use ${BASH_SOURCE[0]} instead of $0 to allow sourcing this file
# and we fall back to a Zsh-specific special var to also support Zsh.
REL_PATH="$(dirname ${BASH_SOURCE[0]:-${(%):-%x}})"
ABS_PATH="$(cd ${REL_PATH}; pwd)"
source ${ABS_PATH}/vendor/nimbus-build-system/scripts/env.sh

2
task_runner.nim Normal file
View File

@ -0,0 +1,2 @@
proc foo*(): string =
"bar"

44
task_runner.nimble Normal file
View File

@ -0,0 +1,44 @@
mode = ScriptMode.Verbose
version = "0.1.0"
author = "Status Research & Development GmbH"
description = "General purpose background task runner for Nim programs"
license = "MIT"
skipDirs = @["test"]
requires "nim >= 1.2.0",
"chronos"
import strutils
proc buildAndRunTest(name: string,
srcDir = "test/",
outDir = "test/build/",
params = "",
cmdParams = "",
lang = "c") =
rmDir outDir
mkDir outDir
# allow something like "nim test --verbosity:0 --hints:off beacon_chain.nims"
var extra_params = params
for i in 2..<paramCount():
extra_params &= " " & paramStr(i)
exec "nim " &
lang &
" --debugger:native" &
" --define:chronicles_line_numbers" &
" --define:debug" &
" --nimcache:nimcache/test/" & name &
" --out:" & outDir & name &
" --threads:on" &
" --tlsEmulation:off" &
" " &
extra_params &
" " &
srcDir & name & ".nim" &
" " &
cmdParams
exec outDir & name
task tests, "Run all tests":
buildAndRunTest "all_tests"

0
task_runner/.gitkeep Normal file
View File

2
test/all_tests.nim Normal file
View File

@ -0,0 +1,2 @@
import
./test_task_runner

12
test/test_helpers.nim Normal file
View File

@ -0,0 +1,12 @@
import chronos, unittest
template asyncTest*(name, body: untyped) =
test name:
proc scenario {.async.} = body
waitFor scenario()
template procSuite*(name, body: untyped) =
proc suitePayload =
suite name:
body
suitePayload()

11
test/test_task_runner.nim Normal file
View File

@ -0,0 +1,11 @@
import unittest
import
../task_runner,
./test_helpers
suite "task_runner test stub":
test "foo test":
check:
foo() == "bar"

1
vendor/nim-bearssl vendored Submodule

@ -0,0 +1 @@
Subproject commit ba5f4687987817902c2727e30b35cb5ad1e61203

1
vendor/nim-chronos vendored Submodule

@ -0,0 +1 @@
Subproject commit 46c0bf3c5aff131ac437a88c00aa112133c94d54

1
vendor/nim-stew vendored Submodule

@ -0,0 +1 @@
Subproject commit 1401c34374fe7606dbf1252e361725415890f5f0

1
vendor/nimbus-build-system vendored Submodule

@ -0,0 +1 @@
Subproject commit e2de003ce634deca72dab3b3c79426698e7b8579