Build Docker images locally when Dockerfiles change#1161
Merged
MatkovIvan merged 2 commits intomasterfrom Feb 12, 2026
Merged
Conversation
ff777f7 to
86eb782
Compare
Dockerfiles change
98bb5ff to
7ece5c2
Compare
There was a problem hiding this comment.
Pull request overview
This PR refactors CI to ensure Dockerfile changes are validated by building images locally before running tests, avoids GLIBC mismatches by moving GitHub Actions steps outside containers, and introduces orchestrator workflows to compose CI stages for PRs and post-merge runs.
Changes:
- Added orchestrator workflows (
pull-request.yml,post-merge.yml) and converted existing workflows toworkflow_call. - Introduced composite actions to build/pull images as needed and run commands inside Docker (
docker-skiko-run,docker-skiko-publish). - Consolidated Linux build environments around
linux-compat(Amazon Linux 2) and expanded thelinux-compatDockerfile (libs, Xvfb, Android SDK/NDK).
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| skiko/docker/linux-compat/Dockerfile | Expands linux-compat image (Xvfb, native deps, Android SDK/NDK) for CI parity and UI testing. |
| skiko/docker/linux-arm64/Dockerfile | Removed in favor of multi-arch linux-compat. |
| skiko/docker/linux-android-amd64/Dockerfile | Removed in favor of linux-compat including Android SDK/NDK. |
| skiko/docker/linux-amd64/Dockerfile | Refactors sysroot header copying via env+loop. |
| skiko/buildSrc/src/main/kotlin/tasks/configuration/NativeTasksConfiguration.kt | Adds /usr/lib64 to Linux linker search paths. |
| .github/workflows/tests.yml | Converts to reusable workflow; runs Linux jobs via docker-skiko-run on ubuntu runners. |
| .github/workflows/pull-request.yml | New PR orchestrator composing docker publish dry-run, tests, publish dry-run, and docs. |
| .github/workflows/publish-dry-run.yml | Converts to reusable workflow; runs build steps via docker-skiko-run. |
| .github/workflows/post-merge.yml | New post-merge orchestrator (push to master/release/*) composing publish + validations. |
| .github/workflows/docs.yml | Converts to reusable workflow; builds docs inside linux-compat via docker-skiko-run. |
| .github/workflows/docker-publish.yml | Converts to reusable workflow; detects Docker changes and conditionally builds/publishes images tagged by branch. |
| .github/actions/setup-prerequisites/action.yml | Adds Linux runner disk cleanup before Gradle setup. |
| .github/actions/docker-skiko-run/action.yml | New composite action to detect Docker changes, build/pull images, and run commands in containers. |
| .github/actions/docker-skiko-publish/action.yml | New composite action to build and optionally publish images to GHCR (with tag normalization). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
7ece5c2 to
dc76444
Compare
dc76444 to
b1784b8
Compare
b1784b8 to
d34e719
Compare
d34e719 to
88453ad
Compare
kropp
approved these changes
Feb 9, 2026
88453ad to
66f4262
Compare
66f4262 to
927d49c
Compare
927d49c to
5b87438
Compare
igordmn
reviewed
Feb 9, 2026
igordmn
reviewed
Feb 10, 2026
igordmn
approved these changes
Feb 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes SKIKO-1103 Properly handle Dockerfile changes in CI
1. Handle Dockerfile Changes in CI
When a PR modifies both the
Dockerfileand C++ source, CI must build the library against the new container logic before merging to catch compatibility issues.Workflows now detect
Dockerfilechanges and automatically build images locally before running tests. When noDockerfilechanges are detected, published images fromghcr.ioare used.2. Avoid GLIBC Mismatches: Run GitHub Actions Outside Containers
Running GitHub Actions native steps (like
actions/checkout) inside custom containers causes GLIBC version mismatches since GitHub's Node.js-based actions require newer GLIBC than Amazon Linux 2 provides.This change introduced new composite action
docker-skiko-runthat runs GitHub actions outside the container onubuntu-24.04runner, and only executes build/test commands inside the Docker container viadocker run.3. Environment Alignment: Use
linux-compatfor GitHub Actions BuildsGitHub Actions used Ubuntu 20.04 images with GLIBC 2.31, while TeamCity publishing used Amazon Linux 2 with GLIBC 2.26. This mismatch could mask GLIBC compatibility issues during PR validation.
Most GitHub Actions workflows now use
linux-compat(Amazon Linux 2).Note: TeamCity publishing should be updated to use
linux-compattoo4. Introduce Orchestrator Workflows
New orchestrator workflows compose existing test/build/docs workflows:
pull-request.yml- Runs on every PR: detects Docker changes, builds images if needed (dry-run), runs tests + publish dry run + docs validationpost-merge.yml- Runs on push to master/release: detects Docker changes, publishes images if changed, runs tests + publish dry run + docs publicationSo, we should have fewer "Run CI" temporary PRs now
5. Documentation as Pre-Merge Check
Documentation builds now run inside the same
linux-compatDocker environment used for library builds, and are validated as part of PR checks (previously only ran post-merge).6. Docker Tags Use Branch Names
Published Docker images are tagged with the branch name (e.g.,
master,release/0.9.46), so the release branches might publish its own version of the image. This way changes inmastershouldn't prevent making a patch for a previous version if it's required