1{ lib
2, stdenv
3, buildGoModule
4, fetchFromGitHub
5, callPackage
6}:
7
8buildGoModule rec {
9 pname = "cloudflared";
10 version = "2023.10.0";
11
12 src = fetchFromGitHub {
13 owner = "cloudflare";
14 repo = "cloudflared";
15 rev = "refs/tags/${version}";
16 hash = "sha256-T+hxNvsckL8PAVb4GjXhnkVi3rXMErTjRgGxCUypwVA=";
17 };
18
19 vendorHash = null;
20
21 ldflags = [
22 "-s"
23 "-w"
24 "-X main.Version=${version}"
25 "-X github.com/cloudflare/cloudflared/cmd/cloudflared/updater.BuiltForPackageManager=nixpkgs"
26 ];
27
28 preCheck = ''
29 # Workaround for: sshgen_test.go:74: mkdir /homeless-shelter/.cloudflared: no such file or directory
30 export HOME="$(mktemp -d)"
31
32 # Workaround for: protocol_test.go:11:
33 # lookup protocol-v2.argotunnel.com on [::1]:53: read udp [::1]:51876->[::1]:53: read: connection refused
34 substituteInPlace "edgediscovery/protocol_test.go" \
35 --replace "TestProtocolPercentage" "SkipProtocolPercentage"
36
37 # Workaround for: origin_icmp_proxy_test.go:46:
38 # cannot create ICMPv4 proxy: socket: permission denied nor ICMPv6 proxy: socket: permission denied
39 substituteInPlace "ingress/origin_icmp_proxy_test.go" \
40 --replace "TestICMPRouterEcho" "SkipICMPRouterEcho"
41
42 # Workaround for: origin_icmp_proxy_test.go:110:
43 # cannot create ICMPv4 proxy: socket: permission denied nor ICMPv6 proxy: socket: permission denied
44 substituteInPlace "ingress/origin_icmp_proxy_test.go" \
45 --replace "TestConcurrentRequestsToSameDst" "SkipConcurrentRequestsToSameDst"
46
47 # Workaround for: origin_icmp_proxy_test.go:242:
48 # cannot create ICMPv4 proxy: socket: permission denied nor ICMPv6 proxy: socket: permission denied
49 substituteInPlace "ingress/origin_icmp_proxy_test.go" \
50 --replace "TestICMPRouterRejectNotEcho" "SkipICMPRouterRejectNotEcho"
51
52 # Workaround for: origin_icmp_proxy_test.go:108:
53 # Received unexpected error: cannot create ICMPv4 proxy: Group ID 100 is not between ping group 65534 to 65534 nor ICMPv6 proxy: socket: permission denied
54 substituteInPlace "ingress/origin_icmp_proxy_test.go" \
55 --replace "TestTraceICMPRouterEcho" "SkipTraceICMPRouterEcho"
56
57 # Workaround for: icmp_posix_test.go:28: socket: permission denied
58 substituteInPlace "ingress/icmp_posix_test.go" \
59 --replace "TestFunnelIdleTimeout" "SkipFunnelIdleTimeout"
60
61 # Workaround for: icmp_posix_test.go:88: Received unexpected error: Group ID 100 is not between ping group 65534 to 65534
62 substituteInPlace "ingress/icmp_posix_test.go" \
63 --replace "TestReuseFunnel" "SkipReuseFunnel"
64
65 # Workaround for: manager_test.go:197:
66 # Should be false
67 substituteInPlace "datagramsession/manager_test.go" \
68 --replace "TestManagerCtxDoneCloseSessions" "SkipManagerCtxDoneCloseSessions"
69 '';
70
71 doCheck = !stdenv.isDarwin;
72
73 passthru.tests.simple = callPackage ./tests.nix { inherit version; };
74
75 meta = with lib; {
76 description = "Cloudflare Tunnel daemon, Cloudflare Access toolkit, and DNS-over-HTTPS client";
77 homepage = "https://www.cloudflare.com/products/tunnel";
78 changelog = "https://github.com/cloudflare/cloudflared/releases/tag/${version}";
79 license = licenses.asl20;
80 platforms = platforms.unix ++ platforms.windows;
81 maintainers = with maintainers; [ bbigras enorris thoughtpolice piperswe qjoly ];
82 mainProgram = "cloudflared";
83 };
84}