Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: MisterTea/EternalTerminal
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: et-v5.0.3
Choose a base ref
...
head repository: MisterTea/EternalTerminal
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref
Loading
Showing with 10,773 additions and 17,179 deletions.
  1. +100 −7 .circleci/config.yml
  2. +3 −0 .clang-format
  3. +5 −0 .codespellrc
  4. +44 −0 .devcontainer/Dockerfile
  5. +35 −0 .devcontainer/devcontainer.json
  6. +58 −0 .devcontainer/reinstall-cmake.sh
  7. +3 −0 .github/FUNDING.yml
  8. +1 −1 .github/ISSUE_TEMPLATE.md
  9. +20 −0 .github/workflows/clang-format-check.yml
  10. +78 −0 .github/workflows/codecov.yml
  11. +22 −0 .github/workflows/codespell.yml
  12. +100 −0 .github/workflows/linux_ci.yml
  13. +185 −0 .github/workflows/mac_ci.yml
  14. +95 −0 .github/workflows/novcpkg_build_master.yml
  15. +97 −0 .github/workflows/novcpkg_build_release.yml
  16. +127 −0 .github/workflows/vcpkg_build_master.yml
  17. +129 −0 .github/workflows/vcpkg_build_release.yml
  18. +18 −0 .gitignore
  19. +48 −3 .gitmodules
  20. +0 −20 .travis.yml
  21. +0 −89 .vscode/c_cpp_properties.json
  22. +0 −51 .vscode/settings.json
  23. +578 −193 CMakeLists.txt
  24. +239 −55 README.md
  25. +14 −14 build_static.sh
  26. +84 −0 cmake/FindUnwind.cmake
  27. +1 −1 cmake/{FindSodium.cmake → Findsodium.cmake}
  28. +18 −0 codecov.yml
  29. +11 −3 coverage.sh
  30. +32 −0 debian/postinst
  31. +21 −0 debian/postrm
  32. +7 −0 debian/prerm
  33. +19 −0 docker/Dockerfile.client
  34. +19 −0 docker/Dockerfile.server
  35. +36 −0 docker/README.md
  36. +17 −0 docker/container-entrypoint
  37. +17 −0 docs/creating_release.md
  38. BIN docs/images/connection_overview.png
  39. BIN docs/images/jumphost_architecture.png
  40. BIN docs/images/port_forwarding.png
  41. +252 −0 docs/protocol.md
  42. +3 −0 etc/et.cfg
  43. +1 −0 external/Catch2
  44. +1 −0 external/PlatformFolders
  45. +1 −0 external/ThreadPool
  46. +1 −0 external/UniversalStacktrace
  47. +1 −0 external/base64
  48. +1 −0 external/cotire
  49. +1 −0 external/cpp-httplib
  50. +1 −0 external/cxxopts
  51. +1 −0 external/easyloggingpp
  52. +0 −1 external/googletest
  53. +1 −0 external/json
  54. +1 −0 external/msgpack-c
  55. +1 −0 external/sanitizers-cmake
  56. +1 −0 external/sentry-native
  57. +1 −0 external/simpleini
  58. +1 −0 external/sole
  59. +1 −0 external/vcpkg
  60. +0 −1 init/launchd/homebrew.mxcl.et.plist
  61. +13 −0 proto/ET.proto
  62. +32 −12 proto/ETerminal.proto
  63. +0 −26 proto/HTM.proto
  64. +29 −0 rc.d/etserver
  65. +40 −0 renovate.json
  66. +0 −32 sandbox/CMakeLists.txt
  67. +0 −68 sandbox/TestBacked.cpp
  68. +0 −94 sandbox/TestConnection.cpp
  69. +0 −44 sandbox/TestFakeSocketHandler.cpp
  70. +0 −94 sandbox/TestFlakyConnection.cpp
  71. +0 −115 sandbox/TestTransfer.cpp
  72. +150 −0 scripts/ssh-et
  73. +36 −30 src/base/BackedReader.cpp
  74. +9 −8 src/base/BackedReader.hpp
  75. +25 −27 src/base/BackedWriter.cpp
  76. +8 −8 src/base/BackedWriter.hpp
  77. +67 −36 src/base/ClientConnection.cpp
  78. +12 −15 src/base/ClientConnection.hpp
  79. +120 −101 src/base/Connection.cpp
  80. +16 −27 src/base/Connection.hpp
  81. +8 −8 src/base/CryptoHandler.cpp
  82. +5 −5 src/base/CryptoHandler.hpp
  83. +68 −0 src/base/DaemonCreator.cpp
  84. +2 −1 src/{terminal → base}/DaemonCreator.hpp
  85. +0 −133 src/base/FakeSocketHandler.cpp
  86. +0 −45 src/base/FakeSocketHandler.hpp
  87. +0 −30 src/base/FlakyFakeSocketHandler.cpp
  88. +0 −22 src/base/FlakyFakeSocketHandler.hpp
  89. +3 −3 src/base/Globals.hpp
  90. +353 −49 src/base/Headers.hpp
  91. +5 −0 src/base/JsonLib.hpp
  92. +112 −0 src/base/LogHandler.cpp
  93. +24 −0 src/base/LogHandler.hpp
  94. +61 −0 src/base/Packet.hpp
  95. +147 −0 src/base/PipeSocketHandler.cpp
  96. +22 −0 src/base/PipeSocketHandler.hpp
  97. +21 −7 src/{terminal → base}/RawSocketUtils.cpp
  98. +14 −0 src/base/RawSocketUtils.hpp
  99. +21 −1 src/base/ServerClientConnection.cpp
  100. +6 −5 src/base/ServerClientConnection.hpp
  101. +83 −38 src/base/ServerConnection.cpp
  102. +24 −22 src/base/ServerConnection.hpp
  103. +57 −25 src/base/SocketHandler.cpp
  104. +65 −12 src/base/SocketHandler.hpp
  105. +209 −0 src/base/SubprocessToString.cpp
  106. +23 −0 src/base/SubprocessToString.hpp
  107. +287 −0 src/base/TcpSocketHandler.cpp
  108. +24 −0 src/base/TcpSocketHandler.hpp
  109. +68 −0 src/base/TunnelUtils.cpp
  110. +20 −0 src/base/TunnelUtils.hpp
  111. +158 −333 src/base/UnixSocketHandler.cpp
  112. +13 −12 src/base/UnixSocketHandler.hpp
  113. +46 −0 src/base/WinsockContext.hpp
  114. +0 −2,993 src/base/easylogging++.cc
  115. +0 −4,619 src/base/easylogging++.h
  116. +19 −8 src/htm/HtmClient.cpp
  117. +2 −2 src/htm/HtmClient.hpp
  118. +39 −22 src/htm/HtmClientMain.cpp
  119. +1 −0 src/htm/HtmHeaderCodes.hpp
  120. +55 −48 src/htm/HtmServer.cpp
  121. +3 −3 src/htm/HtmServer.hpp
  122. +15 −11 src/htm/HtmServerMain.cpp
  123. +6 −13 src/htm/IpcPairClient.cpp
  124. +3 −2 src/htm/IpcPairClient.hpp
  125. +3 −1 src/htm/IpcPairEndpoint.cpp
  126. +10 −4 src/htm/IpcPairEndpoint.hpp
  127. +8 −38 src/htm/IpcPairServer.cpp
  128. +3 −2 src/htm/IpcPairServer.hpp
  129. +94 −56 src/htm/MultiplexerState.cpp
  130. +17 −56 src/htm/MultiplexerState.hpp
  131. +11 −37 src/htm/TerminalHandler.cpp
  132. +0 −903 src/htm/sole.hpp
  133. +31 −0 src/terminal/Console.hpp
  134. +0 −47 src/terminal/DaemonCreator.cpp
  135. +0 −43 src/terminal/LogHandler.cpp
  136. +0 −15 src/terminal/LogHandler.hpp
  137. +220 −96 src/terminal/ParseConfigFile.hpp
  138. +0 −213 src/terminal/PortForwardHandler.cpp
  139. +0 −38 src/terminal/PortForwardHandler.hpp
  140. +3 −3 src/terminal/ProcessHelper.hpp
  141. +105 −0 src/terminal/PsuedoTerminalConsole.hpp
  142. +117 −0 src/terminal/PsuedoUserTerminal.hpp
  143. +0 −118 src/terminal/RawSocketUtils.hpp
  144. +223 −0 src/terminal/ServerFifoPath.cpp
  145. +89 −0 src/terminal/ServerFifoPath.hpp
  146. +125 −146 src/terminal/SshSetupHandler.cpp
  147. +10 −5 src/terminal/SshSetupHandler.hpp
  148. +0 −31 src/terminal/StdIoBuffer.hpp
  149. +0 −75 src/terminal/SystemUtils.cpp
  150. +0 −12 src/terminal/SystemUtils.hpp
  151. +306 −0 src/terminal/TelemetryService.cpp
  152. +54 −0 src/terminal/TelemetryService.hpp
  153. +280 −414 src/terminal/TerminalClient.cpp
  154. +44 −0 src/terminal/TerminalClient.hpp
  155. +403 −0 src/terminal/TerminalClientMain.cpp
  156. +200 −0 src/terminal/TerminalMain.cpp
  157. +275 −504 src/terminal/TerminalServer.cpp
  158. +49 −0 src/terminal/TerminalServer.hpp
  159. +213 −0 src/terminal/TerminalServerMain.cpp
  160. +205 −0 src/terminal/UserJumphostHandler.cpp
  161. +30 −0 src/terminal/UserJumphostHandler.hpp
  162. +21 −0 src/terminal/UserTerminal.hpp
  163. +84 −109 src/terminal/UserTerminalHandler.cpp
  164. +19 −6 src/terminal/UserTerminalHandler.hpp
  165. +57 −53 src/terminal/UserTerminalRouter.cpp
  166. +20 −10 src/terminal/UserTerminalRouter.hpp
  167. +0 −260 src/terminal/base64.hpp
  168. +11 −10 src/terminal/{PortForwardDestinationHandler.cpp → forwarding/ForwardDestinationHandler.cpp}
  169. +4 −7 src/terminal/{PortForwardDestinationHandler.hpp → forwarding/ForwardDestinationHandler.hpp}
  170. +30 −26 src/terminal/{PortForwardSourceHandler.cpp → forwarding/ForwardSourceHandler.cpp}
  171. +12 −11 src/terminal/{PortForwardSourceHandler.hpp → forwarding/ForwardSourceHandler.hpp}
  172. +257 −0 src/terminal/forwarding/PortForwardHandler.cpp
  173. +41 −0 src/terminal/forwarding/PortForwardHandler.hpp
  174. +0 −539 src/terminal/simpleini/ConvertUTF.c
  175. +0 −149 src/terminal/simpleini/ConvertUTF.h
  176. +0 −3,437 src/terminal/simpleini/SimpleIni.h
  177. +3 −2 {debian → systemctl}/et.service
  178. +180 −0 test/BackedTest.cpp
  179. +0 −36 test/CMakeLists.txt
  180. +351 −0 test/ConnectionTest.cpp
  181. +4 −9 test/{TestCryptoHandler.cpp → CryptoHandlerTest.cpp}
  182. +196 −0 test/FakeConsole.hpp
  183. +92 −0 test/FlakySocketHandler.hpp
  184. +45 −0 test/FuzzableTerminalServer.hpp
  185. +170 −0 test/JumphostTest.cpp
  186. +37 −0 test/Main.cpp
  187. +252 −0 test/ServerFifoPathTest.cpp
  188. +31 −0 test/TerminalServerFuzzer.cpp
  189. +30 −0 test/TerminalServerRouterFuzzer.cpp
  190. +440 −0 test/TerminalTest.cpp
  191. +12 −0 test/TestHeaders.hpp
  192. +0 −10 test/TestMain.cpp
  193. +27 −0 test/system_tests/connect_with_jumphost.sh
  194. +1 −0 test/test_tsan.suppression
  195. +17 −0 vcpkg.json
107 changes: 100 additions & 7 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,106 @@
version: 2
jobs:
build:
docker:
- image: ubuntu:bionic
connect_to_initial_version:
machine:
image: ubuntu-2004:202101-01
steps:
- run:
name: Avoid hosts unknown for github
command: mkdir -p ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
- run:
name: Install system dependencies
command: sudo DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get -y update; sudo DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -y curl zip unzip tar libssl-dev libcurl4-openssl-dev libunwind-dev git cmake ninja-build libutempter-dev build-essential openssh-server protobuf-compiler libsodium-dev libgflags-dev libprotobuf-dev libtool libtool-bin autoconf
- checkout
- run:
name: Greeting
command: echo Hello, world.
name: Set up ssh & known_hosts
command: sudo sed -i -e 's/#ListenAddress/ListenAddress/' /etc/ssh/sshd_config; sudo sed -i -e 's/AddressFamily inet/AddressFamily any/' /etc/ssh/sshd_config; sudo /etc/init.d/ssh restart; rm -f ~/.ssh/id_rsa*; ssh-keygen -q -N "" -f ~/.ssh/id_rsa; sudo rm -f ~/.ssh/authorized_keys; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys; rm -f ~/.ssh/known_hosts; ssh -o "StrictHostKeyChecking no" localhost ls; ssh -o "StrictHostKeyChecking no" 0:0:0:0:0:0:0:1 ls

- run:
name: Init submodules
command: if [ $CIRCLE_BRANCH != "release" ]; then git submodule update --init --recursive; fi
- run:
name: vcpkg
command: if [ $CIRCLE_BRANCH != "release" ]; then external/vcpkg/bootstrap-vcpkg.sh; mkdir build; ./external/vcpkg/vcpkg --x-install-root=$PWD/build/vcpkg_installed --triplet=x64-linux --feature-flags="manifests" install; fi
- run:
name: Build the root version of the project
command: mkdir ../root_version; cp -Rf .git * ../root_version/; cd ../root_version; git checkout v6; git submodule update --init --recursive; cd build; cmake ../; make -j4
no_output_timeout: 60m
- run:
name: Build the project
command: cd build; cmake ../; make -j4
no_output_timeout: 60m
- run:
name: Connect new -> old
command: sudo ../root_version/build/etserver --daemon; sudo cp ../root_version/build/etterminal /usr/bin/etterminal; sleep 3; build/et -c "ls" localhost --logtostdout --verbose=9
- run:
name: Connect new -> old (ipv6)
command: build/et -c "ls" 0:0:0:0:0:0:0:1 --logtostdout --verbose=9
- run:
name: Connect new -> old (ipv6 with port in host)
command: build/et -c "ls" 0:0:0:0:0:0:0:1:2022 --logtostdout --verbose=9
- run:
name: Connect new -> old (ipv6 abbreviated)
command: build/et -c "ls" ::1 --logtostdout --verbose=9
- run:
name: Connect new -> old (ipv6 abbreviated with port arg)
command: build/et -c "ls" ::1 --port 2022 --logtostdout --verbose=9
- run:
name: Kill server
command: sudo pkill etserver
- run:
name: Connect old -> new
command: export TERM=xterm-256color; sudo build/etserver --daemon; sudo cp build/etterminal /usr/bin/etterminal; sleep 3; ../root_version/build/et -c "ls" localhost --logtostdout --verbose=9
- run:
name: Kill server
command: sudo pkill etserver
- run:
name: Debug info/logs if failed
when: always
command: ls -la /tmp/et*; sudo awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' /tmp/et*.log

connect_with_jumphost:
machine:
image: ubuntu-2004:202101-01
steps:
- run:
name: Avoid hosts unknown for github
command: mkdir -p ~/.ssh/ && echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
- run:
name: Install system dependencies
command: sudo DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get -y update; sudo DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -y curl zip unzip tar libssl-dev libcurl4-openssl-dev libunwind-dev git cmake ninja-build libutempter-dev build-essential openssh-server libtool libtool-bin autoconf
- checkout
- run:
name: Set up ssh & known_hosts
command: sudo /etc/init.d/ssh start; rm -f ~/.ssh/id_rsa*; ssh-keygen -q -N "" -f ~/.ssh/id_rsa; sudo rm -f ~/.ssh/authorized_keys; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys; rm -f ~/.ssh/known_hosts; ssh -o "StrictHostKeyChecking no" localhost ls
- run:
name: Init submodules
command: if [ $CIRCLE_BRANCH != "release" ]; then git submodule update --init --recursive; fi
- run:
name: vcpkg
command: if [ $CIRCLE_BRANCH != "release" ]; then external/vcpkg/bootstrap-vcpkg.sh; mkdir build; ./external/vcpkg/vcpkg --x-install-root=$PWD/build/vcpkg_installed --triplet=x64-linux --feature-flags="manifests" install; fi
- run:
name: Build the project
command: cd build; cmake -DCMAKE_INSTALL_PREFIX=/usr ../; make -j4; sudo make install
no_output_timeout: 60m
- run:
name: Start Servers
command: sudo build/etserver --daemon; sudo build/etserver --port 2023 --serverfifo=/tmp/etserver.idpasskey.fifo2 --daemon; sleep 3; build/et -c "ls" --serverfifo=/tmp/etserver.idpasskey.fifo2 --logtostdout --verbose=9 --jumphost localhost --jport 2022 localhost:2023
- run:
name: Kill servers
command: sudo pkill etserver
- run:
name: Print the Current Time
command: date
name: Debug info/logs if failed
when: always
command: ls -la /tmp/et*; sudo awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' /tmp/et*.log

workflows:
version: 2
build_and_test:
jobs:
- connect_with_jumphost
- connect_to_initial_version:
filters:
branches:
ignore:
- release
- deployment
3 changes: 3 additions & 0 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
BasedOnStyle: Google
---
5 changes: 5 additions & 0 deletions .codespellrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[codespell]
skip = .git,*.pdf,*.svg,.codespellrc
check-hidden = true
ignore-regex = \bhenrik@gassmann.onl\b
ignore-words-list = te
44 changes: 44 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.224.3/containers/cpp/.devcontainer/base.Dockerfile

# [Choice] Debian / Ubuntu version (use Debian 11, Ubuntu 18.04/21.04 on local arm64/Apple Silicon): debian-11, debian-10, ubuntu-21.04, ubuntu-20.04, ubuntu-18.04
ARG VARIANT="bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/cpp:0-${VARIANT}

ARG USERNAME=vscode

# [Optional] Install CMake version different from what base image has already installed.
# CMake reinstall choices: none, 3.21.5, 3.22.2, or versions from https://cmake.org/download/
ARG REINSTALL_CMAKE_VERSION_FROM_SOURCE="3.23.1"

# Use installed binaries from the system.
# Do not download latest version of CMake and Ninja during vcpkg bootstrap!
ENV VCPKG_FORCE_SYSTEM_BINARIES=1
ENV VCPKG_USE_SYSTEM_BINARIES=1

# 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

# Install dependencies.
RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
&& apt-get -y install --no-install-recommends \
libboost-dev \
libsodium-dev \
libprotobuf-dev \
protobuf-compiler \
libgflags-dev \
libutempter-dev \
build-essential \
ninja-build \
# Note that in Ubuntu 21.04, there is no libcurl-dev, use libcurl4-openssl-dev
libcurl4-openssl-dev

#
# Set up command history volume
# See https://code.visualstudio.com/remote/advancedcontainers/persist-bash-history
#
RUN mkdir /commandhistory \
&& chown -R $USERNAME /commandhistory
35 changes: 35 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.224.3/containers/cpp
{
"name": "C++",
"build": {
"dockerfile": "Dockerfile",
// Update 'VARIANT' to pick an Debian / Ubuntu OS version: debian-11, debian-10, debian-9, ubuntu-21.04, ubuntu-20.04, ubuntu-18.04
// Use Debian 11, Debian 9, Ubuntu 18.04 or Ubuntu 21.04 on local arm64/Apple Silicon
"args": { "VARIANT": "debian-11" }
},
"runArgs": ["--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined"],

// Set *default* container specific settings.json values on container create.
"settings": {},

// Add the IDs of extensions you want installed when the container is created.
"extensions": [
"ms-vscode.cpptools",
"ms-vscode.cmake-tools"
],

// 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": "git submodule update --init --recursive",

// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.
"remoteUser": "vscode",

// For sharing shell history out of the container.
"mounts": [
"source=eternalterminal-history,target=/commandhistory,type=volume"
]
}
58 changes: 58 additions & 0 deletions .devcontainer/reinstall-cmake.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
#!/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.
#-------------------------------------------------------------------------------------------------------------
#
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
3 changes: 3 additions & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# These are supported funding model platforms

github: MisterTea
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
If you have set up ET correctly and are having an issue connecting/maintaining a session, please consider running in verbose mode and adding client & server logs to your issue.

To run in verbose mode, pass the -v flag to et.
To run in verbose mode, pass the --verbose=9 flag to et.

To collect logs, run the following on your client:

20 changes: 20 additions & 0 deletions .github/workflows/clang-format-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: clang-format Check
on: [pull_request]
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
strategy:
matrix:
path:
- 'src'
- 'test'
- 'proto'
steps:
- uses: actions/checkout@v4
- name: Run clang-format style check for C/C++/Protobuf source code.
uses: jidicula/clang-format-action@v4.13.0
with:
clang-format-version: '18'
check-path: ${{ matrix.path }}
fallback-style: 'Google'
78 changes: 78 additions & 0 deletions .github/workflows/codecov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
name: Codecov

on:
push:
branches:
- master
pull_request:

jobs:
codecov:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v4
- name: Setup
shell: bash
run: |
mkdir -p ~/.ssh/
echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
sudo apt-get update
sudo DEBIAN_FRONTEND=noninteractive ACCEPT_EULA=Y apt-get install -y curl zip unzip tar libssl-dev libcurl4-openssl-dev libunwind-dev git cmake ninja-build gdb protobuf-compiler libsodium-dev libgflags-dev libprotobuf-dev libutempter-dev g++ lcov libtool libtool-bin autoconf
echo "Host localhost\n Port 2222\n\n" >> ~/.ssh/config
sudo /usr/sbin/sshd -p 2222
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P "" -N ""
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/known_hosts
ssh -vvvvvvv -o "StrictHostKeyChecking no" -o 'PreferredAuthentications=publickey' localhost "echo foobar" # Fails if we can't ssh into localhost without a password
if [[ -z "${ACT}" ]]; then auth_header="$(git config --local --get http.https://github.com/.extraheader)"; fi
git submodule sync --recursive
git submodule update --init --force --recursive
# Restore both vcpkg and its artifacts from the GitHub cache service.
- name: Restore vcpkg and its artifacts.
uses: actions/cache@v4
with:
# The first path is where vcpkg generates artifacts while consuming the vcpkg.json manifest file.
# The second path is the location of vcpkg (it contains the vcpkg executable and data files).
# The other paths starting with '!' are exclusions: they contain temporary files generated during the build of the installed packages.
path: |
${{ env.CMAKE_BUILD_DIR }}/vcpkg_installed/
${{ env.VCPKG_ROOT }}
!${{ env.VCPKG_ROOT }}/buildtrees
!${{ env.VCPKG_ROOT }}/packages
!${{ env.VCPKG_ROOT }}/downloads
# The key is composed in a way that it gets properly invalidated: this must happen whenever vcpkg's Git commit id changes, or the list of packages changes. In this case a cache miss must happen and a new entry with a new key with be pushed to GitHub the cache service.
# The key includes: hash of the vcpkg.json file, the hash of the vcpkg Git commit id, and the used vcpkg's triplet. The vcpkg's commit id would suffice, but computing an hash out it does not harm.
# Note: given a key, the cache content is immutable. If a cache entry has been created improperly, in order the recreate the right content the key must be changed as well, and it must be brand new (i.e. not existing already).
key: |
et-vcpkg-${{ hashFiles( 'vcpkg.json' ) }}-${{ hashFiles( '.git/modules/external/vcpkg/HEAD' )}}-linux-codecov-1
- name: Build
run: |
mkdir build
pushd build
cmake -DCODE_COVERAGE=ON ../
make -j`nproc`
popd
- name: Build Test with code coverage
run: |
./build/et-test
./test/system_tests/connect_with_jumphost.sh
lcov --capture --directory . --output-file ./coverage.info
lcov --remove ./coverage.info '/usr/*' --output-file coverage.info # filter system-files
lcov --list ./coverage.info # debug info
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
directory: ./
fail_ci_if_error: true
files: ./coverage.info
token: ${{ secrets.CODECOV_TOKEN }}
verbose: true
22 changes: 22 additions & 0 deletions .github/workflows/codespell.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: Codespell

on:
push:
branches: [master]
pull_request:
branches: [master]

permissions:
contents: read

jobs:
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4
- name: Codespell
uses: codespell-project/actions-codespell@v2
Loading