From 8f6e37cd642d684d1210520d9bcd83e8bd4e35df Mon Sep 17 00:00:00 2001 From: Marco Cadetg Date: Sat, 22 Feb 2025 11:32:37 +0100 Subject: [PATCH] feat: docker container --- .dockerignore | 12 +++++++++ .github/workflows/package.yml | 24 +++++++++++++++++ .gitignore | 3 +-- Dockerfile | 49 +++++++++++++++++++++++++++++++++++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c42a35d8 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +/target +.git +.gitignore +.github +*.md +Dockerfile +.dockerignore +LICENSE-APACHE +LICENSE-MIT +*.sh +.editorconfig +.gitattributes \ No newline at end of file diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index 399c44dd..652add69 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -322,3 +322,27 @@ jobs: name: msi-${{ matrix.arch }} path: artifacts/ if-no-files-found: error + docker: + name: Docker Build + runs-on: ubuntu-latest + needs: build + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v5 + with: + push: true + tags: | + ghcr.io/${{ github.repository }}:latest + ghcr.io/${{ github.repository }}:${{ github.sha }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 05386a8f..fe36f504 100644 --- a/.gitignore +++ b/.gitignore @@ -55,6 +55,5 @@ $RECYCLE.BIN/ *.lnk ### Custom... ### -Dockerfile lcov.info -*.pcap \ No newline at end of file +*.pcap diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..d99043c7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +FROM rust:1.85-slim AS builder + +# Install sniffnet build dependencies +RUN apt-get update && apt-get install -y \ + libfreetype6-dev \ + libexpat1-dev \ + libpcap-dev \ + libasound2-dev \ + libfontconfig1-dev \ + libgtk-3-dev \ + pkg-config \ + && rm -rf /var/lib/apt/lists/* + +# Create a new empty shell project +WORKDIR /usr/src/sniffnet +COPY . . + +# Build for release +RUN cargo build --release + +# Runtime stage +FROM debian:bookworm-slim + +# Install runtime dependencies including Wayland +RUN apt-get update && apt-get install -y \ + libfreetype6 \ + libexpat1 \ + libpcap0.8 \ + libasound2 \ + libfontconfig1 \ + libgtk-3-0 \ + libwayland-client0 \ + libwayland-cursor0 \ + libwayland-egl1 \ + libxkbcommon0 \ + mesa-utils \ + libegl1 \ + libvulkan1 \ + && rm -rf /var/lib/apt/lists/* + +# Copy the built binary +COPY --from=builder /usr/src/sniffnet/target/release/sniffnet /usr/local/bin/sniffnet + +# Set environment variables for Wayland +ENV GDK_BACKEND=wayland +ENV WAYLAND_DISPLAY=$WAYLAND_DISPLAY +ENV XDG_RUNTIME_DIR=/tmp + +ENTRYPOINT ["sniffnet"] \ No newline at end of file