forked from kube-rs/kube
-
Notifications
You must be signed in to change notification settings - Fork 0
/
justfile
128 lines (110 loc) · 5.11 KB
/
justfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
VERSION := `git rev-parse HEAD`
open := if os() == "macos" { "open" } else { "xdg-open" }
[private]
default:
@just --list --unsorted
clippy:
#rustup component add clippy --toolchain nightly
cargo +nightly clippy --workspace
cargo +nightly clippy --all-features
fmt:
#rustup component add rustfmt --toolchain nightly
rustfmt +nightly --edition 2021 $(find . -type f -iname *.rs)
doc:
RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features --no-deps --open
deny:
# might require rm Cargo.lock first to match CI
cargo deny --workspace --all-features check bans licenses sources
# Unit tests
test:
#!/usr/bin/env bash
if rg "\`\`\`ignored"; then
echo "ignored doctests are not allowed, use compile_fail or no_run"
exit 1
fi
# no default features
cargo test --workspace --lib --no-default-features
# default features
cargo test --workspace --lib --exclude kube-examples --exclude e2e
# all features
cargo test --workspace --lib --all-features --exclude kube-examples --exclude e2e
cargo test --workspace --doc --all-features --exclude kube-examples --exclude e2e
cargo test -p kube-examples --examples
# Integration tests (will modify your current context's cluster)
test-integration:
kubectl delete pod -lapp=kube-rs-test > /dev/null
cargo test --lib --workspace --exclude e2e --all-features -- --ignored
# some examples are canonical tests
cargo run -p kube-examples --example crd_derive
cargo run -p kube-examples --example crd_api
coverage:
# tarpaulin is currently broken for Rust 1.83, see #1657
cargo +1.82.0 tarpaulin --out=Html --output-dir=.
{{open}} tarpaulin-report.html
hack:
time cargo hack check --feature-powerset --no-private -p kube \
--skip=oauth,oidc \
--group-features=socks5,http-proxy,gzip,ws \
--group-features=admission,jsonpatch,derive \
--group-features=rustls-tls,aws-lc-rs
# Test groups features with minimal overlap that are grouped to reduce combinations.
# Without any grouping this test takes an hour and has to test >11k combinations.
# Skipped oauth and oidc, as these compile fails without a tls stack.
readme:
rustdoc README.md --test --edition=2021
e2e: (e2e-mink8s) (e2e-incluster "rustls,latest")
e2e-mink8s:
cargo run -p e2e --bin boot --features=openssl,latest
cargo run -p e2e --bin boot --features=openssl,mk8sv
#cargo run -p e2e --bin boot --features=rustls,latest
#cargo run -p e2e --bin boot --features=rustls,mk8sv
e2e-incluster features:
just e2e-job-musl {{features}}
docker build -t clux/kube-e2e:{{VERSION}} e2e/
k3d image import clux/kube-e2e:{{VERSION}} --cluster main
sed -i 's/latest/{{VERSION}}/g' e2e/deployment.yaml
kubectl apply -f e2e/deployment.yaml
sed -i 's/{{VERSION}}/latest/g' e2e/deployment.yaml
kubectl get all -n apps
kubectl describe jobs/e2e -n apps
kubectl wait --for=condition=complete job/e2e -n apps --timeout=50s || kubectl logs -f job/e2e -n apps
kubectl get all -n apps
kubectl wait --for=condition=complete job/e2e -n apps --timeout=10s || kubectl get pods -n apps | grep e2e | grep Completed
e2e-job-musl features:
#!/usr/bin/env bash
docker run \
-v cargo-cache:/root/.cargo/registry \
-v "$PWD:/volume" -w /volume \
--rm -it clux/muslrust:stable cargo build --release --features={{features}} -p e2e
cp target/x86_64-unknown-linux-musl/release/job e2e/job
chmod +x e2e/job
k3d:
k3d cluster create main --servers 1 --registry-create main --image rancher/k3s:v1.27.3-k3s1 \
-p 10250:10250 --no-rollback \
--k3s-arg "--disable=traefik,servicelb,metrics-server@server:*" \
--k3s-arg '--kubelet-arg=eviction-hard=imagefs.available<1%,nodefs.available<1%@agent:*' \
--k3s-arg '--kubelet-arg=eviction-minimum-reclaim=imagefs.available=1%,nodefs.available=1%@agent:*' \
--k3s-arg '--kube-apiserver-arg=feature-gates=WatchList=true@server:*'
## RELEASE RELATED
# Bump the msrv of kube; "just bump-msrv 1.60.0"
bump-msrv msrv:
#!/usr/bin/env bash
fullmsrv="{{msrv}}" # need a temporary var for this
shortmsrv="${fullmsrv::-2}" # badge can use a short display version
badge="[![Rust ${shortmsrv}](https://img.shields.io/badge/MSRV-${shortmsrv}-dea584.svg)](https://github.com/rust-lang/rust/releases/tag/{{msrv}})"
sd "rust-version = \".*\"" "rust-version = \"{{msrv}}\"" Cargo.toml
sd "^.+badge/MSRV.+$" "${badge}" README.md
sd "rust:.*-bullseye" "rust:{{msrv}}-bullseye" .devcontainer/Dockerfile
# Increment the Kubernetes feature version from k8s-openapi for tests; "just bump-k8s"
bump-k8s:
#!/usr/bin/env bash
latest=$(cargo tree --format "{f}" -i k8s-openapi | head -n 1 | choose -f ',' 1)
# bumping supported version also bumps our mk8sv
mk8svnew=${latest::-2}$((${latest:3} - 5))
mk8svold=${latest::-2}$((${latest:3} - 6))
fastmod -m -d e2e -e toml "$mk8svold" "$mk8svnew"
fastmod -m -d .github/workflows -e yml "${mk8svold/_/\.}" "${mk8svnew/_/.}"
# bump mk8sv badge
badge="[![Tested against Kubernetes ${mk8svnew} and above](https://img.shields.io/badge/MK8SV-${mk8svnew}-326ce5.svg)](https://kube.rs/kubernetes-version)"
sd "^.+badge/MK8SV.+$" "${badge}" README.md
echo "remember to bump kubernetes-version.md in kube-rs/website"