diff --git a/Dockerfile b/Dockerfile index 24dd3b2bc12f..c9a74c5c2801 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,6 +10,7 @@ RUN apt-get update && \ zip \ unzip \ libgl1-mesa-glx \ + squashfs-tools \ && rm -rf /var/lib/apt/lists/* # Maven cache to reuse VOLUME /root/.m2 diff --git a/build/tasks/src/org/jetbrains/intellij/build/io/file.kt b/build/tasks/src/org/jetbrains/intellij/build/io/file.kt index d51a272f337d..b45005c70bdc 100644 --- a/build/tasks/src/org/jetbrains/intellij/build/io/file.kt +++ b/build/tasks/src/org/jetbrains/intellij/build/io/file.kt @@ -27,9 +27,9 @@ fun moveFile(source: Path, target: Path) { Files.move(source, target) } -fun moveFileToDir(file: Path, targetDir: Path) { +fun moveFileToDir(file: Path, targetDir: Path): Path { Files.createDirectories(targetDir) - Files.move(file, targetDir.resolve(file.fileName)) + return Files.move(file, targetDir.resolve(file.fileName)) } fun copyFile(file: Path, target: Path) { diff --git a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt index 93413c7dd6cc..cffc0c71bd1e 100644 --- a/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt +++ b/platform/build-scripts/src/org/jetbrains/intellij/build/impl/LinuxDistributionBuilder.kt @@ -23,6 +23,7 @@ import java.nio.file.Path import java.nio.file.StandardCopyOption import java.nio.file.attribute.PosixFilePermissions import kotlin.io.path.name +import kotlin.io.path.nameWithoutExtension import kotlin.time.Duration.Companion.minutes class LinuxDistributionBuilder(override val context: BuildContext, @@ -282,8 +283,9 @@ class LinuxDistributionBuilder(override val context: BuildContext, workingDir = snapDir, timeout = context.options.snapDockerBuildTimeoutMin.minutes, ) - moveFileToDir(resultDir.resolve(snapArtifact), context.paths.artifactDir) - context.notifyArtifactBuilt(context.paths.artifactDir.resolve(snapArtifact)) + val snapArtifactPath = moveFileToDir(resultDir.resolve(snapArtifact), context.paths.artifactDir) + context.notifyArtifactBuilt(snapArtifactPath) + checkExecutablePermissions(unSquashSnap(snapArtifactPath), root = "", includeRuntime = true, arch = arch) } } @@ -332,6 +334,15 @@ class LinuxDistributionBuilder(override val context: BuildContext, copyInspectScript(context, distBinDir) } + + private suspend fun unSquashSnap(snap: Path): Path { + val unSquashed = context.paths.tempDir.resolve("unSquashed-${snap.nameWithoutExtension}") + NioFiles.deleteRecursively(unSquashed) + Files.createDirectories(unSquashed) + runProcess(listOf("unsquashfs", "$snap"), workingDir = unSquashed, inheritOut = true) + return unSquashed.resolve("squashfs-root") + } + } private const val NO_JBR_SUFFIX = "-no-jbr"