Cannot precompie NIFs in CI with rustler_precompiled

I try to precompile NIFs with rustler_precompiled and CI fails on build stage:

Done.
Going back to original dir: /home/runner/work/html2text/html2text
Run INITIAL_DIR=$(pwd)
Going from path: /home/runner/work/html2text/html2text
To path: native/html2text_nif
/home/runner/work/_temp/a159cf69-94a6-44e2-80ea-f8f303ed912a.sh: line 50: cd: target/aarch64-unknown-linux-gnu/release: No such file or directory
Error: Process completed with exit code 1.

View job on Github
It fails for all jobs, not only for aarch64-unknown-linux-gnu.

Here is a commit where I try to setup rustler_precompiled: Add rustler_precompiled · fuelen/html2text@20e0784 · GitHub

Seems like I miss something obvious, but I don’t understand what exactly.

Just a shot in the dark, there was this thread recently: Rustler precompiled segfaults in GH action - #10 by Hermanverschooten

See if specifying Rust 1.86 (current last stable version is 1.87) helps?

Hi Dimitar

I saw this issue and I even almost fully copied some files from that repository with no luck :frowning:

While writing this I’m trying to remove root Cargo.toml and Cargo.lock completely. As I remember, they were generated by mix rustler.new command. Running mix recreates Cargo.toml, but inside native/ directory.

And… it helps :tada:

I don’t think you should be removing Cargo.toml and Cargo.lock files in Rust projects though.

Also, sorry, what helps? :thinking:

Removing these files helps :slight_smile:
Root Cargo.toml had this content in my case

[workspace]
resolver = "2"

members = ["native/html2text_nif"]

Cargo.lock was recreated automatically inside native directory.
So, it is about getting rid of cargo workspace

Could you describe again the steps you took? rustler_mix intentionally creates a workspace Cargo.toml and that should result in the Cargo.lock to live on the root. No other tooling should touch this (or the workspace-less setup we had before).

/edit The error log is gone, but the error looks a bit like rustler_precompiled tries to get the compiled binaries directly from the target directory and is not aware of workspaces :confused:

I don’t remember precisely, but just removing root cargo files should do the job. Just launch mix afterwards.