diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 0000000..a309e58 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,52 @@ +name: Build and Push Docker Image + +on: + push: + +permissions: + contents: write + packages: write + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Update Submodule + run: git submodule update --init --recursive + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: all + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + cache-from: type=gha + cache-to: type=gha,mode=max + tags: | + pa733/qmisms:latest + ghcr.io/pa733/qmisms:latest diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..86276df --- /dev/null +++ b/Dockerfile @@ -0,0 +1,58 @@ +# Builder stage +FROM ubuntu:24.04 AS builder + +# Install dependencies +RUN apt-get update && apt-get install -y \ + build-essential \ + git \ + xmake \ + curl \ + pkg-config \ + libgflags-dev \ + libglib2.0-dev \ + libqmi-glib-dev \ + libmbim-glib-dev \ + libssl-dev \ + p7zip-full \ + unzip \ + && rm -rf /var/lib/apt/lists/* + +# Set the working directory +WORKDIR /app + +# Install Xmake dependencies +COPY xmake.lua . +COPY build ./build + +RUN export XMAKE_ROOT=y \ + && xmake f -vD -y + +# Copy the source code +COPY . . + +# Build the application +RUN export XMAKE_ROOT=y \ + && xmake build -y qmi_sms_reader \ + && find /app/build/ -type f -name qmi_sms_reader -exec cp {} /app/build/qmi_sms_reader \; + +# Final stage +FROM ubuntu:24.04 + +RUN apt-get update && apt-get install -y \ + libqmi-glib5 \ + libqmi-proxy \ + libgflags2.2 \ + ca-certificates \ + && rm -rf /var/lib/apt/lists/* + +# Set the working directory +WORKDIR /app + +# Copy the built application from the builder stage +COPY --from=builder /app/build/qmi_sms_reader /usr/local/bin/qmi_sms_reader + +# Copy configuration file, if needed +COPY config.example.yaml /etc/qmisms/config.yaml + +# Set the entrypoint +ENTRYPOINT ["/usr/local/bin/qmi_sms_reader"] diff --git a/README.md b/README.md index 300d6a6..40a4a89 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,17 @@ # QmiSMS +## Usage +1. Copy the example configuration file and modify it as needed +```bash +cp config.example.yaml config.yaml +``` +2. Run the container +```bash +docker run -d \ + --name qmi_sms_reader \ + --restart unless-stopped \ + --device /dev/cdc-wdm0:/dev/cdc-wdm0 \ + -v $(pwd)/config.yaml:/app/config.yaml \ + ghcr.io/pa733/qmisms:latest +``` ## Compatible Servers [Super SMS Bridge](https://github.com/PA733/SuperSMSBridge) \ No newline at end of file diff --git a/xmake.lua b/xmake.lua index bebc0c9..3753424 100644 --- a/xmake.lua +++ b/xmake.lua @@ -2,8 +2,10 @@ add_rules("mode.debug", "mode.release") add_requires("ixwebsocket", {configs = {use_tls = true, ssl = "mbedtls"}}) add_requires("yaml-cpp", {configs = {shared = false}}) -add_requires("openssl", {system = false, configs = {shared = false}}) -add_requires("cppcodec", "nlohmann_json", "glog") +add_requires("glog", {configs = {shared = false}}) +add_requires("glib-2.0", {system = true}) +add_requires("qmi-glib", {system = true}) +add_requires("cppcodec", "nlohmann_json") add_repositories("local-repo build") add_requires("ixwebsocket-custom", {configs = {use_tls = true, ssl = "mbedtls"}}) @@ -23,21 +25,12 @@ target("qmi_sms_reader") add_defines("DESKTOP_PDU") add_files("PDUlib/src/*.cpp") - add_packages("openssl", "cppcodec", "yaml-cpp", "ixwebsocket-custom", "nlohmann_json", "glog") - - add_packages("pkgconfig::glib-2.0", "pkgconfig::qmi-glib") + add_packages("openssl", "cppcodec", "yaml-cpp", "ixwebsocket-custom", "nlohmann_json", "glog", "glib-2.0", "qmi-glib") add_links("gio-2.0", "gobject-2.0", "glib-2.0") add_ldflags("-static-libgcc", "-static-libstdc++", "-Wl,-Bstatic -lc -Wl,-Bdynamic") add_links("qmi-glib", "gio-2.0", "gobject-2.0", "glib-2.0") - -- 补全一些 clangd 找不到的库 - add_includedirs( - "/usr/include/glib-2.0", - "/usr/lib/aarch64-linux-gnu/glib-2.0/include", - "/usr/include/libqrtr-glib", - "/usr/local/include/libqmi-glib") - -- 指定 libqmi 的库目录 add_linkdirs("/usr/lib") @@ -68,7 +61,7 @@ target("qmi_sms_reader_musl") add_packages("pkgconfig::glib-2.0", "pkgconfig::qmi-glib") add_links("gio-2.0", "gobject-2.0", "glib-2.0", "qmi-glib") - + add_linkdirs( staging_dir .. "/target-aarch64_generic_musl/usr/lib", staging_dir .. "/target-aarch64_generic_musl/root-rockchip/usr/lib")