1. 19 Feb, 2026 1 commit
  2. 18 Feb, 2026 1 commit
  3. 17 Feb, 2026 3 commits
  4. 16 Feb, 2026 2 commits
    • Victor Kropp's avatar
      replace all remaining links to maven.pkg.jetbrains.space (#1167) · e2f8d173
      Victor Kropp authored
      All public links are updated to
      https://redirector.kotlinlang.org/maven/compose-dev
      Internal buildSrc links to maven directly to avoid unnecessary redirects
      
      Fixes SKIKO-1108
      e2f8d173
    • Ivan Matkov's avatar
      Refactor local Skia build to Gradle/Kotlin (#1163) · 3451c14e
      Ivan Matkov authored
      Previously:
      - The bash script required specifying `SKIA_VERSION` separately from
      `gradle.properties`, leading to version mismatches
      - Script hardcoded `SKIA_TARGET` default to `iosSim`, requiring manual
      override on non-macOS systems
      
      This change:
      - Added `skiaVersionFromEnvOrProperties` property and `printSkiaVersion`
      task. The bash script now queries Gradle for the version instead of
      maintaining its own default.
      - Target platform now defaults to current OS (`hostOs.id`) instead of
      hardcoded `iosSim`.
      - Introduced `BuildLocalSkiaTask` that handles Python build script
      invocation, architecture detection, and validation.
      - Added `SkiaTarget` enum centralizing platform-specific Gradle flags
      and architecture mappings.
      - Simplified bash script: Now focuses solely on git operations
      (clone/checkout skia-pack), delegating all build logic to Gradle.
      
      ### Usage
      ```sh
      # Version from gradle.properties, target auto-detected from OS
      ./build-with-local-skia.sh
      
      # Override either via environment variables
      SKIA_VERSION=m138-80d088a-2 SKIA_TARGET=iosSim ./build-with-local-skia.sh
      
      # Or use Gradle tasks directly
      ./gradlew prepareLocalSkiaBuild -Pskia.target=linux
      ```
      3451c14e
  5. 12 Feb, 2026 1 commit
    • Ivan Matkov's avatar
      Build Docker images locally when `Dockerfile`s change (#1161) · 1b3f124b
      Ivan Matkov authored
      Fixes [SKIKO-1103](https://youtrack.jetbrains.com/issue/SKIKO-1103)
      Properly handle Dockerfile changes in CI
      
      ### 1. Handle Dockerfile Changes in CI
      When a PR modifies both the `Dockerfile` and C++ source, CI must build
      the library against the **new** container logic before merging to catch
      compatibility issues.
      Workflows now detect `Dockerfile` changes and automatically build images
      locally before running tests. When no `Dockerfile` changes are detected,
      published images from `ghcr.io` are 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-run` that runs
      GitHub actions outside the container on `ubuntu-24.04` runner, and only
      executes build/test commands inside the Docker container via `docker
      run`.
      
      ### 3. Environment Alignment: Use `linux-compat` for GitHub Actions
      Builds
      GitHub 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).
      - Web builds are out of the scope here because emsdk requires newer
      GLIBC.
      - Cross-compilation is out of the scope because there is no simply way
      to get arm shared libraries to x64 image on AL2
      
      Note: TeamCity publishing should be updated to use `linux-compat` too
      
      ### 4. 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
      validation
      - **`post-merge.yml`** - Runs on push to master/release: detects Docker
      changes, publishes images if changed, runs tests + publish dry run +
      docs publication
      
      So, we should have fewer "Run CI" temporary PRs now
      
      ### 5. Documentation as Pre-Merge Check
      Documentation builds now run inside the same `linux-compat` Docker
      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 in `master` shouldn't prevent making a
      patch for a previous version if it's required
      1b3f124b
  6. 10 Feb, 2026 1 commit
  7. 06 Feb, 2026 2 commits
  8. 05 Feb, 2026 1 commit
  9. 30 Jan, 2026 2 commits
  10. 29 Jan, 2026 1 commit
  11. 28 Jan, 2026 2 commits
    • ApoloApps's avatar
      Part 2 Extension functions non-allocate intermediate objects (#1140) · 3af0752f
      ApoloApps authored
      This is part 2 of [this
      pr](https://github.com/JetBrains/skiko/pull/1137)
      
      **What has changed?**
      1. Added more extension functions that prevent intermediate object
      allocations from a lot of the Skiko api surface
      2. Migrated EnumClass.values() to entries in a lot of classes (maybe
      some have been missed)
      
      **Next**
      Try (important keyword here :), cause if not wrong there are Skia and
      Compose diffs on how they're treated) doing less copies of Matrix
      
      ## Release Notes
      Added API that can accept primitive values instead of `Rect`, `RRect`, `Offset` to avoid additional object allocation
      3af0752f
    • Ivan Matkov's avatar
      Publish Docker Containers used on CI to GHCR (#1152) · 548fed39
      Ivan Matkov authored
      Fixes [SKIKO-1081](https://youtrack.jetbrains.com/issue/SKIKO-1081) Make
      docker images for building skiko publicly available
      
      The Skiko project previously used a private Docker registry
      (`registry.jetbrains.team/p/ui/skiko-docker`) for build containers,
      which required secrets for authentication. This prevented CI
      verification from fork PRs even after manual approval.
      
      The change migrates to GitHub Container Registry (GHCR), making
      containers publicly accessible and enabling CI to run on fork PRs.
      
      Containers built:
      https://github.com/orgs/JetBrains/packages?repo_name=skiko
      
      Triggers:
      - Push to master: Automatically builds and publishes all Docker images
      - Pull requests: Builds images in dry-run mode (no publishing) for
      verification
      - Manual workflow dispatch: Option to publish or just build
      - File changes: Triggers on changes to `skiko/docker/**` or the workflow
      itself
      548fed39
  12. 27 Jan, 2026 1 commit
  13. 19 Jan, 2026 1 commit
  14. 16 Jan, 2026 1 commit
  15. 08 Jan, 2026 1 commit
  16. 07 Jan, 2026 3 commits
  17. 05 Jan, 2026 1 commit
  18. 10 Dec, 2025 2 commits
  19. 01 Dec, 2025 1 commit
  20. 28 Nov, 2025 1 commit
  21. 27 Nov, 2025 1 commit
  22. 26 Nov, 2025 1 commit
  23. 24 Nov, 2025 3 commits
  24. 21 Nov, 2025 3 commits
    • Ivan Matkov's avatar
      Update GCC version to 10 (#1132) · c2cc37a0
      Ivan Matkov authored
      In 0.9.36, there was a missing symbol that caused
      ```
      libskiko-linux-x64.so: undefined symbol: _ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info
      ```
      
      It's because the build attempts to statically link the C++ standard
      library, but:
      - Skia's object files reference newer libstdc++ symbols
      - GCC 7.3's `libstdc++` doesn't contain these symbols
      - The static linking fails to resolve these symbols
      
      GCC was downgraded from 9 to 7 in #1130 during the switch to AL2 to
      provide better GLIBC compatibility.
      Since AL2
      [provides](https://docs.aws.amazon.com/linux/al2/ug/c-cplusplus.html)
      only GCC 7.3 by default and GCC 10, installing GCC 9 is problematic
      there, so it's bumped to 10
      
      However, GCC 10 introduces outline atomics as default for new ARM chips,
      the build might fail due to missing symbols like
      ```
      org_jetbrains_skia_FontMgrWithFallback__1nDefaultWithFallbackFontProvider: error: undefined reference to '__aarch64_ldadd4_relax'
      org_jetbrains_skia_FontMgrWithFallback__1nDefaultWithFallbackFontProvider: error: undefined reference to '__aarch64_ldadd4_acq_rel'
      ```
      so, to keep things compatible with the previous GCC version,
      `-mno-outline-atomics` option was added to disable this new behavior.
      c2cc37a0
    • Ivan Matkov's avatar
      Fix glibc compatibility (#1130) · 49fea5b9
      Ivan Matkov authored
      [SKIKO-1066](https://youtrack.jetbrains.com/issue/SKIKO-1066) Support
      glibc 2.27
      [CMP-9307](https://youtrack.jetbrains.com/issue/CMP-9307) Support glibc
      2.27
      
      - Added `linux-compat` docker image based on #1123. It works on both x64
      and arm64 architectures
      - `multistrap` tool was replaced by installing required packages inside
      `linux-compat` and `linux-amd64` docker images
      - `linux-arm64` uses GCC instead of clang (aligning between
      distributions)
      - GitHub checks now use precompiled docker images to reuse the same
      environment
      - `ci.yml` and `web.yml` were combined into `tests.yml`
      - `publishToMavenLocal` checks are moved to `publish-dry-run.yml`
      - Add building an Android sample as part of CI checks
      
      ---------
      Co-authored-by: 's avatarVladislav.Ertel <vladislav.ertel@jetbrains.com>
      49fea5b9
    • Sebastian Sellmair's avatar
      Lock .skiko directory using lockfile when unpacking the native binary (#1128) · fbb08087
      Sebastian Sellmair authored
      In the compose hot reload project, we have seen races from multiple
      tests trying to unpack skiko into the .skiko directory. Currently, the
      library loading is only synchronized within the project. This MR also
      adds a .lock file, which has to be locked when modifying the dataDir.
      
      Note: This MR also changed the Library.load method from always entering
      a monitor, to resolving an atomic reference, best case.
      
      ## Release Notes
      ### Fixes - Desktop
      - Fixed a race condition that occurred when multiple processes attempted
      to unpack Skiko binary files at startup
      fbb08087
  25. 20 Nov, 2025 1 commit
  26. 12 Nov, 2025 2 commits
    • Igor Demin's avatar
      Revert "Fix signKotlinMultiplatformPublication on CI" (#1126) · e4cf12a1
      Igor Demin authored
      Reverts JetBrains/skiko#1125
      
      Fails on CI
      e4cf12a1
    • Igor Demin's avatar
      Fix signKotlinMultiplatformPublication on CI (#1125) · 8d247093
      Igor Demin authored
      Regression after https://github.com/JetBrains/skiko/pull/1119 was added
      on CI
      
      ```
      org.gradle.internal.execution.WorkValidationException: A problem was found with the configuration of task ':signKotlinMultiplatformPublication' (type 'Sign').
        - Gradle detected a problem with the following location: '/mnt/agent/work/381d14fe560aa354/skiko/build/libs/skiko-0.9.33-javadoc.jar.asc'.
      
          Reason: Task ':publishAwtRuntimeElementsPublicationToComposeRepoRepository' uses this output of task ':signKotlinMultiplatformPublication' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
      
          Possible solutions:
            1. Declare task ':signKotlinMultiplatformPublication' as an input of ':publishAwtRuntimeElementsPublicationToComposeRepoRepository'.
            2. Declare an explicit dependency on ':signKotlinMultiplatformPublication' from ':publishAwtRuntimeElementsPublicationToComposeRepoRepository' using Task#dependsOn.
            3. Declare an explicit dependency on ':signKotlinMultiplatformPublication' from ':publishAwtRuntimeElementsPublicationToComposeRepoRepository' using Task#mustRunAfter.
      ```
      
      The fix is blind as we can only test it in master
      8d247093