From 332ac26e45cf3a1a9b5c7a7dd8e23bf9c67a98e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m?= <331742+KjellKod@users.noreply.github.com> Date: Mon, 27 Nov 2023 14:09:21 -0700 Subject: [PATCH 1/7] trying out codespaces --- .devcontainer/Dockerfile | 19 ++++++++++ .devcontainer/reinstall_cmake.sh | 60 ++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/reinstall_cmake.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..2c928bde --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,19 @@ +# Latest Debian +FROM mcr.microsoft.com/devcontainers/cpp:debian + +ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none" + +# Optionally install the cmake for vcpkg +COPY ./reinstall-cmake.sh /tmp/ + +RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \ + chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ + fi \ + && rm -f /tmp/reinstall-cmake.sh + +# [Optional] Uncomment this section to install additional vcpkg ports. +# RUN su vscode -c "${VCPKG_ROOT}/vcpkg install " + +# [Optional] Uncomment this section to install additional packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends \ No newline at end of file diff --git a/.devcontainer/reinstall_cmake.sh b/.devcontainer/reinstall_cmake.sh new file mode 100644 index 00000000..92ff7272 --- /dev/null +++ b/.devcontainer/reinstall_cmake.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash +#------------------------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. +#------------------------------------------------------------------------------------------------------------- +# +# testing, unsure if it's needed. following steps from example: https://github.com/microsoft/vscode-remote-try-cpp/tree/main/.devcontainer + +set -e + +CMAKE_VERSION=${1:-"none"} + +if [ "${CMAKE_VERSION}" = "none" ]; then + echo "No CMake version specified, skipping CMake reinstallation" + exit 0 +fi + +# Cleanup temporary directory and associated files when exiting the script. +cleanup() { + EXIT_CODE=$? + set +e + if [[ -n "${TMP_DIR}" ]]; then + echo "Executing cleanup of tmp files" + rm -Rf "${TMP_DIR}" + fi + exit $EXIT_CODE +} +trap cleanup EXIT + + +echo "Installing CMake..." +apt-get -y purge --auto-remove cmake +mkdir -p /opt/cmake + +architecture=$(dpkg --print-architecture) +case "${architecture}" in + arm64) + ARCH=aarch64 ;; + amd64) + ARCH=x86_64 ;; + *) + echo "Unsupported architecture ${architecture}." + exit 1 + ;; +esac + +CMAKE_BINARY_NAME="cmake-${CMAKE_VERSION}-linux-${ARCH}.sh" +CMAKE_CHECKSUM_NAME="cmake-${CMAKE_VERSION}-SHA-256.txt" +TMP_DIR=$(mktemp -d -t cmake-XXXXXXXXXX) + +echo "${TMP_DIR}" +cd "${TMP_DIR}" + +curl -sSL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_BINARY_NAME}" -O +curl -sSL "https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/${CMAKE_CHECKSUM_NAME}" -O + +sha256sum -c --ignore-missing "${CMAKE_CHECKSUM_NAME}" +sh "${TMP_DIR}/${CMAKE_BINARY_NAME}" --prefix=/opt/cmake --skip-license + +ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake \ No newline at end of file From e93c3074d444680febcffa11d13373819b40934e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m?= <331742+KjellKod@users.noreply.github.com> Date: Mon, 27 Nov 2023 14:13:06 -0700 Subject: [PATCH 2/7] trying out codespaces --- .devcontainer/devcontainer.json | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..fd8a0e89 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,31 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/cpp +{ + "name": "C++", + "build": { + "dockerfile": "Dockerfile" + }, + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + "settings": {}, + "extensions": [ + "streetsidesoftware.code-spell-checker" + ] + } + } + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "gcc -v", + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} \ No newline at end of file From 51dd8871004daa4bb3748af90a365c2fc0808d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m?= <331742+KjellKod@users.noreply.github.com> Date: Mon, 27 Nov 2023 18:50:05 -0700 Subject: [PATCH 3/7] trying out codespaces --- docs/codespaces.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 docs/codespaces.md diff --git a/docs/codespaces.md b/docs/codespaces.md new file mode 100644 index 00000000..0fc7ef74 --- /dev/null +++ b/docs/codespaces.md @@ -0,0 +1,43 @@ +# Codespaces + +You can experiment with codespaces and g3log. + +## Learn about Github Codespaces +For an introduction to codespaces you can check out [example c++ codespace](https://github.com/microsoft/vscode-remote-try-cpp/tree/main) and [using-github-codespaces-with-github-cli](https://docs.github.com/en/codespaces/developing-in-a-codespace/using-github-codespaces-with-github-cli) + + +# Commandline codespaces Quick Reference + +1. List all your codespaces `gh codespace list` +2. Create a new codespace `gh codespace create -r OWNER/REPO_NAME [-b BRANCH]`. Ref [docs/github: Creating a codespace for a repository](https://docs.github.com/en/codespaces/developing-in-a-codespace/creating-a-codespace-for-a-repository) +3. View codebase details `gh codespace view` +4. Stop `gh codespace stop -c CODESPACE-NAME` +5. Delete `gh codespace delete -c CODESPACE-NAME` +6. Rebuild `gh codespace rebuild` +7. Rename `gh codespace edit -c CODESPACE-NAME -d DISPLAY-NAME` +8. SSH into REMOTE codespace `gh codespace ssh -c CODESPACE-NAME` +9. Open a remote codespace in CVisual Studio `gh codespace code -c CODESPACE-NAME` (ref: [github:doc cs studio](https://docs.github.com/en/codespaces/developing-in-a-codespace/using-github-codespaces-in-visual-studio-code)) +10. Copy local file to/from codespace `gh codespace cp [-r] SOURCE(S) DESTINATION`. Example: Copy a file from the local machine to the $HOME directory of a codespace: `gh codespace cp myfile.txt remote:`. Example Copy a file from a codespace to the current directory on the local machine: `gh codespace cp remote:myfile.txt .` (more information available [here](https://cli.github.com/manual/gh_codespace_cp)) + + +# Try g3log in a local dev container. + +Please note that this will build g3log as if it's on a Debian Linux platform. + +1. Clone this repository to your local filesystem. +2. Start Visual Studio Code. Press F1 and select the `Dev Containers: Open Folder in Container...` command. +3. Select the cloned copy of this g3log folder, wait for the container to start, and try things out! You should have debian C++ environment at hand. + +### Example cmake configuration and build +``` +Open a terminal in Visual Studio Code +mkdir debianbuild +cd debianbuild +cmake -DADD_G3LOG_UNIT_TEST=ON -DADD_G3LOG_BENCH_PERFORMANCE=ON .. +make -j +``` + +### Example runs +1. performance test in the container `./g3log-performance-threaded_mean 4` +2. unit tests `ctest -v` +3. Try a fatal example with dumped stack trace `./g3log-FATAL-contract` \ No newline at end of file From efe99d584a477ab7b1876e84143606a1b18b0832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m?= <331742+KjellKod@users.noreply.github.com> Date: Mon, 27 Nov 2023 18:55:18 -0700 Subject: [PATCH 4/7] trying out codespaces --- .devcontainer/Dockerfile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 2c928bde..62232404 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -4,16 +4,16 @@ FROM mcr.microsoft.com/devcontainers/cpp:debian ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="none" # Optionally install the cmake for vcpkg -COPY ./reinstall-cmake.sh /tmp/ +COPY ./reinstall_cmake.sh /tmp/ RUN if [ "${REINSTALL_CMAKE_VERSION_FROM_SOURCE}" != "none" ]; then \ - chmod +x /tmp/reinstall-cmake.sh && /tmp/reinstall-cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ + chmod +x /tmp/reinstall_cmake.sh && /tmp/reinstall_cmake.sh ${REINSTALL_CMAKE_VERSION_FROM_SOURCE}; \ fi \ - && rm -f /tmp/reinstall-cmake.sh + && rm -f /tmp/reinstall_cmake.sh # [Optional] Uncomment this section to install additional vcpkg ports. # RUN su vscode -c "${VCPKG_ROOT}/vcpkg install " # [Optional] Uncomment this section to install additional packages. # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ -# && apt-get -y install --no-install-recommends \ No newline at end of file +# && apt-get -y install --no-install-recommends From c7d301b2147f346add83b571dc028bb360d5e9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m?= <331742+KjellKod@users.noreply.github.com> Date: Mon, 27 Nov 2023 18:55:41 -0700 Subject: [PATCH 5/7] trying out codespaces --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 939cda38..6a61b5cf 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,10 @@ The super quick introduction to g3log can be seen in the steps 1 - 9 below. For more in-depth information please see the full usage description in [g3log.md](docs/g3log.md). The internal API for more advanced integration with g3log can be accessed in [API.md](docs/API.md) +## Experiment and try-out g3log in Github Codespaces +ref: [CodeSpsces.md](docs/codespaces.md) + + ## 1. Easy usage in files Avoid deep dependency injection complexity and instead get access to the logger as easy as ``` From b1f38dc4771d3cc65ad4fe5e942790eb0c530db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m?= <331742+KjellKod@users.noreply.github.com> Date: Mon, 27 Nov 2023 19:40:46 -0700 Subject: [PATCH 6/7] trying out codespaces --- docs/codespaces.md | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/docs/codespaces.md b/docs/codespaces.md index 0fc7ef74..966c2a71 100644 --- a/docs/codespaces.md +++ b/docs/codespaces.md @@ -40,4 +40,46 @@ make -j ### Example runs 1. performance test in the container `./g3log-performance-threaded_mean 4` 2. unit tests `ctest -v` -3. Try a fatal example with dumped stack trace `./g3log-FATAL-contract` \ No newline at end of file +3. Try a fatal example with dumped stack trace `./g3log-FATAL-contract` + + +### Example with Debugging. +Without any need to set up environment on your local machine you can also use Codespaces to debug examples, unit tests etc of g3log. +The pesky thing with VSCode, especially with cmake is to set up the launh.json. +It's a little bit easier if you open a VSCode terminal and do the cmake configuration and build there. Then the `launch.json` only needs to +contain information about the pecific executable. + +Here we try out the `g3log-FATAL-contract` after cmake configure with `-DCMAKE_BUILD_TYPE=Debug` +``` +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + // Remember to build the specific part of cmake with + // "cmake -DCMAKE_BUILD_TYPE=Debug" if you want to be able to debug it. + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Start", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/g3log-FATAL-contract", + "MIMode": "gdb", + "cwd": "${workspaceFolder}/build" + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + + ] +} +``` \ No newline at end of file From 5285e7984f08a101c169b006af99b19fcf02885b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjell=20Hedstr=C3=B6m=20-=20seeking=20Senior=20Engineering?= =?UTF-8?q?=20roles=20as=20well=20as=20contract=20opportunities?= Date: Tue, 28 Nov 2023 03:38:53 +0000 Subject: [PATCH 7/7] adding example vs code launch file --- .vscode/launch.json | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..77a1bac6 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + // Remember to build the specific part of cmake with + // mkdir build; cd build + // "cmake -DCMAKE_BUILD_TYPE=Debug .. " if you want to be able to debug it. + // don't forget to inspect the cmake output for more configuration options + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Start", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/g3log-FATAL-contract", + "MIMode": "gdb", + "cwd": "${workspaceFolder}/build" + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + + ] +} \ No newline at end of file