<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Developer Tools on Michael-F-Bryan</title><link>https://adventures.michaelfbryan.com/tags/developer-tools/</link><description>Recent content in Developer Tools on Michael-F-Bryan</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 26 Aug 2026 15:15:33 +0800</lastBuildDate><atom:link href="https://adventures.michaelfbryan.com/tags/developer-tools/index.xml" rel="self" type="application/rss+xml"/><item><title>GitHub Actions can't access private repos? Here's how to fix it</title><link>https://adventures.michaelfbryan.com/posts/configuring-cargo-auth-in-github-actions/</link><pubDate>Tue, 13 Sep 2022 12:01:45 +0800</pubDate><guid>https://adventures.michaelfbryan.com/posts/configuring-cargo-auth-in-github-actions/</guid><description>&lt;p&gt;When developing locally, you can add a private GitHub repository to your Rust&#10;crate as a &lt;a href="https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories" class="external-link" target="_blank" rel="noopener"&gt;&lt;code&gt;git&lt;/code&gt; dependency&lt;/a&gt;&#10; and &lt;code&gt;cargo&lt;/code&gt; should be able to retrieve it&#10;just fine.&lt;/p&gt;&#10;&lt;p&gt;However, when you push your changes to GitHub and run CI, GitHub Actions can&#10;run into authentication issues when trying to build your crate.&lt;/p&gt;&#10;&lt;p&gt;This is the error message I was fighting for a good part of today:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cargo check --workspace --verbose --locked&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Updating git repository &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;https://github.com/Michael-F-Bryan/my-secret-repo.git&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Running &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;git fetch --force --update-head-ok &lt;span style="color:#e6db74"&gt;&amp;#39;https://github.com/Michael-F-Bryan/my-secret-repo.git&amp;#39;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;+HEAD:refs/remotes/origin/HEAD&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Error: failed to get &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;internal-crate&lt;span style="color:#e6db74"&gt;`&lt;/span&gt; as a dependency of package &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;some-crate v0.1.4 &lt;span style="color:#f92672"&gt;(&lt;/span&gt;/home/runner/work/some-crate/some-crate/crates/cli&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Caused by:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; failed to load source &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; dependency &lt;span style="color:#e6db74"&gt;`&lt;/span&gt;internal-crate&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Caused by:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Unable to update https://github.com/Michael-F-Bryan/my-secret-repo.git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Caused by:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; failed to clone into: /home/runner/.cargo/git/db/my-secret-repo-20c1af0756e23bf7&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Caused by:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; process didn&lt;span style="color:#e6db74"&gt;&amp;#39;t exit successfully: `git fetch --force --update-head-ok &amp;#39;&lt;/span&gt;https://github.com/Michael-F-Bryan/my-secret-repo.git&lt;span style="color:#e6db74"&gt;&amp;#39; &amp;#39;&lt;/span&gt;+HEAD:refs/remotes/origin/HEAD&lt;span style="color:#e6db74"&gt;&amp;#39;` (exit status: 128)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; --- stderr&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; fatal: could not read Username for &amp;#39;&lt;/span&gt;https://github.com&lt;span style="color:#e6db74"&gt;&amp;#39;: No such device or address&#10;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt;Error: The process &amp;#39;&lt;/span&gt;/home/runner/.cargo/bin/cargo&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt; failed with exit code &lt;span style="color:#ae81ff"&gt;101&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cargo can&amp;rsquo;t check out my private repository!&lt;/p&gt;</description></item><item><title>Announcing Cargo WAPM</title><link>https://adventures.michaelfbryan.com/posts/announcing-cargo-wapm/</link><pubDate>Sun, 07 Aug 2022 16:14:07 +0800</pubDate><guid>https://adventures.michaelfbryan.com/posts/announcing-cargo-wapm/</guid><description>&lt;p&gt;While at Hammer of the Gods, we wrote &lt;em&gt;a lot&lt;/em&gt; of Rust code that gets compiled to&#10;WebAssembly for use in our containerization technology, Rune.&lt;/p&gt;&#10;&lt;p&gt;We have over 30 different processing blocks (chunks of code that can be used in&#10;a data processing pipeline) and as you can imagine, publishing and versioning&#10;each of WebAssembly module manually isn&amp;rsquo;t practical. For that, we lean on the&#10;&lt;a href="https://wapm.io/" class="external-link" target="_blank" rel="noopener"&gt;WebAssembly Package Manager&lt;/a&gt;&#10; to do all the heavy lifting.&lt;/p&gt;</description></item><item><title>Creating a Robust, Reusable Link-Checker</title><link>https://adventures.michaelfbryan.com/posts/linkchecker/</link><pubDate>Sat, 02 May 2020 19:20:00 +0800</pubDate><guid>https://adventures.michaelfbryan.com/posts/linkchecker/</guid><description>&lt;p&gt;With over 68,842 downloads, one of my most successful Rust projects is a&#10;nondescript little program called &lt;a href="https://github.com/Michael-F-Bryan/mdbook-linkcheck" class="external-link" target="_blank" rel="noopener"&gt;mdbook-linkcheck&lt;/a&gt;&#10;. This&#10;is a link-checker for &lt;a href="https://github.com/rust-lang/mdBook" class="external-link" target="_blank" rel="noopener"&gt;mdbook&lt;/a&gt;&#10;, the tool powering a lot of&#10;documentation in the Rust community, including &lt;a href="https://doc.rust-lang.org/book/" class="external-link" target="_blank" rel="noopener"&gt;&lt;em&gt;The Rust Programming&#10;Language&lt;/em&gt;&lt;/a&gt;&#10; and &lt;a href="https://rustc-dev-guide.rust-lang.org/" class="external-link" target="_blank" rel="noopener"&gt;&lt;em&gt;The Rustc Dev Book&lt;/em&gt;&lt;/a&gt;&#10;.&lt;/p&gt;&#10;&lt;p&gt;As an example of what it looks like, I recently found &lt;a href="https://github.com/rust-lang/chalk/pull/408/" class="external-link" target="_blank" rel="noopener"&gt;a couple&lt;/a&gt;&#10;&#10;broken links in &lt;a href="https://rust-lang.github.io/chalk/book/" class="external-link" target="_blank" rel="noopener"&gt;the documentation&lt;/a&gt;&#10; for Chalk. When the tool&#10;detects broken links in your markdown it&amp;rsquo;ll emit error messages that point&#10;you at the place the link is defined and explain what the issue is.&lt;/p&gt;</description></item><item><title>I Made A Thing: Markedit</title><link>https://adventures.michaelfbryan.com/posts/markedit/</link><pubDate>Sun, 09 Feb 2020 04:40:00 +0800</pubDate><guid>https://adventures.michaelfbryan.com/posts/markedit/</guid><description>&lt;p&gt;A couple days ago I released &lt;a href="https://crates.io/crates/markedit" class="external-link" target="_blank" rel="noopener"&gt;markedit&lt;/a&gt;&#10;, a small crate for editing&#10;unstructured markdown documents. This is a useful enough library that I&#10;thought I&amp;rsquo;d explain the main ideas behind it and potential use cases.&lt;/p&gt;&#10;&lt;p&gt;This originally came about when I was at work, preparing our application&amp;rsquo;s&#10;change log before a release for the umpteenth time (we&amp;rsquo;ve found the &lt;a href="https://keepachangelog.com/en/1.0.0/" class="external-link" target="_blank" rel="noopener"&gt;keep a&#10;changelog&lt;/a&gt;&#10; format really useful) and on the drive home I started thinking&#10;of ways to automate things.&lt;/p&gt;</description></item></channel></rss>