# https://taskfile.dev #Called by the vnbuild system to produce builds for my website #https://www.vaughnnugent.com/resources/software #This taskfile performs the build operations for a module, it handles #git code updates, msbuild on solutions, and sleet NuGet feed pushes. #this file must be in the same directory as the solution file #NOTES: Since CI project is pulled from the module root, MODULE_DIR is used instead of PROJECT_DIR version: '3' vars: CMAKE_BUILD_DIR: 'build/{{ OS }}' TEST_EXE_NAME: 'nctest' CI_BUILD_CONFIG: '{{ .CI_BUILD_CONFIG | default "Release" }}' tasks: default: desc: "Build the library for your system" cmds: - task: build-internal vars: { CMAKE_TEST_STATUS: 'OFF', BUILD_CONFIG: 'Release' } build-debug: desc: "Build libraries and test executable in debug mode" cmds: - task: build-internal vars: { CMAKE_TEST_STATUS: 'ON', BUILD_CONFIG: 'Debug' } #available to users and vnbuild runner test: desc: "Builds a local copy of the library in a debug configuration, then runs the test executable" cmds: - task: build-debug - cmd: cd {{ .CMAKE_BUILD_DIR }} && ctest -C Debug --verbose dev: watch: true sources: - include/* - src/* - src/*/* - tests/* - CMakelists.txt - vendor/* cmds: - task: test-dev test-mbedtls: desc: "Builds and runs tests for noscrypt using the mbedtls crypto library for the current platform" cmds: - task: build-internal vars: CMAKE_TEST_STATUS: 'ON' BUILD_CONFIG: 'Debug' CLI_ARGS: '-DNC_FETCH_MBEDTLS=ON {{ .CLI_ARGS }}' #fetches and enabled medtls - cmd: cd {{ .CMAKE_BUILD_DIR }} && ctest -C Debug --verbose test-dev: desc: "Re-runs compilation phase and test execution" cmds: - task: compile vars: { BUILD_CONFIG: 'Debug' } - cmd: cd {{ .CMAKE_BUILD_DIR }} && ctest -C Debug --verbose --output-on-failure - task: memcheck build-internal: internal: true cmds: - cmd: cmake {{ .CLI_ARGS }} -S . -B{{ .CMAKE_BUILD_DIR }} -DCMAKE_BUILD_TYPE={{ .BUILD_CONFIG }} -DNC_BUILD_TESTS={{ .CMAKE_TEST_STATUS }} - task: compile vars: { BUILD_CONFIG: '{{ .BUILD_CONFIG }}' } - cmd: echo "Build complete. Your files can be found in the {{ .CMAKE_BUILD_DIR }} directory" silent: true compile: internal: true cmds: - cmd: cmake --build {{ .CMAKE_BUILD_DIR }} --config {{ .BUILD_CONFIG }} install: desc: "Uses cmake to install the library on your system" cmds: - cmd: echo "Installing noscrypt globally" silent: true - cmd: cmake --install {{ .CMAKE_BUILD_DIR }} {{ .CLI_ARGS }} memcheck: desc: 'Runs Valgrind memcheck in debug mode against the nctest executable (Linux only)' platforms: - linux preconditions: - which valgrind cmds: - cmd: echo "Running valgrind memory check on test executable" silent: true - cmd: valgrind --tool=memcheck --leak-check=full --show-leak-kinds=all --track-origins=yes {{ .CMAKE_BUILD_DIR }}/{{ .TEST_EXE_NAME }} #CI ONLY!! #called by build pipeline to build module build: cmds: - echo "building project {{ .PROJECT_NAME }}" - cmd: powershell -Command "mkdir bin/ -Force" ignore_error: true #build windows x64 - task: build_win_x64 #pack source - task: pack_source clean: desc: "Cleans the artifact directory" ignore_error: true cmds: - for: [ bin/, build/ ] task: clean-internal vars: { FILE: '{{ .ITEM }}'} clean-internal: internal: true ignore_error: true cmds: - cmd: rm -rf '{{ .FILE }}' platforms: [linux, darwin] - cmd: powershell rm -Recurse -Force '{{ .FILE }}' platforms: [windows] build_win_x64: internal: true platforms: [ windows ] vars: TARGET: '{{ .PROJECT_DIR }}/{{ .BINARY_DIR }}/msvc-x64-{{ .CI_BUILD_CONFIG }}-{{ .PROJECT_NAME }}.tgz' BUILD_DIR: 'build/win-x64' TAR_FILES: " {{ .PROJECT_NAME }}.dll {{ .PROJECT_NAME }}.lib {{ .PROJECT_NAME }}_static.lib license.txt" cmds: #remove deps dir to avoid conflicts with vnbuild - defer: powershell rm -Recurse -Force "{{ .BUILD_DIR }}/_deps" #invoke cmake build - cmd: cmake -S . -B {{ .BUILD_DIR }} -G "Visual Studio 17 2022" -A x64 -DCMAKE_BUILD_TYPE={{ .CI_BUILD_CONFIG }} -DNC_BUILD_TESTS=OFF - cmake --build {{ .BUILD_DIR }} --config {{ .CI_BUILD_CONFIG }} #copy license to build dir - cmd: powershell cp license '{{ .BUILD_DIR }}/Release/license.txt' #tar up the binaries - cmd: cd {{ .BUILD_DIR }}/Release && tar -czf "{{ .TARGET }}" {{ .TAR_FILES }} pack_source: internal: true desc: "Packs up the project source code and creates a tarball in the builds binary directory" vars: TARGET_SOURCE: '{{ .PROJECT_DIR }}/{{ .BINARY_DIR }}/{{ .PROJECT_NAME }}-src.tgz' SOURCE_FILES: CMakeLists.txt Taskfile.yaml src include license tests vendor readme.md CMakePresets.json cmds: #tar up the source - tar -czf "{{ .TARGET_SOURCE }}" {{ .SOURCE_FILES | join " " }} ################################# # # DEV TASKS # ################################# dev-gdb-test: platforms: [ linux ] desc: "Starts a new gdb session on the test executable" interactive: true cmds: - task: compile vars: { BUILD_CONFIG: 'Debug' } - cmd: gdb '{{ .CMAKE_BUILD_DIR }}/{{ .TEST_EXE_NAME }}' dev-update-deps: desc: "Updates vendored projects files (headers mostly) from their source repositories to the latest version" cmds: - defer: powershell rm -Recurse '.update/' -Force - task: dev-update-monocypher - task: dev-update-mbedtls-headers - task: dev-update-openssl-headers - task: dev-set-secp256-headers dev-update-monocypher: vars: MC_GIT_URL: 'https://github.com/LoupVaillant/Monocypher' MC_GIT_BRANCH: 'master' #NOTE: Always update to the latest master branch, then verify changes manually MC_DIR: 'vendor/monocypher' TMP_DIR: '.update/mc' cmds: - cmd: powershell mkdir '{{ .TMP_DIR }}' -Force ignore_error: true - git clone --branch {{ .MC_GIT_BRANCH }} {{ .MC_GIT_URL }} '{{ .TMP_DIR }}' - for: [ 'src/monocypher.h', 'src/monocypher.c' ] cmd: powershell cp '{{ .TMP_DIR }}/{{ .ITEM }}' '{{ .MC_DIR }}' dev-update-mbedtls-headers: vars: MBEDTLS_GIT_URL: 'https://github.com/Mbed-TLS/mbedtls' MBEDTLS_GIT_BRANCH: 'development' MBEDTLS_DIR: 'vendor/mbedtls' TMP_DIR: '.update/mbedtls' cmds: - cmd: powershell mkdir '{{ .TMP_DIR }}' -Force ignore_error: true - git clone --branch {{ .MBEDTLS_GIT_BRANCH }} {{ .MBEDTLS_GIT_URL }} '{{ .TMP_DIR }}' - for: [ 'include/mbedtls' ] cmd: powershell cp -Recurse -Force '{{ .TMP_DIR }}/{{ .ITEM }}' '{{ .MBEDTLS_DIR }}/include' dev-update-openssl-headers: vars: OPENSSL_GIT_URL: 'https://github.com/openssl/openssl' OPENSSL_GIT_BRANCH: 'openssl-3.3.1' OPENSSL_DIR: 'vendor/openssl' TMP_DIR: '.update/openssl' cmds: - cmd: powershell mkdir '{{ .TMP_DIR }}' -Force ignore_error: true - git clone --branch {{ .OPENSSL_GIT_BRANCH }} {{ .OPENSSL_GIT_URL }} '{{ .TMP_DIR }}' - for: [ 'include/openssl' ] cmd: powershell cp -Recurse -Force '{{ .TMP_DIR }}/{{ .ITEM }}' '{{ .OPENSSL_DIR }}/include/' dev-set-secp256-headers: vars: SECP256_GIT_URL: 'https://github.com/bitcoin-core/secp256k1' SECP256_GIT_BRANCH: 'v0.5.1' SECP256_DIR: 'vendor/secp256k1' TMP_DIR: '.update/secp256k1' cmds: - cmd: powershell mkdir '{{ .TMP_DIR }}' -Force ignore_error: true - git clone --branch {{ .SECP256_GIT_BRANCH }} {{ .SECP256_GIT_URL }} '{{ .TMP_DIR }}' - for: [ 'include/*' ] cmd: powershell cp -Recurse -Force '{{ .TMP_DIR }}/{{ .ITEM }}' '{{ .SECP256_DIR }}/include/secp256k1/'