From bb0450ad69522d8dff30952e2c5d13f4df101fec Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Mon, 31 Mar 2025 21:48:22 +0200 Subject: [PATCH 1/8] Added devcontainer config and docker with development environment --- .devcontainer/Dockerfile | 62 +++++++++++++++++++++++++++++++++ .devcontainer/devcontainer.json | 25 +++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..660d05e --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,62 @@ +# Use the official Alpine Linux image +FROM alpine:3.21 + +# Install dependencies for Android SDK and Qt build tools +RUN apk update && \ + apk add --no-cache \ + bash \ + build-base \ + cmake \ + git \ + curl \ + unzip \ + openjdk17 \ + libx11 \ + libxcomposite \ + libxrandr \ + libxcursor \ + libxi \ + mesa-dev \ + libusb + +# Set environment variables for Qt and Android SDK +ENV QT_VERSION=6.8.0 +ENV QT_INSTALL_PATH=/opt/qt-${QT_VERSION} +ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk +ENV ANDROID_SDK_ROOT=/opt/android-sdk +ENV PATH="${QT_INSTALL_PATH}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/emulator:${ANDROID_SDK_ROOT}/tools:${ANDROID_SDK_ROOT}/tools/bin:${JAVA_HOME}/bin:$PATH" + +# Download and install Qt 6.8.0 from the official Qt website +RUN mkdir -p ${QT_INSTALL_PATH} && \ + cd ${QT_INSTALL_PATH} && \ + wget https://download.qt.io/archive/qt/6.8/6.8.0/single/qt-everywhere-src-${QT_VERSION}.tar.xz && \ + tar -xf qt-everywhere-src-${QT_VERSION}.tar.xz && \ + rm qt-everywhere-src-${QT_VERSION}.tar.xz && \ + cd qt-everywhere-src-${QT_VERSION} && \ + ./configure -prefix ${QT_INSTALL_PATH} -nomake examples -nomake tests -optimized-qmake && \ + make -j$(nproc) && \ + make install + +# Install Android SDK Command Line Tools +RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \ + curl -o sdk-tools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip && \ + unzip sdk-tools-linux.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && \ + rm sdk-tools-linux.zip && \ + mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest + +# Install required Android SDK components +RUN yes | sdkmanager --licenses && \ + sdkmanager --update && \ + sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.2" + +# Verify SDK installation +RUN sdkmanager --list + +# Set working directory +WORKDIR /workspace + +# Expose ADB debugging port +EXPOSE 5555 + +# Start bash as the default command +CMD ["/bin/bash"] diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..73ccbe9 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,25 @@ +{ + "name": "Qt 6.8.0 Development Container", + "build": { + "dockerfile": "Dockerfile", + "context": "." + }, + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, + "extensions": [ + "ms-vscode.cmake-tools", + "ms-vscode.cpptools", + "ms-vscode.makefile-tools", + "androidtool.android", + "ms-azuretools.vscode-docker" + ] + } + }, + "forwardPorts": [8080], + "mounts": [ + "source=${localWorkspaceFolder},target=/workspace,type=bind" + ] +} \ No newline at end of file -- 2.49.1 From e63985083c2a93de4c2a3670d2c09fad4a539261 Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Mon, 31 Mar 2025 21:54:50 +0200 Subject: [PATCH 2/8] add automatic build of devcontainer if it changes --- .gitea/workflows/build-container.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .gitea/workflows/build-container.yaml diff --git a/.gitea/workflows/build-container.yaml b/.gitea/workflows/build-container.yaml new file mode 100644 index 0000000..659b58a --- /dev/null +++ b/.gitea/workflows/build-container.yaml @@ -0,0 +1,26 @@ +name: Build and Push Docker Image + +on: + push: + branches: + - '**' + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Log into Gitea Container Registry + run: | + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login git.silklaasboer.nl -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Build Docker image + run: | + docker build -t git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f .devcontainer/Dockerfile . + + - name: Push Docker image + run: | + docker push git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest \ No newline at end of file -- 2.49.1 From 39b594b0b26a8d0c57cde5bc09da31ff66c6f19c Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Wed, 2 Apr 2025 18:14:59 +0000 Subject: [PATCH 3/8] Update .gitea/workflows/build-container.yaml test local ip to push without uploading limits --- .gitea/workflows/build-container.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.gitea/workflows/build-container.yaml b/.gitea/workflows/build-container.yaml index 659b58a..0fdba8c 100644 --- a/.gitea/workflows/build-container.yaml +++ b/.gitea/workflows/build-container.yaml @@ -15,11 +15,13 @@ jobs: - name: Log into Gitea Container Registry run: | - echo "${{ secrets.DOCKER_PASSWORD }}" | docker login git.silklaasboer.nl -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ vars.LOCAL_INSTANCE_IP }} -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - name: Build Docker image run: | - docker build -t git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f .devcontainer/Dockerfile . + docker pull hello-world + docker tag hello-world git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest + #docker build -t git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f .devcontainer/Dockerfile . - name: Push Docker image run: | -- 2.49.1 From 8941d84bc8c5e0465c5e412d2c6aa1e6a3f0ef5d Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Sun, 6 Apr 2025 22:28:27 +0200 Subject: [PATCH 4/8] updated dockerfile to reduce filesize to 2 Gb + updated pipeline to use local ip for runners to skip cloudflare limitations --- .devcontainer/Dockerfile | 23 +++++++++++++++++++++-- .gitea/workflows/build-container.yaml | 14 +++++++------- LICENSE | 2 +- 3 files changed, 29 insertions(+), 10 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 660d05e..60e5b19 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -33,9 +33,28 @@ RUN mkdir -p ${QT_INSTALL_PATH} && \ tar -xf qt-everywhere-src-${QT_VERSION}.tar.xz && \ rm qt-everywhere-src-${QT_VERSION}.tar.xz && \ cd qt-everywhere-src-${QT_VERSION} && \ - ./configure -prefix ${QT_INSTALL_PATH} -nomake examples -nomake tests -optimized-qmake && \ + ./configure -prefix ${QT_INSTALL_PATH} \ + -nomake examples \ + -nomake tests \ + -nomake benchmarks \ + -optimized-qmake \ + -commercial -confirm-license \ + -skip qt3d \ + -skip qtdatavis3d \ + -skip qtgamepad \ + -skip qtlottie \ + -skip qtnetworkauth \ + -skip qtquicktimeline \ + -skip qtsensors \ + -skip qtspeech \ + -skip qtwebchannel \ + -skip qtwebengine \ + -skip qtwebglplugin \ + -release \ + -optimize-size && \ make -j$(nproc) && \ - make install + make install && \ + rm -rf ${QT_INSTALL_PATH}/qt-everywhere-src-${QT_VERSION} # Install Android SDK Command Line Tools RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \ diff --git a/.gitea/workflows/build-container.yaml b/.gitea/workflows/build-container.yaml index 0fdba8c..e57a98d 100644 --- a/.gitea/workflows/build-container.yaml +++ b/.gitea/workflows/build-container.yaml @@ -3,7 +3,9 @@ name: Build and Push Docker Image on: push: branches: - - '**' + - 'main' + paths: + - '**/Dockerfile' jobs: build-and-push: @@ -11,18 +13,16 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Log into Gitea Container Registry run: | - echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ vars.LOCAL_INSTANCE_IP }} -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login ${{ secrets.LOCAL_INSTANCE_IP }} -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - name: Build Docker image run: | - docker pull hello-world - docker tag hello-world git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest - #docker build -t git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f .devcontainer/Dockerfile . + docker build -t ${{ secrets.LOCAL_INSTANCE_IP }}/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f .devcontainer/Dockerfile . - name: Push Docker image run: | - docker push git.silklaasboer.nl/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest \ No newline at end of file + docker push ${{ secrets.LOCAL_INSTANCE_IP }}/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest \ No newline at end of file diff --git a/LICENSE b/LICENSE index d5363bd..395c73e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 silklaasboer +Copyright (c) 2025 silklaasboer & pavankumar bellary Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -- 2.49.1 From 16e6208134210f9d4184a8c2c2710d923b4839af Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Mon, 14 Apr 2025 18:51:30 +0200 Subject: [PATCH 5/8] Update dockerfile and devcontainer.json to execute poststart.sh and forward x11 --- .devcontainer/Dockerfile | 30 ++++++++++++++++++++++++++---- .devcontainer/devcontainer.json | 8 +++++++- .devcontainer/poststart.sh | 2 ++ 3 files changed, 35 insertions(+), 5 deletions(-) create mode 100755 .devcontainer/poststart.sh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 60e5b19..ce378f2 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -16,15 +16,26 @@ RUN apk update && \ libxrandr \ libxcursor \ libxi \ + libx11 \ + libx11-dev \ + libxcb \ + libxcb-dev \ + libxkbcommon \ + libxkbcommon-dev \ + xcb-util-dev \ + xcb-util-image-dev \ + xcb-util-keysyms-dev \ + xcb-util-renderutil-dev \ + xcb-util-wm-dev \ + xcb-util-cursor-dev \ mesa-dev \ + freetype-dev \ + fontconfig-dev \ + dbus-dev \ libusb -# Set environment variables for Qt and Android SDK ENV QT_VERSION=6.8.0 ENV QT_INSTALL_PATH=/opt/qt-${QT_VERSION} -ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk -ENV ANDROID_SDK_ROOT=/opt/android-sdk -ENV PATH="${QT_INSTALL_PATH}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/emulator:${ANDROID_SDK_ROOT}/tools:${ANDROID_SDK_ROOT}/tools/bin:${JAVA_HOME}/bin:$PATH" # Download and install Qt 6.8.0 from the official Qt website RUN mkdir -p ${QT_INSTALL_PATH} && \ @@ -56,6 +67,10 @@ RUN mkdir -p ${QT_INSTALL_PATH} && \ make install && \ rm -rf ${QT_INSTALL_PATH}/qt-everywhere-src-${QT_VERSION} + +ENV ANDROID_SDK_ROOT=/opt/android-sdk +ENV PATH="${QT_INSTALL_PATH}/bin:${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${ANDROID_SDK_ROOT}/platform-tools:${ANDROID_SDK_ROOT}/emulator:${ANDROID_SDK_ROOT}/tools:${ANDROID_SDK_ROOT}/tools/bin:${JAVA_HOME}/bin:$PATH" + # Install Android SDK Command Line Tools RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \ curl -o sdk-tools-linux.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip && \ @@ -74,6 +89,13 @@ RUN sdkmanager --list # Set working directory WORKDIR /workspace +# Set environment variables for Qt and Android SDK +ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk +ENV QT_QPA_PLATFORM=xcb +ENV QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt6/plugins/platforms +ENV LD_LIBRARY_PATH=/opt/qt-6.8.0 +ENV QT_DEBUG_PLUGINS=1 + # Expose ADB debugging port EXPOSE 5555 diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 73ccbe9..22f92f4 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -4,6 +4,11 @@ "dockerfile": "Dockerfile", "context": "." }, + "postStartCommand": "./.devcontainer/poststart.sh", + "runArgs": [ + "-e", "DISPLAY=${env:DISPLAY}", + "-v", "/tmp/.X11-unix:/tmp/.X11-unix" + ], "customizations": { "vscode": { "settings": { @@ -14,7 +19,8 @@ "ms-vscode.cpptools", "ms-vscode.makefile-tools", "androidtool.android", - "ms-azuretools.vscode-docker" + "ms-azuretools.vscode-docker", + "bbenoist.QML" ] } }, diff --git a/.devcontainer/poststart.sh b/.devcontainer/poststart.sh new file mode 100755 index 0000000..04752c0 --- /dev/null +++ b/.devcontainer/poststart.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo "Welcome" \ No newline at end of file -- 2.49.1 From ce550c9b925b5c1fc0835565655d0779ab8e0c63 Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Wed, 28 May 2025 16:04:19 +0200 Subject: [PATCH 6/8] Move Dockerfile to repo root + remove devcontainer --- .devcontainer/devcontainer.json | 31 -------------------------- .devcontainer/poststart.sh | 2 -- .gitea/workflows/build-container.yaml | 2 +- .devcontainer/Dockerfile => Dockerfile | 0 4 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 .devcontainer/devcontainer.json delete mode 100755 .devcontainer/poststart.sh rename .devcontainer/Dockerfile => Dockerfile (100%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 22f92f4..0000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "Qt 6.8.0 Development Container", - "build": { - "dockerfile": "Dockerfile", - "context": "." - }, - "postStartCommand": "./.devcontainer/poststart.sh", - "runArgs": [ - "-e", "DISPLAY=${env:DISPLAY}", - "-v", "/tmp/.X11-unix:/tmp/.X11-unix" - ], - "customizations": { - "vscode": { - "settings": { - "terminal.integrated.shell.linux": "/bin/bash" - }, - "extensions": [ - "ms-vscode.cmake-tools", - "ms-vscode.cpptools", - "ms-vscode.makefile-tools", - "androidtool.android", - "ms-azuretools.vscode-docker", - "bbenoist.QML" - ] - } - }, - "forwardPorts": [8080], - "mounts": [ - "source=${localWorkspaceFolder},target=/workspace,type=bind" - ] -} \ No newline at end of file diff --git a/.devcontainer/poststart.sh b/.devcontainer/poststart.sh deleted file mode 100755 index 04752c0..0000000 --- a/.devcontainer/poststart.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -echo "Welcome" \ No newline at end of file diff --git a/.gitea/workflows/build-container.yaml b/.gitea/workflows/build-container.yaml index e57a98d..7a1ed94 100644 --- a/.gitea/workflows/build-container.yaml +++ b/.gitea/workflows/build-container.yaml @@ -21,7 +21,7 @@ jobs: - name: Build Docker image run: | - docker build -t ${{ secrets.LOCAL_INSTANCE_IP }}/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f .devcontainer/Dockerfile . + docker build -t ${{ secrets.LOCAL_INSTANCE_IP }}/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f Dockerfile . - name: Push Docker image run: | diff --git a/.devcontainer/Dockerfile b/Dockerfile similarity index 100% rename from .devcontainer/Dockerfile rename to Dockerfile -- 2.49.1 From 5f9e3eadf165bfe692a3dba7e117221746c0002e Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Wed, 28 May 2025 16:10:06 +0200 Subject: [PATCH 7/8] add basic build step to validate DockerFile --- .gitea/workflows/build.yaml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 .gitea/workflows/build.yaml diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml new file mode 100644 index 0000000..ed14107 --- /dev/null +++ b/.gitea/workflows/build.yaml @@ -0,0 +1,21 @@ +# .gitea/workflows/build.yml +name: Build Validation + +on: + push: + branches: + - '**' + pull_request: + branches: [main] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Build Docker Image + run: | + docker build -t ${{ secrets.LOCAL_INSTANCE_IP }}/${{ secrets.DOCKER_USERNAME }}/devcontainer:latest -f Dockerfile . + -- 2.49.1 From 50cb9d570d0c211c10490a2b156f3d4891dfd628 Mon Sep 17 00:00:00 2001 From: Sil Klaasboer Date: Wed, 28 May 2025 16:11:27 +0200 Subject: [PATCH 8/8] only add as a pr requirement --- .gitea/workflows/build.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index ed14107..2930441 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -2,9 +2,6 @@ name: Build Validation on: - push: - branches: - - '**' pull_request: branches: [main] -- 2.49.1