<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>emre şahin's digital garden 🍃 - github-actions</title>
    <link>https://emresahin.net/tags/github-actions/</link>
    <description>Posts in the github-actions tag</description>
    <language>en</language>
    <managingEditor>contact@emresahin.net (Emre Şahin)</managingEditor>
    <lastBuildDate>Tue, 15 Sep 2026 19:46:32 +0000</lastBuildDate>
    <atom:link href="https://emresahin.net/tags/github-actions/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>devlog 27</title>
      <published>2025-04-24T03:17:59+00:00</published>
      <updated>2025-04-24T03:17:59+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 24 Apr 2025 03:17:59 +0000</pubDate>
      <link>https://emresahin.net/devlog-27/</link>
      <guid isPermaLink="true">https://emresahin.net/devlog-27/</guid>
      <description>🐇 Tests are failing again: ghrl | get url | first https://github.com/iesahin/xvc/actions/runs/13875177382 🐢 We forgot to update the doc tests. Let’s run them again to update storage remove and file untrack commands. 🐇 There are issues with elision. ghpl ╭───┬──────────────────────┬───────────────...</description>
      <category>XVC</category>
      <category>Development</category>
      <category>trycmd</category>
      <category>doc tests</category>
      <category>GitHub Actions</category>
      <category>release checklist</category>
      <category>PyPI</category>
      <content:encoded><![CDATA[<p>🐇 Tests are failing again:</p>
<pre><code class="language-nu">ghrl | get url | first
https://github.com/iesahin/xvc/actions/runs/13875177382
</code></pre>
<p>🐢 We forgot to update the doc tests. Let’s run them again to update <code>storage remove</code> and <code>file untrack</code> commands.</p>
<p>🐇 There are issues with elision.</p>
<pre><code class="language-nu">ghpl

╭───┬──────────────────────┬────────────────────┬──────────────────────────────╮
│ # │     headRefName      │       title        │             url              │
├───┼──────────────────────┼────────────────────┼──────────────────────────────┤
│ 0 │ storage-remove-16674 │ xvc storage remove │ https://github.com/iesahin/x │
│   │                      │                    │ vc/pull/270                  │
╰───┴──────────────────────┴────────────────────┴──────────────────────────────╯
</code></pre>
<p>🐢 Tests are passing; we can merge the PR. But our commit hook to check the CHANGELOG doesn’t work. That’s weird; we don’t get any errors when the CHANGELOG is not in the push set.</p>
<pre><code class="language-nu">tmux new-window -c ($env.HOME | path join github.com iesahin xvc.py)  nvim 
</code></pre>
<p>🐢 Now we can update the Python bindings as well.</p>
<p>🐇 We forgot to bump package versions. We need to create a checklist for releases.</p>
<ul>
<li>✅ #🌻 CREATE a release checklist (2025-03-25 17:52)</li>
</ul>
<p>🐢 Let’s check if the latest version is updated on PyPI.</p>
<pre><code class="language-bash">pypi xvc
</code></pre>
<p>🐇 Yes, it is.</p>]]></content:encoded>
    </item>
    <item>
      <title>devlog 19</title>
      <published>2025-01-29T09:19:56+00:00</published>
      <updated>2025-01-29T09:19:56+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Wed, 29 Jan 2025 09:19:56 +0000</pubDate>
      <link>https://emresahin.net/devlog-19/</link>
      <guid isPermaLink="true">https://emresahin.net/devlog-19/</guid>
      <description>🐇 Let’s start by checking the GitHub Actions results. $ ghrl | first ╭──────────────┬─────────────────────────────────────────────────────────╮ │ conclusion │ failure │ │ displayTitle │ Add CLI completions │ │ headBranch │ clap-complete-16608 │ │ url │ https://github.com/iesahin/xvc/actions/runs/...</description>
      <category>devlog</category>
      <category>xvc</category>
      <category>github-actions</category>
      <category>testing</category>
      <category>tdd</category>
      <category>documentation</category>
      <category>ci-cd</category>
      <category>rust</category>
      <content:encoded><![CDATA[<p>🐇 Let’s start by checking the GitHub Actions results.</p>
<pre><code class="language-nu">$ ghrl | first
╭──────────────┬─────────────────────────────────────────────────────────╮
│ conclusion   │ failure                                                 │
│ displayTitle │ Add CLI completions                                     │
│ headBranch   │ clap-complete-16608                                     │
│ url          │ https://github.com/iesahin/xvc/actions/runs/13007688178 │
╰──────────────┴─────────────────────────────────────────────────────────╯
</code></pre>
<p>🐢 Although I turned off most of the <code>watch</code>es, logs are still so large that it’s not possible to view them from the interface. Downloaded the log archive.</p>
<p>🦊 We can have different GitHub Actions steps for each test. Claude can help write such a repeating set of steps.</p>
<p>🐇 We can at least separate <code>z_test_docs</code> to see if integration tests or that fails.</p>
<p>🐢 We’ll have to add caching for test artifacts to upload them for coverage. I’m not sure we really need to add that complexity to the process just to avoid downloading the logs.</p>
<p>🐇 We can actually move all to Xvc. We need a GitHub Action to run an Xvc pipeline.</p>
<p>🐢 Eventually yes, we should move our testing to Xvc itself. Now, the logs show that there are differences in <code>z_test_docs</code> actually.</p>
<p>🐇 When I run the command below, it passes. We may have a different config in GitHub Actions.</p>
<pre><code class="language-nu">$ XVC_TRYCMD_TESTS=storage,file,pipeline,core,start TRYCMD=overwrite rws cargo test --features test-ci -p xvc --test z_test_docs
test z_doc_tests ... ok
...
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 15.34s
</code></pre>
<p>🐢 We don’t have an <code>XVC_TRYCMD_TESTS=storage,file,pipeline,core,start</code> definition in GitHub Actions; let’s add it, bump the version, and try again.</p>
<pre><code class="language-nu">$ cargo set-version "0.6.14-alpha.10"
   Upgrading xvc from 0.6.14-alpha.9 to 0.6.14-alpha.10
...
</code></pre>
<p>🦊 We could also update <code>run-tests.zsh</code> to get a quick response.</p>
<p>🐢 Yep, let’s do that as well.</p>
<p>🐇 Dev tests pass, but there are differences in the documents still. For some reason, the local <code>run-tests.zsh</code> doesn’t update <code>xvc/book/src/ref/xvc-storage.md</code>. It only has the help text as a reference, but it’s not updated with the aliases, and it breaks the CI. This is weird but a small issue. Fixed it manually.</p>
<pre><code class="language-nu">$ ghrl | first 2
╭───┬────────────┬───────────────────┬────────────────────┬────────────────────╮
│ # │ conclusion │   displayTitle    │     headBranch     │        url         │
├───┼────────────┼───────────────────┼────────────────────┼────────────────────┤
│ 0 │            │ Add CLI           │ clap-complete-1660 │ https://github.com │
│   │            │ completions       │ 8                  │ /iesahin/xvc/actio │
│   │            │                   │                    │ ns/runs/1302770108 │
│   │            │                   │                    │ 2                  │
│ 1 │ success    │ Add CLI           │ clap-complete-1660 │ https://github.com │
│   │            │ completions       │ 8                  │ /iesahin/xvc/actio │
│   │            │                   │                    │ ns/runs/1302755462 │
│   │            │                   │                    │ 2                  │
╰───┴────────────┴───────────────────┴────────────────────┴────────────────────╯
</code></pre>
<p>🐢 The earlier one has passed. It looks like we’re ready to merge. Let’s update the <code>CHANGELOG.md</code> for release.</p>
<p>🐇 Setting the release version:</p>
<pre><code class="language-nu">cargo set-version "0.6.14"
   Upgrading xvc from 0.6.14-alpha.10 to 0.6.14
...
</code></pre>
<p>🐢 Let’s check the CI</p>
<pre><code class="language-nu">$ ghrl | first 2

╭───┬────────────┬───────────────────┬────────────────────┬────────────────────╮
│ # │ conclusion │   displayTitle    │     headBranch     │        url         │
├───┼────────────┼───────────────────┼────────────────────┼────────────────────┤
│ 0 │ success    │ Add CLI           │ clap-complete-1660 │ https://github.com │
│   │            │ completions       │ 8                  │ /iesahin/xvc/actio │
│   │            │                   │                    │ ns/runs/1302770108 │
│   │            │                   │                    │ 2                  │
│ 1 │ success    │ Add CLI           │ clap-complete-1660 │ https://github.com │
│   │            │ completions       │ 8                  │ /iesahin/xvc/actio │
│   │            │                   │                    │ ns/runs/1302755462 │
│   │            │                   │                    │ 2                  │
╰───┴────────────┴───────────────────┴────────────────────┴────────────────────╯
</code></pre>
<p>🐇 And merge:</p>
<pre><code class="language-nu">$ ghpM --body $"(open CHANGELOG.md | lines | skip 2 | take 7)" --subject "Add completions" --squash
</code></pre>
<p>🐢 Tagged main and pushed. Packages should be built in a few minutes.</p>]]></content:encoded>
    </item>
    <item>
      <title>devlog 12</title>
      <published>2025-01-19T09:46:29+00:00</published>
      <updated>2025-01-19T09:46:29+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Sun, 19 Jan 2025 09:46:29 +0000</pubDate>
      <link>https://emresahin.net/devlog-12/</link>
      <guid isPermaLink="true">https://emresahin.net/devlog-12/</guid>
      <description>🐢 What are today’s plans? 🐇 I think we can start by improving xvc.py. I mean, releasing. Yesterday we finished our work with the Rust library. 🐢 Then we can start to look at the GUI, I believe. We can replace that 3-column view with a table and preview. It will be much easier that way. 🐇 Yep. Let...</description>
      <category>xvc</category>
      <category>xvc.py</category>
      <category>pypi</category>
      <category>maturin</category>
      <category>pytest</category>
      <category>xvc-test-helper</category>
      <category>codecov</category>
      <category>coverage</category>
      <category>GitHub Actions</category>
      <category>Python</category>
      <category>Rust</category>
      <category>PyO3</category>
      <content:encoded><![CDATA[<p>🐢 What are today’s plans?</p>
<p>🐇 I think we can start by improving xvc.py. I mean, releasing. Yesterday we finished our work with the Rust library.</p>
<p>🐢 Then we can start to look at the GUI, I believe. We can replace that 3-column view with a table and preview. It will be much easier that way.</p>
<p>🐇 Yep. Let’s finish and release the Python version first. Then we’ll go on to the GUI.</p>
<p>🐢 Let’s take a look at the PRs first.</p>
<pre><code>ghpl 
36	Bump pyo3 from 0.22.2 to 0.23.3	dependabot/cargo/pyo3-0.23.3	OPEN	2024-12-04T03:52:03Z

gh pr close 36
✓ Closed pull request iesahin/xvc.py#36 (Bump pyo3 from 0.22.2 to 0.23.3)
</code></pre>
<p>🐢 We have already upgraded to pyo3 0.23. No need for this. Let’s create a PR for the current branch.</p>
<pre><code>git push --set-upstream origin v0.6.13

ghpC --fill
https://github.com/iesahin/xvc.py/pull/37
</code></pre>
<p>🐇 We can also tag and push the tags.</p>
<p>🐢 I’d like to have some more coverage for certain parts of the code. Let’s add some tests.</p>
<p>🐇 It looks like we mainly lack the storage tests. They need configuration to add keys to GitHub, and we already skip some of these even in the Rust code.</p>
<p>🐢 Umm, I see. We also need a way to measure coverage. Could we do this with Codecov, I wonder?</p>
<p>🐇 I found an example here: https://github.com/codecov/example-python/blob/main/.github/workflows/ci.yml. It needs <code>coverage</code> and <code>pytest-cov</code> in the requirements.</p>
<p>🐢 Let’s try this then.</p>
<p>🐇 Added <code>coverage.yml</code> file. It’s simpler than the other GitHub action. Need to update the token now.</p>
<p>🐢 There is an issue installing the requirements.</p>
<p>🐇 I forgot to add <code>sudo</code> to <code>apt-get</code>. Will take care of it now.</p>
<p>🐢 Let’s check the run.</p>
<pre><code>ghrl
in_progress		Release v0.6.13	coverage	v0.6.13	pull_request	12556590550	2m31s	2024-12-31T06:59:58Z
in_progress		Release v0.6.13	publish-to-pypi	v0.6.13	pull_request	12556590548	2m31s	2024-12-31T06:59:58Z
...
</code></pre>
<p>🐇 It takes a while and we still didn’t add the <code>CODECOV_TOKEN</code>.</p>
<p>🐢 Let’s add it, and after that, we need to take a look at this <code>blink</code> configuration. It adds letters after the selection.</p>
<p>🐇 Added the secret and configured <code>xvc.py</code> for coverage. There is an error with the build, though. Maybe the command we should be using is <code>maturin develop</code> instead of <code>build</code> to make Xvc available for the environment.</p>
<p>🐢 Let’s update and try it then.</p>
<p>🐇 <code>maturin develop</code> requires a virtual environment.</p>
<p>🐢 I checked the options for <code>build</code>, and I think there is an option, but let’s search first.</p>
<p>🐇 I searched, but it looks like we can just pass an <code>--out</code> directory or install <code>xvc</code> from the <code>target/wheels/</code> directory. The second option requires less maintenance.</p>
<p>🐢 Okay. Let’s add a step to the action then.</p>
<p>🐇 Now, let’s wait for the run to finish with <code>gh run watch</code>.</p>
<p>🐢 It failed. Let’s take a look at the logs:</p>
<pre><code>ghrl
completed	failure	Release v0.6.13	coverage	v0.6.13	pull_request	12556939836	3m26s	2024-12-31T07:38:54Z

gh run view 12556939836 --log-failed
</code></pre>
<p>🐇 It looks like some of the tests are failing. Let’s run the tests locally.</p>
<p>🐢 We should run with the <code>--forked</code> option, and it looks like we have a test to update with the xvc file list.</p>
<p>🐇 Updated the test, and I noticed we forgot to supply the new <code>--show-directories</code> option in the Python interface.</p>
<p>🐢 Yep. Passing these options as command-line options in strings is not robust. It’s very easy to forget things. I think we should start using CLI structs directly, but it’s not time yet.</p>
<p>🐇 I agree. It’s one of the goals for building a GUI, actually.</p>
<p>🐢 The tests failed again.</p>
<pre><code>ghrl | rg failure
completed	failure	Release v0.6.13	coverage	v0.6.13	pull_request	12557031091	3m49s	2024-12-31T07:51:19Z

gh run view 12557031091 --log-failed
</code></pre>
<p>🐇 There is a Git error now. We need to add a Git user and email to the action.</p>
<p>🐢 Added those and watching the results again now.</p>
<p>🐇 Why do you think the publish action always works? It can only run with the main branch, I think. No need to run it with other pushes.</p>
<p>🐢 Yes, let’s configure it now.</p>
<pre><code>ghrl | rg failure
completed	failure	Release v0.6.13	coverage	v0.6.13	pull_request	12557083393	3m21s	2024-12-31T07:59:18Z

gh run view 12557083393 --log-failed
</code></pre>
<p>🐇 It looks like we also need <code>xvc-test-helper</code> in the path. Let’s <code>cargo install</code> it and add it to the path.</p>
<p>🐢 Added <code>.cargo/bin</code> to the path like:</p>
<pre><code class="language-yaml">- name: Add cargo bin to PATH
  run: echo "$HOME/.cargo/bin" &gt;&gt; $GITHUB_PATH
</code></pre>
<p>and installed the helper with <code>cargo install xvc-test-helper</code>.</p>
<p>🐇 By the way, GitHub Copilot is hallucinating about a method to update the path.</p>
<p>🐢 I searched and it may not be hallucinating. We can use the <code>::add-path::</code> command with <code>echo</code>, it looks like. This is new to me.</p>
<p>🐇 The tests failed again.</p>
<pre><code>ghrl | rg failure
completed	failure	Release v0.6.13	coverage	v0.6.13	pull_request	12557208723	3m34s	2024-12-31T08:12:09Z

gh run view 12557208723 --log-failed
</code></pre>
<p>🐢 <code>file().list()</code> had a mistake, and we need to install <code>rg</code> for the tests.</p>
<p>🐇 Watching the test run. In the meantime, maybe we can review…</p>
<p>🐢 Failed again.</p>
<pre><code>ghrl | rg failure
completed	failure	Release v0.6.13	coverage	v0.6.13	pull_request	12557294105	3m46s	2024-12-31T08:21:17Z

gh run view 12557294105 --log-failed
</code></pre>
<p>🐇 Added <code>db.commit()</code> to two places in the code. This should pass now.</p>
<p>🐢 Yeah!</p>
<pre><code>ghrl | head -n 1
completed	success	Release v0.6.13	coverage	v0.6.13	pull_request	12557509836	3m46s	2024-12-31T08:44:33Z

gh run view 12557509836

✓ v0.6.13 coverage iesahin/xvc.py#37 · 12557509836
Triggered via pull_request about 4 minutes ago

JOBS
✓ linux in 3m36s (ID 35010253915)

ANNOTATIONS
! ubuntu-latest pipelines will use ubuntu-24.04 soon. For more details, see https://github.com/actions/runner-images/issues/10636
linux: .github#1


For more information about the job, try: gh run view --job=35010253915
View this run on GitHub: https://github.com/iesahin/xvc.py/actions/runs/12557509836
</code></pre>
<p>🐇 I can’t see a coverage report on codecov.io, though.</p>
<p>🐢 It says no coverage report is generated. Let’s test to generate XML files locally.</p>
<p>🐇 The option in the docs seems incorrect. <code>--cov-branch</code> doesn’t produce anything.</p>
<p>🐢 Let’s wait for the run again.</p>
<p>🐇 Should we add a badge to the README?</p>
<p>🐢 It won’t show much, but yeah, let’s make it.</p>
<p>🐇 The results are in and it shows 100% coverage. This means it doesn’t actually test anything.</p>
<p>🐢 We need Rust coverage for this. Let’s search for it.</p>
<p>🐇 I found this: https://github.com/cjermain/rust-python-coverage. It runs <code>cargo llvm-cov</code> with the project and measures test coverage. But we don’t have any Rust tests.</p>
<p>🐢 It looks like we don’t need Rust tests. <code>cargo llvm-cov</code> can check coverage with the Python as well.</p>
<pre><code class="language-bash">$ cargo llvm-cov show-env --export-prefix
export RUSTFLAGS=" -C instrument-coverage --cfg coverage --cfg trybuild_no_target"
export LLVM_PROFILE_FILE="/home/.../rust-python-coverage/target/rust-python-coverage-%m.profraw"
export CARGO_INCREMENTAL="0"
export CARGO_LLVM_COV_TARGET_DIR="/home/.../rust-python-coverage/target"
</code></pre>
<hr>
<p>🐢 Let’s take a look at what remained for 0.6.13.</p>
<p>🐇 I think there is nothing left. Python must be published when we merged the PR.</p>
<p>🐢 Let’s take a look by searching xvc python.</p>
<p>🐇 The PyPI page is https://pypi.org/project/xvc/ and it still reports the version as 0.6.11. There must be something.</p>
<p>🐢 Now let’s take a look at</p>
<p>https://github.com/iesahin/xvc.py</p>
<p>🐇 The run seems to be OK though.</p>
<p>https://github.com/iesahin/xvc.py/actions/runs/12557780141/job/35010938462</p>
<p>🐢 Maybe the version in <code>pyproject.toml</code> is still 0.6.11 and we forgot to update it?</p>
<p>tmux new-window -c $HOME/github.com/iesahin/xvc.py/ nvim</p>
<p>🐇 There is no version string in <code>~/github.com/iesahin/xvc.py/pyproject.toml</code>. It’s <em>dynamic</em>.</p>
<p>🐢 Then, let’s try to publish from local now.</p>
<p>🐇 The <code>iex</code> username requires email verification.</p>
<p>🐢 It looks like I publish xvc through the <code>iesahin</code> account, not <code>iex</code>. Maybe I can add both accounts to the project.</p>
<p>🐇 There seem to be no errors on the PyPI site.</p>
<p>🐢 Updating the token. Let’s add the token to pass to run <code>maturin publish</code>.</p>
<p>🐇 We’re receiving invalid or non-existent authentication information. Upgraded <code>maturin</code> to see if it fixes the issue.</p>
<p>🐢 We can also double-check the key.</p>
<p>🐇 Uploaded successfully from local. Let’s check the job again.</p>
<p>🐢 The release job was skipped because we didn’t tag after the merge. https://github.com/iesahin/xvc.py/actions/runs/12557780141/job/35011303045 That looks like the reason.</p>
<p>🐇 I should be more careful which is run and which is skipped.</p>
<p>🐢 Maybe we can relax the condition. We do this rarely. Maybe republishing is alright?</p>
<p>🐇 Yep, removed that. The jobs are running now. Let’s watch them to see what happens when we publish some of the packages.</p>
<p>🐢 In the meantime, let’s experiment with searching commands file with <code>fzf-lua</code>.</p>
<p>🐇 It requires more experimentation, but we can start from https://github.com/ibhagwan/fzf-lua/wiki/Advanced#interactive-shell-command.</p>
<p>🐢 The xvc publish jobs failed, btw.</p>
<pre><code>ghrl
completed	failure	Remove if condition from release	publish-to-pypi	v0.6.13	push	12568863716	15m26s	2025-01-01T08:30:03Z

gh run view 12568863716 --log-failed
...
Release	Run actions/download-artifact@v4.1.7	        Please ensure that your artifact is not expired and the artifact was uploaded using a compatible version of toolkit/upload-artifact.
...
</code></pre>
<p>🐇 It was using an older version of <code>upload-artifact</code>.</p>
<p>🐢 Rerunning the job and it looks like it runs for both push to <code>main</code> and tag with <code>v0.6.13</code>. We can turn off push to <code>main</code>, I believe.</p>
<p>🐇 There was a missing <code>upload-artifact</code> again. Fixed and updated the tags.</p>
<p>ghrl
completed	failure	update upload-artifacts	publish-to-pypi	main	push	12569060915	14m39s	2025-01-01T08:57:22Z</p>
<p>ghrf 12569060915</p>
<p>🐢 There are conflicts with uploaded artifacts now. We may need to clean up the artifacts manually.</p>
<p>🐇 The conflicts were not about inter-workflow names. The names were conflicting because all files were named <code>wheel</code>. I added the platform and target to the names to avoid conflicts.</p>
<p>🐢 Let’s wait then. Maybe it will work this time. Could you search for a Lua console for Neovim?</p>
<p>🐇 Let’s try this one: return {
“yarospace/lua-console.nvim”,
lazy = true, keys = “`”, opts = {},
}</p>
<p>🐢 I couldn’t make it run but won’t spend much time ATM. How about the jobs?</p>
<pre><code>ghrl
completed	failure	update upload artifact names	publish-to-pypi	v0.6.13	push	12569298414	13m57s	2025-01-01T09:27:00Z

ghrf 12569298414
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9180510Z ##[group]Run actions/download-artifact@v4
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9182098Z with:
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9182859Z   name: wheels
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9183843Z   merge-multiple: false
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9184817Z   repository: iesahin/xvc.py
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9185820Z   run-id: 12569298414
Release	Run actions/download-artifact@v4	2025-01-01T09:40:52.9186903Z ##[endgroup]
Release	Run actions/download-artifact@v4	2025-01-01T09:40:53.1937617Z Downloading single artifact
Release	Run actions/download-artifact@v4	2025-01-01T09:40:53.4694769Z ##[error]Unable to download artifact(s): Artifact not found for name: wheels
Release	Run actions/download-artifact@v4	        Please ensure that your artifact is not expired and the artifact was uploaded using a compatible version of toolkit/upload-artifact.
Release	Run actions/download-artifact@v4	        For more information, visit the GitHub Artifacts FAQ: https://github.com/actions/toolkit/blob/main/packages/artifact/docs/faq.md
</code></pre>
<p>🐇 Now the download doesn’t work.</p>
<p>🐢 Update it to download using patterns.</p>
<p>🐇 Did so and let’s take a look at the jobs again.</p>
<pre><code>ghrl
completed	failure	added pattern to download	.github/workflows/publish.yml	main	push	12569456859	0s	2025-01-01T09:49:19Z

ghrv 12569456859

X main .github/workflows/publish.yml · 12569456859
Triggered via push about 3 minutes ago

X This run likely failed because of a workflow file issue.

For more information, see: https://github.com/iesahin/xvc.py/actions/runs/12569456859
</code></pre>
<p>🐢 The line with the pattern was reported as broken.</p>
<p>🐇  Removed it and recommitted.</p>
<pre><code>ghrl
✅ completed	success	remove pattern to download all	publish-to-pypi	v0.6.13	push	12569509435	14m41s	2025-01-01T09:58:49Z
</code></pre>
<p>🐢 And now this completes the <code>v0.6.13</code> release.</p>
<p>🐇 We’ll see how it will work next time.</p>
<p>🐢 Yep. Let’s move on to the GUI for now. Is that okay with you?</p>]]></content:encoded>
    </item>
    <item>
      <title>Devlog 11: Homebrew Taps and Automation</title>
      <published>2025-01-19T09:37:37+00:00</published>
      <updated>2025-01-19T09:37:37+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Sun, 19 Jan 2025 09:37:37 +0000</pubDate>
      <link>https://emresahin.net/devlog-11/</link>
      <guid isPermaLink="true">https://emresahin.net/devlog-11/</guid>
      <description>🐢 Let’s move slowly. Let’s create a brew project first. 🦊 There is a brew create command, but could we really copy it from someone else? 🐢 I read the espanso example , and I’ll start by adding a repository. Welcome https://github.com/iesahin/homebrew-xvc 🦊 We can search to automate this for Rust ...</description>
      <category>Devlog</category>
      <category>XVC</category>
      <category>Homebrew</category>
      <category>homebrew</category>
      <category>espanso</category>
      <category>ripgrep</category>
      <category>gh</category>
      <category>wget</category>
      <category>github-actions</category>
      <category>rust</category>
      <content:encoded><![CDATA[<p>🐢 Let’s move slowly. Let’s create a brew project first.</p>
<p>🦊 There is a <code>brew create</code> command, but could we really copy it from someone else?</p>
<p>🐢 I read the <a href="https://federicoterzi.com/blog/how-to-publish-your-rust-project-on-homebrew/">espanso example</a>, and I’ll start by adding a repository. Welcome https://github.com/iesahin/homebrew-xvc</p>
<p>🦊 We can search to automate this for Rust stuff first. Maybe it’s easier to automate than to do it manually with examples.</p>
<p>🐢 Let’s search “how to automate homebrew tap formula updates with github actions”</p>
<p>🐲 There is a <a href="https://josh.fail/2023/automate-updating-custom-homebrew-formulae-with-github-actions/">shell script</a> that updates the brew repo with a shell script. It fires the action from the main repository with a command like:</p>
<pre><code>gh workflow run release.yml -f version=${{ env.VERSION }} -R itspriddle/homebrew-slack-notify
</code></pre>
<p>🐢 It looks a little brittle, though.</p>
<p>🐲 There is also a GitHub action: https://github.com/marketplace/actions/homebrew-tap but it doesn’t look very popular. There is another one https://github.com/marketplace/actions/bump-homebrew-formula but this is for formulas, or the default settings are those.</p>
<p>🐢 There is an example https://github.com/marketplace/actions/bump-homebrew-formula#examples for taps as well.</p>
<p>🐲 This one is simpler, and probably we can just add this first: https://github.com/marketplace/actions/homebrew-bump-formula Most of the fields are optional.</p>
<p>🐇 I think this is much easier than the other. Let’s start with this.</p>
<p>🐢 Now let’s add a token to the Xvc repo. ✅</p>
<p>🦊 Add a branch to Xvc and add the release action file.</p>
<p>🐢 Added the release action file <code>~/github.com/iesahin/xvc/.github/workflows/homebrew.yml</code>, but we still don’t have a tap; maybe we can just add one.</p>
<p>🦊 Can you check espanso’s for example?</p>
<p>🐢 It has a cask and is in the core. We need a tap example.</p>
<p>🐲 I believe we need to clone <code>homebrew-xvc</code> and run <code>gh workflow run</code>.</p>
<p>🐢 Yes, let’s clone the repo and try to run it manually.</p>
<p>🐇 We don’t have a formula yet.</p>
<p>🦊 What’s the directory structure of a Homebrew tap project?</p>
<p>🐢 It’s something like this, but we don’t need tests for this, I believe.</p>
<pre><code>.
├── Formula
│   └── &lt;formula_name&gt;.rb
├── LICENSE
├── README.md
└── .github
    └── workflows
        └── tests.yml
</code></pre>
<p>🐇 What goes into the Formula?</p>
<p>🦊 Let’s take a look at ripgrep’s example:</p>
<pre><code class="language-ruby">class Ripgrep &lt; Formula
  desc "Search tool like grep and The Silver Searcher"
  homepage "https://github.com/BurntSushi/ripgrep"
  url "https://github.com/BurntSushi/ripgrep/archive/refs/tags/14.1.1.tar.gz"
  sha256 "4dad02a2f9c8c3c8d89434e47337aa654cb0e2aa50e806589132f186bf5c2b66"
  license "Unlicense"
  head "https://github.com/BurntSushi/ripgrep.git", branch: "master"

  livecheck do
    url :stable
    strategy :github_latest
  end

  bottle do
    sha256 cellar: :any,                 arm64_sequoia:  "b8bf5e73c9c9b441de067ec86ac167b071ecc2078dcb1d89d2cebbb151feab35"
    sha256 cellar: :any,                 arm64_sonoma:   "47b9c3515c866b147f0e98735cab165d6471b9f28fab1ba2c57e59c43da5c10b"
    sha256 cellar: :any,                 arm64_ventura:  "e14a94e84c028ff53c1be3b106fdeb5aca4d7c893a819e7fb967e0719b946a28"
    sha256 cellar: :any,                 arm64_monterey: "ad8dc4ab475c84e2a1e60f5b3107f52dd59e33f84a08284b19681d8b98508fd7"
    sha256 cellar: :any,                 sonoma:         "71d434eeabc2af220285b037f7264563ce9bc77a41af35eabe2213276a37ec2b"
    sha256 cellar: :any,                 ventura:        "0cdb547c696992d08c6613c40934218964f4a061b5413c4b2f013c3f0c3ed253"
    sha256 cellar: :any,                 monterey:       "2ce54302e4524ad28389aca5a16333d4193128e911de2881e6b0e953559d89cd"
    sha256 cellar: :any_skip_relocation, x86_64_linux:   "97d7cbd33b4d0ed09551e3dbc07f830d3df018c2aefbb2222a12ccfb829aae30"
  end

  depends_on "asciidoctor" =&gt; :build
  depends_on "pkgconf" =&gt; :build
  depends_on "rust" =&gt; :build
  depends_on "pcre2"

  def install
    system "cargo", "install", "--features", "pcre2", *std_cargo_args

    generate_completions_from_executable(bin/"rg", "--generate", shell_parameter_format: "complete-")
    (man1/"rg.1").write Utils.safe_popen_read(bin/"rg", "--generate", "man")
  end

  test do
    (testpath/"Hello.txt").write("Hello World!")
    system bin/"rg", "Hello World!", testpath
  end
end
</code></pre>
<p>🐇 What’s in that tar file?</p>
<pre><code>wget https://github.com/BurntSushi/ripgrep/archive/refs/tags/14.1.1.tar.gz 
--2025-01-03 06:28:07--  https://github.com/BurntSushi/ripgrep/archive/refs/tags/14.1.1.tar.gz
Resolving github.com (github.com)... 140.82.121.3
Connecting to github.com (github.com)|140.82.121.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/BurntSushi/ripgrep/tar.gz/refs/tags/14.1.1 [following]
--2025-01-03 06:28:08--  https://codeload.github.com/BurntSushi/ripgrep/tar.gz/refs/tags/14.1.1
Resolving codeload.github.com (codeload.github.com)... 140.82.121.10
Connecting to codeload.github.com (codeload.github.com)|140.82.121.10|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: ‘14.1.1.tar.gz’

     0K .......... .......... .......... .......... ..........  355K
    50K .......... .......... .......... .......... .......... 1.05M
   100K .......... .......... .......... .......... .......... 1.35M
   150K .......... .......... .......... .......... .......... 3.61M
   200K .......... .......... .......... .......... ..........  876K
   250K .......... .......... .......... .......... .......... 6.50M
   300K .......... .......... .......... .......... .......... 1.15M
   350K .......... .......... .......... .......... .......... 1.65M
   400K .......... .......... .......... .......... .......... 4.88M
   450K .......... .......... .......... .......... .......... 1.22M
   500K .......... .......... .......... .......... .......... 1.56M
   550K .......... .......                                     3.62M=0.5s

2025-01-03 06:28:09 (1.21 MB/s) - ‘14.1.1.tar.gz’ saved [581402]

mv 14.1.1.tar.gz $HOME/Downloads/ripgrep-14.1.1.tar.gz

tar xvzf $HOME/Downloads/ripgrep-14.1.1.tar.gz 
</code></pre>
<p>🐢 It’s a source distribution. It doesn’t contain any binaries.</p>
<p>🦊 We can use the same URL format, it looks. Let’s try this:</p>
<pre><code>wget https://github.com/iesahin/xvc/archive/refs/tags/0.6.13.tar.gz 
--2025-01-03 06:34:00--  https://github.com/iesahin/xvc/archive/refs/tags/0.6.13.tar.gz
Resolving github.com (github.com)... 140.82.121.4
Connecting to github.com (github.com)|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/iesahin/xvc/tar.gz/refs/tags/0.6.13 [following]
--2025-01-03 06:34:01--  https://codeload.github.com/iesahin/xvc/tar.gz/refs/tags/0.6.13
Resolving codeload.github.com (codeload.github.com)... 140.82.121.9
Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2025-01-03 06:34:01 ERROR 404: Not Found.
</code></pre>
<p>🐢 Our source should be in another location.</p>
<p>🐇 We had an unpublished release. Didn’t we release the binaries a few days ago?</p>
<p>🐢 Umm, there must be something about the <code>gh</code> command where we set <code>draft=false</code>, but seemingly it didn’t work out.</p>
<p>🐇 Ok, the URL is something like:</p>
<pre><code>wget https://github.com/iesahin/xvc/archive/refs/tags/v0.6.13.tar.gz 
</code></pre>
<p>🐢 Ok, this works. We’ll use this one for the URL.</p>
<p>🐇 What should we put for SHA256?</p>
<p>🦊 Let’s check ripgrep’s again.</p>
<p>🐢 Downloading and using <code>xvc file hash</code> (alias <code>xvcfh</code>):</p>
<pre><code>wget https://github.com/BurntSushi/ripgrep/archive/refs/tags/14.1.1.tar.gz 
...

xvc file hash -a sha2 14.1.1.tar.gz
4dad02a2f9c8c3c8d89434e47337aa654cb0e2aa50e806589132f186bf5c2b66	14.1.1.tar.gz
</code></pre>
<p>🐢 Yep, this matches the source.</p>
<p>🦊 Then we can just use the same.</p>
<p>🐇 I want to learn how to download to <code>$TMPDIR</code> with <code>wget</code>.</p>
<p>🐢 The <code>-P</code> option is used for this.</p>
<pre><code class="language-sh">wget -P $TMPDIR https://github.com/iesahin/xvc/archive/refs/tags/v0.6.13.tar.gz 
--2025-01-03 06:55:02--  https://github.com/iesahin/xvc/archive/refs/tags/v0.6.13.tar.gz
Resolving github.com (github.com)... 140.82.121.4
Connecting to github.com (github.com)|140.82.121.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://codeload.github.com/iesahin/xvc/tar.gz/refs/tags/v0.6.13 [following]
--2025-01-03 06:55:03--  https://codeload.github.com/iesahin/xvc/tar.gz/refs/tags/v0.6.13
Resolving codeload.github.com (codeload.github.com)... 140.82.121.9
Connecting to codeload.github.com (codeload.github.com)|140.82.121.9|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/x-gzip]
Saving to: ‘/var/folders/gf/18gghtz15_zf0cr8v6dymglw0000gn/T/v0.6.13.tar.gz’
...
2025-01-03 06:55:07 (2.59 MB/s) - ‘/var/folders/gf/18gghtz15_zf0cr8v6dymglw0000gn/T/v0.6.13.tar.gz’ saved [8785449]
</code></pre>
<pre><code class="language-sh">xvcfh -a sha2 $TMPDIR/v0.6.13.tar.gz
01bee5d840eefec7be1f52cc75546e1ffd7e332dfac83d875655f84e61e3a9f6	/var/folders/gf/18gghtz15_zf0cr8v6dymglw0000gn/T//v0.6.13.tar.gz
</code></pre>
<p>🐇 According to documentation, bottles are produced by Brew itself, and the documentation around bottling taps is limited.</p>
<p>🦊 We can just start with the source distribution. We can test it now.</p>
<p>🐢 The source distribution seems to work, but it requires Rust, and Brew downloads everything related to it.</p>
<p>🐇 I think that may be enough for the time being. With 0.6.14, we can work on providing bottles.</p>
<p>🐢 Umm, yes. I’m already bored with this stuff.</p>]]></content:encoded>
    </item>
    <item>
      <title>devlog 9</title>
      <published>2025-01-04T13:03:16+00:00</published>
      <updated>2025-01-04T13:03:16+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Sat, 04 Jan 2025 13:03:16 +0000</pubDate>
      <link>https://emresahin.net/devlog-9/</link>
      <guid isPermaLink="true">https://emresahin.net/devlog-9/</guid>
      <description>🐢 Today I’m planning to add cross-compilation to the Xvc 0.6.13 branch to provide more platform support. 🐇 It looks like you first need to turn off this ghost text from the blink output. It makes writing insufferable. 🐢 Yep, let’s do that first. 🐇 Now, let’s restart Neovim. 🐢 I don’t know why bli...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>blink-cmp</category>
      <category>github-cli</category>
      <category>github-actions</category>
      <category>xvc</category>
      <category>reflinks</category>
      <category>cross-compilation</category>
      <category>rust</category>
      <category>ci-cd</category>
      <content:encoded><![CDATA[<p>🐢 Today I’m planning to add cross-compilation to the Xvc 0.6.13 branch to provide more platform support.</p>
<p>🐇 It looks like you first need to turn off this ghost text from the <code>blink</code> output. It makes writing insufferable.</p>
<p>🐢 Yep, let’s do that first.</p>
<p>🐇 Now, let’s restart Neovim.</p>
<p>🐢 I don’t know why <code>blink.cmp</code> doesn’t prioritize the emojis I use. Maybe we can just use <code>#tor</code> and <code>#rab</code> for ourselves.</p>
<p>🐇 I think over time it will learn that the emojis I defined in the snippets file should have higher priority, but let’s skip this for now. What do we need to do to add cross-compilation?</p>
<p>🐢 Maybe we can just make the completion menu wait a bit longer. It shows up almost instantly, and I want it to wait for a few more milliseconds.</p>
<p>🐇 Okay, let’s look at the config.</p>
<p>🐢 The configuration file doesn’t seem to have a key for this. Let’s search: <code>blink.cmp</code>.</p>
<p>🐇 I think the culprit is typo resistance; it causes better options to be pushed down: <a href="https://cmp.saghen.dev/configuration/reference#fuzzy">https://cmp.saghen.dev/configuration/reference#fuzzy</a></p>
<p>🐢 Let’s turn that off.</p>
<p>🐇 There is an error in the configuration file. I don’t know why it’s failing.</p>
<p>🐢 I added emojis to Espanso and checked the error message. The configuration I copied from their docs seems to be broken. The message is:</p>
<pre><code class="language-text">...share/nvim/lazy/blink.cmp/lua/blink/cmp/config/utils.lua:14: fuzzy.max_items: unexpected field found in configuration
</code></pre>
<p>I’ll just delete that line.</p>
<p>🐇 It still doesn’t prioritize snippets, but we can look into this later. Espanso seems to be a better tool for this anyway.</p>
<p>🐢 Yep. Let’s look into cross-compilation support for Rust.</p>
<p>🐇 The well-known option is <code>cross.rs</code>: <a href="https://github.com/cross-rs/cross">https://github.com/cross-rs/cross</a></p>
<p>🐢 We can start with that. Installation is from the Git repository:</p>
<pre><code class="language-bash">$ cargo install cross --git https://github.com/cross-rs/cross
    Updating git repository `https://github.com/cross-rs/cross`
    Updating git submodule `https://github.com/cross-rs/cross-toolchains.git`
  Installing cross v0.2.5 (https://github.com/cross-rs/cross#4090beca)
...
   Installed package `cross v0.2.5 (https://github.com/cross-rs/cross#4090beca)` (executables `cross`, `cross-util`)
</code></pre>
<p>🐇 Now we have the <code>cross</code> and <code>cross-util</code> commands. Cross-compilation requires Podman on Linux or Docker on macOS. Do we have Docker?</p>
<p>🐢 It looks like we don’t. Maybe we can just set up a remote build using Podman or GitHub Actions. I saw a crate for that yesterday; I remember saving it somewhere but can’t find it now. Searching again seems easier, which says something about my archival and retrieval habits.</p>
<p>🐇 Maybe later you can add some vector search capabilities to your archive—semantic search.</p>
<p>🐢 Yep, <em>sometime</em> later.</p>
<p>🐇 Now let’s search for “adding rust cross compilation to github actions.”</p>
<p>🐢 I found a link to the action: <a href="https://github.com/marketplace/actions/build-rust-projects-with-cross">https://github.com/marketplace/actions/build-rust-projects-with-cross</a></p>
<p>Let’s look at the example:</p>
<pre><code class="language-yaml">jobs:
  release:
    name: Release - ${{ matrix.platform.os-name }}
    strategy:
      matrix:
        platform:
          - os-name: FreeBSD-x86_64
            runs-on: ubuntu-20.04
            target: x86_64-unknown-freebsd
            skip_tests: true

          - os-name: Linux-x86_64
            runs-on: ubuntu-20.04
            target: x86_64-unknown-linux-musl

          - os-name: Linux-aarch64
            runs-on: ubuntu-20.04
            target: aarch64-unknown-linux-musl

          - os-name: Linux-riscv64
            runs-on: ubuntu-20.04
            target: riscv64gc-unknown-linux-gnu

          - os-name: Windows-x86_64
            runs-on: windows-latest
            target: x86_64-pc-windows-msvc

          - os-name: macOS-x86_64
            runs-on: macOS-latest
            target: x86_64-apple-darwin

          # more targets here ...

    runs-on: ${{ matrix.platform.runs-on }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Build binary
        uses: houseabsolute/actions-rust-cross@v0
        with:
           command: ${{ matrix.platform.command }}
          target: ${{ matrix.platform.target }}
          args: "--locked --release"
          strip: true
      - name: Publish artifacts and release
        uses: houseabsolute/actions-rust-release@v0
        with:
          executable-name: ubi
          target: ${{ matrix.platform.target }}
</code></pre>
<p>🐇 We can just convert the current configuration to this and see if it works.</p>
<p>🐢 Let’s do that. I created <code>.github/workflows/release.yml</code> and will update it.</p>
<p>🐇 Let’s check the results with <code>gh</code>:</p>
<pre><code class="language-bash">$ gh -R iesahin/xvc run list
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525070531	34s	2024-12-28T08:17:28Z
</code></pre>
<p>🐢 It says the release has completed.</p>
<pre><code class="language-bash">$ gh -R iesahin/xvc run view 12525070531

X v0.6.13 Release iesahin/xvc#263 · 12525070531
Triggered via pull_request about 3 minutes ago

JOBS
X Release - FreeBSD-x86_64 in 12s (ID 34936257653)
  ✓ Set up job
  ✓ Checkout
  X Build binary
  - Publish artifacts and release
  ✓ Post Build binary
  ✓ Post Checkout
  ✓ Complete job
...
</code></pre>
<p>Now let’s look at the failure:</p>
<pre><code class="language-bash">$ gh -R iesahin/xvc run view 12525070531 --log-failed
</code></pre>
<p>🐇 Change the order and see what happens. Maybe we should first succeed in a non-cross-compilation build.</p>
<pre><code class="language-bash">$ gh -R iesahin/xvc run list
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525178664	35s	2024-12-28T08:34:18Z
...
$ gh -R iesahin/xvc run view   12525178664 --log-failed
...
</code></pre>
<p>🐢 It’s the same error. The <a href="https://github.com/houseabsolute/ubi/blob/master/.github/workflows/ci.yml">usage example</a> is actually much more sophisticated.</p>
<p>🐇 The issue is that we’re asking for <code>command</code> from the matrix, but the matrix doesn’t define it. That’s the second time today an example from the documentation has failed. I’ve added <code>command</code> for each platform. We can also add separate features this way to make platform-specific functionality work.</p>
<p>🐢 Agreed. Let’s look at it once more.</p>
<pre><code class="language-bash">$ gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525253982	41s	2024-12-28T08:46:23Z

$ gh -R iesahin/xvc run view 12525253982 --log-failed
...
Release - macOS-x86_64	Build binary	2024-12-28T08:46:44.8464010Z  [1m [31merror [0m [1m: [0m the lock file /Users/runner/work/xvc/xvc/Cargo.lock needs to be updated but --locked was passed to prevent this
</code></pre>
<p>🐇 Ah, that’s a different error. Let’s remove the <code>--locked</code> flag and retry.</p>
<pre><code class="language-bash">$ gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525289176	1m8s	2024-12-28T08:53:23Z
</code></pre>
<p>🐢 We’re finally starting to get some good news. Now we’re getting OpenSSL errors. We need feature flags for these platforms or to specify where OpenSSL is. Let’s add <code>bundled-openssl</code> to the failed ones. We also need <code>bundled-sqlite</code> for Windows binaries.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525354179	3m9s	2024-12-28T09:04:55Z
</code></pre>
<p>🐇 It looks like the <code>Changes.md</code> file is missing, and it can’t upload the binaries as a release because of this. I’ll set the changes file to <code>CHANGELOG.md</code>.</p>
<p>🐢 It’s weird to fail because of that. I think we should report these errors and possibly send a PR to make that file optional.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list | rg Release | head -n 1
in_progress		v0.6.13	Release	v0.6.13	pull_request	12525449368	1m38s	2024-12-28T09:18:40Z
...
✓ Release - macOS-x86_64 in 2m39s (ID 34937017695)
✓ Release - macOS-aarch64 in 2m42s (ID 34937017787)
..
ARTIFACTS
xvc-macOS-x86_64.tar.gz
xvc-macOS-arm64.tar.gz
</code></pre>
<p>🐢 It looks like <code>Linux-riscv64</code> has OpenSSL compilation errors. I think we can skip this platform for now. The goal was to add <code>aarch64</code> for macOS, and that seems to have succeeded.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525504079	3m24s	2024-12-28T09:26:43Z
...
X Release - Linux-x86_64	Build binary	2024-12-28T09:29:16.2262518Z  [0m [1m [38;5;9merror[E0308] [0m [0m [1m: mismatched types [0m
...
</code></pre>
<p>🐢 It looks like <code>Linux-x86_64</code> doesn’t support reflinks. Maybe we can make reflinks an optional feature and add it specifically to macOS and Windows targets.</p>
<p>🐇 I’ve removed <code>reflink</code> from the default features. This is a breaking change, but <em>fortunately</em> we don’t have many users who will be affected by it.</p>
<p>Let’s check the results once more.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525597866	3m39s	2024-12-28T09:42:44Z
</code></pre>
<p>🐢 Now turn off the <code>NetBSD</code> target as well.</p>
<p>🐇 <code>FreeBSD</code> and <code>Linux-x86_64</code> targets are building. Let’s see why the ARM Linux targets are failing.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525643284	4m46s	2024-12-28T09:52:04Z
</code></pre>
<p>🐇 It looks like those targets don’t have <code>libsqlite3</code> installed. Let’s add <code>bundled-sqlite</code> to these targets too.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list | rg Release | head -n 1
completed	failure	v0.6.13	Release	v0.6.13	pull_request	12525734325	4m11s	2024-12-28T10:07:36Z
</code></pre>
<p>🐢 Adding Android as a target didn’t work. Let’s remove it for now; it seems to require more work.</p>
<p>🐇 I think we’ll eventually move to using Xvc to distribute binaries. We could build the Android binary on Termux and link it on the releases page or push it as a release artifact.</p>
<p>🐢 I need to learn more about GitHub releases. If we can add artifacts to the release, maybe we can do some of this work locally.</p>
<p>🐇 We can start by looking at the capabilities of <code>gh</code> commands.</p>
<p>🐢 It looks like it’s possible to upload assets to releases. Let’s check how that works.</p>
<pre><code class="language-bash">gh release upload --help
</code></pre>
<p>🐇 So basically, we can just upload files to tags. We can list releases and work with them like anything else.</p>
<pre><code class="language-bash">gh -R iesahin/xvc release list
</code></pre>
<p>And we can delete releases:</p>
<pre><code class="language-bash">for r in v0.4.2-alpha.8 v0.4.2-alpha.7 v0.4.2-alpha.6 v0.4.2-alpha.5 v0.4.2-alpha.0 v0.4.1-alpha.0; do
  gh -R iesahin/xvc release delete "${r}"
done
</code></pre>
<p>🐢 Now let’s list them again.</p>
<pre><code class="language-bash">gh -R iesahin/xvc release list
</code></pre>
<p>🐇 The latest one has failed again.</p>
<pre><code class="language-bash">X Failed to CreateArtifact: Received non-retryable error: Failed request: (409) Conflict: an artifact with this name already exists on the workflow run
</code></pre>
<p>🐢 It looks like we’re coming to the end of this session. Under what conditions will we create a release?</p>
<p>🐇 I think it’s better to release only non-alpha tags.</p>
<p>🐢 Then the rule in the workflow will be something like:</p>
<pre><code class="language-yaml">on:
  workflow_dispatch:
  push:
    tags:
      - "v*.*.*"
      - "!v.*.*-alpha.*"
</code></pre>
<p>🐇 And now we have this result:</p>
<pre><code class="language-bash">✓ v0.6.13 Release iesahin/xvc#263 · 12533498361
Triggered via pull_request about 21 minutes ago

JOBS
✓ Release - FreeBSD-x86_64 in 4m14s
✓ Release - Linux-x86_64 in 4m3s
✓ Release - Linux-aarch64 in 4m50s
✓ Release - Windows-x86_64 in 8m47s
✓ Release - Windows-aarch64 in 6m42s
✓ Release - macOS-x86_64 in 2m37s
✓ Release - macOS-aarch64 in 2m36s
</code></pre>
<p>🐢 Nice! Let’s check the release list.</p>
<pre><code class="language-bash">gh -R iesahin/xvc release list
</code></pre>
<p>🐇 Why is there no “latest” release?</p>
<p>🐢 We have to tag it first.</p>
<p>🐇 Ah, right. Let’s tag it then.</p>
<p>🐢 I’ve pushed the changes and tagged them with <code>v0.6.13-alpha.5</code>.</p>
<p>🐇 I think it’s possible to make a release today.</p>
<p>🐢 It looks like it, yes.</p>
<p>🐇 We can merge the PR and tag it. Then everything should work.</p>
<p>🐢 We need some cleanup in the YAML files, though.</p>
<p>🐇 We can leave that for the next release.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list
in_progress		v0.6.13	Rust-CI	v0.6.13	pull_request	12533690474	9m18s	2024-12-29T08:02:29Z
completed	success	Release	Release	v0.6.13-alpha.5	push	12533689099	9m11s	2024-12-29T08:02:19Z
</code></pre>
<p>🐢 Now we have another failure in the regular CI. Let’s look at it.</p>
<p>🐇 The issue seems to be in the doc tests:</p>
<pre><code class="language-diff">- Total #: 8 Workspace Size:         276 Cached Size:          19
+ Total #: 8 Workspace Size:         278 Cached Size:          19
</code></pre>
<p>🐢 These tests are brittle, but they provide valuable information. Let’s fix it and push again.</p>
<p>🐇 Done. We can also remove some of the watches that produce so many logs.</p>
<p>🐢 I’m a bit ambivalent about them. I thought we could use these watches when debugging, but experience has shown that we need more granular watches during debugging and almost never use these otherwise. Let’s remove some of them.</p>
<p>🐇 We can increase the output for certain commands, but the tracing output doesn’t help much in regular runs. If Xvc gets popular enough that we can’t cope with bug reports, we can always add more watches.</p>
<p>🐢 Another option is to exclude the watch code from the release build, but that won’t change anything for our debug cycles.</p>
<p>🐇 I think removing them is a fair trial. We can always put them back when debugging.</p>
<p>🐢 Watches could also produce regular output instead of tracing. That way we won’t forget to remove them.</p>
<p>🐇 Ah, yep, that’s a good option too.</p>
<p>🐢 We can have a <code>trace!</code> macro similar to the current one for user consumption, and a <code>watch!</code> macro that sends output to <code>stderr</code>.</p>
<p>🐇 Good idea. Let’s do that in the next release.</p>
<p>🐢 Let’s check the tests before pushing this cleanup.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list
completed	success	v0.6.13	Rust-CI	v0.6.13	pull_request	12533993607	13m49s	2024-12-29T08:47:50Z
</code></pre>
<p>🐇 CI succeeded, and the release didn’t run. Let’s do some more cleanup.</p>
<pre><code class="language-bash">gh -R iesahin/xvc run list
in_progress		v0.6.13	Rust-CI	v0.6.13	pull_request	12534416152	43s	2024-12-29T09:57:02Z
</code></pre>]]></content:encoded>
    </item>
    <item>
      <title>Perl Error Building rust-openssl with Maturin, Ubuntu, and Manylinux</title>
      <published>2023-11-02T09:19:26+00:00</published>
      <updated>2023-11-02T09:19:26+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Thu, 02 Nov 2023 09:19:26 +0000</pubDate>
      <link>https://emresahin.net/perl-error-building-rust-openssl-with-maturin--ubuntu-and-manylinux/</link>
      <guid isPermaLink="true">https://emresahin.net/perl-error-building-rust-openssl-with-maturin--ubuntu-and-manylinux/</guid>
      <description>While building Python packages for Xvc with Maturin, I was receiving an error in GitHub Actions CI for Linux packages. Can't locate IPC/Cmd.pm in @INC (@INC contains: /home/runner/work/xvc.py/xvc.py/target/x86_64-unknown-linux-gnu/release/build/openssl-sys-844a96d66ae533b1/out/openssl-build/build...</description>
      <category>Xvc</category>
      <category>CI/CD</category>
      <category>Rust</category>
      <category>Xvc</category>
      <category>Maturin</category>
      <category>GitHub Actions</category>
      <category>Perl</category>
      <category>Python</category>
      <category>OpenSSL</category>
      <category>CentOS</category>
      <category>Debian</category>
      <content:encoded><![CDATA[<p>While building <a href="https://github.com/iesahin/xvc.py">Python packages for Xvc</a> with Maturin, I was receiving an error in GitHub Actions CI for Linux packages.</p>
<pre><code class="language-text">Can't locate IPC/Cmd.pm in @INC (@INC contains: /home/runner/work/xvc.py/xvc.py/target/x86_64-unknown-linux-gnu/release/build/openssl-sys-844a96d66ae533b1/out/openssl-build/build/src/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /home/runner/work/xvc.py/xvc.py/target/x86_64-unknown-linux-gnu/release/build/openssl-sys-844a96d66ae533b1/out/openssl-build/build/src/external/perl/Text-Template-1.56/lib)
</code></pre>
<p>The issue seemed to be a missing Perl package. Building <code>rust-openssl</code> now appears to require the <code>perl-core</code> package.</p>
<p>I added <code>apt-get update &amp;&amp; apt-get install perl-core</code> to the CI configuration, but that didn’t work.</p>
<p>However, as <a href="https://github.com/sfackler/rust-openssl/issues/2036#issuecomment-1724324145">this GitHub issue comment suggests</a>, Maturin with its <code>manylinux</code> support uses different kinds of Docker containers to build the packages. We must detect whether it is a CentOS or Debian-based container and install the missing packages accordingly.</p>
<p>The <em>Building wheels</em> step in the configuration should look similar to:</p>
<pre><code class="language-yaml">- name: Build wheels
  uses: PyO3/maturin-action@v1
  with:
    target: ${{ matrix.target }}
    manylinux: auto
    args: --release --out dist
    before-script-linux: |
      # If we're running on RHEL/CentOS, install needed packages.
      if command -v yum &amp;&gt; /dev/null; then
          yum update -y &amp;&amp; yum install -y perl-core openssl openssl-devel pkgconfig libatomic

          # If we're running on i686, we need to symlink libatomic
          # in order to build openssl with the -latomic flag.
          if [[ ! -d "/usr/lib64" ]]; then
              ln -s /usr/lib/libatomic.so.1 /usr/lib/libatomic.so
          fi
      else
          # If we're running on a Debian-based system.
          apt update -y &amp;&amp; apt-get install -y libssl-dev openssl pkg-config
      fi
</code></pre>
<p>This will run the specified script before executing the Maturin build command in the container, ensuring all missing packages are installed.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog - 221108</title>
      <published>2022-11-09T10:42:00+00:00</published>
      <updated>2022-11-09T10:42:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Wed, 09 Nov 2022 10:42:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog---221108/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog---221108/</guid>
      <description>🐇 I think we can begin by checking GitHub PRs . What do you have today? 🐢 The tests for yesterday’s Git integration PR failed. I’ll begin by checking the logs. 🐇 Maybe run the tests locally to see. They might fail on your machine as well. It might be a simple thing. 🐢 Probably, yes. I’ve started ...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>xvc</category>
      <category>git</category>
      <category>testing</category>
      <category>trace</category>
      <category>rsync</category>
      <category>storage</category>
      <category>github actions</category>
      <category>automation</category>
      <content:encoded><![CDATA[<p>🐇 I think we can begin by checking <a href="https://github.com/pulls">GitHub PRs</a>. What do you have today?</p>
<p>🐢 The tests for yesterday’s <a href="https://github.com/iesahin/xvc/pull/105">Git integration PR</a> failed. I’ll begin by checking the logs.</p>
<p>🐇 Maybe run the tests locally to see. They might fail on your machine as well. It might be a simple thing.</p>
<p>🐢 Probably, yes. I’ve started the tests now. I shouldn’t forget to run them before testing the PR; it may save some time.</p>
<p>🐇 Ah, yeah, maybe. Yesterday you were already at the end of the workday, so it didn’t matter much. But you can shorten the testing time by reducing the number of files, etc. I think a separate benchmark suite might be good to have. Tests should be shorter; benchmarks should only run for tags.</p>
<p>🐢 Yup. I should shorten the tests. I should make them use a shorter list of files, maybe.</p>
<p>🐇 Local tests have passed. You’ll have to check the logs.</p>
<p>🐢 It seems <code>git diff --name-only --cached</code> returns files not yet added. That’s causing an error in new repositories with <code>stash</code>. Stashing shouldn’t run at all when there are no staged files.</p>
<p>🐇 Git behavior between the local version and the remote version seems different.</p>
<p>🐢 I think the trace should also show the Git version string.</p>
<p>🐇 You should also require a minimum Git version for the commands. You’re using some newer options, and not all users may have them.</p>
<p>🐢 Yep. Let’s see the version on the CI now.</p>
<hr>
<p>🐢 Ah, I see—the problem is not about versions. It’s that the CI doesn’t configure <code>git config --global user.email</code> and <code>user.name</code>. Commits don’t work without these.</p>
<p>🐇 You should remove the Git version report, then. It’s one more process call for no reason.</p>
<p>🐢 I think it should be in <code>trace!</code>; I can check the verbosity level and call it only if it’s trace.</p>
<hr>
<p>🐢 I completed the xvc-config docs as well. I think I can merge it before the tests finish, as it’s just a documentation update.</p>
<p>🐇 You seem to be rushing for the release.</p>
<p>🐢 Yeah, I want to really start testing this on the servers.</p>
<p>🐇 Then go ahead; let’s release a new version.</p>
<hr>
<p>🐇 It looks like you’re back for an evening session. I think it’s time to start using Xvc on your torrent server.</p>
<p>🐢 Ah, yeah. Let’s see how it goes.</p>
<p>🐇 Create a repository for torrents. Then you can add files to it with cache-type = symlink or cache-type = hardlink.</p>
<p>🐢 I think creating a local storage may also help. I can use it to store files to retrieve them later.</p>
<p>🐇 Umm. We don’t have a “garbage collection” facility yet, you know. There are no file deletions at the moment. It may be better to have a repository-to-repository transfer feature, using SSH.</p>
<p>🐢 Yeah, we don’t have SSH storage either. I think this highlights a lack of features.</p>
<p>🐇 It’s possible to mimic Rsync storage with <code>xvc storage new generic</code>, but it doesn’t feel quite the same.</p>
<p>🐢 Then I’m adding these three tickets.</p>
<p>🐇 I think for 0.3.4, the command we add might be <code>xvc file delete</code>. You can work on this and add <code>rsync</code> support as well.</p>
<p>🐢 There is a <a href="https://docs.rs/librsync/latest/librsync/">librsync</a> bindings library for Rust. But it looks like it doesn’t allow transferring file contents between hosts. There is also <a href="https://github.com/your-tools/rusync">rusync</a>, which is similar to rsync and implemented in Rust. There is also <a href="https://lib.rs/crates/fast_rsync">fast_rsync</a> in pure Rust. It uses MD4 to calculate deltas, though, I think.</p>
<p>🐇 None of these seem to have network capability, though.</p>
<p>🐢 I think it’s better just to use the process for now. We are trying to come up with the simplest solution <em>for now.</em> We are just trying to be more general.</p>
<p>🐇 Yes, I think we can just use the process for the time being.</p>
<p>🐢 Then let’s start by adding it.</p>
<p>🐇 We should also begin to create release notes. GitHub can generate them from PRs. <a href="https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes">Automatically generated release notes</a></p>
<p>🐢 Created an issue for that. Now we’re starting <a href="https://github.com/iesahin/xvc/issues/111"><code>xvc storage new rsync</code> #111</a>.</p>
<p>🐇 Ok. Let’s do this.</p>]]></content:encoded>
    </item>
    <item>
      <title>Xvc Devlog 221030</title>
      <published>2022-10-31T08:57:00+00:00</published>
      <updated>2022-10-31T08:57:00+00:00</updated>
      <author>Emre Şahin</author>
      <pubDate>Mon, 31 Oct 2022 08:57:00 +0000</pubDate>
      <link>https://emresahin.net/xvc-devlog-221030/</link>
      <guid isPermaLink="true">https://emresahin.net/xvc-devlog-221030/</guid>
      <description>🐇 We’ll start by checking the repository today. What are the most important issues? 🐢 I’ve merged PR#66 . Let’s list the outstanding issues now. 65 OPEN Add Mermaid Support to Netlify Installation 64 OPEN Fix `xvc-storage` compilation warnings bug 54 OPEN Fix all references to `xvc data` in the d...</description>
      <category>devlog</category>
      <category>Software Development</category>
      <category>github actions</category>
      <category>arc42</category>
      <category>debugging</category>
      <category>xvc storage</category>
      <category>tests</category>
      <category>s3cmd</category>
      <content:encoded><![CDATA[<p>🐇 We’ll start by checking <a href="https://github.com/iesahin/xvc">the repository</a> today. What are the most important issues?</p>
<p>🐢 I’ve merged <a href="https://github.com/iesahin/xvc/pull/66">PR#66</a>. Let’s list the outstanding issues now.</p>
<pre><code>65	OPEN	Add Mermaid Support to Netlify Installation
64	OPEN	Fix `xvc-storage` compilation warnings	bug
54	OPEN	Fix all references to `xvc data` in the documentation
51	OPEN	Add a benchmark script to compare Xvc with other tools
50	OPEN	Consider changing `xvc file push` to `xvc file send` and `xvc file pull` to `xvc file retrieve`
49	OPEN	Add `--generic-command` as a dependency type to `xvc pipeline dependency`
48	OPEN	Write rsync example for `xvc storage generic`	documentation
47	OPEN	Write rclone example for `xvc storage generic`	documentation
46	OPEN	Allow to skip init in remotes with `--skip-init` option
45	OPEN	Update `VStore::to_store` to use some internal mechanism to avoid `XvcStore::insert`
43	OPEN	Update to `clap 4.0`
42	OPEN	Clean up xvc crate dependencies
36	OPEN	Add version to released file binaries
33	OPEN	Update `arch/remotes.md` for new naming	documentation
32	OPEN	Remove arc42 sections from the documentation	documentation
29	OPEN	Add documentation for `xvc storage new gcs`	documentation
28	OPEN	`xvc storage new yandex`	enhancement
24	OPEN	Create a logo for Xvc	documentation
23	OPEN	Add a Github action to upload new versions to crates.io	automation
20	OPEN	ref: Add rsync example for `xvc storage new generic`
18	OPEN	Add a new workflow for remote tests	automation
12	OPEN	Create a website for Xvc
5	OPEN	Add storage tests to Github Actions	automation
4	OPEN	fix clippy warnings	bug
1	OPEN	`xvc storage new` for all S3 compatible cloud services supported by `rust-s3`
</code></pre>
<p>🐇 As far as I know, you removed the arc42 stubs from the docs yesterday. You can close issue #32.</p>
<p>🐢 I closed it via <code>gh issue close</code>.</p>
<p>🐇 You should add a comment to that.</p>
<p>🐢 Added the comment.</p>
<hr>
<p>🐇 It’s October 30th. Looking at the logs, you’ve <a href="https://github.com/iesahin/xvc/issues?q=is%3Aissue+is%3Aclosed">closed some more issues since we last talked.</a></p>
<p>🐢 I’ve been productive over the last few days. Now, let’s take a look at the <a href="https://github.com/iesahin/xvc/issues?q=is%3Aopen+is%3Aissue">open</a> issues.</p>
<p>🐇 I think you have a more pressing problem. <a href="https://github.com/iesahin/xvc/actions/runs/3352401264">Your tests</a> are failing. You need to fix them first before moving to another task.</p>
<p>🐢 Created a new <a href="https://github.com/iesahin/xvc/issues/81">issue</a>. The logs say:</p>
<pre><code>81Z error: 7 targets failed:
2022-10-29T18:18:36.8969467Z ##[error]    `-p xvc-workflow-tests --test test_storage_new_digital_ocean`
2022-10-29T18:18:36.8970697Z     `-p xvc-workflow-tests --test test_storage_new_gcp`
2022-10-29T18:18:36.8971279Z     `-p xvc-workflow-tests --test test_storage_new_generic_rsync`
2022-10-29T18:18:36.8971840Z     `-p xvc-workflow-tests --test test_storage_new_minio`
2022-10-29T18:18:36.8972387Z     `-p xvc-workflow-tests --test test_storage_new_r2`
2022-10-29T18:18:36.8973035Z     `-p xvc-workflow-tests --test test_storage_new_s3`
2022-10-29T18:18:36.8973577Z     `-p xvc-workflow-tests --test test_storage_new_wasabi`
2022-10-29T18:18:36.9368079Z ##[error]The process '/home/runner/.cargo/bin/cargo' failed with exit code 101
</code></pre>
<p>🐇 Looking at the logs, you should clean up those older branches.</p>
<p>🐢 Let’s do it now.</p>
<hr>
<p>🐢 Done. I’ve deleted all branches except <code>main</code>.</p>
<p>🐇 Good. I think the best way is to delete them as soon as you merge them.</p>
<p>🐢 I’ve activated that setting. These were older branches.</p>
<p>🐇 Cool. Now, will you be checking the failing tests?</p>
<p>🐢 I think remote tests should never run if there are other errors. We can run coverage and remote tests as a second step after the first succeed.</p>
<p>🐇 That seems like a neat idea. You want to split the current job into two: one for compiling and testing the non-remote parts, and the second for coverage and storage tests. It won’t waste CI minutes that way?</p>
<p>🐢 On second thought, I think at the moment, that’s not a pressing issue. We should start fixing these tests at once. We can split them later.</p>
<p>🐇 Ok. It looks from the logs like secrets are not being made available to your jobs.</p>
<pre><code>2022-10-29T18:18:17.5039311Z test test_storage_new_digital_ocean ... FAILED
2022-10-29T18:18:17.5039550Z
2022-10-29T18:18:17.5039652Z failures:
2022-10-29T18:18:17.5039784Z
2022-10-29T18:18:17.5040197Z ---- test_storage_new_digital_ocean stdout ----
2022-10-29T18:18:17.5040558Z Error: VarError { source: NotPresent }
2022-10-29T18:18:17.5040758Z
2022-10-29T18:18:17.5040765Z
</code></pre>
<p>🐢 I added them now. Let’s wait until the job ends to get a new set of logs.</p>
<p>🐇 You can write some documentation in the meantime.</p>
<p>🐢 I think <a href="https://github.com/iesahin/xvc/issues/82">#82</a> is a good candidate for this. There must not be too many missing docs in the ECS crate.</p>
<p>🐇 It was about <code>walker</code> and you fixed the <code>ecs</code>. You’re the most absentminded developer here, I believe.</p>
<p>🐢 Ooops, you’re right. I’ll add them together in a <a href="https://github.com/iesahin/xvc/pull/93">single PR.</a></p>
<p>🐇 In the meantime, the storage testing job has ended with 🔴.</p>
<p>🐢 Checking the raw logs. It looks like we didn’t update the tests to match the current options:</p>
<pre><code>2022-10-30T14:45:50.1058348Z error: Found argument '--storage-prefix' which wasn't expected, or isn't valid in this context
2022-10-30T14:45:50.1059809Z ##[error]Found argument '--storage-prefix' which wasn't expected, or isn't valid in this context
2022-10-30T14:45:50.1061740Z 	If you tried to supply `--storage-prefix` as a value rather than a flag, use `-- --storage-prefix`
2022-10-30T14:45:50.1063220Z
2022-10-30T14:45:50.1063394Z USAGE:
2022-10-30T14:45:50.1064302Z     xvc storage new digital-ocean --name &lt;NAME&gt; --bucket-name &lt;BUCKET_NAME&gt; --region &lt;REGION&gt;
</code></pre>
<p>🐇 Is it <code>--storage-prefix</code> or <code>--remote-prefix</code>? Which one is clearer?</p>
<p>🐢 I think updating the tests to conform to the current options is better for now. We can update the options later if desired.</p>
<p>🐇 Another failure is <code>rg</code>. You assume it exists on the testing system.</p>
<p>🐢 <code>ripgrep</code> is available in Ubuntu 20.04, so we can just update the initial package list.</p>
<p>🐇 The same <code>--storage-prefix</code> failure appears in the <code>minio</code> tests.</p>
<p>🐢 Ok. Fixing it.</p>
<p>🐇 S3 tests want to run the <code>new-s3</code> subcommand. I think we now see why we need these tests in the first place.</p>
<p>🐢 Yeah. Fixing the prefix option, too.</p>
<p>🐇 <code>s3cmd</code> is also required. You should add it, too.</p>
<p>🐢 Ok. I think we’ve added all missing dependencies. I’ll have to convert the <code>mc</code> tests for Minio to use <code>s3cmd</code>.</p>
<p>🐇 Then we can try again. Now, we can get back to documentation.</p>
<p>🐢 Added some more documentation to PR#93. I think it’s better to return to the storage test errors now.</p>
<p>🐇 It looks like you have missing DigitalOcean credentials.</p>
<p>🐢 Let’s take a look.</p>
<hr>
<p>🐢 I’ve updated the tests to use a config file instead of command-line arguments that would be visible in the logs.</p>
<p>🐇 Good practice. You also need to remove previous logs.</p>
<p>🐢 Maybe there is an option for that.</p>
<p>🐇 It looks like there isn’t. There are masking options; when we add them to secrets, they are masked. But you shouldn’t use them in calls anyway.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
