From 4d8842c594ccc829fce66a1deaeb2b3626dc7ef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Sat, 4 May 2024 23:53:04 +0200 Subject: [PATCH 1/3] docs: add scaffolding for testcontainers docs system --- Pipfile | 16 + Pipfile.lock | 609 +++++++++++++++++++++++++++++ docs/_headers | 2 + docs/_redirects | 1 + docs/bounty.md | 50 +++ docs/contributing_docs.md | 21 + docs/css/extra.css | 128 ++++++ docs/css/tc-header.css | 389 ++++++++++++++++++ docs/favicon.ico | Bin 0 -> 15406 bytes docs/features/wait/introduction.md | 9 + docs/getting_help.md | 10 + docs/icons/github.svg | 4 + docs/icons/slack.svg | 10 + docs/icons/stackoverflow.svg | 5 + docs/icons/twitter.svg | 4 + docs/index.md | 28 ++ docs/js/tc-header.js | 45 +++ docs/language-logos/dotnet.svg | 7 + docs/language-logos/go.svg | 10 + docs/language-logos/haskell.svg | 6 + docs/language-logos/java.svg | 17 + docs/language-logos/nodejs.svg | 5 + docs/language-logos/python.svg | 8 + docs/language-logos/ruby.svg | 125 ++++++ docs/language-logos/rust.svg | 57 +++ docs/logo.png | Bin 0 -> 67366 bytes docs/logo.svg | 92 +++++ docs/system_requirements/docker.md | 11 + docs/testcontainers-logo.svg | 22 ++ docs/theme/main.html | 10 + docs/theme/partials/header.html | 150 +++++++ docs/theme/partials/nav.html | 79 ++++ docs/theme/partials/tc-header.html | 157 ++++++++ mkdocs.yml | 50 +++ requirements.txt | 5 + runtime.txt | 1 + 36 files changed, 2143 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 docs/_headers create mode 100644 docs/_redirects create mode 100644 docs/bounty.md create mode 100644 docs/contributing_docs.md create mode 100644 docs/css/extra.css create mode 100644 docs/css/tc-header.css create mode 100644 docs/favicon.ico create mode 100644 docs/features/wait/introduction.md create mode 100644 docs/getting_help.md create mode 100644 docs/icons/github.svg create mode 100644 docs/icons/slack.svg create mode 100644 docs/icons/stackoverflow.svg create mode 100644 docs/icons/twitter.svg create mode 100644 docs/index.md create mode 100644 docs/js/tc-header.js create mode 100644 docs/language-logos/dotnet.svg create mode 100644 docs/language-logos/go.svg create mode 100644 docs/language-logos/haskell.svg create mode 100644 docs/language-logos/java.svg create mode 100644 docs/language-logos/nodejs.svg create mode 100644 docs/language-logos/python.svg create mode 100644 docs/language-logos/ruby.svg create mode 100644 docs/language-logos/rust.svg create mode 100644 docs/logo.png create mode 100644 docs/logo.svg create mode 100644 docs/system_requirements/docker.md create mode 100644 docs/testcontainers-logo.svg create mode 100644 docs/theme/main.html create mode 100644 docs/theme/partials/header.html create mode 100644 docs/theme/partials/nav.html create mode 100644 docs/theme/partials/tc-header.html create mode 100644 mkdocs.yml create mode 100644 requirements.txt create mode 100644 runtime.txt diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..35f1f1d0 --- /dev/null +++ b/Pipfile @@ -0,0 +1,16 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +mkdocs = "==1.5.3" +mkdocs-codeinclude-plugin = "==0.2.1" +mkdocs-include-markdown-plugin = "==6.0.4" +mkdocs-material = "==9.5.18" +mkdocs-markdownextradata-plugin = "==0.2.5" + +[requires] +python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..d8a1a88d --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,609 @@ +{ + "_meta": { + "hash": { + "sha256": "594acc59dd4c0214242459c1f2b6ca3c8014664f8463f41b1a6ca41d780d41f5" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.8" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "babel": { + "hashes": [ + "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363", + "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287" + ], + "markers": "python_version >= '3.7'", + "version": "==2.14.0" + }, + "bracex": { + "hashes": [ + "sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb", + "sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418" + ], + "markers": "python_version >= '3.8'", + "version": "==2.4" + }, + "certifi": { + "hashes": [ + "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f", + "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1" + ], + "markers": "python_version >= '3.6'", + "version": "==2024.2.2" + }, + "charset-normalizer": { + "hashes": [ + "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027", + "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087", + "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786", + "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8", + "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09", + "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185", + "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574", + "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e", + "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519", + "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898", + "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269", + "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3", + "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f", + "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6", + "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8", + "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a", + "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73", + "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc", + "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714", + "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2", + "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc", + "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce", + "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d", + "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e", + "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6", + "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269", + "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96", + "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d", + "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a", + "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4", + "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77", + "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d", + "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0", + "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed", + "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068", + "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac", + "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25", + "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8", + "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab", + "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26", + "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2", + "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db", + "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f", + "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5", + "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99", + "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c", + "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d", + "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811", + "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa", + "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a", + "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03", + "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b", + "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04", + "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c", + "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001", + "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458", + "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389", + "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99", + "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985", + "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537", + "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238", + "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f", + "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d", + "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796", + "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a", + "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143", + "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8", + "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c", + "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5", + "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5", + "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711", + "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4", + "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6", + "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c", + "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7", + "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4", + "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b", + "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae", + "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12", + "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c", + "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae", + "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8", + "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887", + "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b", + "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4", + "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f", + "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5", + "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33", + "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519", + "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.3.2" + }, + "click": { + "hashes": [ + "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", + "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de" + ], + "markers": "python_version >= '3.7'", + "version": "==8.1.7" + }, + "colorama": { + "hashes": [ + "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", + "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6'", + "version": "==0.4.6" + }, + "ghp-import": { + "hashes": [ + "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", + "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343" + ], + "version": "==2.1.0" + }, + "idna": { + "hashes": [ + "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc", + "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0" + ], + "markers": "python_version >= '3.5'", + "version": "==3.7" + }, + "importlib-metadata": { + "hashes": [ + "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570", + "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2" + ], + "markers": "python_version < '3.10'", + "version": "==7.1.0" + }, + "jinja2": { + "hashes": [ + "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa", + "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.3" + }, + "markdown": { + "hashes": [ + "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f", + "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224" + ], + "markers": "python_version >= '3.8'", + "version": "==3.6" + }, + "markupsafe": { + "hashes": [ + "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf", + "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", + "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", + "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3", + "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532", + "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", + "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", + "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df", + "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4", + "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", + "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", + "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", + "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8", + "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371", + "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2", + "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465", + "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52", + "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6", + "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", + "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", + "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", + "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0", + "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029", + "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", + "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a", + "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", + "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", + "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", + "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf", + "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9", + "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", + "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", + "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3", + "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", + "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46", + "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", + "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a", + "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", + "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", + "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", + "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea", + "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", + "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", + "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e", + "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", + "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f", + "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50", + "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", + "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", + "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", + "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff", + "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2", + "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", + "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", + "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf", + "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", + "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5", + "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab", + "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", + "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.5" + }, + "mergedeep": { + "hashes": [ + "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", + "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307" + ], + "markers": "python_version >= '3.6'", + "version": "==1.3.4" + }, + "mkdocs": { + "hashes": [ + "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1", + "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==1.5.3" + }, + "mkdocs-codeinclude-plugin": { + "hashes": [ + "sha256:172a917c9b257fa62850b669336151f85d3cd40312b2b52520cbcceab557ea6c", + "sha256:305387f67a885f0e36ec1cf977324fe1fe50d31301147194b63631d0864601b1" + ], + "index": "pypi", + "markers": "python_version >= '3.7'", + "version": "==0.2.1" + }, + "mkdocs-include-markdown-plugin": { + "hashes": [ + "sha256:523c9c3a1d6a517386dc11bf60b0c0c564af1071bb6de8d213106d54f752dcc1", + "sha256:e7b8b5ecc41d6a3e16969cff3725ec3a391b68e9dfe1a4b4e36a8508becda835" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==6.0.4" + }, + "mkdocs-markdownextradata-plugin": { + "hashes": [ + "sha256:9c562e8fe375647d5692d11dfe369a7bdd50302174d35995fce2aeca58036ec6" + ], + "index": "pypi", + "markers": "python_version not in '3.0, 3.1, 3.2, 3.3' and python_full_version >= '2.7.9'", + "version": "==0.2.5" + }, + "mkdocs-material": { + "hashes": [ + "sha256:1e0e27fc9fe239f9064318acf548771a4629d5fd5dfd45444fd80a953fe21eb4", + "sha256:a43f470947053fa2405c33995f282d24992c752a50114f23f30da9d8d0c57e62" + ], + "index": "pypi", + "markers": "python_version >= '3.8'", + "version": "==9.5.18" + }, + "mkdocs-material-extensions": { + "hashes": [ + "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", + "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31" + ], + "markers": "python_version >= '3.8'", + "version": "==1.3.1" + }, + "packaging": { + "hashes": [ + "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5", + "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9" + ], + "markers": "python_version >= '3.7'", + "version": "==24.0" + }, + "paginate": { + "hashes": [ + "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d" + ], + "version": "==0.5.6" + }, + "pathspec": { + "hashes": [ + "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", + "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712" + ], + "markers": "python_version >= '3.8'", + "version": "==0.12.1" + }, + "platformdirs": { + "hashes": [ + "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf", + "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1" + ], + "markers": "python_version >= '3.8'", + "version": "==4.2.1" + }, + "pygments": { + "hashes": [ + "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c", + "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367" + ], + "markers": "python_version >= '3.7'", + "version": "==2.17.2" + }, + "pymdown-extensions": { + "hashes": [ + "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940", + "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb" + ], + "markers": "python_version >= '3.8'", + "version": "==10.8.1" + }, + "python-dateutil": { + "hashes": [ + "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", + "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.9.0.post0" + }, + "pytz": { + "hashes": [ + "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812", + "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319" + ], + "markers": "python_version < '3.9'", + "version": "==2024.1" + }, + "pyyaml": { + "hashes": [ + "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290", + "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28", + "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0.1" + }, + "pyyaml-env-tag": { + "hashes": [ + "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb", + "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069" + ], + "markers": "python_version >= '3.6'", + "version": "==0.1" + }, + "regex": { + "hashes": [ + "sha256:05d9b6578a22db7dedb4df81451f360395828b04f4513980b6bd7a1412c679cc", + "sha256:08a1749f04fee2811c7617fdd46d2e46d09106fa8f475c884b65c01326eb15c5", + "sha256:0940038bec2fe9e26b203d636c44d31dd8766abc1fe66262da6484bd82461ccf", + "sha256:0a2a512d623f1f2d01d881513af9fc6a7c46e5cfffb7dc50c38ce959f9246c94", + "sha256:0a54a047b607fd2d2d52a05e6ad294602f1e0dec2291152b745870afc47c1397", + "sha256:0dd3f69098511e71880fb00f5815db9ed0ef62c05775395968299cb400aeab82", + "sha256:1031a5e7b048ee371ab3653aad3030ecfad6ee9ecdc85f0242c57751a05b0ac4", + "sha256:108e2dcf0b53a7c4ab8986842a8edcb8ab2e59919a74ff51c296772e8e74d0ae", + "sha256:144a1fc54765f5c5c36d6d4b073299832aa1ec6a746a6452c3ee7b46b3d3b11d", + "sha256:19d6c11bf35a6ad077eb23852827f91c804eeb71ecb85db4ee1386825b9dc4db", + "sha256:1f687a28640f763f23f8a9801fe9e1b37338bb1ca5d564ddd41619458f1f22d1", + "sha256:224803b74aab56aa7be313f92a8d9911dcade37e5f167db62a738d0c85fdac4b", + "sha256:23a412b7b1a7063f81a742463f38821097b6a37ce1e5b89dd8e871d14dbfd86b", + "sha256:25f87ae6b96374db20f180eab083aafe419b194e96e4f282c40191e71980c666", + "sha256:2630ca4e152c221072fd4a56d4622b5ada876f668ecd24d5ab62544ae6793ed6", + "sha256:28e1f28d07220c0f3da0e8fcd5a115bbb53f8b55cecf9bec0c946eb9a059a94c", + "sha256:2b51739ddfd013c6f657b55a508de8b9ea78b56d22b236052c3a85a675102dc6", + "sha256:2cc1b87bba1dd1a898e664a31012725e48af826bf3971e786c53e32e02adae6c", + "sha256:2fef0b38c34ae675fcbb1b5db760d40c3fc3612cfa186e9e50df5782cac02bcd", + "sha256:36f392dc7763fe7924575475736bddf9ab9f7a66b920932d0ea50c2ded2f5636", + "sha256:374f690e1dd0dbdcddea4a5c9bdd97632cf656c69113f7cd6a361f2a67221cb6", + "sha256:3986217ec830c2109875be740531feb8ddafe0dfa49767cdcd072ed7e8927962", + "sha256:39fb166d2196413bead229cd64a2ffd6ec78ebab83fff7d2701103cf9f4dfd26", + "sha256:4290035b169578ffbbfa50d904d26bec16a94526071ebec3dadbebf67a26b25e", + "sha256:43548ad74ea50456e1c68d3c67fff3de64c6edb85bcd511d1136f9b5376fc9d1", + "sha256:44a22ae1cfd82e4ffa2066eb3390777dc79468f866f0625261a93e44cdf6482b", + "sha256:457c2cd5a646dd4ed536c92b535d73548fb8e216ebee602aa9f48e068fc393f3", + "sha256:459226445c7d7454981c4c0ce0ad1a72e1e751c3e417f305722bbcee6697e06a", + "sha256:47af45b6153522733aa6e92543938e97a70ce0900649ba626cf5aad290b737b6", + "sha256:499334ad139557de97cbc4347ee921c0e2b5e9c0f009859e74f3f77918339257", + "sha256:57ba112e5530530fd175ed550373eb263db4ca98b5f00694d73b18b9a02e7185", + "sha256:5ce479ecc068bc2a74cb98dd8dba99e070d1b2f4a8371a7dfe631f85db70fe6e", + "sha256:5dbc1bcc7413eebe5f18196e22804a3be1bfdfc7e2afd415e12c068624d48247", + "sha256:6277d426e2f31bdbacb377d17a7475e32b2d7d1f02faaecc48d8e370c6a3ff31", + "sha256:66372c2a01782c5fe8e04bff4a2a0121a9897e19223d9eab30c54c50b2ebeb7f", + "sha256:670fa596984b08a4a769491cbdf22350431970d0112e03d7e4eeaecaafcd0fec", + "sha256:6f435946b7bf7a1b438b4e6b149b947c837cb23c704e780c19ba3e6855dbbdd3", + "sha256:7413167c507a768eafb5424413c5b2f515c606be5bb4ef8c5dee43925aa5718b", + "sha256:7c3d389e8d76a49923683123730c33e9553063d9041658f23897f0b396b2386f", + "sha256:7d77b6f63f806578c604dca209280e4c54f0fa9a8128bb8d2cc5fb6f99da4150", + "sha256:7e76b9cfbf5ced1aca15a0e5b6f229344d9b3123439ffce552b11faab0114a02", + "sha256:7f3502f03b4da52bbe8ba962621daa846f38489cae5c4a7b5d738f15f6443d17", + "sha256:7fe9739a686dc44733d52d6e4f7b9c77b285e49edf8570754b322bca6b85b4cc", + "sha256:83ab366777ea45d58f72593adf35d36ca911ea8bd838483c1823b883a121b0e4", + "sha256:84077821c85f222362b72fdc44f7a3a13587a013a45cf14534df1cbbdc9a6796", + "sha256:8bb381f777351bd534462f63e1c6afb10a7caa9fa2a421ae22c26e796fe31b1f", + "sha256:92da587eee39a52c91aebea8b850e4e4f095fe5928d415cb7ed656b3460ae79a", + "sha256:9301cc6db4d83d2c0719f7fcda37229691745168bf6ae849bea2e85fc769175d", + "sha256:965fd0cf4694d76f6564896b422724ec7b959ef927a7cb187fc6b3f4e4f59833", + "sha256:99d6a550425cc51c656331af0e2b1651e90eaaa23fb4acde577cf15068e2e20f", + "sha256:99ef6289b62042500d581170d06e17f5353b111a15aa6b25b05b91c6886df8fc", + "sha256:a1409c4eccb6981c7baabc8888d3550df518add6e06fe74fa1d9312c1838652d", + "sha256:a74fcf77d979364f9b69fcf8200849ca29a374973dc193a7317698aa37d8b01c", + "sha256:aaa179975a64790c1f2701ac562b5eeb733946eeb036b5bcca05c8d928a62f10", + "sha256:ac69b394764bb857429b031d29d9604842bc4cbfd964d764b1af1868eeebc4f0", + "sha256:b45d4503de8f4f3dc02f1d28a9b039e5504a02cc18906cfe744c11def942e9eb", + "sha256:b7d893c8cf0e2429b823ef1a1d360a25950ed11f0e2a9df2b5198821832e1947", + "sha256:b8eb28995771c087a73338f695a08c9abfdf723d185e57b97f6175c5051ff1ae", + "sha256:b91d529b47798c016d4b4c1d06cc826ac40d196da54f0de3c519f5a297c5076a", + "sha256:bc365ce25f6c7c5ed70e4bc674f9137f52b7dd6a125037f9132a7be52b8a252f", + "sha256:bf29304a8011feb58913c382902fde3395957a47645bf848eea695839aa101b7", + "sha256:c06bf3f38f0707592898428636cbb75d0a846651b053a1cf748763e3063a6925", + "sha256:c77d10ec3c1cf328b2f501ca32583625987ea0f23a0c2a49b37a39ee5c4c4630", + "sha256:cd196d056b40af073d95a2879678585f0b74ad35190fac04ca67954c582c6b61", + "sha256:d7a353ebfa7154c871a35caca7bfd8f9e18666829a1dc187115b80e35a29393e", + "sha256:d84308f097d7a513359757c69707ad339da799e53b7393819ec2ea36bc4beb58", + "sha256:dd7ef715ccb8040954d44cfeff17e6b8e9f79c8019daae2fd30a8806ef5435c0", + "sha256:e672cf9caaf669053121f1766d659a8813bd547edef6e009205378faf45c67b8", + "sha256:ecc6148228c9ae25ce403eade13a0961de1cb016bdb35c6eafd8e7b87ad028b1", + "sha256:f1c5742c31ba7d72f2dedf7968998730664b45e38827637e0f04a2ac7de2f5f1", + "sha256:f1d6e4b7b2ae3a6a9df53efbf199e4bfcff0959dbdb5fd9ced34d4407348e39a", + "sha256:f2fc053228a6bd3a17a9b0a3f15c3ab3cf95727b00557e92e1cfe094b88cc662", + "sha256:f57515750d07e14743db55d59759893fdb21d2668f39e549a7d6cad5d70f9fea", + "sha256:f85151ec5a232335f1be022b09fbbe459042ea1951d8a48fef251223fc67eee1", + "sha256:fb0315a2b26fde4005a7c401707c5352df274460f2f85b209cf6024271373013", + "sha256:fc0916c4295c64d6890a46e02d4482bb5ccf33bf1a824c0eaa9e83b148291f90", + "sha256:fd24fd140b69f0b0bcc9165c397e9b2e89ecbeda83303abf2a072609f60239e2", + "sha256:fdae0120cddc839eb8e3c15faa8ad541cc6d906d3eb24d82fb041cfe2807bc1e", + "sha256:fe00f4fe11c8a521b173e6324d862ee7ee3412bf7107570c9b564fe1119b56fb" + ], + "markers": "python_version >= '3.8'", + "version": "==2024.4.28" + }, + "requests": { + "hashes": [ + "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f", + "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1" + ], + "markers": "python_version >= '3.7'", + "version": "==2.31.0" + }, + "six": { + "hashes": [ + "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", + "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.16.0" + }, + "urllib3": { + "hashes": [ + "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d", + "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19" + ], + "markers": "python_version >= '3.8'", + "version": "==2.2.1" + }, + "watchdog": { + "hashes": [ + "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257", + "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca", + "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b", + "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85", + "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b", + "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19", + "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50", + "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92", + "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269", + "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f", + "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c", + "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b", + "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87", + "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b", + "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b", + "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8", + "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c", + "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3", + "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7", + "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605", + "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935", + "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b", + "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927", + "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101", + "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07", + "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec", + "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4", + "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245", + "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d" + ], + "markers": "python_version >= '3.8'", + "version": "==4.0.0" + }, + "wcmatch": { + "hashes": [ + "sha256:14554e409b142edeefab901dc68ad570b30a72a8ab9a79106c5d5e9a6d241bd5", + "sha256:86c17572d0f75cbf3bcb1a18f3bf2f9e72b39a9c08c9b4a74e991e1882a8efb3" + ], + "markers": "python_version >= '3.8'", + "version": "==8.5" + }, + "zipp": { + "hashes": [ + "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b", + "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715" + ], + "markers": "python_version >= '3.8'", + "version": "==3.18.1" + } + }, + "develop": {} +} diff --git a/docs/_headers b/docs/_headers new file mode 100644 index 00000000..e59f34a2 --- /dev/null +++ b/docs/_headers @@ -0,0 +1,2 @@ +/search/search_index.json + Access-Control-Allow-Origin: * diff --git a/docs/_redirects b/docs/_redirects new file mode 100644 index 00000000..5e685fad --- /dev/null +++ b/docs/_redirects @@ -0,0 +1 @@ +# Each redirect rule must be listed on a separate line, with the original path followed by the new path or URL. diff --git a/docs/bounty.md b/docs/bounty.md new file mode 100644 index 00000000..228418bd --- /dev/null +++ b/docs/bounty.md @@ -0,0 +1,50 @@ +# Testcontainers issue bounty policy + +## General + +We want to use issue bounties to encourage contributions in areas that are important to our sponsors, or tricky to solve. +This includes bug fixes and new features. +We hope that this will provide incentives to tackle issues, and gives sponsors a way to influence where development time is expended. +We also want to reward our contributors, some of whom make huge efforts to improve Testcontainers and help their fellow developers! + +!!! note + It's early days for our use of sponsorship, so we expect to evolve this policy over time, possibly without notice. In the event of any ambiguity or dispute, the [Testcontainers org core maintainers](#organisation-core-maintainers) have the final say. + + If you'd like to suggest an improvement to this policy, we'd be grateful for your input - please raise a pull request! + +## For Sponsors + +Sponsors will be able to create a number of 'bounties' per month, varying according to sponsorship tier. + +As a sponsor, the process for creating a bounty is as follows: + +* Raise an issue, or find an existing issue that describes the bug or feature. +* Start a discussion with the [Testcontainers org core maintainers](#organisation-core-maintainers) to agree that the issue is suitable for a bounty, and how much the reward amount should be. +* Once agreed, we will assign a label to the issue so that interested developers can find it. + +Sponsors can create up to 1 or 3 bounties (according to tier) _per calendar month_ - i.e. the counter resets on the 1st of each month. +If a sponsor does not use their full quota of bounty credits in a calendar month, they cannot be rolled over to the next month. + +Bounties will expire 90 days after creation - after this time, if they have not been resolved we will close them. + +## For Contributors + +As a contributor, the process for working on an issue with a bounty attached is: + +* Find an issue with a bounty attached to it and no assignee, clarify the requirements if necessary, and consider how you would approach working on it. +* Start a discussion with the [Testcontainers org core maintainers](#organisation-core-maintainers) and the bounty owner. To avoid unpleasant surprises at review time, we'll try to confirm that we're happy with your proposed solution. +* If we're happy with your proposed solution, we will assign the ticket to you. +* Once work is complete, we will go through the PR process as usual and merge the work when finished. +* To receive the bounty reward, [raise an invoice](https://opencollective.com/testcontainers/expenses/new) on Open Collective, following the expenses policy on that page. + +Note that a 20% cut of the bounty amount will normally be assigned to project maintainers for PR review work. +We believe this reflects that PR review can often be a significant amount of work for some issues - and also gives maintainers an incentive to complete the review and unlock the bounty reward! +Some pull requests are so well done that very little review is necessary. If that happens, the maintainers may choose not to take a cut of the bounty, and instead release the full amount to the contributor. + +## Organisation core maintainers + +The organisation core maintainers are: + +* Richard North (@rnorth) +* Sergei Egorov (@bsideup) +* Kevin Wittek (@kiview) diff --git a/docs/contributing_docs.md b/docs/contributing_docs.md new file mode 100644 index 00000000..0de4cfd8 --- /dev/null +++ b/docs/contributing_docs.md @@ -0,0 +1,21 @@ +# Contributing to documentation + +The Testcontainers for Rust documentation is a static site built with [MkDocs](https://www.mkdocs.org/). +We use the [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) theme, which offers a number of useful extensions to MkDocs. + +In addition we use a [custom plugin](https://github.com/rnorth/mkdocs-codeinclude-plugin) for inclusion of code snippets. + +We publish our documentation using Netlify. + +## Previewing rendered content + +### Using Python locally + +* Ensure that you have Python 3.8.0 or higher. +* Set up a virtualenv and run `pip install -r requirements.txt` in the `testcontainers-rs` root directory. +* Once Python dependencies have been installed, run `mkdocs serve` to start a local auto-updating MkDocs server. + +### PR Preview deployments + +Note that documentation for pull requests will automatically be published by Netlify as 'deploy previews'. +These deployment previews can be accessed via the `deploy/netlify` check that appears for each pull request. diff --git a/docs/css/extra.css b/docs/css/extra.css new file mode 100644 index 00000000..ff780cb2 --- /dev/null +++ b/docs/css/extra.css @@ -0,0 +1,128 @@ +h1, h2, h3, h4, h5, h6 { + font-family: 'Rubik', sans-serif; +} + +[data-md-color-scheme="testcontainers"] { + --md-primary-fg-color: #00bac2; + --md-accent-fg-color: #361E5B; + --md-typeset-a-color: #0C94AA; + --md-primary-fg-color--dark: #291A3F; + --md-default-fg-color--lightest: #F2F4FE; + --md-footer-fg-color: #361E5B; + --md-footer-fg-color--light: #746C8F; + --md-footer-fg-color--lighter: #C3BEDE; + --md-footer-bg-color: #F7F9FD; + --md-footer-bg-color--dark: #F7F9FD; +} + +.card-grid { + display: grid; + gap: 10px; +} + +.tc-version { + font-size: 1.1em; + text-align: center; + margin: 0; +} + +@media (min-width: 680px) { + .card-grid { + grid-template-columns: repeat(3, 1fr); + } +} + +body .card-grid-item { + display: flex; + align-items: center; + gap: 20px; + border: 1px solid #C3BEDE; + border-radius: 6px; + padding: 16px; + font-weight: 600; + color: #9991B5; + background: #F2F4FE; +} + +body .card-grid-item:hover, +body .card-grid-item:focus { + color: #9991B5; +} + +.card-grid-item[href] { + color: var(--md-primary-fg-color--dark); + background: transparent; +} + +.card-grid-item[href]:hover, +.card-grid-item[href]:focus { + background: #F2F4FE; + color: var(--md-primary-fg-color--dark); +} + +.community-callout-wrapper { + padding: 30px 10px 0 10px; +} + +.community-callout { + color: #F2F4FE; + background: linear-gradient(10.88deg, rgba(102, 56, 242, 0.4) 9.56%, #6638F2 100%), #291A3F; + box-shadow: 0px 20px 45px rgba(#9991B5, 0.75); + border-radius: 10px; + padding: 20px; +} + +.community-callout h2 { + font-size: 1.15em; + margin: 0 0 20px 0; + color: #F2F4FE; + text-align: center; +} + +.community-callout ul { + list-style: none; + padding: 0; + display: flex; + justify-content: space-between; + gap: 10px; + margin-top: 20px; + margin-bottom: 0; +} + +.community-callout a { + transition: opacity 0.2s ease; +} + +.community-callout a:hover { + opacity: 0.5; +} + +.community-callout a img { + height: 1.75em; + width: auto; + aspect-ratio: 1; +} + +@media (min-width: 1220px) { + .community-callout-wrapper { + padding: 40px 0 0; + } + + .community-callout h2 { + font-size: 1.25em; + } + + .community-callout a img { + height: 2em; + } +} + +@media (min-width: 1600px) { + .community-callout h2 { + font-size: 1.15em; + } + + .community-callout a img { + height: 1.75em; + } +} \ No newline at end of file diff --git a/docs/css/tc-header.css b/docs/css/tc-header.css new file mode 100644 index 00000000..c0550093 --- /dev/null +++ b/docs/css/tc-header.css @@ -0,0 +1,389 @@ + +:root { + --color-catskill: #F2F4FE; + --color-catskill-45: rgba(242, 244, 254, 0.45); + --color-mist: #E7EAFB; + --color-fog: #C3C7E6; + --color-smoke: #9991B5; + --color-smoke-75: rgba(153, 145, 181, 0.75); + --color-storm: #746C8F; + --color-topaz: #00BAC2; + --color-pacific: #17A6B2; + --color-teal: #027F9E; + --color-eggplant: #291A3F; + --color-plum: #361E5B; + +} + +#site-header { + color: var(--color-storm); + background: #fff; + font-family: 'Rubik', Arial, Helvetica, sans-serif; + font-size: 12px; + line-height: 1.5; + position: relative; + width: 100%; + z-index: 4; + display: flex; + align-items: center; + justify-content: space-between; + gap: 20px; + padding: 20px; +} + +body.tc-header-active #site-header { + z-index: 5; +} + +#site-header .brand { + display: flex; + justify-content: space-between; + gap: 20px; + width: 100%; +} + +#site-header .logo { + display: flex; +} + +#site-header .logo img, +#site-header .logo svg { + height: 30px; + width: auto; + max-width: 100%; +} + +#site-header #mobile-menu-toggle { + background: none; + border: none; + display: flex; + align-items: center; + gap: 10px; + cursor: pointer; + color: var(--color-eggplant); + padding: 0; + margin: 0; + font-weight: 500; +} + +body.mobile-menu #site-header #mobile-menu-toggle { + color: var(--color-topaz); +} + +#site-header ul { + list-style: none; + padding: 0; + margin: 0; +} + +#site-header nav { + display: none; +} + +#site-header .menu-item { + display: flex; +} + +#site-header .menu-item button, +#site-header .menu-item a { + min-height: 30px; + display: flex; + gap: 6px; + align-items: center; + border: none; + background: none; + cursor: pointer; + padding: 0; + font-weight: 500; + color: var(--color-eggplant); + text-decoration: none; + font-size: 14px; + transition: color 0.2s ease; + white-space: nowrap; +} + +#site-header .menu-item .badge { + color: white; + font-size: 10px; + padding: 2px 6px; + background-color: #0FD5C6; +text-align: center; + text-decoration: none; + display: inline-block; + border-radius: 6px; + &:hover { + + } +} + +#site-header .menu-item button:hover, +#site-header .menu-item a:hover { + color: var(--color-topaz); +} + +#site-header .menu-item button .icon-external, +#site-header .menu-item a .icon-externa { + margin-left: auto; + opacity: .3; + flex-shrink: 0; +} + +#site-header .menu-item button .icon-caret, +#site-header .menu-item a .icon-caret { + opacity: .3; + height: 8px; +} + +#site-header .menu-item button .icon-slack, +#site-header .menu-item a .icon-slack, +#site-header .menu-item button .icon-github, +#site-header .menu-item a .icon-github { + height: 18px; +} + +#site-header .menu-item .menu-dropdown { + flex-direction: column; +} + +body #site-header .menu-item .menu-dropdown { + display: none; +} + +#site-header .menu-item.has-children.active .menu-dropdown { + display: flex; + z-index: 10; +} + +#site-header .menu-dropdown-item + .menu-dropdown-item { + border-top: 1px solid var(--color-mist); +} + +#site-header .menu-dropdown-item a { + display: flex; + gap: 10px; + align-items: center; + padding: 10px 20px; + font-weight: 500; + color: var(--color-eggplant); + text-decoration: none; + transition: + color 0.2s ease, + background 0.2s ease; +} + +#site-header .menu-dropdown-item a .icon-external { + margin-left: auto; + color: var(--color-fog); + flex-shrink: 0; + opacity: 1; +} + +#site-header .menu-dropdown-item a:hover { + background-color: var(--color-catskill-45); +} + +#site-header .menu-dropdown-item a:hover .icon-external { + color: var(--color-topaz); +} + +#site-header .menu-dropdown-item a img { + height: 24px; +} + +.md-header { + background-color: var(--color-catskill); + color: var(--color-eggplant); +} + +.md-header.md-header--shadow { + box-shadow: none; +} + +.md-header__inner.md-grid { + max-width: 100%; + padding: 1.5px 20px; +} + +[dir=ltr] .md-header__title { + margin: 0; +} + +.md-header__topic:first-child { + font-size: 16px; + font-weight: 500; + font-family: 'Rubik', Arial, Helvetica, sans-serif; +} + +.md-header__title.md-header__title--active .md-header__topic, +.md-header__title[data-md-state=active] .md-header__topic { + opacity: 1; + pointer-events: all; + transform: translateX(0); + transition: none; + z-index: 0; +} + +.md-header__topic a { + max-width: 100%; + overflow: hidden; + text-overflow: ellipsis; + transition: color .2s ease; +} + +.md-header__topic a:hover { + color: var(--color-topaz); +} + +div.md-header__source { + width: auto; +} + +div.md-source__repository { + max-width: 100%; +} + +.md-main { + padding: 0 12px; +} + +@media screen and (min-width: 60em) { + form.md-search__form { + background-color: #FBFBFF; + color: var(--color-storm); + } + + form.md-search__form:hover { + background-color: #fff; + } + + .md-search__input + .md-search__icon { + color: var(--color-plum); + } + + .md-search__input::placeholder { + color: var(--color-smoke); + } +} + +@media (min-width: 500px) { + #site-header { + font-size: 16px; + padding: 20px 40px; + } + #site-header .logo img, + #site-header .logo svg { + height: 48px; + } + + #site-header .menu-item button .icon-caret, + #site-header .menu-item a .icon-caret { + height: 10px; + } + + #site-header .menu-item button .icon-slack, + #site-header .menu-item a .icon-slack, + #site-header .menu-item button .icon-github, + #site-header .menu-item a .icon-github { + height: 24px; + } + + .md-header__inner.md-grid { + padding: 5px 40px; + } + + .md-main { + padding: 0 32px; + } +} + +@media (min-width: 1024px) { + #site-header #mobile-menu-toggle { + display: none; + } + + #site-header nav { + display: block; + } + + #site-header .menu { + display: flex; + justify-content: center; + gap: 30px; + } + + #site-header .menu-item { + align-items: center; + position: relative; + } + + #site-header .menu-item button, + #site-header .menu-item a { + min-height: 48px; + gap: 8px; + font-size: 16px; + } + + #site-header .menu-item .menu-dropdown { + position: absolute; + top: 100%; + right: -8px; + border: 1px solid var(--color-mist); + border-radius: 6px; + background: #fff; + box-shadow: 0px 30px 35px var(--color-smoke-75); + min-width: 200px; + } +} + + +@media (max-width: 1023px) { + #site-header { + flex-direction: column; + } + + body.mobile-tc-header-active #site-header { + z-index: 5; + } + + body.mobile-menu #site-header nav { + display: flex; + } + + #site-header nav { + position: absolute; + top: calc(100% - 5px); + width: calc(100% - 80px); + flex-direction: column; + border: 1px solid var(--color-mist); + border-radius: 6px; + background: #fff; + box-shadow: 0px 30px 35px var(--color-smoke-75); + min-width: 200px; + } + + #site-header .menu-item { + flex-direction: column; + } + #site-header .menu-item + .menu-item { + border-top: 1px solid var(--color-mist); + } + + #site-header .menu-item button, + #site-header .menu-item a { + padding: 10px 20px; + } + + #site-header .menu-item.has-children.active .menu-dropdown { + border-top: 1px solid var(--color-mist); + } + + #site-header .menu-dropdown-item a { + padding: 10px 20px 10px 30px; + } +} + +@media (max-width: 499px) { + #site-header nav { + width: calc(100% - 40px); + } +} \ No newline at end of file diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..311a0acaa373f197360673f8ac6bc1b3c38c7e7f GIT binary patch literal 15406 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 + + \ No newline at end of file diff --git a/docs/icons/slack.svg b/docs/icons/slack.svg new file mode 100644 index 00000000..942265e1 --- /dev/null +++ b/docs/icons/slack.svg @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/docs/icons/stackoverflow.svg b/docs/icons/stackoverflow.svg new file mode 100644 index 00000000..c3307627 --- /dev/null +++ b/docs/icons/stackoverflow.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/docs/icons/twitter.svg b/docs/icons/twitter.svg new file mode 100644 index 00000000..ef3fbc62 --- /dev/null +++ b/docs/icons/twitter.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..aa80b759 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,28 @@ +# Welcome to Testcontainers for Rust! + +

Not using Rust? Here are other supported languages!

+
+ Java + Go + .NET + Node.js + Python + Rust + Haskell + Ruby +
+ +## About Testcontainers for Rust + +_Testcontainers for Rust_ is a Rust library that makes it simple to create and clean up container-based dependencies for +automated integration/smoke tests. The clean, easy-to-use API enables developers to programmatically define containers +that should be run as part of a test and clean up those resources when the test is done. + +To start using _Testcontainers for Rust_ please read our [quickstart guide](./quickstart.md). + + +## License + +This project is opensource and you can have a look at the code on +[GitHub](https://github.com/testcontainers/testcontainers-rs). See [LICENSE](https://github.com/testcontainers/testcontainers-rs/blob/main/LICENSE-MIT). + diff --git a/docs/js/tc-header.js b/docs/js/tc-header.js new file mode 100644 index 00000000..4186b6ca --- /dev/null +++ b/docs/js/tc-header.js @@ -0,0 +1,45 @@ +const mobileToggle = document.getElementById("mobile-menu-toggle"); +const mobileSubToggle = document.getElementById("mobile-submenu-toggle"); +function toggleMobileMenu() { + document.body.classList.toggle('mobile-menu'); + document.body.classList.toggle("mobile-tc-header-active"); +} +function toggleMobileSubmenu() { + document.body.classList.toggle('mobile-submenu'); +} +if (mobileToggle) + mobileToggle.addEventListener("click", toggleMobileMenu); +if (mobileSubToggle) + mobileSubToggle.addEventListener("click", toggleMobileSubmenu); + +const allParentMenuItems = document.querySelectorAll("#site-header .menu-item.has-children"); +function clearActiveMenuItem() { + document.body.classList.remove("tc-header-active"); + allParentMenuItems.forEach((item) => { + item.classList.remove("active"); + }); +} +function setActiveMenuItem(e) { + clearActiveMenuItem(); + e.currentTarget.closest(".menu-item").classList.add("active"); + document.body.classList.add("tc-header-active"); +} +allParentMenuItems.forEach((item) => { + const trigger = item.querySelector(":scope > a, :scope > button"); + + trigger.addEventListener("click", (e) => { + if (e.currentTarget.closest(".menu-item").classList.contains("active")) { + clearActiveMenuItem(); + } else { + setActiveMenuItem(e); + } + }); + + trigger.addEventListener("mouseenter", (e) => { + setActiveMenuItem(e); + }); + + item.addEventListener("mouseleave", (e) => { + clearActiveMenuItem(); + }); +}); \ No newline at end of file diff --git a/docs/language-logos/dotnet.svg b/docs/language-logos/dotnet.svg new file mode 100644 index 00000000..2fb163d4 --- /dev/null +++ b/docs/language-logos/dotnet.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/docs/language-logos/go.svg b/docs/language-logos/go.svg new file mode 100644 index 00000000..bfcca48c --- /dev/null +++ b/docs/language-logos/go.svg @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/docs/language-logos/haskell.svg b/docs/language-logos/haskell.svg new file mode 100644 index 00000000..eb6de377 --- /dev/null +++ b/docs/language-logos/haskell.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/language-logos/java.svg b/docs/language-logos/java.svg new file mode 100644 index 00000000..590da12d --- /dev/null +++ b/docs/language-logos/java.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/docs/language-logos/nodejs.svg b/docs/language-logos/nodejs.svg new file mode 100644 index 00000000..08c6ea7b --- /dev/null +++ b/docs/language-logos/nodejs.svg @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/docs/language-logos/python.svg b/docs/language-logos/python.svg new file mode 100644 index 00000000..d06a313c --- /dev/null +++ b/docs/language-logos/python.svg @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/docs/language-logos/ruby.svg b/docs/language-logos/ruby.svg new file mode 100644 index 00000000..05537ced --- /dev/null +++ b/docs/language-logos/ruby.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/language-logos/rust.svg b/docs/language-logos/rust.svg new file mode 100644 index 00000000..89039333 --- /dev/null +++ b/docs/language-logos/rust.svg @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..88961b3e3f0c0520a48e91b06e353a73fce35594 GIT binary patch literal 67366 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 AC;$Ke literal 0 HcmV?d00001 diff --git a/docs/logo.svg b/docs/logo.svg new file mode 100644 index 00000000..bac0c391 --- /dev/null +++ b/docs/logo.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/system_requirements/docker.md b/docs/system_requirements/docker.md new file mode 100644 index 00000000..d2b1b7d0 --- /dev/null +++ b/docs/system_requirements/docker.md @@ -0,0 +1,11 @@ +# General Docker requirements + +Testcontainers requires a Docker-API compatible container runtime. +During development, Testcontainers is actively tested against recent versions of Docker on Linux, as well as against Docker Desktop on Mac and Windows. +These Docker environments are automatically detected and used by Testcontainers without any additional configuration being necessary. + +It is possible to configure Testcontainers to work for other Docker setups, such as a remote Docker host or Docker alternatives. +However, these are not actively tested in the main development workflow, so not all Testcontainers features might be available and additional manual configuration might be necessary. + +If you have further questions about configuration details for your setup or whether it supports running Testcontainers-based tests, +please contact the Testcontainers team and other users from the Testcontainers community on [Slack](https://slack.testcontainers.org/). diff --git a/docs/testcontainers-logo.svg b/docs/testcontainers-logo.svg new file mode 100644 index 00000000..4b099f34 --- /dev/null +++ b/docs/testcontainers-logo.svg @@ -0,0 +1,22 @@ + + + Testcontainers + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/theme/main.html b/docs/theme/main.html new file mode 100644 index 00000000..b3c01a3a --- /dev/null +++ b/docs/theme/main.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block analytics %} + +{% endblock %} + +{% block extrahead %} + + +{% endblock %} \ No newline at end of file diff --git a/docs/theme/partials/header.html b/docs/theme/partials/header.html new file mode 100644 index 00000000..057ec4ae --- /dev/null +++ b/docs/theme/partials/header.html @@ -0,0 +1,150 @@ + + + +{% set class = "md-header" %} +{% if "navigation.tabs.sticky" in features %} + {% set class = class ~ " md-header--shadow md-header--lifted" %} +{% elif "navigation.tabs" not in features %} + {% set class = class ~ " md-header--shadow" %} +{% endif %} + +{% include "partials/tc-header.html" %} + + +
    + + + + {% if "navigation.tabs.sticky" in features %} + {% if "navigation.tabs" in features %} + {% include "partials/tabs.html" %} + {% endif %} + {% endif %} +
    \ No newline at end of file diff --git a/docs/theme/partials/nav.html b/docs/theme/partials/nav.html new file mode 100644 index 00000000..2072d2ff --- /dev/null +++ b/docs/theme/partials/nav.html @@ -0,0 +1,79 @@ + + + +{% import "partials/nav-item.html" as item with context %} +{% set class = "md-nav md-nav--primary" %} +{% if "navigation.tabs" in features %} +{% set class = class ~ " md-nav--lifted" %} +{% endif %} +{% if "toc.integrate" in features %} +{% set class = class ~ " md-nav--integrated" %} +{% endif %} + + + \ No newline at end of file diff --git a/docs/theme/partials/tc-header.html b/docs/theme/partials/tc-header.html new file mode 100644 index 00000000..fb978f1a --- /dev/null +++ b/docs/theme/partials/tc-header.html @@ -0,0 +1,157 @@ +{% set header = ({ + "siteUrl": "https://testcontainers.com/", + "menuItems": [ + { + "label": "Desktop NEW", + "url": "https://testcontainers.com/desktop/" + }, + { + "label": "Cloud", + "url": "https://testcontainers.com/cloud/" + }, + { + "label": "Getting Started", + "url": "https://testcontainers.com/getting-started/" + }, + { + "label": "Guides", + "url": "https://testcontainers.com/guides/" + }, + { + "label": "Modules", + "url": "https://testcontainers.com/modules/" + }, + { + "label": "Docs", + "children": [ + { + "label": "Testcontainers for Java", + "url": "https://java.testcontainers.org/", + "image": "/language-logos/java.svg", + }, + { + "label": "Testcontainers for Go", + "url": "https://golang.testcontainers.org/", + "image": "/language-logos/go.svg", + }, + { + "label": "Testcontainers for .NET", + "url": "https://dotnet.testcontainers.org/", + "image": "/language-logos/dotnet.svg", + }, + { + "label": "Testcontainers for Node.js", + "url": "https://node.testcontainers.org/", + "image": "/language-logos/nodejs.svg", + }, + { + "label": "Testcontainers for Python", + "url": "https://testcontainers-python.readthedocs.io/en/latest/", + "image": "/language-logos/python.svg", + "external": true, + }, + { + "label": "Testcontainers for Rust", + "url": "https://rust.testcontainers.org/", + "image": "/language-logos/rust.svg", + "external": true, + }, + { + "label": "Testcontainers for Haskell", + "url": "https://github.com/testcontainers/testcontainers-hs", + "image": "/language-logos/haskell.svg", + "external": true, + }, + { + "label": "Testcontainers for Ruby", + "url": "https://github.com/testcontainers/testcontainers-ruby", + "image": "/language-logos/ruby.svg", + "external": true, + }, + ] + }, + { + "label": "Slack", + "url": "https://slack.testcontainers.org/", + "icon": "icon-slack", + }, + { + "label": "GitHub", + "url": "https://github.com/testcontainers", + "icon": "icon-github", + }, + ] +}) %} + + + + + + + + + + + \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..e954e31f --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,50 @@ +# This file is autogenerated by the 'modulegen' tool. +site_name: Testcontainers for Rust +site_url: https://rust.testcontainers.org +plugins: + - search + - codeinclude + - include-markdown + - markdownextradata +theme: + name: material + custom_dir: docs/theme + palette: + scheme: testcontainers + font: + text: Roboto + code: Roboto Mono + logo: logo.svg + favicon: favicon.ico +extra_css: + - css/extra.css + - css/tc-header.css +repo_name: testcontainers-rs +repo_url: https://github.com/testcontainers/testcontainers-rs +markdown_extensions: + - admonition + - codehilite: + linenums: false + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.snippets + - toc: + permalink: true + - attr_list + - pymdownx.emoji: + emoji_generator: !!python/name:material.extensions.emoji.to_svg + emoji_index: !!python/name:material.extensions.emoji.twemoji +nav: + - Home: index.md + - Features: + - Wait Strategies: + - Introduction: features/wait/introduction.md + - System Requirements: + - system_requirements/docker.md + - Contributing: + - contributing_docs.md + - Getting help: getting_help.md +edit_uri: edit/main/docs/ +extra: + latest_version: 0.16.7 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..83689b0f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +mkdocs==1.5.3 +mkdocs-codeinclude-plugin==0.2.1 +mkdocs-include-markdown-plugin==6.0.4 +mkdocs-material==9.5.18 +mkdocs-markdownextradata-plugin==0.2.5 diff --git a/runtime.txt b/runtime.txt new file mode 100644 index 00000000..cc1923a4 --- /dev/null +++ b/runtime.txt @@ -0,0 +1 @@ +3.8 From 159f04b51d8bd536dceef0e1c5850f23ff6d26db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Sun, 5 May 2024 00:05:39 +0200 Subject: [PATCH 2/3] docs: improve local mkdocs instructions --- docs/contributing_docs.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/contributing_docs.md b/docs/contributing_docs.md index 0de4cfd8..efcffafe 100644 --- a/docs/contributing_docs.md +++ b/docs/contributing_docs.md @@ -12,8 +12,9 @@ We publish our documentation using Netlify. ### Using Python locally * Ensure that you have Python 3.8.0 or higher. -* Set up a virtualenv and run `pip install -r requirements.txt` in the `testcontainers-rs` root directory. -* Once Python dependencies have been installed, run `mkdocs serve` to start a local auto-updating MkDocs server. +* Create a Python virtualenv. E.g. `python3 -m venv tc-venv`. +* Activate the virtualenv. E.g. `source tc-venv/bin/activate`. +* Run `pip3 install -r requirements.txt && ./tc-venv/bin/mkdocs serve` from the `testcontainers-rs` root directory. It will start a local auto-updating MkDocs server. ### PR Preview deployments From ae54ec5c83a68588e138c926abf759db9000bfc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Mon, 20 May 2024 16:40:51 +0200 Subject: [PATCH 3/3] fix: bring search bar after customisation --- docs/theme/partials/header.html | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/theme/partials/header.html b/docs/theme/partials/header.html index 057ec4ae..2cd71843 100644 --- a/docs/theme/partials/header.html +++ b/docs/theme/partials/header.html @@ -124,9 +124,10 @@ {% endif %} - {% if "search" in config.plugins %} + {% if "material/search" in config.plugins %}