Bumps the minor group with 4 updates: [googletest](https://github.com/google/googletest-rust), [http](https://github.com/hyperium/http), [tokio](https://github.com/tokio-rs/tokio) and [tempfile](https://github.com/Stebalien/tempfile). Updates `googletest` from 0.13.0 to 0.14.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/google/googletest-rust/releases">googletest's releases</a>.</em></p> <blockquote> <h2>v0.14.0</h2> <p>Many thanks to <a href="https://github.com/carlwhamilton"><code>@carlwhamilton</code></a>, <a href="https://github.com/kezhuw"><code>@kezhuw</code></a>, <a href="https://github.com/calder"><code>@calder</code></a>, <a href="https://github.com/eopb"><code>@eopb</code></a> for contributing to this release!</p> <h1>API Changes</h1> <ul> <li>Rename <code>into_test_result</code> to <code>or_fail</code> (<a href="2720c7655a
</a>).</li> </ul> <h1>New Features</h1> <ul> <li>Make <code>matches_pattern</code> support <code>_</code> at the top level in tuple and braced structs (<a href="a1e9bac623
</a>, <a href="3d65dea660
</a>).</li> <li>Make <code>matches_pattern</code> enforce exhaustive field checks for tuple and braced structs by default (<a href="2ba098e023
</a>, <a href="99bcfaa4de
</a>, <a href="a17b655b47
</a>).</li> <li>Add a <code>container_eq(...).ignore_order()</code> matcher (<a href="48ffd20f9a
</a>).</li> <li>Add <code>StrMatcher::ignoring_unicode_case</code> (<a href="25322c86a9
</a>).</li> <li>Add support for the Bazel test sharing protocol (<a href="b8d251aa4a
</a>, <a href="ef06f3fc8e
</a>, <a href="cb8eaf9126
</a>).</li> <li>Add <code>is_finite</code> and <code>is_infinite</code> matchers (<a href="9a6712c9b7
</a>, <a href="4e35e2ce3c
</a>).</li> <li>Make googletest-rust usable from <code>#![no_std]</code> crates (<a href="7ca2fb5a8b
</a>).</li> <li>Append generated test macro so that other test macros are aware of it (<a href="ee4996ddb7
</a>).</li> <li>Improve the macro hygiene of <code>expect_that!</code> (<a href="1a6ef3d9fb
</a>).</li> <li>Implement the Bazel <code>TESTBRIDGE_TEST_ONLY</code> protocol for test filtering with globs (<a href="a834f86fb9
</a>, <a href="43d5976e85
</a>, <a href="8fa7024885
</a>).</li> <li>Allow passing of failure messages and formatting arguments to <code>expect_true!</code>, <code>expect_false!</code>, <code>assert_pred!</code>, and <code>expect_pred!</code> (<a href="298629403a
</a>, <a href="bbae567c67
</a>).</li> </ul> <h1>Bug Fixes</h1> <ul> <li>Fix issue where macros do not compile without <code>use googletest::prelude::*;</code> by making calls between macros fully qualified (<a href="7a54871950
</a>).</li> <li>Improve test hermeticity by calling <code>Command::env_clear()</code> in integration tests (<a href="b90142ad8b
</a>).</li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/google/googletest-rust/compare/v0.13.0...v0.14.0">https://github.com/google/googletest-rust/compare/v0.13.0...v0.14.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="bbae567c67
"><code>bbae567</code></a> Add ability to pass failure message and formatting args to <code>assert_pred</code>, `ex...</li> <li><a href="298629403a
"><code>2986294</code></a> Add ability to pass failure message and formatting args to expect_true and ex...</li> <li><a href="f5a975e574
"><code>f5a975e</code></a> Merge pull request <a href="https://redirect.github.com/google/googletest-rust/issues/604">#604</a> from google:dependabot/cargo/tempfile-3.18.0</li> <li><a href="e61f5a1da1
"><code>e61f5a1</code></a> Merge pull request <a href="https://redirect.github.com/google/googletest-rust/issues/605">#605</a> from google:dependabot/cargo/rustversion-1.0.20</li> <li><a href="cf4c00d5b3
"><code>cf4c00d</code></a> Bump tempfile from 3.17.1 to 3.18.0</li> <li><a href="b707104e96
"><code>b707104</code></a> Merge pull request <a href="https://redirect.github.com/google/googletest-rust/issues/606">#606</a> from google:dependabot/cargo/syn-2.0.100</li> <li><a href="372838ee93
"><code>372838e</code></a> Merge pull request <a href="https://redirect.github.com/google/googletest-rust/issues/607">#607</a> from google:dependabot/cargo/indoc-2.0.6</li> <li><a href="eb9ad3becf
"><code>eb9ad3b</code></a> Merge pull request <a href="https://redirect.github.com/google/googletest-rust/issues/608">#608</a> from google:dependabot/cargo/tokio-1.44.0</li> <li><a href="cd02cd15fe
"><code>cd02cd1</code></a> Merge pull request <a href="https://redirect.github.com/google/googletest-rust/issues/609">#609</a> from google:dependabot/github_actions/github/codeql-a...</li> <li><a href="b1dbc67e1f
"><code>b1dbc67</code></a> 🌱 Bump github/codeql-action from 3.28.10 to 3.28.11</li> <li>Additional commits viewable in <a href="https://github.com/google/googletest-rust/compare/v0.13.0...v0.14.0">compare view</a></li> </ul> </details> <br /> Updates `http` from 1.2.0 to 1.3.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/hyperium/http/releases">http's releases</a>.</em></p> <blockquote> <h2>v1.3.1</h2> <h2>What's Changed</h2> <ul> <li>fix: validate path bytes are at least utf8 by <a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a> in <a href="https://redirect.github.com/hyperium/http/pull/756">hyperium/http#756</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/hyperium/http/compare/v1.3.0...v1.3.1">https://github.com/hyperium/http/compare/v1.3.0...v1.3.1</a></p> <h2>v1.3.0</h2> <h2>What's Changed</h2> <ul> <li>Allow most UTF-8 characters in URI path and query. (<a href="https://redirect.github.com/hyperium/http/pull/715">hyperium/http#715</a>) <ul> <li>This means paring <code>Uri</code>s with previously illegal characters according the original RFC will now be accepted. They used to be rejected in the name of spec purity, but many operators were using a fork of <code>http</code> because reality is that most characters are seen in the real world.</li> </ul> </li> <li>Fix <code>HeaderMap::reserve()</code> to allocate sufficient capacity.</li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/joelwurtz"><code>@joelwurtz</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/715">hyperium/http#715</a></li> <li><a href="https://github.com/ADD-SP"><code>@ADD-SP</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/738">hyperium/http#738</a></li> <li><a href="https://github.com/kawaemon"><code>@kawaemon</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/741">hyperium/http#741</a></li> <li><a href="https://github.com/DaniPopes"><code>@DaniPopes</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/748">hyperium/http#748</a></li> <li><a href="https://github.com/jpds"><code>@jpds</code></a> made their first contribution in <a href="https://redirect.github.com/hyperium/http/pull/695">hyperium/http#695</a></li> </ul> <h2>Thanks!</h2> <ul> <li><a href="https://github.com/seanmonstar"><code>@seanmonstar</code></a></li> <li><a href="https://github.com/tottoto"><code>@tottoto</code></a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/hyperium/http/compare/v1.2.0...v1.3.0">https://github.com/hyperium/http/compare/v1.2.0...v1.3.0</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/hyperium/http/blob/master/CHANGELOG.md">http's changelog</a>.</em></p> <blockquote> <h1>1.3.1 (March 11, 2025)</h1> <ul> <li>Fix validation that all characters are UTF-8 in URI path and query.</li> </ul> <h1>1.3.0 (March 11, 2025)</h1> <ul> <li>Allow most UTF-8 characters in URI path and query.</li> <li>Fix <code>HeaderMap::reserve()</code> to allocate sufficient capacity.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="8c1fb204b8
"><code>8c1fb20</code></a> v1.3.1</li> <li><a href="6637a72864
"><code>6637a72</code></a> fix: validate path bytes are at least utf8 (<a href="https://redirect.github.com/hyperium/http/issues/756">#756</a>)</li> <li><a href="d0dd91e9b5
"><code>d0dd91e</code></a> v1.3.0</li> <li><a href="64bd92b9cc
"><code>64bd92b</code></a> docs: Fixed encryption/compression typo for 'accept-encoding: identity'. (<a href="https://redirect.github.com/hyperium/http/issues/695">#695</a>)</li> <li><a href="b03ed6a7e5
"><code>b03ed6a</code></a> chore: use range.contains in StatusCode methods (<a href="https://redirect.github.com/hyperium/http/issues/748">#748</a>)</li> <li><a href="a463fb5995
"><code>a463fb5</code></a> chore(ci): use yq to get rust-version in manifest (<a href="https://redirect.github.com/hyperium/http/issues/746">#746</a>)</li> <li><a href="68845bd24d
"><code>68845bd</code></a> fix: HeaderMap::reserve allocates insufficient capacity (<a href="https://redirect.github.com/hyperium/http/issues/741">#741</a>)</li> <li><a href="4e020461ca
"><code>4e02046</code></a> refactor(header): remove BytesMut inline optimization when creating (<a href="https://redirect.github.com/hyperium/http/issues/738">#738</a>)</li> <li><a href="091ee9a6d7
"><code>091ee9a</code></a> feat(uri): allow utf8 char, not rfc 3986 compliant, in path and query (<a href="https://redirect.github.com/hyperium/http/issues/715">#715</a>)</li> <li>See full diff in <a href="https://github.com/hyperium/http/compare/v1.2.0...v1.3.1">compare view</a></li> </ul> </details> <br /> Updates `tokio` from 1.43.0 to 1.44.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/tokio-rs/tokio/releases">tokio's releases</a>.</em></p> <blockquote> <h2>Tokio v1.44.1</h2> <h1>1.44.1 (March 13th, 2025)</h1> <h3>Fixed</h3> <ul> <li>rt: skip defer queue in <code>block_in_place</code> context (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7216">#7216</a>)</li> </ul> <p><a href="https://redirect.github.com/tokio-rs/tokio/issues/7216">#7216</a>: <a href="https://redirect.github.com/tokio-rs/tokio/pull/7216">tokio-rs/tokio#7216</a></p> <h2>Tokio v1.44.0</h2> <h1>1.44.0 (March 7th, 2025)</h1> <p>This release changes the <code>from_std</code> method on sockets to panic if a blocking socket is provided. We determined this change is not a breaking change as Tokio is not intended to operate using blocking sockets. Doing so results in runtime hangs and should be considered a bug. Accidentally passing a blocking socket to Tokio is one of the most common user mistakes. If this change causes an issue for you, please comment on <a href="https://redirect.github.com/tokio-rs/tokio/issues/7172">#7172</a>.</p> <h3>Added</h3> <ul> <li>coop: add <code>task::coop</code> module (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7116">#7116</a>)</li> <li>process: add <code>Command::get_kill_on_drop()</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7086">#7086</a>)</li> <li>sync: add <code>broadcast::Sender::closed</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/6685">#6685</a>, <a href="https://redirect.github.com/tokio-rs/tokio/issues/7090">#7090</a>)</li> <li>sync: add <code>broadcast::WeakSender</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7100">#7100</a>)</li> <li>sync: add <code>oneshot::Receiver::is_empty()</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7153">#7153</a>)</li> <li>sync: add <code>oneshot::Receiver::is_terminated()</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7152">#7152</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>fs: empty reads on <code>File</code> should not start a background read (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7139">#7139</a>)</li> <li>process: calling <code>start_kill</code> on exited child should not fail (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7160">#7160</a>)</li> <li>signal: fix <code>CTRL_CLOSE</code>, <code>CTRL_LOGOFF</code>, <code>CTRL_SHUTDOWN</code> on windows (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7122">#7122</a>)</li> <li>sync: properly handle panic during mpsc drop (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7094">#7094</a>)</li> </ul> <h3>Changes</h3> <ul> <li>runtime: clean up magic number in registration set (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7112">#7112</a>)</li> <li>coop: make coop yield using waker defer strategy (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7185">#7185</a>)</li> <li>macros: make <code>select!</code> budget-aware (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7164">#7164</a>)</li> <li>net: panic when passing a blocking socket to <code>from_std</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7166">#7166</a>)</li> <li>io: clean up buffer casts (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7142">#7142</a>)</li> </ul> <h3>Changes to unstable APIs</h3> <ul> <li>rt: add before and after task poll callbacks (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7120">#7120</a>)</li> <li>tracing: make the task tracing API unstable public (<a href="https://redirect.github.com/tokio-rs/tokio/issues/6972">#6972</a>)</li> </ul> <h3>Documented</h3> <ul> <li>docs: fix nesting of sections in top-level docs (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7159">#7159</a>)</li> <li>fs: rename symlink and hardlink parameter names (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7143">#7143</a>)</li> <li>io: swap reader/writer in simplex doc test (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7176">#7176</a>)</li> <li>macros: docs about <code>select!</code> alternatives (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7110">#7110</a>)</li> <li>net: rename the argument for <code>send_to</code> (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7146">#7146</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="d413c9c02a
"><code>d413c9c</code></a> chore: prepare Tokio v1.44.1 (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7217">#7217</a>)</li> <li><a href="addbfb9204
"><code>addbfb9</code></a> rt: skip defer queue in <code>block_in_place</code> context (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7216">#7216</a>)</li> <li><a href="8182ecf262
"><code>8182ecf</code></a> chore: prepare Tokio v1.44.0 (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7202">#7202</a>)</li> <li><a href="a258bff701
"><code>a258bff</code></a> ci: enable printing in multi thread loom tests (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7200">#7200</a>)</li> <li><a href="e076d21f67
"><code>e076d21</code></a> process: clarify <code>Child::kill</code> behavior (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7162">#7162</a>)</li> <li><a href="042433cdcc
"><code>042433c</code></a> net: debug_assert on creating a tokio socket from a blocking one (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7166">#7166</a>)</li> <li><a href="0284d1b5c8
"><code>0284d1b</code></a> macros: make <code>select!</code> budget-aware (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7164">#7164</a>)</li> <li><a href="710bc8071e
"><code>710bc80</code></a> rt: coop should yield using waker defer strategy (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7185">#7185</a>)</li> <li><a href="a2b12bd579
"><code>a2b12bd</code></a> readme: adjust release schedule to once per month (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7191">#7191</a>)</li> <li><a href="e7b593cbee
"><code>e7b593c</code></a> process: fix grammar of the <code>ChildStdin</code> struct doc comment (<a href="https://redirect.github.com/tokio-rs/tokio/issues/7192">#7192</a>)</li> <li>Additional commits viewable in <a href="https://github.com/tokio-rs/tokio/compare/tokio-1.43.0...tokio-1.44.1">compare view</a></li> </ul> </details> <br /> Updates `tempfile` from 3.17.1 to 3.19.1 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md">tempfile's changelog</a>.</em></p> <blockquote> <h2>3.19.1</h2> <ul> <li>Don't unlink temporary files immediately on Windows (fixes <a href="https://redirect.github.com/Stebalien/tempfile/issues/339">#339</a>). Unfortunately, this seemed to corrupt the file object (possibly a Windows kernel bug) in rare cases and isn't strictly speaking necessary.</li> </ul> <h2>3.19.0</h2> <ul> <li>Remove direct dependency on <code>cfg-if</code>. It's still in the tree, but we didn't really need to use it in this crate.</li> <li>Add an unstable feature (<code>unstable-windows-keep-open-tempfile</code>) to test a potential fix to <a href="https://redirect.github.com/Stebalien/tempfile/issues/339">#339</a>.</li> </ul> <h2>3.18.0</h2> <ul> <li>Update <code>rustix</code> to 1.0.0.</li> <li>Make <code>NamedTempFile::persist_noclobber</code> atomic on Apple operating systems. It's now atomic on MacOS, Windows, and Linux (depending on the OS version and filesystem used).</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="95540ed3fc
"><code>95540ed</code></a> chore: release v3.19.1</li> <li><a href="b60aae49c1
"><code>b60aae4</code></a> fix(windows): don't automatically delete files on open (<a href="https://redirect.github.com/Stebalien/tempfile/issues/344">#344</a>)</li> <li><a href="167f544abe
"><code>167f544</code></a> ci(cargo-deny): remove windows-sys exception (<a href="https://redirect.github.com/Stebalien/tempfile/issues/343">#343</a>)</li> <li><a href="42fff6813d
"><code>42fff68</code></a> chore: release v3.19.0</li> <li><a href="61b4283c20
"><code>61b4283</code></a> feat(windows): add a feature to immediate tempfile deletion (<a href="https://redirect.github.com/Stebalien/tempfile/issues/340">#340</a>)</li> <li><a href="c2d16b3bc3
"><code>c2d16b3</code></a> ci: downgrade once-cell on old rustc versions (<a href="https://redirect.github.com/Stebalien/tempfile/issues/342">#342</a>)</li> <li><a href="35c204d7c2
"><code>35c204d</code></a> chore: remove cfg-if dependency (<a href="https://redirect.github.com/Stebalien/tempfile/issues/338">#338</a>)</li> <li><a href="b8bddaf0cf
"><code>b8bddaf</code></a> release 3.18.0</li> <li><a href="0e17869470
"><code>0e17869</code></a> update rustix (<a href="https://redirect.github.com/Stebalien/tempfile/issues/336">#336</a>)</li> <li><a href="6cf65365a4
"><code>6cf6536</code></a> doc: fix markdown</li> <li>Additional commits viewable in <a href="https://github.com/Stebalien/tempfile/compare/v3.17.1...v3.19.1">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Comprehensive Rust 🦀
This repository has the source code for Comprehensive Rust 🦀, a multi-day Rust course developed by the Android team. The course covers all aspects of Rust, from basic syntax to generics and error handling. It also includes deep dives on Android, Chromium, bare-metal, and concurrency.
Read the course at https://google.github.io/comprehensive-rust/.
Course Format and Target Audience
The course is used internally at Google when teaching Rust to experienced software engineers. They typically have a background in C++ or Java.
The course is taught in a classroom setting and we hope it will be useful for others who want to teach Rust to their team. The course will be less useful for self-study since you miss out on the discussions happening in the classroom. You don't see the questions and answers and you don't see the compiler errors we trigger when going through the code samples. We hope to improve on this via speaker notes and by publishing videos.
Press
Articles and blog posts from around the web which cover Comprehensive Rust:
- 2023-09-08: Teaching Rust in 5 days. Comprehensive Rust was used as a base for a 5-day university class on Rust.
- 2023-09-21: Scaling Rust Adoption Through Training. We published a blog post with details on the development of the course.
- 2023-10-02: In Search of Rust Developers, Companies Turn to In-House Training. About how Microsoft, Google, and others are training people in Rust.
- 2024-10-18: Rust Training at Scale | Rust Global @ RustConf 2024. What Google learnt from teaching Comprehensive Rust for more than two years.
Building
The course is built using a few tools:
In addition, mdbook-linkcheck checks the internal links.
First install Rust by following the instructions on https://rustup.rs/. Then clone this repository:
git clone https://github.com/google/comprehensive-rust/
cd comprehensive-rust
Then install these tools with:
cargo xtask install-tools
Run
mdbook test
to test all included Rust snippets. Run
mdbook serve
to start a web server with the course. You'll find the content on
http://localhost:3000. You can use mdbook build
to create a static version
of the course in the book/
directory. Note that you have to separately build
and zip exercises and add them to book/html
. To build any of the translated
versions of the course, run MDBOOK_BOOK__LANGUAGE=xx mdbook build -d book/xx
where xx
is the ISO 639 language code (e.g. da
for the Danish translation).
TRANSLATIONS.md contains further instructions.
Note
On Windows, you need to enable symlinks (
git config --global core.symlinks true
) and Developer Mode.
Contributing
We would like to receive your contributions. Please see CONTRIBUTING.md for details.
Contact
For questions or comments, please contact Martin Geisler or start a discussion on GitHub. We would love to hear from you.