From 52b9568982bac1836c582264ca88530808e2502e Mon Sep 17 00:00:00 2001 From: "Zachary J. Fields" Date: Fri, 21 Jun 2024 17:17:56 -0500 Subject: [PATCH] Remove unneeded directories from `note-c` --- src/note-c/.devcontainer/devcontainer.json | 39 - .../.github/actions/load-ci-image/action.yml | 17 - src/note-c/.github/workflows/ci.yml | 183 - src/note-c/.github/workflows/md5srv-tests.yml | 42 - .../workflows/notecard-binary-tests.yml | 221 - .../.github/workflows/publish_docs_site.yml | 40 - src/note-c/.vscode/extensions.json | 9 - src/note-c/.vscode/tasks.json | 58 - src/note-c/assets/blues_logo_no_text.png | Bin 4854 -> 0 bytes src/note-c/docs/CMakeLists.txt | 26 - src/note-c/docs/Doxyfile.in | 2820 ------- src/note-c/docs/_extensions/doxyrunner.py | 399 - src/note-c/docs/api_reference.rst | 188 - src/note-c/docs/calling_the_notecard_api.rst | 81 - src/note-c/docs/conf.py | 71 - src/note-c/docs/getting_started.rst | 20 - src/note-c/docs/index.rst | 18 - src/note-c/docs/library_initialization.rst | 343 - src/note-c/docs/ports.rst | 28 - src/note-c/scripts/build_docs.sh | 23 - src/note-c/scripts/check_libc_dependencies.sh | 92 - src/note-c/scripts/check_runner_config.sh | 36 - src/note-c/scripts/git_hooks/pre-push | 23 - src/note-c/scripts/run_astyle.sh | 41 - src/note-c/scripts/run_md5srv.sh | 4 - src/note-c/scripts/run_tunnelmole.sh | 52 - src/note-c/scripts/run_unit_tests.sh | 73 - src/note-c/scripts/wait_for_file.sh | 14 - src/note-c/test/CMakeLists.txt | 212 - src/note-c/test/README.md | 80 - .../lib/notecard_binary/NotecardBinary.cpp | 15 - .../lib/notecard_binary/NotecardBinary.h | 1294 ---- .../lib/notecard_binary/NotecardComms.cpp | 154 - .../lib/notecard_binary/NotecardComms.h | 55 - .../lib/notecard_binary/defines.txt | 5 - .../lib/notecard_binary/small_img.cpp | 4921 ------------ .../lib/notecard_binary/small_img.h | 10 - .../test/hitl/card.binary/platformio.ini | 30 - src/note-c/test/hitl/card.binary/src/main.cpp | 19 - .../hitl/card.binary/test/LOCAL_TESTING.md | 50 - .../test/hitl/card.binary/test/README.md | 55 - .../test/test_binary_generators.cpp | 91 - .../card.binary/test/test_binary_generators.h | 62 - .../card.binary/test/test_card_binary.cpp | 477 -- .../hitl/card.binary/test/test_card_binary.h | 4 - .../test/hitl/card.binary/test/test_main.cpp | 39 - .../hitl/card.binary/test/test_unity_util.cpp | 37 - .../hitl/card.binary/test/test_unity_util.h | 34 - src/note-c/test/hitl/scripts/md5srv.bats | 260 - src/note-c/test/hitl/scripts/md5srv.py | 318 - src/note-c/test/hitl/scripts/note.json | 37 - src/note-c/test/include/fff.h | 6649 ----------------- src/note-c/test/include/test_static.h | 25 - src/note-c/test/include/time_mocks.h | 24 - .../test/src/JAddBinaryToObject_test.cpp | 86 - src/note-c/test/src/JAllocString_test.cpp | 62 - src/note-c/test/src/JAtoI_test.cpp | 57 - src/note-c/test/src/JAtoN_test.cpp | 64 - src/note-c/test/src/JBaseItemType_test.cpp | 103 - src/note-c/test/src/JBoolValue_test.cpp | 53 - src/note-c/test/src/JContainsString_test.cpp | 71 - src/note-c/test/src/JGetArray_test.cpp | 56 - .../test/src/JGetBinaryFromObject_test.cpp | 90 - src/note-c/test/src/JGetBool_test.cpp | 56 - src/note-c/test/src/JGetInt_test.cpp | 56 - src/note-c/test/src/JGetItemName_test.cpp | 50 - src/note-c/test/src/JGetNumber_test.cpp | 56 - src/note-c/test/src/JGetObject_test.cpp | 56 - src/note-c/test/src/JGetString_test.cpp | 69 - src/note-c/test/src/JGetType_test.cpp | 154 - src/note-c/test/src/JIntValue_test.cpp | 49 - src/note-c/test/src/JIsExactString_test.cpp | 74 - src/note-c/test/src/JIsNullString_test.cpp | 64 - src/note-c/test/src/JIsPresent_test.cpp | 53 - src/note-c/test/src/JItoA_test.cpp | 118 - src/note-c/test/src/JNtoA_test.cpp | 71 - src/note-c/test/src/JNumberValue_test.cpp | 49 - .../test/src/JPrintUnformatted_test.cpp | 66 - .../test/src/JSON_number_handling_test.cpp | 417 -- src/note-c/test/src/JStringValue_test.cpp | 49 - src/note-c/test/src/JType_test.cpp | 63 - src/note-c/test/src/Jtolower_test.cpp | 73 - src/note-c/test/src/NoteAdd_test.cpp | 75 - .../test/src/NoteBinaryCodecDecode_test.cpp | 91 - .../test/src/NoteBinaryCodecEncode_test.cpp | 92 - .../NoteBinaryCodecMaxDecodedLength_test.cpp | 56 - .../NoteBinaryCodecMaxEncodedLength_test.cpp | 56 - .../src/NoteBinaryStoreDecodedLength_test.cpp | 135 - .../src/NoteBinaryStoreEncodedLength_test.cpp | 133 - .../test/src/NoteBinaryStoreReceive_test.cpp | 245 - .../test/src/NoteBinaryStoreReset_test.cpp | 87 - .../test/src/NoteBinaryStoreTransmit_test.cpp | 407 - .../test/src/NoteClearLocation_test.cpp | 65 - .../test/src/NoteDebugSyncStatus_test.cpp | 170 - src/note-c/test/src/NoteDebug_test.cpp | 127 - src/note-c/test/src/NoteDebugf_test.cpp | 49 - src/note-c/test/src/NoteErrorClean_test.cpp | 50 - src/note-c/test/src/NoteFactoryReset_test.cpp | 85 - src/note-c/test/src/NoteGetContact_test.cpp | 110 - src/note-c/test/src/NoteGetEnvNumber_test.cpp | 70 - src/note-c/test/src/NoteGetEnv_test.cpp | 102 - .../test/src/NoteGetLocationMode_test.cpp | 67 - src/note-c/test/src/NoteGetLocation_test.cpp | 72 - src/note-c/test/src/NoteGetNetStatus_test.cpp | 67 - .../test/src/NoteGetServiceConfig_test.cpp | 99 - src/note-c/test/src/NoteGetStatus_test.cpp | 98 - .../test/src/NoteGetTemperature_test.cpp | 81 - src/note-c/test/src/NoteGetVersion_test.cpp | 67 - src/note-c/test/src/NoteGetVoltage_test.cpp | 81 - src/note-c/test/src/NoteIsConnected_test.cpp | 69 - src/note-c/test/src/NoteLocalTimeST_test.cpp | 100 - .../test/src/NoteLocationValid_test.cpp | 79 - src/note-c/test/src/NoteNewCommand_test.cpp | 56 - src/note-c/test/src/NoteNewRequest_test.cpp | 56 - .../NotePayloadRetrieveAfterSleep_test.cpp | 143 - .../test/src/NotePayloadSaveAndSleep_test.cpp | 76 - src/note-c/test/src/NotePayload_test.cpp | 145 - src/note-c/test/src/NotePrint_test.cpp | 86 - src/note-c/test/src/NotePrintf_test.cpp | 53 - src/note-c/test/src/NotePrintln_test.cpp | 58 - src/note-c/test/src/NoteRegion_test.cpp | 101 - .../test/src/NoteRequestResponseJSON_test.cpp | 273 - .../src/NoteRequestResponseWithRetry_test.cpp | 229 - .../test/src/NoteRequestResponse_test.cpp | 67 - .../test/src/NoteRequestWithRetry_test.cpp | 122 - src/note-c/test/src/NoteRequest_test.cpp | 70 - src/note-c/test/src/NoteReset_test.cpp | 58 - .../test/src/NoteResponseError_test.cpp | 53 - src/note-c/test/src/NoteSendToRoute_test.cpp | 106 - src/note-c/test/src/NoteSerialHooks_test.cpp | 63 - src/note-c/test/src/NoteSetContact_test.cpp | 75 - .../test/src/NoteSetEnvDefaultNumber_test.cpp | 58 - .../test/src/NoteSetEnvDefault_test.cpp | 67 - .../test/src/NoteSetFnI2CMutex_test.cpp | 58 - src/note-c/test/src/NoteSetFnI2C_test.cpp | 119 - src/note-c/test/src/NoteSetFnMutex_test.cpp | 82 - .../test/src/NoteSetFnNoteMutex_test.cpp | 58 - src/note-c/test/src/NoteSetFnSerial_test.cpp | 117 - src/note-c/test/src/NoteSetFn_test.cpp | 93 - .../test/src/NoteSetLocationMode_test.cpp | 78 - src/note-c/test/src/NoteSetLocation_test.cpp | 68 - src/note-c/test/src/NoteSetProductID_test.cpp | 75 - .../test/src/NoteSetSerialNumber_test.cpp | 75 - src/note-c/test/src/NoteSetSyncMode_test.cpp | 98 - .../test/src/NoteSetUploadMode_test.cpp | 80 - src/note-c/test/src/NoteSleep_test.cpp | 80 - src/note-c/test/src/NoteTemplate_test.cpp | 68 - src/note-c/test/src/NoteTimeSet_test.cpp | 84 - src/note-c/test/src/NoteTime_test.cpp | 105 - .../test/src/NoteTransactionHooks_test.cpp | 63 - src/note-c/test/src/NoteTransaction_test.cpp | 446 -- src/note-c/test/src/NoteUserAgent_test.cpp | 100 - src/note-c/test/src/NoteWake_test.cpp | 79 - src/note-c/test/src/crcAdd_test.cpp | 71 - src/note-c/test/src/crcError_test.cpp | 88 - .../test/src/i2cChunkedReceive_test.cpp | 418 -- .../test/src/i2cChunkedTransmit_test.cpp | 145 - .../test/src/i2cNoteQueryLength_test.cpp | 152 - src/note-c/test/src/i2cNoteReset_test.cpp | 509 -- .../test/src/i2cNoteTransaction_test.cpp | 263 - .../test/src/serialChunkedReceive_test.cpp | 302 - .../test/src/serialChunkedTransmit_test.cpp | 156 - src/note-c/test/src/serialNoteReset_test.cpp | 135 - .../test/src/serialNoteTransaction_test.cpp | 356 - 164 files changed, 31924 deletions(-) delete mode 100644 src/note-c/.devcontainer/devcontainer.json delete mode 100644 src/note-c/.github/actions/load-ci-image/action.yml delete mode 100644 src/note-c/.github/workflows/ci.yml delete mode 100644 src/note-c/.github/workflows/md5srv-tests.yml delete mode 100644 src/note-c/.github/workflows/notecard-binary-tests.yml delete mode 100644 src/note-c/.github/workflows/publish_docs_site.yml delete mode 100644 src/note-c/.vscode/extensions.json delete mode 100644 src/note-c/.vscode/tasks.json delete mode 100644 src/note-c/assets/blues_logo_no_text.png delete mode 100644 src/note-c/docs/CMakeLists.txt delete mode 100644 src/note-c/docs/Doxyfile.in delete mode 100644 src/note-c/docs/_extensions/doxyrunner.py delete mode 100644 src/note-c/docs/api_reference.rst delete mode 100644 src/note-c/docs/calling_the_notecard_api.rst delete mode 100644 src/note-c/docs/conf.py delete mode 100644 src/note-c/docs/getting_started.rst delete mode 100644 src/note-c/docs/index.rst delete mode 100644 src/note-c/docs/library_initialization.rst delete mode 100644 src/note-c/docs/ports.rst delete mode 100755 src/note-c/scripts/build_docs.sh delete mode 100755 src/note-c/scripts/check_libc_dependencies.sh delete mode 100755 src/note-c/scripts/check_runner_config.sh delete mode 100755 src/note-c/scripts/git_hooks/pre-push delete mode 100755 src/note-c/scripts/run_astyle.sh delete mode 100755 src/note-c/scripts/run_md5srv.sh delete mode 100755 src/note-c/scripts/run_tunnelmole.sh delete mode 100755 src/note-c/scripts/run_unit_tests.sh delete mode 100755 src/note-c/scripts/wait_for_file.sh delete mode 100644 src/note-c/test/CMakeLists.txt delete mode 100644 src/note-c/test/README.md delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/NotecardBinary.cpp delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/NotecardBinary.h delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/NotecardComms.cpp delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/NotecardComms.h delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/defines.txt delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/small_img.cpp delete mode 100644 src/note-c/test/hitl/card.binary/lib/notecard_binary/small_img.h delete mode 100644 src/note-c/test/hitl/card.binary/platformio.ini delete mode 100644 src/note-c/test/hitl/card.binary/src/main.cpp delete mode 100644 src/note-c/test/hitl/card.binary/test/LOCAL_TESTING.md delete mode 100644 src/note-c/test/hitl/card.binary/test/README.md delete mode 100644 src/note-c/test/hitl/card.binary/test/test_binary_generators.cpp delete mode 100644 src/note-c/test/hitl/card.binary/test/test_binary_generators.h delete mode 100644 src/note-c/test/hitl/card.binary/test/test_card_binary.cpp delete mode 100644 src/note-c/test/hitl/card.binary/test/test_card_binary.h delete mode 100644 src/note-c/test/hitl/card.binary/test/test_main.cpp delete mode 100644 src/note-c/test/hitl/card.binary/test/test_unity_util.cpp delete mode 100644 src/note-c/test/hitl/card.binary/test/test_unity_util.h delete mode 100644 src/note-c/test/hitl/scripts/md5srv.bats delete mode 100755 src/note-c/test/hitl/scripts/md5srv.py delete mode 100644 src/note-c/test/hitl/scripts/note.json delete mode 100644 src/note-c/test/include/fff.h delete mode 100644 src/note-c/test/include/test_static.h delete mode 100644 src/note-c/test/include/time_mocks.h delete mode 100644 src/note-c/test/src/JAddBinaryToObject_test.cpp delete mode 100644 src/note-c/test/src/JAllocString_test.cpp delete mode 100644 src/note-c/test/src/JAtoI_test.cpp delete mode 100644 src/note-c/test/src/JAtoN_test.cpp delete mode 100644 src/note-c/test/src/JBaseItemType_test.cpp delete mode 100644 src/note-c/test/src/JBoolValue_test.cpp delete mode 100644 src/note-c/test/src/JContainsString_test.cpp delete mode 100644 src/note-c/test/src/JGetArray_test.cpp delete mode 100644 src/note-c/test/src/JGetBinaryFromObject_test.cpp delete mode 100644 src/note-c/test/src/JGetBool_test.cpp delete mode 100644 src/note-c/test/src/JGetInt_test.cpp delete mode 100644 src/note-c/test/src/JGetItemName_test.cpp delete mode 100644 src/note-c/test/src/JGetNumber_test.cpp delete mode 100644 src/note-c/test/src/JGetObject_test.cpp delete mode 100644 src/note-c/test/src/JGetString_test.cpp delete mode 100644 src/note-c/test/src/JGetType_test.cpp delete mode 100644 src/note-c/test/src/JIntValue_test.cpp delete mode 100644 src/note-c/test/src/JIsExactString_test.cpp delete mode 100644 src/note-c/test/src/JIsNullString_test.cpp delete mode 100644 src/note-c/test/src/JIsPresent_test.cpp delete mode 100644 src/note-c/test/src/JItoA_test.cpp delete mode 100644 src/note-c/test/src/JNtoA_test.cpp delete mode 100644 src/note-c/test/src/JNumberValue_test.cpp delete mode 100644 src/note-c/test/src/JPrintUnformatted_test.cpp delete mode 100644 src/note-c/test/src/JSON_number_handling_test.cpp delete mode 100644 src/note-c/test/src/JStringValue_test.cpp delete mode 100644 src/note-c/test/src/JType_test.cpp delete mode 100644 src/note-c/test/src/Jtolower_test.cpp delete mode 100644 src/note-c/test/src/NoteAdd_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryCodecDecode_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryCodecEncode_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryCodecMaxDecodedLength_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryCodecMaxEncodedLength_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryStoreDecodedLength_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryStoreEncodedLength_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryStoreReceive_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryStoreReset_test.cpp delete mode 100644 src/note-c/test/src/NoteBinaryStoreTransmit_test.cpp delete mode 100644 src/note-c/test/src/NoteClearLocation_test.cpp delete mode 100644 src/note-c/test/src/NoteDebugSyncStatus_test.cpp delete mode 100644 src/note-c/test/src/NoteDebug_test.cpp delete mode 100644 src/note-c/test/src/NoteDebugf_test.cpp delete mode 100644 src/note-c/test/src/NoteErrorClean_test.cpp delete mode 100644 src/note-c/test/src/NoteFactoryReset_test.cpp delete mode 100644 src/note-c/test/src/NoteGetContact_test.cpp delete mode 100644 src/note-c/test/src/NoteGetEnvNumber_test.cpp delete mode 100644 src/note-c/test/src/NoteGetEnv_test.cpp delete mode 100644 src/note-c/test/src/NoteGetLocationMode_test.cpp delete mode 100644 src/note-c/test/src/NoteGetLocation_test.cpp delete mode 100644 src/note-c/test/src/NoteGetNetStatus_test.cpp delete mode 100644 src/note-c/test/src/NoteGetServiceConfig_test.cpp delete mode 100644 src/note-c/test/src/NoteGetStatus_test.cpp delete mode 100644 src/note-c/test/src/NoteGetTemperature_test.cpp delete mode 100644 src/note-c/test/src/NoteGetVersion_test.cpp delete mode 100644 src/note-c/test/src/NoteGetVoltage_test.cpp delete mode 100644 src/note-c/test/src/NoteIsConnected_test.cpp delete mode 100644 src/note-c/test/src/NoteLocalTimeST_test.cpp delete mode 100644 src/note-c/test/src/NoteLocationValid_test.cpp delete mode 100644 src/note-c/test/src/NoteNewCommand_test.cpp delete mode 100644 src/note-c/test/src/NoteNewRequest_test.cpp delete mode 100644 src/note-c/test/src/NotePayloadRetrieveAfterSleep_test.cpp delete mode 100644 src/note-c/test/src/NotePayloadSaveAndSleep_test.cpp delete mode 100644 src/note-c/test/src/NotePayload_test.cpp delete mode 100644 src/note-c/test/src/NotePrint_test.cpp delete mode 100644 src/note-c/test/src/NotePrintf_test.cpp delete mode 100644 src/note-c/test/src/NotePrintln_test.cpp delete mode 100644 src/note-c/test/src/NoteRegion_test.cpp delete mode 100644 src/note-c/test/src/NoteRequestResponseJSON_test.cpp delete mode 100644 src/note-c/test/src/NoteRequestResponseWithRetry_test.cpp delete mode 100644 src/note-c/test/src/NoteRequestResponse_test.cpp delete mode 100644 src/note-c/test/src/NoteRequestWithRetry_test.cpp delete mode 100644 src/note-c/test/src/NoteRequest_test.cpp delete mode 100644 src/note-c/test/src/NoteReset_test.cpp delete mode 100644 src/note-c/test/src/NoteResponseError_test.cpp delete mode 100644 src/note-c/test/src/NoteSendToRoute_test.cpp delete mode 100644 src/note-c/test/src/NoteSerialHooks_test.cpp delete mode 100644 src/note-c/test/src/NoteSetContact_test.cpp delete mode 100644 src/note-c/test/src/NoteSetEnvDefaultNumber_test.cpp delete mode 100644 src/note-c/test/src/NoteSetEnvDefault_test.cpp delete mode 100644 src/note-c/test/src/NoteSetFnI2CMutex_test.cpp delete mode 100644 src/note-c/test/src/NoteSetFnI2C_test.cpp delete mode 100644 src/note-c/test/src/NoteSetFnMutex_test.cpp delete mode 100644 src/note-c/test/src/NoteSetFnNoteMutex_test.cpp delete mode 100644 src/note-c/test/src/NoteSetFnSerial_test.cpp delete mode 100644 src/note-c/test/src/NoteSetFn_test.cpp delete mode 100644 src/note-c/test/src/NoteSetLocationMode_test.cpp delete mode 100644 src/note-c/test/src/NoteSetLocation_test.cpp delete mode 100644 src/note-c/test/src/NoteSetProductID_test.cpp delete mode 100644 src/note-c/test/src/NoteSetSerialNumber_test.cpp delete mode 100644 src/note-c/test/src/NoteSetSyncMode_test.cpp delete mode 100644 src/note-c/test/src/NoteSetUploadMode_test.cpp delete mode 100644 src/note-c/test/src/NoteSleep_test.cpp delete mode 100644 src/note-c/test/src/NoteTemplate_test.cpp delete mode 100644 src/note-c/test/src/NoteTimeSet_test.cpp delete mode 100644 src/note-c/test/src/NoteTime_test.cpp delete mode 100644 src/note-c/test/src/NoteTransactionHooks_test.cpp delete mode 100644 src/note-c/test/src/NoteTransaction_test.cpp delete mode 100644 src/note-c/test/src/NoteUserAgent_test.cpp delete mode 100644 src/note-c/test/src/NoteWake_test.cpp delete mode 100644 src/note-c/test/src/crcAdd_test.cpp delete mode 100644 src/note-c/test/src/crcError_test.cpp delete mode 100644 src/note-c/test/src/i2cChunkedReceive_test.cpp delete mode 100644 src/note-c/test/src/i2cChunkedTransmit_test.cpp delete mode 100644 src/note-c/test/src/i2cNoteQueryLength_test.cpp delete mode 100644 src/note-c/test/src/i2cNoteReset_test.cpp delete mode 100644 src/note-c/test/src/i2cNoteTransaction_test.cpp delete mode 100644 src/note-c/test/src/serialChunkedReceive_test.cpp delete mode 100644 src/note-c/test/src/serialChunkedTransmit_test.cpp delete mode 100644 src/note-c/test/src/serialNoteReset_test.cpp delete mode 100644 src/note-c/test/src/serialNoteTransaction_test.cpp diff --git a/src/note-c/.devcontainer/devcontainer.json b/src/note-c/.devcontainer/devcontainer.json deleted file mode 100644 index a1b99f3..0000000 --- a/src/note-c/.devcontainer/devcontainer.json +++ /dev/null @@ -1,39 +0,0 @@ -// 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.205.2/containers/docker-existing-dockerfile -{ - "name": "Note-C Development Environment Dockerfile", - - // Sets the run context to one level up instead of the .devcontainer folder. - "context": "..", - - // Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename. - "image": "ghcr.io/blues/note_c_ci:latest", - // "dockerFile": "../Dockerfile", - - // 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", - "shardulm94.trailing-spaces", - "twxs.cmake" - ], - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Uncomment the next line to run commands after the container is created - for example installing curl. - // "postCreateCommand": "apt-get update && apt-get install -y curl", - - // Uncomment when using a ptrace-based debugger like C++, Go, and Rust - // "runArgs": [ - // "--device=/dev/bus/usb/" - // ], - - // Uncomment to use the Docker CLI from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker. - // "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind" ], - - // Uncomment to connect as a non-root user if you've added one. See https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "blues" -} diff --git a/src/note-c/.github/actions/load-ci-image/action.yml b/src/note-c/.github/actions/load-ci-image/action.yml deleted file mode 100644 index 7e1bc73..0000000 --- a/src/note-c/.github/actions/load-ci-image/action.yml +++ /dev/null @@ -1,17 +0,0 @@ -name: 'Load note-c CI Docker image' -runs: - using: 'composite' - steps: - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Download image artifact - uses: actions/download-artifact@v3 - with: - name: note_c_ci_image - path: /tmp - - - name: Load Docker image - shell: bash - run: | - docker load --input /tmp/note_c_ci_image.tar diff --git a/src/note-c/.github/workflows/ci.yml b/src/note-c/.github/workflows/ci.yml deleted file mode 100644 index 01ac6e9..0000000 --- a/src/note-c/.github/workflows/ci.yml +++ /dev/null @@ -1,183 +0,0 @@ -name: note-c CI Pipeline - -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - -jobs: - check_dockerfile_changed: - runs-on: ubuntu-latest - outputs: - changed: ${{ steps.filter.outputs.changed }} - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - # TODO: This is a 3rd party GitHub action from some dude. Ideally, we'd - # use something more "official". - - name: Check if Dockerfile changed - uses: dorny/paths-filter@v2 - id: filter - with: - base: 'master' - filters: | - changed: - - 'Dockerfile' - - build_ci_docker_image: - runs-on: ubuntu-latest - needs: [check_dockerfile_changed] - if: ${{ needs.check_dockerfile_changed.outputs.changed == 'true' }} - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Rebuild image - uses: docker/build-push-action@v4 - with: - context: . - load: true - tags: ghcr.io/blues/note_c_ci:latest - outputs: type=docker,dest=/tmp/note_c_ci_image.tar - - - name: Upload image artifact - uses: actions/upload-artifact@v3 - with: - name: note_c_ci_image - path: /tmp/note_c_ci_image.tar - - build_docs: - runs-on: ubuntu-latest - if: ${{ always() }} - needs: [build_ci_docker_image] - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Load CI Docker image - # Only load the Docker image artifact if build_ci_docker_image actually - # ran (e.g. it wasn't skipped and was successful). - if: ${{ needs.build_ci_docker_image.result == 'success' }} - uses: ./.github/actions/load-ci-image - - - name: Build docs - run: | - docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/build_docs.sh ghcr.io/blues/note_c_ci:latest - - check_libc_dependencies: - runs-on: ubuntu-latest - if: ${{ always() }} - needs: [build_ci_docker_image] - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Load CI Docker image - # Only load the Docker image artifact if build_ci_docker_image actually - # ran (e.g. it wasn't skipped and was successful). - if: ${{ needs.build_ci_docker_image.result == 'success' }} - uses: ./.github/actions/load-ci-image - - - name: Check note-c's libc dependencies - run: | - docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/check_libc_dependencies.sh ghcr.io/blues/note_c_ci:latest - - run_unit_tests: - runs-on: ubuntu-latest - if: ${{ always() }} - needs: [build_ci_docker_image] - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Load CI Docker image - if: ${{ needs.build_ci_docker_image.result == 'success' }} - uses: ./.github/actions/load-ci-image - - - name: Run tests - run: | - docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/run_unit_tests.sh ghcr.io/blues/note_c_ci:latest --coverage --mem-check - - - name: Adjust lcov source file paths for Coveralls - run: sudo sed -i 's/\/note-c\///g' ./build/test/coverage/lcov.info - - - name: Publish test coverage - uses: coverallsapp/github-action@master - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - path-to-lcov: ./build/test/coverage/lcov.info - - run_low_mem_unit_tests: - runs-on: ubuntu-latest - if: ${{ always() }} - needs: [build_ci_docker_image] - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Load CI Docker image - if: ${{ needs.build_ci_docker_image.result == 'success' }} - uses: ./.github/actions/load-ci-image - - - name: Run tests with NOTE_LOWMEM defined - run: | - docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/run_unit_tests.sh ghcr.io/blues/note_c_ci:latest --mem-check --low-mem --single-precision - - run_astyle: - runs-on: ubuntu-latest - if: ${{ always() }} - needs: [build_ci_docker_image] - - steps: - - name: Checkout Code - uses: actions/checkout@v3 - - - name: Load CI Docker image - if: ${{ needs.build_ci_docker_image.result == 'success' }} - uses: ./.github/actions/load-ci-image - - - name: Run astyle - run: | - docker run --rm --volume $(pwd):/note-c/ --workdir /note-c/ --entrypoint ./scripts/run_astyle.sh ghcr.io/blues/note_c_ci:latest - - publish_ci_image: - runs-on: ubuntu-latest - # Make sure unit tests unit tests passed before publishing. - needs: [build_ci_docker_image, run_unit_tests] - # Only publish the image if this is a push event and the Docker image was rebuilt - if: ${{ github.event_name == 'push' && needs.build_ci_docker_image.result == 'success' }} - - steps: - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Push image to registry - uses: docker/build-push-action@v4 - with: - push: true - tags: ghcr.io/blues/note_c_ci:latest diff --git a/src/note-c/.github/workflows/md5srv-tests.yml b/src/note-c/.github/workflows/md5srv-tests.yml deleted file mode 100644 index 51cbb24..0000000 --- a/src/note-c/.github/workflows/md5srv-tests.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: MD5 Server Tests - -on: - workflow_dispatch: - workflow_call: # reusable workflow - -jobs: - test-md5srv: # job id - runs-on: ubuntu-latest - defaults: - run: - shell: bash - env: - TERM: xterm-256color - MD5SRV_TIMEOUT: 5 - MD5SRV_DIR: ./test/hitl/scripts - BATS_VERSION: 1.10.0 - BATS_LIB_PATH: /usr/lib - # /usr/local/lib on OSX - steps: - - name: Setup Bats and bats libs - uses: brokenpip3/setup-bats-libs@1.0.0 - with: - bats-install: true - file-install: false - detik-install: false - - name: Setup BATS_LIB_PATH - run: | - if [ -e /usr/local/lib/bats-support ]; then - echo "BATS_LIB_PATH=/usr/local/lib" >> $GITHUB_ENV - fi - - name: Checkout - uses: actions/checkout@v3 - - name: Run Tests - run: | - cd ${{env.MD5SRV_DIR}} - $HOME/.local/bin/bats -p --print-output-on-failure . - - name: Rerun Tests - if: failure() - run: | - cd ${{env.MD5SRV_DIR}} - $HOME/.local/bin/bats -p --print-output-on-failure -x . diff --git a/src/note-c/.github/workflows/notecard-binary-tests.yml b/src/note-c/.github/workflows/notecard-binary-tests.yml deleted file mode 100644 index a967dcf..0000000 --- a/src/note-c/.github/workflows/notecard-binary-tests.yml +++ /dev/null @@ -1,221 +0,0 @@ -name: Note Binary CI - -on: - pull_request: - branches: [ master ] - workflow_dispatch: - schedule: - # * is a special character in YAML so you have to quote this string - - cron: '45 4 * * 1' # 4.45am every Monday - -permissions: - checks: write - -jobs: - md5srv-test: - uses: ./.github/workflows/md5srv-tests.yml - - notecard-binary-test: - # needs: md5srv-test - runs-on: [self-hosted, swan, notecard, stlink, notecard-serial, md5srv, notehub-client] - defaults: - run: - shell: bash - env: - NOTEHUB: "notehub.io" - NOTEHUB_API: "api.notefile.net" - NOTEHUB_ROUTE_TIMEOUT: 180 - PIO_PROJECT_DIR: ./test/hitl/card.binary - NOTEHUB_PROXY_ROUTE_ALIAS: card.binary.${{github.run_id}} - NOTEHUB_PROXY_ROUTE_LABEL: card.binary.proxy.${{github.run_id}} - NOTEHUB_HTTP_ROUTE_LABEL: card.binary.http.${{github.run_id}} - - # Troubleshooting helpers - # DELETE_NOTEHUB_ROUTES set to false to see the created routes on notehub - DELETE_NOTEHUB_ROUTES: true - # CREATE_NOTEHUB_ROUTES set to false to use the already created routes on notehub - CREATE_NOTEHUB_ROUTES: true - # FLASH_TEST_FIRMWARE set to false to skip flashing firmware to the Host (Swan). - # Be sure to press reset on Swan before running the workflow unless you deliberately want to skip running the tests. - FLASH_TEST_FIRMWARE: true - # START_MD5SRV set to false to skip starting the MD5 server. There should be one - # already running locally with MD5SRV_PORT/ADDRESS/TOKEN set correspondingly. - START_MD5SRV: true - # START_TUNNELMOLE: set to false to skip starting tunnel mole. - START_TUNNELMOLE: true - # When neither tunneling solution is used (because they're already instantiated outside of the workflow) - # be sure to set MD5SRV_URL in the environment - steps: - - name: Checkout note-c repo - uses: actions/checkout@v3 - - - name: Generate MD5 Server Token - run: | - [ -n "$MD5SRV_TOKEN" ] || echo "MD5SRV_TOKEN=`uuidgen`" >> $GITHUB_ENV - # propagate the environment variable so that it's available in the `env` context - echo "MD5SRV_PORT=$MD5SRV_PORT" >> $GITHUB_ENV - - - name: Check env vars - run: | - . scripts/check_runner_config.sh - echo NOTEHUB_PROXY_ROUTE_ALIAS=$NOTEHUB_PROXY_ROUTE_ALIAS - - - name: Install PlatformIO dependencies - if: env.FLASH_TEST_FIRMWARE!='false' - run: | - python3 -m venv venv # python venv is also used by the md5server, so this comes first. - source venv/bin/activate - pip install platformio - cd $PIO_PROJECT_DIR - pio pkg install -l "Blues Wireless Notecard" -e debug - # Remove the bundled note-c and put the local working copy there - NOTE_C_DEP="$GITHUB_WORKSPACE/$PIO_PROJECT_DIR/.pio/libdeps/debug/Blues Wireless Notecard/src/note-c" - rm -rf "$NOTE_C_DEP" - mkdir "$NOTE_C_DEP" - # copy only files in note-c - find "$GITHUB_WORKSPACE" -maxdepth 1 -type f -exec cp "{}" "${NOTE_C_DEP}" \; - - - name: Start MD5 server - run: | - mkdir md5srv-files - ./scripts/run_md5srv.sh - - - name: Build and upload test firmware - if: env.FLASH_TEST_FIRMWARE!='false' - run: | - source venv/bin/activate - export PLATFORMIO_BUILD_FLAGS="'-D NOTEHUB_PROXY_ROUTE_ALIAS=\"$NOTEHUB_PROXY_ROUTE_ALIAS\"' '-D PRODUCT_UID=\"$NOTEHUB_PRODUCT_UID\"'" - echo "build flags $PLATFORMIO_BUILD_FLAGS" - timeout 10 ./scripts/wait_for_file.sh "$STLINK_PROGRAMMER_PORT" - platformio test -e debug --without-testing --upload-port "$STLINK_PROGRAMMER_PORT" --project-dir "$PIO_PROJECT_DIR" - timeout 10 ./scripts/wait_for_file.sh "$SWAN_SERIAL" - - - name: Start tunnelmole - if: env.START_TUNNELMOLE!='false' - run: | - rm -f tmole.log - ./scripts/run_tunnelmole.sh - - - name: Check MD5 server is available - run: | - # the request will return a 401 from md5srv, but that's expected without the access token - # Curl still returns success because it could contact the server - code=`curl -s -o /dev/null -w "%{http_code}" $MD5SRV_URL` - if [ "$code" -ge "500" ]; then - echo "5xx error ($code) from tunnel." - exit 1 - else - echo "MD5 server is available." - fi - - - name: Create Notehub accesss token - if: env.CREATE_NOTEHUB_ROUTES!='false' - run: | - curl -f -X POST \ - -L 'https://${{env.NOTEHUB}}/oauth2/token' \ - -H 'content-type: application/x-www-form-urlencoded' \ - -d grant_type=client_credentials \ - -d client_id=$NOTEHUB_CLIENT_ID \ - -d client_secret=$NOTEHUB_CLIENT_SECRET | \ - { token=$(jq -r .access_token); echo "NOTEHUB_ACCESS_TOKEN=$token" >> $GITHUB_ENV; } - - - name: Create Notehub HTTP route - if: env.CREATE_NOTEHUB_ROUTES!='false' - run: | - # ?note=1 instructs the MD5 server to process the content as an event, extracting the path - # from the event body. - route_req=`jq -n --arg TOKEN "$MD5SRV_TOKEN" --arg LABEL "$NOTEHUB_HTTP_ROUTE_LABEL" --arg URL "$MD5SRV_URL/?note=1" --argjson TIMEOUT $NOTEHUB_ROUTE_TIMEOUT \ - '{ "label":$LABEL, "type":"http", "http":{ "timeout":$TIMEOUT, "filter": { "type":"include", "files": ["cardbinary.qo"] }, "url":$URL, "http_headers": { "X-Access-Token":$TOKEN } } }'` - echo "Notehub HTTP route request: $route_req" - route=`echo "$route_req" | curl -s -f -X POST -L "https://$NOTEHUB_API/v1/projects/${NOTEHUB_PROJECT_UID}/routes" \ - -H "Authorization: Bearer $NOTEHUB_ACCESS_TOKEN" -d @-` - echo "Notehub HTTP route: $route" - route_uid=`echo $route | jq -r .uid` - if [ -n "$route_uid" ]; then - echo "NOTEHUB_HTTP_ROUTE_UID=$route_uid" >> $GITHUB_ENV - else - echo "Failed to create or parse Notehub HTTP route." - exit 1 - fi - - - name: Create Notehub proxy route - run: | - ALIAS="$NOTEHUB_PROXY_ROUTE_ALIAS" - route=`jq -n --arg TOKEN "$MD5SRV_TOKEN" --arg LABEL "$NOTEHUB_PROXY_ROUTE_LABEL" --arg URL "$MD5SRV_URL" --arg ALIAS "$ALIAS" --argjson TIMEOUT $NOTEHUB_ROUTE_TIMEOUT \ - '{ "label":$LABEL, "type":"proxy", "proxy":{ "timeout":$TIMEOUT, "url":$URL, "alias":$ALIAS, "http_headers": { "X-Access-Token":$TOKEN } } }' \ - | curl -s -f -X POST -L "https://api.notefile.net/v1/projects/${NOTEHUB_PROJECT_UID}/routes" \ - -H "Authorization: Bearer $NOTEHUB_ACCESS_TOKEN" -d @-` - echo "Notehub proxy route: $route" - route_uid=`echo "$route" | jq -r .uid` - if [ -n $route_uid ]; then - echo "NOTEHUB_PROXY_ROUTE_UID=$route_uid" >> $GITHUB_ENV - echo "NOTEHUB_PROXY_ROUTE_ALIAS=$ALIAS" >> $GITHUB_ENV - else - echo "Failed to create or parse Notehub proxy route." - exit 1 - fi - - - name: Run tests - run: | - source venv/bin/activate - cd $PIO_PROJECT_DIR - platformio test -v -e debug \ - --without-building --without-uploading \ - --test-port "$SWAN_SERIAL" \ - --json-output-path test.json \ - --junit-output-path test.xml - - - name: Publish test report - uses: mikepenz/action-junit-report@v3 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - if: env.GITHUB_TOKEN && (success() || failure()) # always run even if the previous step fails - with: - report_paths: '**/test/hitl/card.binary/test*.xml' - check_name: Notecard Binary HIL Tests - require_tests: true - - - name: Cleanup Notehub proxy route - if: always() - run: | - if [ "$DELETE_NOTEHUB_ROUTES" == "true" && -n "$NOTEHUB_PROXY_ROUTE_UID" ]; then - echo "Deleting Notehub proxy route." - curl -f -s -X DELETE \ - -L "https://api.notefile.net/v1/projects/$NOTEHUB_PROJECT_UID/routes/$NOTEHUB_PROXY_ROUTE_UID" \ - -H "Authorization: Bearer $NOTEHUB_ACCESS_TOKEN" - fi - - - name: Cleanup Notehub HTTP route - if: always() - run: | - if [ "$DELETE_NOTEHUB_ROUTES" == "true" ] && [ -n "$NOTEHUB_HTTP_ROUTE_UID" ]; then - echo "Deleting Notehub HTTP route." - curl -f -s -X DELETE \ - -L "https://$NOTEHUB_API/v1/projects/$NOTEHUB_PROJECT_UID/routes/$NOTEHUB_HTTP_ROUTE_UID" \ - -H "Authorization: Bearer $NOTEHUB_ACCESS_TOKEN" - fi - - - - name: Cleanup tunnelmole - if: always() - run: | - if [ -n "$TMOLE_PID" ]; then - echo "Stopping tunnelmole." - kill $TMOLE_PID - else - echo "Tunnelmole not running (TMOLE_PID is empty)." - fi - - - name: Cleanup MD5 server - if: always() - run: | - if [ -d md5srv-files ]; then - echo "Deleting md5srv-files directory." - rm -rf md5srv-files - fi - if [ -n "$MD5SRV_PID" ]; then - echo "Stopping MD5 server." - kill $MD5SRV_PID - else - echo "MD5 server not running (MD5SRV_PID is empty)." - fi diff --git a/src/note-c/.github/workflows/publish_docs_site.yml b/src/note-c/.github/workflows/publish_docs_site.yml deleted file mode 100644 index b367659..0000000 --- a/src/note-c/.github/workflows/publish_docs_site.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Publish note-c docs site - -on: - push: - branches: [ master ] - workflow_dispatch: - -permissions: - contents: write - -jobs: - publish_docs_site: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 - - - name: Install Python dependencies - run: | - pip install sphinx sphinx_rtd_theme breathe - - - name: Install other dependencies - run: | - sudo apt-get update - sudo apt-get install -y cmake doxygen - - - name: Build docs site - # The TZ=UTC thing is a workaround for this problem: - # https://github.com/nektos/act/issues/1853 - run: | - TZ=UTC ./scripts/build_docs.sh - - - name: Deploy docs site to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 - if: ${{ github.event_name == 'push' }} - with: - publish_branch: gh-pages - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: build/docs/ - force_orphan: true diff --git a/src/note-c/.vscode/extensions.json b/src/note-c/.vscode/extensions.json deleted file mode 100644 index 363da33..0000000 --- a/src/note-c/.vscode/extensions.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - // See http://go.microsoft.com/fwlink/?LinkId=827846 - // for the documentation about the extensions.json format - "unwantedRecommendations": [ - "ms-vscode.cmake-tools", - "ms-vscode.cpptools-extension-pack", - "ms-azuretools.vscode-docker" - ] -} diff --git a/src/note-c/.vscode/tasks.json b/src/note-c/.vscode/tasks.json deleted file mode 100644 index 14ad13a..0000000 --- a/src/note-c/.vscode/tasks.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "version": "2.0.0", - "tasks": [ - { - "label": "Note-C: Compile and Run ALL Tests", - "type": "cppbuild", - "command": "./scripts/run_unit_tests.sh", - "args": [], - "options": { - "cwd": "${workspaceFolder}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "label": "Note-C: Compile and Run ALL Tests (with coverage and memory check)", - "type": "cppbuild", - "command": "./scripts/run_unit_tests.sh", - "args": [ - "--coverage", - "--mem-check" - ], - "options": { - "cwd": "${workspaceFolder}" - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "build", - "isDefault": false - } - }, - { - "label": "Note-C: Run `astyle` Formatter", - "type": "shell", - "command": "./scripts/run_astyle.sh", - "args": [], - "options": { - "cwd": "${workspaceFolder}", - "env": { - "LC_ALL":"C" - } - }, - "problemMatcher": [ - "$gcc" - ], - "group": { - "kind": "none" - } - } - ] -} \ No newline at end of file diff --git a/src/note-c/assets/blues_logo_no_text.png b/src/note-c/assets/blues_logo_no_text.png deleted file mode 100644 index 1598330dc4425ac054a88a67169f90daa12cac4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4854 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