Skip to content

Commit 578c04d

Browse files
committed
fix
1 parent c605dd7 commit 578c04d

2 files changed

Lines changed: 82 additions & 88 deletions

File tree

justfile

Lines changed: 81 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -270,107 +270,100 @@ bootstrap module_name='' type='cli' *args='':
270270
mv "cmd/example/main.go" "cmd/${PROJECT_NAME}/main.go"
271271
else
272272
# Create minimal CLI main file
273-
cat > "cmd/${PROJECT_NAME}/main.go" << EOF
274-
package main
275-
276-
import (
277-
"fmt"
278-
"os"
279-
)
280-
281-
func main() {
282-
fmt.Println("Hello from ${PROJECT_NAME}")
283-
os.Exit(0)
284-
}
285-
EOF
273+
echo 'package main' > "cmd/${PROJECT_NAME}/main.go"
274+
echo '' >> "cmd/${PROJECT_NAME}/main.go"
275+
echo 'import (' >> "cmd/${PROJECT_NAME}/main.go"
276+
echo ' "fmt"' >> "cmd/${PROJECT_NAME}/main.go"
277+
echo ' "os"' >> "cmd/${PROJECT_NAME}/main.go"
278+
echo ')' >> "cmd/${PROJECT_NAME}/main.go"
279+
echo '' >> "cmd/${PROJECT_NAME}/main.go"
280+
echo 'func main() {' >> "cmd/${PROJECT_NAME}/main.go"
281+
echo ' fmt'"'.Println(\"Hello from ${PROJECT_NAME}\")' >> "cmd/${PROJECT_NAME}/main.go"
282+
echo ' os'"'.Exit(0)' >> "cmd/${PROJECT_NAME}/main.go"
283+
echo '}' >> "cmd/${PROJECT_NAME}/main.go"
286284
fi
287285
rm -rf "cmd/example"
288286
;;
289287
library)
290288
echo -e "${BLUE}Setting up library project structure...${NC}"
291289
mkdir -p "pkg/${PROJECT_NAME}"
292290
# Create minimal library file
293-
cat > "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go" << EOF
294-
package ${PROJECT_NAME}
295-
296-
// Version returns the library version
297-
func Version() string {
298-
return "0.1.0"
299-
}
300-
EOF
291+
echo "package ${PROJECT_NAME}" > "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go"
292+
echo "" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go"
293+
echo "// Version returns the library version" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go"
294+
echo "func Version() string {" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go"
295+
echo ' return "0.1.0"' >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go"
296+
echo "}" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}.go"
301297
# Create minimal test file
302-
cat > "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go" << EOF
303-
package ${PROJECT_NAME}
304-
305-
import "testing"
306-
307-
func TestVersion(t *testing.T) {
308-
if v := Version(); v == "" {
309-
t.Error("Version() returned empty string")
310-
}
311-
}
312-
EOF
298+
echo "package ${PROJECT_NAME}" > "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
299+
echo "" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
300+
echo 'import "testing"' >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
301+
echo "" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
302+
echo "func TestVersion(t *testing.T) {" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
303+
echo ' if v := Version(); v == "" {' >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
304+
echo ' t'"'.Error(\"Version() returned empty string\")' >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
305+
echo " }" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
306+
echo "}" >> "pkg/${PROJECT_NAME}/${PROJECT_NAME}_test.go"
313307
rm -rf "cmd/example" "pkg/example"
314308
;;
315309
api)
316310
echo -e "${BLUE}Setting up API project structure...${NC}"
317311
mkdir -p "cmd/${PROJECT_NAME}"
318-
cat > "cmd/${PROJECT_NAME}/main.go" << EOF
319-
package main
320-
321-
import (
322-
"context"
323-
"fmt"
324-
"log"
325-
"net/http"
326-
"os"
327-
"os/signal"
328-
"syscall"
329-
"time"
330-
)
331-
332-
func main() {
333-
ctx, cancel := context.WithCancel(context.Background())
334-
defer cancel()
335-
336-
sigChan := make(chan os.Signal, 1)
337-
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
338-
339-
mux := http.NewServeMux()
340-
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
341-
w.Header().Set("Content-Type", "application/json")
342-
w.WriteHeader(http.StatusOK)
343-
fmt.Fprint(w, \`{"status":"ok"}\`)
344-
})
345-
346-
srv := &http.Server{
347-
Addr: ":8080",
348-
Handler: mux,
349-
ReadTimeout: 10 * time.Second,
350-
WriteTimeout: 10 * time.Second,
351-
IdleTimeout: 60 * time.Second,
352-
}
353-
354-
go func() {
355-
log.Printf("Starting server on %s", srv.Addr)
356-
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
357-
log.Fatalf("Failed to start server: %v", err)
358-
}
359-
}()
360-
361-
<-sigChan
362-
log.Println("Shutting down server...")
363-
364-
shutdownCtx, shutdownCancel := context.WithTimeout(ctx, 30*time.Second)
365-
defer shutdownCancel()
366-
367-
if err := srv.Shutdown(shutdownCtx); err != nil {
368-
log.Printf("Server shutdown error: %v", err)
369-
}
370-
371-
log.Println("Server stopped")
372-
}
373-
EOF
312+
# Create API server file using printf to avoid just parser issues
313+
printf '%s\n' 'package main' > "cmd/${PROJECT_NAME}/main.go"
314+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
315+
printf '%s\n' 'import (' >> "cmd/${PROJECT_NAME}/main.go"
316+
printf '%s\n' ' "context"' >> "cmd/${PROJECT_NAME}/main.go"
317+
printf '%s\n' ' "fmt"' >> "cmd/${PROJECT_NAME}/main.go"
318+
printf '%s\n' ' "log"' >> "cmd/${PROJECT_NAME}/main.go"
319+
printf '%s\n' ' "net/http"' >> "cmd/${PROJECT_NAME}/main.go"
320+
printf '%s\n' ' "os"' >> "cmd/${PROJECT_NAME}/main.go"
321+
printf '%s\n' ' "os/signal"' >> "cmd/${PROJECT_NAME}/main.go"
322+
printf '%s\n' ' "syscall"' >> "cmd/${PROJECT_NAME}/main.go"
323+
printf '%s\n' ' "time"' >> "cmd/${PROJECT_NAME}/main.go"
324+
printf '%s\n' ')' >> "cmd/${PROJECT_NAME}/main.go"
325+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
326+
printf '%s\n' 'func main() {' >> "cmd/${PROJECT_NAME}/main.go"
327+
printf '%s\n' ' ctx, cancel := context'"'.WithCancel(context.Background())' >> "cmd/${PROJECT_NAME}/main.go"
328+
printf '%s\n' ' defer cancel()' >> "cmd/${PROJECT_NAME}/main.go"
329+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
330+
printf '%s\n' ' sigChan := make(chan os'"'.Signal, 1)' >> "cmd/${PROJECT_NAME}/main.go"
331+
printf '%s\n' ' signal'"'.Notify(sigChan, os.Interrupt, syscall.SIGTERM)' >> "cmd/${PROJECT_NAME}/main.go"
332+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
333+
printf '%s\n' ' mux := http'"'.NewServeMux()' >> "cmd/${PROJECT_NAME}/main.go"
334+
printf '%s\n' ' mux'"'.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {' >> "cmd/${PROJECT_NAME}/main.go"
335+
printf '%s\n' ' w'"'.Header().Set("Content-Type", "application/json")' >> "cmd/${PROJECT_NAME}/main.go"
336+
printf '%s\n' ' w'"'.WriteHeader(http.StatusOK)' >> "cmd/${PROJECT_NAME}/main.go"
337+
printf '%s\n' ' fmt'"'.Fprint(w, `{"status":"ok"}`)' >> "cmd/${PROJECT_NAME}/main.go"
338+
printf '%s\n' ' })' >> "cmd/${PROJECT_NAME}/main.go"
339+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
340+
printf '%s\n' ' srv := &http'"'.Server{' >> "cmd/${PROJECT_NAME}/main.go"
341+
printf '%s\n' ' Addr: ":8080",' >> "cmd/${PROJECT_NAME}/main.go"
342+
printf '%s\n' ' Handler: mux,' >> "cmd/${PROJECT_NAME}/main.go"
343+
printf '%s\n' ' ReadTimeout: 10 * time'"'.Second,' >> "cmd/${PROJECT_NAME}/main.go"
344+
printf '%s\n' ' WriteTimeout: 10 * time'"'.Second,' >> "cmd/${PROJECT_NAME}/main.go"
345+
printf '%s\n' ' IdleTimeout: 60 * time'"'.Second,' >> "cmd/${PROJECT_NAME}/main.go"
346+
printf '%s\n' ' }' >> "cmd/${PROJECT_NAME}/main.go"
347+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
348+
printf '%s\n' ' go func() {' >> "cmd/${PROJECT_NAME}/main.go"
349+
printf '%s\n' ' log'"'.Printf("Starting server on %s", srv.Addr)' >> "cmd/${PROJECT_NAME}/main.go"
350+
printf '%s\n' ' if err := srv'"'.ListenAndServe(); err != nil && err != http.ErrServerClosed {' >> "cmd/${PROJECT_NAME}/main.go"
351+
printf '%s\n' ' log'"'.Fatalf("Failed to start server: %v", err)' >> "cmd/${PROJECT_NAME}/main.go"
352+
printf '%s\n' ' }' >> "cmd/${PROJECT_NAME}/main.go"
353+
printf '%s\n' ' }()' >> "cmd/${PROJECT_NAME}/main.go"
354+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
355+
printf '%s\n' ' <-sigChan' >> "cmd/${PROJECT_NAME}/main.go"
356+
printf '%s\n' ' log'"'.Println("Shutting down server...")' >> "cmd/${PROJECT_NAME}/main.go"
357+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
358+
printf '%s\n' ' shutdownCtx, shutdownCancel := context'"'.WithTimeout(ctx, 30*time.Second)' >> "cmd/${PROJECT_NAME}/main.go"
359+
printf '%s\n' ' defer shutdownCancel()' >> "cmd/${PROJECT_NAME}/main.go"
360+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
361+
printf '%s\n' ' if err := srv'"'.Shutdown(shutdownCtx); err != nil {' >> "cmd/${PROJECT_NAME}/main.go"
362+
printf '%s\n' ' log'"'.Printf("Server shutdown error: %v", err)' >> "cmd/${PROJECT_NAME}/main.go"
363+
printf '%s\n' ' }' >> "cmd/${PROJECT_NAME}/main.go"
364+
printf '%s\n' '' >> "cmd/${PROJECT_NAME}/main.go"
365+
printf '%s\n' ' log'"'.Println("Server stopped")' >> "cmd/${PROJECT_NAME}/main.go"
366+
printf '%s\n' '}' >> "cmd/${PROJECT_NAME}/main.go"
374367
rm -rf "cmd/example"
375368
;;
376369
sharedlib)

sharedlib/sharedlib.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package main
22

3+
// #include <stdlib.h>
34
import "C"
45
import (
56
"crypto/sha256"

0 commit comments

Comments
 (0)