diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 303555aa5..5bad3774d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,9 @@ name: Build & Deploy on: [push, pull_request] +env: + DOCKER_BUILDKIT: 1 + jobs: build: runs-on: ${{ matrix.os }} @@ -18,9 +21,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Install Qt + if: runner.os != 'Linux' uses: jurplel/install-qt-action@v4 with: version: '5.15.2' @@ -30,17 +34,40 @@ jobs: AQT_CONFIG: ${{ github.workspace }}/tools/aqt-settings.ini - name: Install jinja2 + if: runner.os != 'Linux' run: | pip install --user --upgrade pip; pip install --user jinja2; + - name: Set up Docker Buildx + if: runner.os == 'Linux' + uses: docker/setup-buildx-action@v3 + + - name: Cache Docker layers + if: runner.os == 'Linux' + uses: actions/cache@v4 + with: + path: /tmp/.buildx-cache + key: linux-builder-${{ hashFiles('tools/Dockerfile.pingviewer-linux-builder-ubuntu18') }} + restore-keys: | + linux-builder- + + - name: Build Docker + if: runner.os == 'Linux' + uses: docker/build-push-action@v6 + with: + context: . + file: tools/Dockerfile.pingviewer-linux-builder-ubuntu18 + tags: pingviewer-linux-builder-ubuntu18 + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache,mode=max + load: true + - name: Build Linux if: runner.os == 'Linux' run: | - sudo apt update - sudo apt install libxcb-* libfuse-dev - ./tools/compile.sh - mv /tmp/pingviewer-x86_64.AppImage pingviewer-Release.AppImage + docker run --rm -v "$PWD:/output" pingviewer-linux-builder-ubuntu18 bash -c \ + "./tools/compile.sh && mv /tmp/pingviewer-x86_64.AppImage /output/pingviewer-Release.AppImage" - name: Build Mac if: runner.os == 'macOS' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 563ad1844..637534e46 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: submodules: recursive diff --git a/tools/Dockerfile.pingviewer-linux-builder-ubuntu18 b/tools/Dockerfile.pingviewer-linux-builder-ubuntu18 new file mode 100644 index 000000000..97e5575eb --- /dev/null +++ b/tools/Dockerfile.pingviewer-linux-builder-ubuntu18 @@ -0,0 +1,66 @@ +FROM ubuntu:18.04 + +ENV DEBIAN_FRONTEND=noninteractive +ENV LANG=C.UTF-8 + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + file \ + fuse \ + git \ + libdbus-1-3 \ + libfontconfig1 \ + libfuse2 \ + libgl1-mesa-glx \ + libglu1-mesa-dev \ + libpulse-mainloop-glib0 \ + libssl-dev \ + libxcb1 \ + libxrender1 \ + mesa-common-dev \ + python3 \ + python3-pip \ + python3-setuptools \ + qttools5-dev-tools \ + unzip \ + wget \ + && apt-get clean + +# Install more recent CMAKE +RUN wget https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-x86_64.sh -O /tmp/cmake.sh \ + && chmod +x /tmp/cmake.sh \ + && /tmp/cmake.sh --skip-license --prefix=/usr/local \ + && rm /tmp/cmake.sh + +RUN ln -s /usr/bin/python3 /usr/bin/python && \ + pip3 install -U pip && \ + pip3 install jinja2 aqtinstall==v2.2.3 + +COPY tools/aqt-settings.ini . + +# Install QT +ENV QT=5.15.2 +ENV QT_ARCH=gcc_64 +ENV AQT_CONFIG=aqt-settings.ini +RUN aqt install-qt --outputdir /opt/qt linux desktop ${QT} ${QT_ARCH} -m all + +ENV CMAKE_PREFIX_PATH="/opt/qt/${QT}/${QT_ARCH}" +ENV PATH="/opt/qt/${QT}/${QT_ARCH}/bin:$PATH" +ENV QT_PLUGIN_PATH="/opt/qt/${QT}/${QT_ARCH}/plugins/" +ENV QML_IMPORT_PATH="/opt/qt/${QT}/${QT_ARCH}/qml/" +ENV QML2_IMPORT_PATH="/opt/qt/${QT}/${QT_ARCH}/qml/" + +# Download linuxdeploy tools +RUN wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage -O /tmp/linuxdeploy.AppImage && \ + chmod +x /tmp/linuxdeploy.AppImage +RUN wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage -O /tmp/linuxdeploy-plugin-qt.AppImage && \ + chmod +x /tmp/linuxdeploy-plugin-qt.AppImage + +# Enable auto extract+run for AppImages, so no FUSE is required +ENV APPIMAGE_EXTRACT_AND_RUN=1 + +WORKDIR /ping-viewer +COPY . . + +CMD ["bash", "-c", "tools/compile.sh"] diff --git a/tools/aqt-settings.ini b/tools/aqt-settings.ini index f03abea40..86f6d93e3 100644 --- a/tools/aqt-settings.ini +++ b/tools/aqt-settings.ini @@ -10,8 +10,10 @@ hash_algorithm: sha1 [mirrors] trusted_mirrors: - https://qt.mirror.constant.com + https://download.qt.io fallbacks: https://qt.mirror.constant.com - https://mirrors.ocf.berkeley.edu - https://download.qt.io \ No newline at end of file + https://mirrors.ocf.berkeley.edu/qt + https://ftp.jaist.ac.jp/pub/qtproject + http://ftp1.nluug.nl/languages/qt + https://mirrors.dotsrc.org/qtproject \ No newline at end of file