I'm able to use cowsay and hello, but I can't get curl to be exposed
Opened this issue · 3 comments
Consider this flake.nix
:
{
description = "CLI tools used by the build system";
inputs = {
# Use the latest version of nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; # Adjust the version as needed
};
outputs = { self, nixpkgs }: let
system = "aarch64-linux"; # Use aarch64 for ARM architecture
pkgs = import nixpkgs { system = system; };
in {
# The default package
packages.${system} = {
default = pkgs.hello;
hello = pkgs.hello;
awscli2 = pkgs.awscli2;
curl = pkgs.curl;
cowsay = pkgs.cowsay;
};
# A development shell with the hello package available
devShells.${system}.default = pkgs.mkShell {
buildInputs = [ pkgs.hello pkgs.awscli2 pkgs.curl pkgs.cowsay ];
};
# Default application for testing
apps.${system}.default = {
type = "app";
program = "${pkgs.hello}/bin/hello";
};
};
}
For some reason when I target the file like this:
nixpkgs_flake_package(
name = "mycurl",
nix_flake_file = "//tools/flakes:flake.nix",
nix_flake_lock_file = "//tools/flakes:flake.lock",
package = "curl",
)
I'm unable to actually get a genrule working that uses curl. It seems like the curl command is not under bin/curl, as is the case with the other cli's like hello and cowsay.
genrule(
name = "curl",
srcs = ["@mycurl//:bin/curl"],
outs = ["curlcli/curl"],
executable = True,
cmd = "cp $(<) $@",
)
Here's the error I'm getting:
$ bazel run //tools/curl
INFO: Invocation ID: 27a89cae-2e4f-4ec8-b5fa-2a461deef854
ERROR: /home/dev/.cache/bazel/_bazel_dev/155bb1574771dc607335fbe8110386b4/external/mycurl/BUILD: no such target '@@mycurl//:bin/curl': target 'bin/curl' not declared in package '' defined by /home/dev/.cache/bazel/_bazel_dev/155bb1574771dc607335fbe8110386b4/external/mycurl/BUILD
ERROR: /workspaces/dd/tools/curl/BUILD.bazel:17:8: no such target '@@mycurl//:bin/curl': target 'bin/curl' not declared in package '' defined by /home/dev/.cache/bazel/_bazel_dev/155bb1574771dc607335fbe8110386b4/external/mycurl/BUILD and referenced by '//tools/curl:curl'
ERROR: Analysis of target '//tools/curl:curl' failed; build aborted: Analysis failed
INFO: Elapsed time: 0.067s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
ERROR: Build did NOT complete successfully
ERROR: Build failed. Not running target
here's a clue as to what might be wrong:
dev@dd-devcontainer:/workspaces/dd (main *)$ bazel query 'kind("source file", deps(@awscli//...))'
@awscli//:bin/.aws-wrapped
@awscli//:bin/.aws_completer-wrapped
@awscli//:bin/aws
@awscli//:bin/aws_bash_completer
@awscli//:bin/aws_completer
@awscli//:bin/aws_zsh_completer.sh
dev@dd-devcontainer:/workspaces/dd (main *)$ bazel query 'kind("source file", deps(@mycurl//...))'
INFO: Empty results
I'm not sure if this is a problem with rules_nixpkgs or if curl is just not usable by rules_nixpkgs for some reason.
If you look around in the directories generated by repository rules, you should be able to see the mycurl repo:
ls $(bazel info output_base)/external/mycurl
I would check if you can find the curl binary and also take a look at the BUILD file in there.
Additionally, could you provide the output of bazel query @mycurl//...
?
I can try to reproduce this on monday.
The curl package has several outputs, the curl binary is in the bin
output. You should be able to use curl.bin
as attribute.
I just discovered that when you use nix build --out-link curl_pkg 'nixpkgs#curl.bin'
the out link created is not called curl_pkg
:
$ ls -lh curl_pkg-bin
lrwxrwxrwx 1 claudio users 58 Sep 23 08:24 curl_pkg-bin -> /nix/store/qw0m9y0pfppx0rjs4myl82i498d62k43-curl-8.7.1-bin
I think we lack proper handling for that at the moment.