Skip to content

Commit ba4510f

Browse files
committed
wip: add support for xx-dnf
Signed-off-by: Jakub Panek <[email protected]>
1 parent 7a5c741 commit ba4510f

File tree

8 files changed

+487
-5
lines changed

8 files changed

+487
-5
lines changed

docker-bake.hcl

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ variable "TEST_BASE_TYPE" {
77
}
88

99
variable "TEST_BASE_IMAGE" {
10-
default = TEST_BASE_TYPE == "alpine" ? "alpine:3.19" : TEST_BASE_TYPE == "debian" ? "debian:bookworm" : null
10+
default = TEST_BASE_TYPE == "alpine" ? "alpine:3.19" : TEST_BASE_TYPE == "debian" ? "debian:bookworm" : TEST_BASE_TYPE == "rhel" ? "fedora:39" : null
1111
}
1212

1313
variable "DEV_SDK_PLATFORM" {
@@ -41,7 +41,7 @@ target "test-rhel" {
4141
inherits = ["test-src"]
4242
args = {
4343
TEST_BASE_TYPE = "rhel"
44-
TEST_BASE_IMAGE = "fedora:35"
44+
TEST_BASE_IMAGE = "fedora:40"
4545
}
4646
}
4747

@@ -55,6 +55,7 @@ group "test" {
5555
"test-info",
5656
"test-apk",
5757
"test-apt",
58+
"test-dnf",
5859
"test-verify",
5960
"test-clang",
6061
"test-go",
@@ -77,6 +78,11 @@ target "test-apt" {
7778
target = "test-apt"
7879
}
7980

81+
target "test-dnf" {
82+
inherits = ["test-base"]
83+
target = "test-dnf"
84+
}
85+
8086
target "test-verify" {
8187
inherits = ["test-base"]
8288
target = "test-verify"
@@ -356,4 +362,4 @@ target "sigtool" {
356362
"linux/arm64",
357363
"linux/arm/v7",
358364
]
359-
}
365+
}

src/Dockerfile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ COPY xx-* /out/
1010
RUN ln -s xx-cc /out/xx-clang && \
1111
ln -s xx-cc /out/xx-clang++ && \
1212
ln -s xx-cc /out/xx-c++ && \
13-
ln -s xx-apt /out/xx-apt-get
13+
ln -s xx-apt /out/xx-apt-get && \
14+
ln -s xx-dnf /out/xx-yum && \
15+
ln -s xx-dnf /out/xx-microdnf && \
16+
ln -s xx-dnf /out/xx-dnf5 && \
17+
ln -s xx-dnf /out/xx-dnf4 && \
18+
ln -s xx-dnf /out/xx-dnf-3
1419

1520
# xx builds the xx image
1621
FROM scratch AS xx
@@ -83,6 +88,10 @@ FROM test-base AS test-apk
8388
COPY test-apk.bats .
8489
RUN --mount=type=cache,target=/pkg-cache,sharing=locked [ ! -f /etc/alpine-release ] || ./test-apk.bats
8590

91+
FROM test-base AS test-dnf
92+
COPY test-dnf.bats .
93+
RUN --mount=type=cache,target=/pkg-cache,sharing=locked [ ! -f /etc/fedora-release ] || ./test-dnf.bats
94+
8695
FROM test-base AS test-verify
8796
COPY test-verify.bats .
8897
RUN --mount=type=cache,target=/pkg-cache,sharing=locked ./test-verify.bats

src/test-dnf.bats

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
#!/usr/bin/env bats
2+
3+
load 'assert'
4+
5+
@test "no_cmd" {
6+
run xx-dnf
7+
assert_failure
8+
assert_output --partial "usage: dnf [options] COMMAND"
9+
}
10+
11+
@test "native" {
12+
run xx-dnf info file
13+
assert_success
14+
assert_line "Name : file"
15+
16+
run xx-dnf info glibc-devel
17+
assert_success
18+
assert_line "Name : glibc-devel"
19+
20+
run xx-dnf info gcc
21+
assert_success
22+
assert_line "Name : gcc"
23+
}
24+
25+
@test "essentials" {
26+
run xx-dnf info xx-c-essentials
27+
assert_success
28+
29+
run xx-dnf info xx-cxx-essentials
30+
assert_success
31+
}
32+
33+
@test "amd64" {
34+
export TARGETARCH=amd64
35+
if ! xx-info is-cross; then skip; fi
36+
37+
run xx-dnf info file
38+
assert_success
39+
assert_line "Architecture : x86_64"
40+
41+
run xx-dnf info glibc-devel
42+
assert_success
43+
assert_line "Architecture : x86_64"
44+
45+
export XX_dnf_PREFER_CROSS=1
46+
run xx-dnf info glibc-devel
47+
assert_success
48+
assert_line "Package: glibc-devel-amd64-cross"
49+
unset XX_dnf_PREFER_CROSS
50+
51+
run xx-dnf info gcc
52+
assert_success
53+
assert_line "Architecture : x86_64"
54+
}
55+
56+
@test "arm64" {
57+
export TARGETARCH=arm64
58+
if ! xx-info is-cross; then return; fi
59+
60+
run xx-dnf info file
61+
assert_success
62+
assert_line "Architecture : aarch64"
63+
64+
run xx-dnf info glibc-devel
65+
assert_success
66+
assert_line "Architecture : aarch64"
67+
68+
export XX_dnf_PREFER_CROSS=1
69+
run xx-dnf info glibc-devel
70+
assert_success
71+
assert_line "Name: glibc-devel-arm64-cross"
72+
unset XX_dnf_PREFER_CROSS
73+
74+
run xx-dnf info gcc
75+
assert_success
76+
assert_line "Architecture : aarch64"
77+
}
78+
79+
@test "arm" {
80+
export TARGETARCH=arm
81+
if ! xx-info is-cross; then return; fi
82+
83+
run xx-dnf info file
84+
assert_success
85+
assert_line "Package: file:armhf"
86+
87+
run xx-dnf info libc6-dev
88+
assert_success
89+
assert_line "Package: libc6-dev:armhf"
90+
91+
export XX_dnf_PREFER_CROSS=1
92+
run xx-dnf info libc6-dev
93+
assert_success
94+
assert_line "Package: libc6-dev-armhf-cross"
95+
unset XX_dnf_PREFER_CROSS
96+
97+
run xx-dnf info gcc
98+
assert_success
99+
assert_line "Package: gcc-arm-linux-gnueabihf"
100+
}
101+
102+
@test "armv6" {
103+
export TARGETARCH=arm
104+
export TARGETVARIANT=v6
105+
if ! xx-info is-cross; then return; fi
106+
if [ "$(xx-info vendor)" = "ubuntu" ]; then skip; fi
107+
108+
run xx-dnf info file
109+
assert_success
110+
assert_line "Package: file:armel"
111+
112+
run xx-dnf info libc6-dev
113+
assert_success
114+
assert_line "Package: libc6-dev:armel"
115+
116+
export XX_dnf_PREFER_CROSS=1
117+
run xx-dnf info libc6-dev
118+
assert_success
119+
assert_line "Package: libc6-dev-armel-cross"
120+
unset XX_dnf_PREFER_CROSS
121+
122+
run xx-dnf info gcc
123+
assert_success
124+
assert_line "Package: gcc-arm-linux-gnueabi"
125+
unset TARGETVARIANT
126+
}
127+
128+
@test "s390x" {
129+
export TARGETARCH=s390x
130+
if ! xx-info is-cross; then return; fi
131+
132+
run xx-dnf info file
133+
assert_success
134+
assert_line "Package: file:s390x"
135+
136+
run xx-dnf info libc6-dev
137+
assert_success
138+
assert_line "Package: libc6-dev:s390x"
139+
140+
export XX_dnf_PREFER_CROSS=1
141+
run xx-dnf info libc6-dev
142+
assert_success
143+
assert_line "Package: libc6-dev-s390x-cross"
144+
unset XX_dnf_PREFER_CROSS
145+
146+
# buster has no gcc package for arm64
147+
if [ "$(uname -m)" == "aarch64" ] && [ "$(cat /etc/debian_version | cut -d. -f 1)" = "10" ]; then
148+
return
149+
fi
150+
151+
run xx-dnf info gcc
152+
assert_success
153+
assert_line "Package: gcc-s390x-linux-gnu"
154+
}
155+
156+
@test "ppc64le" {
157+
export TARGETARCH=ppc64le
158+
if ! xx-info is-cross; then return; fi
159+
160+
run xx-dnf info file
161+
assert_success
162+
assert_line "Package: file:ppc64el"
163+
164+
run xx-dnf info libc6-dev
165+
assert_success
166+
assert_line "Package: libc6-dev:ppc64el"
167+
168+
export XX_dnf_PREFER_CROSS=1
169+
run xx-dnf info libc6-dev
170+
assert_success
171+
assert_line "Package: libc6-dev-ppc64el-cross"
172+
unset XX_dnf_PREFER_CROSS
173+
174+
# buster has no gcc package for arm64
175+
if [ "$(uname -m)" == "aarch64" ] && [ "$(cat /etc/debian_version | cut -d. -f 1)" = "10" ]; then
176+
return
177+
fi
178+
179+
run xx-dnf info gcc
180+
assert_success
181+
assert_line "Package: gcc-powerpc64le-linux-gnu"
182+
}
183+
184+
@test "386" {
185+
export TARGETARCH=386
186+
if ! xx-info is-cross; then return; fi
187+
188+
run xx-dnf info file
189+
assert_success
190+
assert_line "Package: file:i386"
191+
192+
run xx-dnf info libc6-dev
193+
assert_success
194+
assert_line "Package: libc6-dev:i386"
195+
196+
export XX_dnf_PREFER_CROSS=1
197+
run xx-dnf info libc6-dev
198+
assert_success
199+
assert_line "Package: libc6-dev-i386-cross"
200+
unset XX_dnf_PREFER_CROSS
201+
202+
run xx-dnf info gcc
203+
assert_success
204+
assert_line "Package: gcc-i686-linux-gnu"
205+
}
206+
207+
@test "skip-nolinux" {
208+
export TARGETOS="darwin"
209+
export TARGETARCH="amd64"
210+
run xx-dnf install foo
211+
assert_success
212+
unset TARGETOS
213+
unset TARGETARCH
214+
}
215+
216+
@test "checkpkg" {
217+
run dnf show wget
218+
assert_success
219+
run dnf show wget-notexist
220+
assert_failure
221+
}
222+
223+
@test "print-source-file" {
224+
run xx-dnf --print-source-file
225+
assert_success
226+
assert_output --partial "/etc/dnf/sources.list"
227+
228+
run test -e "$(xx-dnf --print-source-file)"
229+
assert_success
230+
}

src/test_helper.bash

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
add() {
44
if [ -f /etc/alpine-release ]; then
55
apk add "$@"
6+
elif [ -f /etc/fedora-release ]; then
7+
xxrun dnf install "$@"
68
else
79
xxrun apt install -y --no-install-recommends "$@"
810
fi
@@ -11,6 +13,8 @@ add() {
1113
del() {
1214
if [ -f /etc/alpine-release ]; then
1315
apk del "$@" 2>/dev/null || true
16+
elif [ -f /etc/fedora-release ]; then
17+
xxrun dnf remove "$@"
1418
else
1519
xxrun apt remove --autoremove -y "$@" 2>/dev/null || true
1620
fi
@@ -19,6 +23,8 @@ del() {
1923
xxadd() {
2024
if [ -f /etc/alpine-release ]; then
2125
xx-apk add "$@"
26+
elif [ -f /etc/fedora-release ]; then
27+
xxrun xx-dnf install "$@"
2228
else
2329
xxrun xx-apt install -y --no-install-recommends "$@"
2430
fi
@@ -27,6 +33,8 @@ xxadd() {
2733
xxdel() {
2834
if [ -f /etc/alpine-release ]; then
2935
xx-apk del "$@" 2>/dev/null || true
36+
elif [ -f /etc/fedora-release ]; then
37+
xxrun xx-dnf remove "$@"
3038
else
3139
xxrun xx-apt remove -y --autoremove "$@" 2>/dev/null || true
3240
fi

src/xx-cargo

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ if [ ! -f "$done_file" ]; then
6565
elif [ -f /etc/alpine-release ]; then
6666
# XX_VENDOR overrided to match the distrib one to install packages
6767
XX_VENDOR=$vendor execSilent xx-apk add rust-stdlib
68+
elif [ -f /etc/fedora-release ]; then
69+
# XX_VENDOR overrided to match the distrib one to install packages
70+
XX_VENDOR=$vendor execSilent xx-dnf install --assumeyes rust-std-static
6871
else
6972
# XX_VENDOR overrided to match the distrib one to install packages
7073
XX_VENDOR=$vendor execSilent xx-apt-get install -y libstd-rust-dev

0 commit comments

Comments
 (0)