Skip to content

Commit ee13114

Browse files
committed
conditionally symlink "ui" pkg
1 parent da8c718 commit ee13114

3 files changed

Lines changed: 56 additions & 101 deletions

File tree

tsunami/build/build.go

Lines changed: 47 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package build
33
import (
44
"bufio"
55
"fmt"
6+
"go/parser"
7+
"go/token"
68
"io"
79
"log"
810
"os"
@@ -21,6 +23,7 @@ import (
2123
)
2224

2325
const MinSupportedGoMinorVersion = 22
26+
const TsunamiUIImportPath = "github.com/wavetermdev/waveterm/tsunami/ui"
2427

2528
type BuildOpts struct {
2629
Dir string
@@ -138,7 +141,7 @@ func createGoMod(tempDir, appDirName, goVersion string, opts BuildOpts, verbose
138141
if verbose {
139142
log.Printf("Found existing go.mod, copying from %s", originalGoModPath)
140143
}
141-
144+
142145
// Copy existing go.mod to temp directory
143146
tempGoModPath := filepath.Join(tempDir, "go.mod")
144147
if err := copyFile(originalGoModPath, tempGoModPath); err != nil {
@@ -160,7 +163,7 @@ func createGoMod(tempDir, appDirName, goVersion string, opts BuildOpts, verbose
160163
if verbose {
161164
log.Printf("No existing go.mod found, creating new one")
162165
}
163-
166+
164167
modFile = &modfile.File{}
165168
if err := modFile.AddModuleStmt(modulePath); err != nil {
166169
return fmt.Errorf("failed to add module statement: %w", err)
@@ -320,6 +323,31 @@ func verifyScaffoldPath(scaffoldPath string) error {
320323
return nil
321324
}
322325

326+
func buildImportsMap(dir string) (map[string]bool, error) {
327+
imports := make(map[string]bool)
328+
329+
files, err := filepath.Glob(filepath.Join(dir, "*.go"))
330+
if err != nil {
331+
return nil, fmt.Errorf("failed to list go files: %w", err)
332+
}
333+
334+
fset := token.NewFileSet()
335+
for _, file := range files {
336+
node, err := parser.ParseFile(fset, file, nil, parser.ImportsOnly)
337+
if err != nil {
338+
continue // Skip files that can't be parsed
339+
}
340+
341+
for _, imp := range node.Imports {
342+
// Remove quotes from import path
343+
importPath := strings.Trim(imp.Path.Value, `"`)
344+
imports[importPath] = true
345+
}
346+
}
347+
348+
return imports, nil
349+
}
350+
323351
func (be *BuildEnv) cleanupTempDir(keepTemp bool, verbose bool) {
324352
if be == nil || be.cleanupOnce == nil {
325353
return
@@ -430,14 +458,24 @@ func tsunamiBuildInternal(opts BuildOpts) (*BuildEnv, error) {
430458
return buildEnv, fmt.Errorf("failed to create go.mod: %w", err)
431459
}
432460

433-
// Create symlink to SDK ui directory so Tailwind can see those classes
434-
uiLinkPath := filepath.Join(tempDir, "ui")
435-
uiTargetPath := filepath.Join(opts.SdkReplacePath, "ui")
436-
if err := os.Symlink(uiTargetPath, uiLinkPath); err != nil {
437-
return buildEnv, fmt.Errorf("failed to create ui symlink: %w", err)
461+
// Build imports map from Go files
462+
imports, err := buildImportsMap(tempDir)
463+
if err != nil {
464+
return buildEnv, fmt.Errorf("failed to build imports map: %w", err)
438465
}
439-
if opts.Verbose {
440-
log.Printf("Created symlink: %s -> %s", uiLinkPath, uiTargetPath)
466+
467+
// Create symlink to SDK ui directory only if UI package is imported
468+
if imports[TsunamiUIImportPath] {
469+
uiLinkPath := filepath.Join(tempDir, "ui")
470+
uiTargetPath := filepath.Join(opts.SdkReplacePath, "ui")
471+
if err := os.Symlink(uiTargetPath, uiLinkPath); err != nil {
472+
return buildEnv, fmt.Errorf("failed to create ui symlink: %w", err)
473+
}
474+
if opts.Verbose {
475+
log.Printf("Created UI symlink: %s -> %s", uiLinkPath, uiTargetPath)
476+
}
477+
} else if opts.Verbose {
478+
log.Printf("Skipping UI symlink creation - no UI package imports found")
441479
}
442480

443481
// Generate Tailwind CSS

tsunami/cmd/main-tsunami.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import (
99
"github.com/wavetermdev/waveterm/tsunami/tsunamibase"
1010
)
1111

12+
const (
13+
EnvTsunamiScaffoldPath = "TSUNAMI_SCAFFOLDPATH"
14+
EnvTsunamiSdkReplacePath = "TSUNAMI_SDKREPLACEPATH"
15+
)
16+
1217
// these are set at build time
1318
var TsunamiVersion = "0.0.0"
1419
var BuildTime = "0"
@@ -29,14 +34,14 @@ var versionCmd = &cobra.Command{
2934
}
3035

3136
func validateEnvironmentVars(opts *build.BuildOpts) error {
32-
scaffoldPath := os.Getenv("TSUNAMI_SCAFFOLDPATH")
37+
scaffoldPath := os.Getenv(EnvTsunamiScaffoldPath)
3338
if scaffoldPath == "" {
34-
return fmt.Errorf("TSUNAMI_SCAFFOLDPATH environment variable must be set")
39+
return fmt.Errorf("%s environment variable must be set", EnvTsunamiScaffoldPath)
3540
}
3641

37-
sdkReplacePath := os.Getenv("TSUNAMI_SDKREPLACEPATH")
42+
sdkReplacePath := os.Getenv(EnvTsunamiSdkReplacePath)
3843
if sdkReplacePath == "" {
39-
return fmt.Errorf("TSUNAMI_SDKREPLACEPATH environment variable must be set")
44+
return fmt.Errorf("%s environment variable must be set", EnvTsunamiSdkReplacePath)
4045
}
4146

4247
opts.ScaffoldPath = scaffoldPath

tsunami/demo/tsunamiconfig/static/tw.css

Lines changed: 0 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,6 @@
285285
max-width: 96rem;
286286
}
287287
}
288-
.mx-1 {
289-
margin-inline: calc(var(--spacing) * 1);
290-
}
291288
.mx-auto {
292289
margin-inline: auto;
293290
}
@@ -463,18 +460,9 @@
463460
.flex-wrap {
464461
flex-wrap: wrap;
465462
}
466-
.items-center {
467-
align-items: center;
468-
}
469-
.justify-between {
470-
justify-content: space-between;
471-
}
472463
.gap-2 {
473464
gap: calc(var(--spacing) * 2);
474465
}
475-
.gap-3 {
476-
gap: calc(var(--spacing) * 3);
477-
}
478466
.space-y-1 {
479467
:where(& > :not(:last-child)) {
480468
--tw-space-y-reverse: 0;
@@ -514,11 +502,6 @@
514502
--tw-divide-y-reverse: 1;
515503
}
516504
}
517-
.divide-gray-700 {
518-
:where(& > :not(:last-child)) {
519-
border-color: var(--color-gray-700);
520-
}
521-
}
522505
.truncate {
523506
overflow: hidden;
524507
text-overflow: ellipsis;
@@ -627,9 +610,6 @@
627610
.border-border {
628611
border-color: var(--color-border);
629612
}
630-
.border-gray-600 {
631-
border-color: var(--color-gray-600);
632-
}
633613
.border-green-700 {
634614
border-color: var(--color-green-700);
635615
}
@@ -645,21 +625,6 @@
645625
.bg-blue-600 {
646626
background-color: var(--color-blue-600);
647627
}
648-
.bg-blue-900 {
649-
background-color: var(--color-blue-900);
650-
}
651-
.bg-gray-600 {
652-
background-color: var(--color-gray-600);
653-
}
654-
.bg-gray-700 {
655-
background-color: var(--color-gray-700);
656-
}
657-
.bg-gray-800 {
658-
background-color: var(--color-gray-800);
659-
}
660-
.bg-gray-900 {
661-
background-color: var(--color-gray-900);
662-
}
663628
.bg-green-600 {
664629
background-color: var(--color-green-600);
665630
}
@@ -690,9 +655,6 @@
690655
.mask-repeat {
691656
mask-repeat: repeat;
692657
}
693-
.p-3 {
694-
padding: calc(var(--spacing) * 3);
695-
}
696658
.p-4 {
697659
padding: calc(var(--spacing) * 4);
698660
}
@@ -702,9 +664,6 @@
702664
.px-1 {
703665
padding-inline: calc(var(--spacing) * 1);
704666
}
705-
.px-2 {
706-
padding-inline: calc(var(--spacing) * 2);
707-
}
708667
.px-3 {
709668
padding-inline: calc(var(--spacing) * 3);
710669
}
@@ -714,12 +673,6 @@
714673
.py-0\.5 {
715674
padding-block: calc(var(--spacing) * 0.5);
716675
}
717-
.py-1 {
718-
padding-block: calc(var(--spacing) * 1);
719-
}
720-
.py-1\.5 {
721-
padding-block: calc(var(--spacing) * 1.5);
722-
}
723676
.py-2 {
724677
padding-block: calc(var(--spacing) * 2);
725678
}
@@ -777,10 +730,6 @@
777730
--tw-font-weight: var(--font-weight-medium);
778731
font-weight: var(--font-weight-medium);
779732
}
780-
.font-semibold {
781-
--tw-font-weight: var(--font-weight-semibold);
782-
font-weight: var(--font-weight-semibold);
783-
}
784733
.text-wrap {
785734
text-wrap: wrap;
786735
}
@@ -793,18 +742,6 @@
793742
.text-accent {
794743
color: var(--color-accent);
795744
}
796-
.text-blue-400 {
797-
color: var(--color-blue-400);
798-
}
799-
.text-gray-200 {
800-
color: var(--color-gray-200);
801-
}
802-
.text-gray-400 {
803-
color: var(--color-gray-400);
804-
}
805-
.text-gray-500 {
806-
color: var(--color-gray-500);
807-
}
808745
.text-green-100 {
809746
color: var(--color-green-100);
810747
}
@@ -987,20 +924,6 @@
987924
}
988925
}
989926
}
990-
.hover\:bg-gray-700 {
991-
&:hover {
992-
@media (hover: hover) {
993-
background-color: var(--color-gray-700);
994-
}
995-
}
996-
}
997-
.hover\:bg-gray-800 {
998-
&:hover {
999-
@media (hover: hover) {
1000-
background-color: var(--color-gray-800);
1001-
}
1002-
}
1003-
}
1004927
.hover\:bg-green-700 {
1005928
&:hover {
1006929
@media (hover: hover) {
@@ -1015,17 +938,6 @@
1015938
}
1016939
}
1017940
}
1018-
.focus\:bg-gray-600 {
1019-
&:focus {
1020-
background-color: var(--color-gray-600);
1021-
}
1022-
}
1023-
.focus\:ring-1 {
1024-
&:focus {
1025-
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
1026-
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
1027-
}
1028-
}
1029941
.focus\:ring-2 {
1030942
&:focus {
1031943
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);

0 commit comments

Comments
 (0)