From 3654e47567307c6d03a84773ba118420e7b34c3f Mon Sep 17 00:00:00 2001 From: Tomasz Pasternak Date: Thu, 10 Oct 2024 11:29:45 +0400 Subject: [PATCH 1/5] fix: Re-realize aspect files after plugin update --- .../strategy/SyncAspectTemplateProvider.java | 78 +++++-------------- 1 file changed, 20 insertions(+), 58 deletions(-) diff --git a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java index 83d20b1512e..4a0d8ae497d 100644 --- a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java +++ b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java @@ -23,6 +23,8 @@ import com.google.idea.blaze.base.sync.data.BlazeProjectDataManager; import com.google.idea.blaze.base.util.TemplateWriter; import com.intellij.openapi.project.Project; + +import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -37,76 +39,36 @@ public class SyncAspectTemplateProvider implements SyncListener { @Override public void onSyncStart(Project project, BlazeContext context, SyncMode syncMode) throws SyncFailedException { - copyProjectAspects(project); prepareProjectAspect(project); } - private void copyProjectAspects(Project project) throws SyncFailedException { - final var projectAspects = AspectRepositoryProvider.getProjectAspectDirectory(project).orElse(null); - if (projectAspects == null) { - throw new SyncFailedException("Missing project aspect directory"); - } - - // only copy project aspect once, TODO: do we need versioning here? - if (projectAspects.exists()) return; - - final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory().orElse(null); - if (templateAspects == null || !templateAspects.isDirectory()) { - throw new SyncFailedException("Missing aspect template directory"); - } - - try { - copyFileTree(templateAspects.toPath(), projectAspects.toPath()); - } catch (IOException e) { - throw new SyncFailedException("Could not copy aspect templates", e); - } - } - - private void copyFileTree(Path source, Path destination) throws IOException { - try (final var fileStream = Files.walk(source)) { - final var fileIterator = fileStream.iterator(); - while (fileIterator.hasNext()) { - copyUsingRelativePath(source, fileIterator.next(), destination); - } - } - } - - private void copyUsingRelativePath(Path sourcePrefix, Path source, Path destination) throws IOException { - // only interested in bzl files that are templates - if (source.endsWith(".bzl") && !source.endsWith("template.bzl")) return; - - final var sourceRelativePath = sourcePrefix.relativize(source).toString(); - final var destinationAbsolutePath = Paths.get(destination.toString(), sourceRelativePath); - Files.copy(source, destinationAbsolutePath); - } - private void prepareProjectAspect(Project project) throws SyncFailedException { var manager = BlazeProjectDataManager.getInstance(project); if (manager == null) return; - var projectData = manager.getBlazeProjectData(); if (projectData == null) return; - var optionalAspectTemplateDir = AspectRepositoryProvider.getProjectAspectDirectory(project); - if (optionalAspectTemplateDir.isEmpty()) return; - var aspectTemplateDir = optionalAspectTemplateDir.get().toPath(); - var templateWriter = new TemplateWriter(aspectTemplateDir); + var realizedAspectsPath = AspectRepositoryProvider.getProjectAspectDirectory(project).get().toPath(); + try { + Files.createDirectories(realizedAspectsPath); + Files.writeString(realizedAspectsPath.resolve("WORKSPACE"), ""); + Files.writeString(realizedAspectsPath.resolve("BUILD"), ""); + } catch (IOException e) { + throw new SyncFailedException("Couldn't create realized aspects", e); + } + + + final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory().orElse(null); + var javaTemplate = "java_info.template.bzl"; + var templateWriter = new TemplateWriter(templateAspects.toPath()); var activeLanguages = projectData.getWorkspaceLanguageSettings().getActiveLanguages(); var isAtLeastBazel8 = projectData.getBlazeVersionData().bazelIsAtLeastVersion(8, 0, 0); var templateVariableMap = Map.of( - "bazel8OrAbove", isAtLeastBazel8 ? "true" : "false", - "isJavaEnabled", activeLanguages.contains(LanguageClass.JAVA) || activeLanguages.contains(LanguageClass.GENERIC) ? "true" : "false" + "bazel8OrAbove", isAtLeastBazel8 ? "true" : "false", + "isJavaEnabled", activeLanguages.contains(LanguageClass.JAVA) || activeLanguages.contains(LanguageClass.GENERIC) ? "true" : "false" ); - - for (final var language : activeLanguages) { - var templateFileName = supportedLanguageAspectTemplate.get(language); - if (templateFileName == null) continue; - - var realizedFileName = templateFileName.replace(".template.bzl", ".bzl"); - var realizedFile = aspectTemplateDir.resolve(realizedFileName); - - if (!templateWriter.writeToFile(templateFileName, realizedFile, templateVariableMap)) { - throw new SyncFailedException("Could not create template for: " + language); - } + var realizedFile = realizedAspectsPath.resolve("java_info.bzl"); + if (!templateWriter.writeToFile(javaTemplate, realizedFile, templateVariableMap)) { + throw new SyncFailedException("Could not create template for: "); } } } \ No newline at end of file From 45ccd547e40508cdb1c2275ff41e7979e75a78c2 Mon Sep 17 00:00:00 2001 From: Tomasz Pasternak Date: Thu, 10 Oct 2024 16:04:42 +0400 Subject: [PATCH 2/5] fix test --- .../strategy/SyncAspectTemplateProvider.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java index 4a0d8ae497d..bb57c5c7255 100644 --- a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java +++ b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java @@ -15,6 +15,7 @@ */ package com.google.idea.blaze.base.sync.aspects.strategy; +import com.google.common.collect.ImmutableSet; import com.google.idea.blaze.base.model.primitives.LanguageClass; import com.google.idea.blaze.base.scope.BlazeContext; import com.google.idea.blaze.base.sync.SyncListener; @@ -23,13 +24,12 @@ import com.google.idea.blaze.base.sync.data.BlazeProjectDataManager; import com.google.idea.blaze.base.util.TemplateWriter; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; -import java.io.FilenameFilter; import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.Map; +import java.util.Optional; public class SyncAspectTemplateProvider implements SyncListener { private final Map supportedLanguageAspectTemplate = Map.of( @@ -45,8 +45,6 @@ public void onSyncStart(Project project, BlazeContext context, SyncMode syncMode private void prepareProjectAspect(Project project) throws SyncFailedException { var manager = BlazeProjectDataManager.getInstance(project); if (manager == null) return; - var projectData = manager.getBlazeProjectData(); - if (projectData == null) return; var realizedAspectsPath = AspectRepositoryProvider.getProjectAspectDirectory(project).get().toPath(); try { Files.createDirectories(realizedAspectsPath); @@ -56,19 +54,23 @@ private void prepareProjectAspect(Project project) throws SyncFailedException { throw new SyncFailedException("Couldn't create realized aspects", e); } - final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory().orElse(null); var javaTemplate = "java_info.template.bzl"; - var templateWriter = new TemplateWriter(templateAspects.toPath()); - var activeLanguages = projectData.getWorkspaceLanguageSettings().getActiveLanguages(); - var isAtLeastBazel8 = projectData.getBlazeVersionData().bazelIsAtLeastVersion(8, 0, 0); - var templateVariableMap = Map.of( - "bazel8OrAbove", isAtLeastBazel8 ? "true" : "false", - "isJavaEnabled", activeLanguages.contains(LanguageClass.JAVA) || activeLanguages.contains(LanguageClass.GENERIC) ? "true" : "false" - ); var realizedFile = realizedAspectsPath.resolve("java_info.bzl"); + var templateWriter = new TemplateWriter(templateAspects.toPath()); + var templateVariableMap = getStringStringMap(manager); if (!templateWriter.writeToFile(javaTemplate, realizedFile, templateVariableMap)) { throw new SyncFailedException("Could not create template for: "); } } + + private static @NotNull Map getStringStringMap(BlazeProjectDataManager manager) { + var projectData = Optional.ofNullable(manager.getBlazeProjectData()); // It can be empty in cases like //clwb:simple_integration + var activeLanguages = projectData.map(it -> it.getWorkspaceLanguageSettings().getActiveLanguages()).orElse(ImmutableSet.of()); + var isAtLeastBazel8 = projectData.map(it -> it.getBlazeVersionData().bazelIsAtLeastVersion(8, 0, 0)).orElse(false); + return Map.of( + "bazel8OrAbove", isAtLeastBazel8 ? "true" : "false", + "isJavaEnabled", activeLanguages.contains(LanguageClass.JAVA) || activeLanguages.contains(LanguageClass.GENERIC) ? "true" : "false" + ); + } } \ No newline at end of file From b2539c7f8678f9b0e6fe81e182b1937ac1c69326 Mon Sep 17 00:00:00 2001 From: Tomasz Pasternak Date: Thu, 10 Oct 2024 16:47:42 +0400 Subject: [PATCH 3/5] chore: Disable CLion 2022.3 tests --- .bazelci/clion.yml | 38 -------------------------------------- 1 file changed, 38 deletions(-) diff --git a/.bazelci/clion.yml b/.bazelci/clion.yml index d5f760478d9..a7a81cdd087 100644 --- a/.bazelci/clion.yml +++ b/.bazelci/clion.yml @@ -1,43 +1,5 @@ --- tasks: - CLion-internal-stable: - name: CLion Internal Stable - platform: ubuntu2204 - build_flags: - - --define=ij_product=clion-latest - build_targets: - - //clwb/... - test_flags: - - --define=ij_product=clion-latest - - --test_output=errors - test_targets: - - //:clwb_tests - CLion-internal-beta: - name: CLion Internal Beta - platform: ubuntu2204 - build_flags: - - --define=ij_product=clion-beta - build_targets: - - //clwb/... - test_flags: - - --define=ij_product=clion-beta - - --test_output=errors - test_targets: - - //:clwb_tests - CLion-internal-under-dev: - name: CLion Internal Under Development - platform: ubuntu2204 - build_flags: - - --define=ij_product=clion-under-dev - build_targets: - - //clwb/... - test_flags: - - --define=ij_product=clion-under-dev - - --test_output=errors - test_targets: - - //:clwb_tests - soft_fail: - - exit_status: 1 CLion-OSS-oldest-stable: name: CLion OSS Oldest Stable platform: ubuntu2204 From 048017bf7e45279b1e52d8887e6be261fcd657b6 Mon Sep 17 00:00:00 2001 From: Tomasz Pasternak Date: Thu, 10 Oct 2024 16:59:39 +0400 Subject: [PATCH 4/5] apply review comments --- .../aspects/strategy/SyncAspectTemplateProvider.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java index bb57c5c7255..5a51c1c17fd 100644 --- a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java +++ b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java @@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.Map; @@ -45,7 +46,11 @@ public void onSyncStart(Project project, BlazeContext context, SyncMode syncMode private void prepareProjectAspect(Project project) throws SyncFailedException { var manager = BlazeProjectDataManager.getInstance(project); if (manager == null) return; - var realizedAspectsPath = AspectRepositoryProvider.getProjectAspectDirectory(project).get().toPath(); + var realizedAspectsPath = AspectRepositoryProvider + .getProjectAspectDirectory(project) + .map(File::toPath) + .orElseThrow(() -> new SyncFailedException("Couldn't find project aspect directory")); + try { Files.createDirectories(realizedAspectsPath); Files.writeString(realizedAspectsPath.resolve("WORKSPACE"), ""); @@ -65,7 +70,7 @@ private void prepareProjectAspect(Project project) throws SyncFailedException { } private static @NotNull Map getStringStringMap(BlazeProjectDataManager manager) { - var projectData = Optional.ofNullable(manager.getBlazeProjectData()); // It can be empty in cases like //clwb:simple_integration + var projectData = Optional.ofNullable(manager.getBlazeProjectData()); // It can be empty on intial sync. Fall back to no lauguage support var activeLanguages = projectData.map(it -> it.getWorkspaceLanguageSettings().getActiveLanguages()).orElse(ImmutableSet.of()); var isAtLeastBazel8 = projectData.map(it -> it.getBlazeVersionData().bazelIsAtLeastVersion(8, 0, 0)).orElse(false); return Map.of( From 4c88a910d1e32f1909d0aef8258839a36809efe0 Mon Sep 17 00:00:00 2001 From: Tomasz Pasternak Date: Thu, 10 Oct 2024 17:51:47 +0400 Subject: [PATCH 5/5] Throw if not aspect template dir --- .../base/sync/aspects/strategy/SyncAspectTemplateProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java index 5a51c1c17fd..f4cb8321d1f 100644 --- a/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java +++ b/base/src/com/google/idea/blaze/base/sync/aspects/strategy/SyncAspectTemplateProvider.java @@ -59,7 +59,8 @@ private void prepareProjectAspect(Project project) throws SyncFailedException { throw new SyncFailedException("Couldn't create realized aspects", e); } - final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory().orElse(null); + final var templateAspects = AspectRepositoryProvider.findAspectTemplateDirectory() + .orElseThrow(() -> new SyncFailedException("Couldn't find aspect template directory")); var javaTemplate = "java_info.template.bzl"; var realizedFile = realizedAspectsPath.resolve("java_info.bzl"); var templateWriter = new TemplateWriter(templateAspects.toPath());