Skip to content

feat: add gnuplot-qt, Qt6, mesa, xkbcommon, xcb libs, xwin splat, and aqtinstall to base image - #68

Merged
gabrielfrasantos merged 6 commits into
mainfrom
copilot/add-qt-packages-to-base-images
May 27, 2026
Merged

feat: add gnuplot-qt, Qt6, mesa, xkbcommon, xcb libs, xwin splat, and aqtinstall to base image#68
gabrielfrasantos merged 6 commits into
mainfrom
copilot/add-qt-packages-to-base-images

Conversation

Copilot AI commented May 27, 2026

Copy link
Copy Markdown
Contributor

Adds Windows cross-compilation tooling and Qt/graphics dependencies to the base devcontainer image.

New apt packages

  • gnuplot-qt, qt6-base-dev, libgl1-mesa-dev, libxkbcommon-dev, libxkbcommon-x11-0, libxcb-xinerama0, libxcb-cursor0
  • python3-venv (used to create a temporary venv for aqtinstall)

Windows SDK via xwin

  • xwin 0.8.0 downloaded via architecture-aware stages (downloader-amd64/downloader-arm64 keyed by TARGETARCH) to support multi-platform builds
  • xwin binary installed to /usr/local/bin
  • xwin splat --include-debug-libs --preserve-ms-arch-notation populates /winsdk

Qt6 for Windows cross-compilation

  • aqtinstall 3.3.0 installs Qt 6.4.2 win64_msvc2019_64 to /opt/qt6-windows
  • aqtinstall is installed in a temporary Python venv which is removed after use to avoid bloating the image with transitive dependencies

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

⚠️MegaLinter analysis: Success with warnings

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ ACTION actionlint 24 0 0 0.27s
✅ DOCKERFILE hadolint 3 0 0 0.26s
✅ JSON npm-package-json-lint yes no no 0.41s
✅ JSON prettier 22 3 0 0 0.68s
✅ JSON v8r 22 0 0 14.49s
✅ MARKDOWN markdownlint 12 0 0 0 1.22s
✅ MARKDOWN markdown-table-formatter 12 1 0 0 0.35s
✅ REPOSITORY checkov yes no no 24.81s
✅ REPOSITORY gitleaks yes no no 1.38s
✅ REPOSITORY git_diff yes no no 0.01s
✅ REPOSITORY grype yes no no 56.19s
✅ REPOSITORY secretlint yes no no 2.17s
✅ REPOSITORY syft yes no no 2.25s
✅ REPOSITORY trivy yes no no 12.3s
✅ REPOSITORY trivy-sbom yes no no 2.31s
✅ REPOSITORY trufflehog yes no no 3.91s
⚠️ SPELL lychee 86 1 0 21.26s
✅ YAML prettier 32 0 0 0 1.32s
✅ YAML v8r 32 0 0 11.97s
✅ YAML yamllint 32 0 0 1.16s

Detailed Issues

⚠️ SPELL / lychee - 1 error
[IGNORED] docker://pandoc/extra:3.9.0.0-ubuntu@sha256:72afa9c8d3300e5f10c9c4330e101725687f2179bffd912fb859c6d2ae85de62 | Unsupported: Error creating request client: builder error for url (docker://pandoc/extra:3.9.0.0-ubuntu@sha256:72afa9c8d3300e5f10c9c4330e101725687f2179bffd912fb859c6d2ae85de62)
[403] https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads | Network error: Forbidden
[IGNORED] https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/embedded-pro/embedded-devcontainer | Unsupported: Error creating request client: builder error for url (vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/embedded-pro/embedded-devcontainer)
📝 Summary
---------------------
🔍 Total..........124
✅ Successful.....121
⏳ Timeouts.........0
🔀 Redirected.......0
👻 Excluded.........0
❓ Unknown..........0
🚫 Errors...........1

Errors in .github/TOOL_VERSION_ISSUE_TEMPLATE.md
[403] https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads | Network error: Forbidden

See detailed reports in MegaLinter artifacts

You could have the same capabilities but better runtime performances if you use a MegaLinter flavor:

Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)

  • Documentation: Custom Flavors
  • Command: npx mega-linter-runner@9.4.0 --custom-flavor-setup --custom-flavor-linters ACTION_ACTIONLINT,DOCKERFILE_HADOLINT,JSON_V8R,JSON_PRETTIER,JSON_NPM_PACKAGE_JSON_LINT,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,REPOSITORY_CHECKOV,REPOSITORY_GIT_DIFF,REPOSITORY_GITLEAKS,REPOSITORY_GRYPE,REPOSITORY_SECRETLINT,REPOSITORY_SYFT,REPOSITORY_TRIVY,REPOSITORY_TRIVY_SBOM,REPOSITORY_TRUFFLEHOG,SPELL_LYCHEE,YAML_PRETTIER,YAML_YAMLLINT,YAML_V8R

MegaLinter is graciously provided by OX Security
Show us your support by starring ⭐ the repository

@gabrielfrasantos

Copy link
Copy Markdown
Contributor

@copilot

Fix these errors:

#23 [stage-1 3/4] RUN xwin --accept-license splat --include-debug-libs --preserve-ms-arch-notation --output /winsdk && rm -rf /root/.xwin-cache
#23 0.160 /bin/bash: line 1: /usr/local/bin/xwin: cannot execute binary file: Exec format error
#23 ERROR: process "/bin/bash -Eeuo pipefail -c xwin --accept-license splat --include-debug-libs --preserve-ms-arch-notation --output /winsdk && rm -rf /root/.xwin-cache" did not complete successfully: exit code: 126

[stage-1 3/4] RUN xwin --accept-license splat --include-debug-libs --preserve-ms-arch-notation --output /winsdk && rm -rf /root/.xwin-cache:
0.160 /bin/bash: line 1: /usr/local/bin/xwin: cannot execute binary file: Exec format error


.devcontainer/base/Dockerfile:70

69 | # Download Windows SDK headers and libraries for cross-compilation
70 | >>> RUN xwin --accept-license splat --include-debug-libs --preserve-ms-arch-notation --output /winsdk
71 | >>> && rm -rf /root/.xwin-cache
72 |

ERROR: failed to build: failed to solve: process "/bin/bash -Eeuo pipefail -c xwin --accept-license splat --include-debug-libs --preserve-ms-arch-notation --output /winsdk && rm -rf /root/.xwin-cache" did not complete successfully: exit code: 126
Reference
Check build summary support
Error: buildx failed with: ERROR: failed to build: failed to solve: process "/bin/bash -Eeuo pipefail -c xwin --accept-license splat --include-debug-libs --preserve-ms-arch-notation --output /winsdk && rm -rf /root/.xwin-cache" did not complete successfully: exit code: 126

warning: Package: idna
Installed Version: 3.11
Vulnerability CVE-2026-45409
Severity: MEDIUM
Fixed Version: 3.15
Link: CVE-2026-45409
┌─ .devcontainer/cpp/requirements.txt:187:1

187 │ idna==3.11
│ ^

= Internationalized Domain Names in Applications (IDNA): Specially crafted inputs to idna.encode() can bypass CVE-2024-3651 fix
= This is the same issue as CVE-2024-3651, however the original remediation in 2024 was not a complete fix. Payloads such as "\u0660" * N or "\u30fb" * N + "\u6f22" utilize the valid_contexto function prior to length rejection, and for high values of N will take a long time to process.

  ### Impact
  A specially crafted argument to the `idna.encode()` function could consume significant resources. This may lead to a denial-of-service.
  
  ### Patches
  Starting in version 3.14, the function rejects long inputs as soon as practicable prior to any further processing to minimize resource consumption. In version 3.15, this approach was extended to lesser used alternate functions (i.e. per-label conversions and codec support).
  
  ### Workarounds
  Domain names cannot exceed 253 characters in length, if this length limit is enforced prior to passing the domain to the `idna.encode()` function it should no longer consume significant resources. This is triggered by arbitrarily large inputs that would not occur in normal usage, but may be passed to the library assuming there is no preliminary input validation by the higher-level application.

warning: 1 warnings emitted

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR expands the base devcontainer image to support Windows cross-compilation and Qt/graphics tooling by adding xwin-based Windows SDK provisioning and Qt6 dependencies (Linux + Windows).

Changes:

  • Add xwin (v0.8.0) to the base image and use it during build to populate /winsdk.
  • Add Qt/graphics-related apt dependencies (Qt6 dev, Mesa/OpenGL, X11-related libs, gnuplot-qt) plus python3-pip.
  • Download and install Windows Qt (Qt 6.4.2 MSVC 2019) into /opt/qt6-windows using aqtinstall, then remove aqtinstall.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.

File Description
.devcontainer/base/Dockerfile Downloads xwin, installs it into the image, runs xwin splat to create /winsdk, and installs Windows Qt via aqtinstall.
.devcontainer/base/apt-requirements.json Adds pinned apt packages for Qt6/graphics/X11 dependencies plus python3-pip.

Comment thread .devcontainer/base/Dockerfile Outdated
Comment thread .devcontainer/base/Dockerfile Outdated
Comment thread .devcontainer/base/apt-requirements.json
Comment thread .devcontainer/base/Dockerfile Outdated
…v for aqtinstall

- Add separate downloader-amd64 and downloader-arm64 stages to download
  the correct xwin binary for the target platform, fixing the
  "cannot execute binary file: Exec format error" on arm64 builds
- Use a temporary Python venv for aqtinstall instead of system pip to
  avoid leaving transitive dependencies in the image
- Replace python3-pip with python3-venv in apt-requirements.json

Copilot AI commented May 27, 2026

Copy link
Copy Markdown
Contributor Author

@copilot

Fix these errors:
...

Fixed in the latest commit. The xwin download now uses architecture-aware stages (separate downloader-amd64 and downloader-arm64 stages selected via TARGETARCH), matching the pattern used in the cpp Dockerfile. This ensures the correct binary is downloaded for the build platform.

Also switched aqtinstall to use a temporary venv instead of system pip, and replaced python3-pip with python3-venv in the apt requirements.

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

📦 Container Size Analysis

Note

Comparing docker.io/gabrielfrasantos/embedded-devcontainer-base:edgedocker.io/gabrielfrasantos/embedded-devcontainer-base:pr-68

📈 Size Comparison Table

OS/Platform Previous Current Change Trend
linux/amd64 0 B 808.4 MB +808.4 MB (+∞) 🔼
linux/arm64 0 B 802.73 MB +802.73 MB (+∞) 🔼

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

📦 Container Size Analysis

Note

Comparing docker.io/gabrielfrasantos/embedded-devcontainer-rust:edgedocker.io/gabrielfrasantos/embedded-devcontainer-rust:pr-68

📈 Size Comparison Table

OS/Platform Previous Current Change Trend
linux/amd64 0 B 1.2 GB +1.2 GB (+∞) 🔼
linux/arm64 0 B 1.15 GB +1.15 GB (+∞) 🔼

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

📦 Container Size Analysis

Note

Comparing docker.io/gabrielfrasantos/embedded-devcontainer-cpp:edgedocker.io/gabrielfrasantos/embedded-devcontainer-cpp:pr-68

📈 Size Comparison Table

OS/Platform Previous Current Change Trend
linux/amd64 732.36 MB 1.27 GB +539.44 MB (+73.66%) 🔼
linux/arm64 0 B 1.25 GB +1.25 GB (+∞) 🔼

@github-actions

github-actions Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

Test Results

 12 files   12 suites   16m 6s ⏱️
 35 tests  35 ✅ 0 💤 0 ❌
148 runs  148 ✅ 0 💤 0 ❌

Results for commit 0cc0957.

♻️ This comment has been updated with latest results.

@gabrielfrasantos
gabrielfrasantos merged commit 49756ed into main May 27, 2026
49 checks passed
@github-actions

Copy link
Copy Markdown
Contributor

🎉 Hooray! The changes in this pull request went live with the release of v7.1.0 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants