dash/contrib/containers
Kittywhiskers Van Gogh 4963660b15
ci: build TSan with clang 15 and add -Werror=thread-safety, fix-up stacktraces (#5375)
## Description

Pull request was inspired by the need to debug lock problems when
working on https://github.com/dashpay/dash/pull/5352.

As far as I'm aware, only macOS has `-Werror=thread-safety` as part of
its default `CXXFLAGS` despite the capability being present on Linux as
well. This PR introduces thread safety checks for that into our thread
sanitizer build.

Additionally, since we're using Clang, something that on first glimpse,
appears to be something that `stacktraces.cpp` isn't happy with, due to
`-Wl,-wrap` being available only on GCC, that no longer seems to be the
case, since the version of Clang with comes with `focal`, its `lld`
_does_ have support for `-wrap` (see [man page for `lld` on
`focal`](https://manpages.ubuntu.com/manpages/focal/en/man1/lld.1.html)).

The current `stable` version of Clang/LLVM is 15, at the time of this
pull request (see https://apt.llvm.org/) but `focal` ships with an older
version, requiring us to use the official LLVM APT repository. I feel we
should be testing with recent compilers alongside the ones shipped by
LTS distributions.

Certain bugs are only made apparent when testing on rolling release
distros or distros that have faster update cycles, like Fedora (see
https://github.com/dashpay/dash/pull/5295 for an illustration of that),
which ship with more recent compilers. Until we overhaul our CI systems
to test using those distros directly (our current infrastructure is
centered around using a "development image" with an LTS distro as the
base), this is the best we can do.

A similar pull request testing against the latest GCC stable will be
welcome as that is currently outside the scope of this PR as the changes
made were to make sure that builds were operating as expected on
Clang/LLVM 15.

---------

Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
2023-05-26 13:49:29 -05:00
..
ci ci: build TSan with clang 15 and add -Werror=thread-safety, fix-up stacktraces (#5375) 2023-05-26 13:49:29 -05:00
deploy ci: harmonize parent images, use focal consistently 2023-05-11 09:18:48 -05:00
develop docker: fix gitian support, optimize container layer count and improve script consistency (#4983) 2022-08-22 22:42:36 +03:00
README.md docs: introduce documentation and usage for containers 2021-12-21 12:43:48 +05:30

Containers

This directory contains configuration files for containerization utilities.

Currently two Docker containers exist, ci defines how Dash's GitLab CI container is built and the dev builds on top of the ci to provide a containerized development environment that is as close as possible to CI for contributors!

Usage Guide

We utilise edrevo's dockerfile-plus, a syntax extension that leverages Docker BuildKit to reduce the amount of repetitive code.

As BuildKit is opt-in within many currently supported versions of Docker (as of this writing), you need to set the following environment variables before continuing. While not needed after the initial docker-compose build (barring updates to the Dockerfile), we recommend placing this in your ~/.bash_profile/~/.zshrc or equivalent

export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1

After that, it's simply a matter of building and running your own development container. You can use extensions for your IDE like Visual Studio Code's Remote Containers to run terminal commands from inside the terminal and build Dash Core.

cd contrib/containers/develop
docker-compose build
docker-compose run container