Separate fanotify #1855
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: optimizer test | |
on: | |
push: | |
branches: | |
- "main" | |
tags: | |
- v[0-9]+.[0-9]+.[0-9]+ | |
pull_request: | |
branches: | |
- "main" | |
schedule: | |
# Trigger test every day at 00:03 clock UTC | |
- cron: "3 0 * * *" | |
workflow_dispatch: | |
env: | |
CARGO_TERM_COLOR: always | |
REGISTRY: ghcr.io | |
SNAPSHOTTER_CONFIG: /etc/nydus/config.toml | |
SOURCE_SNAPSHOTTER_CONFIG: misc/snapshotter/config_optimizer.toml | |
NYDUSD_CONFIG: /etc/nydus/nydusd-config.fusedev.json | |
SOURCE_NYDUSD_CONFIG: misc/snapshotter/nydusd-config.fusedev.json | |
SNAPSHOTTER_SYSTEMD_UNIT_SERVICE: misc/snapshotter/nydus-snapshotter.fusedev.service | |
jobs: | |
run_optimizer: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Setup Golang | |
uses: actions/setup-go@v5 | |
with: | |
go-version-file: 'go.mod' | |
cache-dependency-path: "go.sum" | |
- name: cache cargo | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
tools/optimizer-server/target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('tools/optimizer-server/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo | |
- name: containerd runc and crictl | |
run: | | |
sudo wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.0/crictl-v1.26.0-linux-amd64.tar.gz | |
sudo tar zxvf ./crictl-v1.26.0-linux-amd64.tar.gz -C /usr/local/bin | |
sudo install -D -m 755 misc/optimizer/crictl.yaml /etc/crictl.yaml | |
sudo wget https://github.com/containerd/containerd/releases/download/v1.7.0/containerd-static-1.7.0-linux-amd64.tar.gz | |
sudo systemctl stop containerd | |
sudo tar -zxf ./containerd-static-1.7.0-linux-amd64.tar.gz -C /usr/ | |
sudo install -D -m 755 misc/optimizer/containerd-config.toml /etc/containerd/config.toml | |
sudo systemctl restart containerd | |
sudo wget https://github.com/opencontainers/runc/releases/download/v1.1.5/runc.amd64 -O /usr/bin/runc | |
sudo chmod +x /usr/bin/runc | |
- name: Setup CNI | |
run: | | |
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz | |
sudo mkdir -p /opt/cni/bin | |
sudo tar xzf cni-plugins-linux-amd64-v1.2.0.tgz -C /opt/cni/bin/ | |
sudo install -D -m 755 misc/example/10-containerd-net.conflist /etc/cni/net.d/10-containerd-net.conflist | |
- name: Setup nydus-snapshotter and nydus service | |
run: | | |
GOOS=linux GOARCH=amd64 go build -o bin/containerd-nydus-grpc ./cmd/containerd-nydus-grpc | |
sudo install -D -m 755 bin/containerd-nydus-grpc /usr/local/bin/containerd-nydus-grpc | |
if [ ! -e "${{ env.NYDUSD_CONFIG }}" ]; then | |
echo "Installing ${{ env.SOURCE_NYDUSD_CONFIG }} to ${{ env.NYDUSD_CONFIG }}" | |
sudo install -D -m 664 "${{ env.SOURCE_NYDUSD_CONFIG }}" "${{ env.NYDUSD_CONFIG }}" | |
fi | |
if [ ! -e "${{ env.SNAPSHOTTER_CONFIG }}" ]; then | |
echo "Installing ${{ env.SOURCE_SNAPSHOTTER_CONFIG }} to ${{ env.SNAPSHOTTER_CONFIG }}" | |
sudo install -D -m 664 "${{ env.SOURCE_SNAPSHOTTER_CONFIG }}" "${{ env.SNAPSHOTTER_CONFIG }}" | |
fi | |
sudo ln -f -s /etc/nydus/nydusd-config.fusedev.json /etc/nydus/nydusd-config.json | |
echo "Installing ${{ env.SNAPSHOTTER_SYSTEMD_UNIT_SERVICE }} to /etc/systemd/system/nydus-snapshotter.service" | |
sudo install -D -m 644 "${{ env.SNAPSHOTTER_SYSTEMD_UNIT_SERVICE }}" /etc/systemd/system/nydus-snapshotter.service | |
if command -v systemctl >/dev/null; then | |
sudo systemctl enable /etc/systemd/system/nydus-snapshotter.service | |
sudo systemctl restart nydus-snapshotter | |
fi | |
sleep 5 | |
NYDUS_VER=v$(curl -s "https://api.github.com/repos/dragonflyoss/nydus/releases/latest" | jq -r .tag_name | sed 's/^v//') | |
wget https://github.com/dragonflyoss/nydus/releases/download/$NYDUS_VER/nydus-static-$NYDUS_VER-linux-amd64.tgz | |
tar xzvf nydus-static-$NYDUS_VER-linux-amd64.tgz | |
# sudo systemctl restart nydus-snapshotter.service | |
sudo install -D -m 755 nydus-static/nydusd /usr/local/bin/nydusd | |
sudo install -D -m 755 nydus-static/nydus-image /usr/local/bin/nydus-image | |
sudo install -D -m 755 nydus-static/nydusctl /usr/local/bin/nydusctl | |
- name: Build and install optimizer | |
run: | | |
rustup component add rustfmt clippy | |
make optimizer | |
sudo chown -R $(id -un):$(id -gn) . ~/.cargo/ | |
pwd | |
ls -lh bin/*optimizer* | |
sudo make install-optimizer | |
sudo install -D -m 755 misc/example/optimizer-nri-plugin.conf /etc/nri/conf.d/02-optimizer-nri-plugin.conf | |
sudo systemctl restart containerd | |
systemctl status containerd --no-pager -l | |
- name: Wait containerd ready | |
run: | | |
unset READY | |
for i in $(seq 30); do | |
if eval "timeout 180 ls /run/containerd/containerd.sock"; then | |
READY=true | |
break | |
fi | |
echo "Fail(${i}). Retrying..." | |
sleep 1 | |
done | |
if [ "$READY" != "true" ];then | |
echo "containerd is not ready" | |
exit 1 | |
fi | |
- name: Setup prefetch-distribution http server | |
run: | | |
go build -o prefetch-distribution tools/prefetch-distribution/main.go | |
nohup ./prefetch-distribution & | |
sleep 5 | |
- name: Log in to container registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Generate accessed files list | |
run: | | |
sed -i "s|host_path: script|host_path: $(pwd)/misc/optimizer/script|g" misc/optimizer/nginx.yaml | |
sudo crictl run misc/optimizer/nginx.yaml misc/optimizer/sandbox.yaml | |
sleep 20 | |
sudo crictl rmp -f --all | |
sudo crictl rmi --all | |
tree /opt/nri/optimizer/results/ | |
count=$(cat /opt/nri/optimizer/results/dragonflyoss/image-service/nginx:nydus-latest | wc -l) | |
expected=$(cat misc/optimizer/script/file_list.txt | wc -l) | |
echo "count: $count expected minimum value: $expected" | |
if [ $count -lt $expected ]; then | |
echo "failed to generate accessed files list for nginx:nydus-latest" | |
cat misc/optimizer/script/file_list.txt | |
exit 1 | |
fi | |
cat /opt/nri/optimizer/results/dragonflyoss/image-service/nginx:nydus-latest.csv | |
- name: Transmit the prefetch list to nydusd | |
run: | | |
sed -i "s|host_path: script|host_path: $(pwd)/misc/optimizer/script|g" misc/optimizer/nginx.yaml | |
sudo crictl run misc/optimizer/nginx.yaml misc/optimizer/sandbox.yaml | |
if sudo ps aux | grep "[/]usr/local/bin/nydusd" | grep "prefetch-files"; then | |
echo "Found --prefetch-files in running processes" | |
else | |
echo "Error: --prefetch-files not found in running processes" | |
exit 1 | |
fi | |
- name: Dump logs | |
if: failure() | |
continue-on-error: true | |
run: | | |
systemctl status containerd --no-pager -l | |
journalctl -xeu containerd --no-pager |