From cac954805800af2291263ff93874426eefe9056a Mon Sep 17 00:00:00 2001 From: JurajKubrican Date: Tue, 4 Mar 2025 22:01:23 +0100 Subject: [PATCH] cache buster --- .github/workflows/docker-build-self.yml | 82 ++++++++++++------------- build_number | 1 + dockerfile | 1 + js/boxes.js | 16 +---- js/boxes.ts | 18 +----- src/boxes/box-db.go | 3 +- src/boxes/boxes.go | 33 +++++++--- src/draw/draw.go | 6 +- src/main.go | 8 ++- src/util/build-number.go | 20 ++++++ views/boxes.html | 12 ++-- views/draw.html | 6 +- views/drawIndex.html | 4 +- views/index.html | 4 +- 14 files changed, 115 insertions(+), 99 deletions(-) create mode 100644 build_number create mode 100644 src/util/build-number.go diff --git a/.github/workflows/docker-build-self.yml b/.github/workflows/docker-build-self.yml index 83377ae..92e1923 100644 --- a/.github/workflows/docker-build-self.yml +++ b/.github/workflows/docker-build-self.yml @@ -11,48 +11,48 @@ jobs: runs-on: self-hosted steps: - - name: Checkout code - uses: actions/checkout@v2 + - name: Checkout code + uses: actions/checkout@v2 - - name: Build Docker image - run: | - IMAGE_NAME="go-web-server" - RUN_NUMBER="${{ github.run_number }}" - docker build -t "$IMAGE_NAME:latest" -t "$IMAGE_NAME:${{ github.run_number }}" . + - name: Write build number + run: echo "${{ github.run_number }}" >> build_number - - name: Ensure no existing temp container - run: | - if [ "$(docker ps -aq -f name=temp-go-web-server)" ]; then - docker stop temp-go-web-server || true - docker rm temp-go-web-server || true - fi - + - name: Build Docker image + run: | + IMAGE_NAME="go-web-server" + docker build -t "$IMAGE_NAME:latest" -t "$IMAGE_NAME:${{ github.run_number }}" . - - name: Run temporary container for health check - run: | - docker run -d --name temp-go-web-server -p 54322:54321 go-web-server:latest - sleep 10 # Wait for the container to start - if curl -f http://localhost:54322/health; then - echo "Health check passed" - docker stop temp-go-web-server - docker rm temp-go-web-server - else - echo "Health check failed" - docker logs temp-go-web-server - docker stop temp-go-web-server - docker rm temp-go-web-server - exit 1 - fi + - name: Ensure no existing temp container + run: | + if [ "$(docker ps -aq -f name=temp-go-web-server)" ]; then + docker stop temp-go-web-server || true + docker rm temp-go-web-server || true + fi - - name: Stop and remove current container - run: | - if [ "$(docker ps -q -f name=go-web-server)" ]; then - docker stop go-web-server || true - docker rm go-web-server || true - fi - - - name: Run new container - run: | - IMAGE_NAME="go-web-server" - docker run -d --name go-web-server -p 54321:54321 --restart=always -v "/volume2/docker/knet/data:/app/data" "$IMAGE_NAME:latest" - \ No newline at end of file + - name: Run temporary container for health check + run: | + docker run -d --name temp-go-web-server -p 54322:54321 go-web-server:latest + sleep 10 # Wait for the container to start + if curl -f http://localhost:54322/health; then + echo "Health check passed" + docker stop temp-go-web-server + docker rm temp-go-web-server + else + echo "Health check failed" + docker logs temp-go-web-server + docker stop temp-go-web-server + docker rm temp-go-web-server + exit 1 + fi + + - name: Stop and remove current container + run: | + if [ "$(docker ps -q -f name=go-web-server)" ]; then + docker stop go-web-server || true + docker rm go-web-server || true + fi + + - name: Run new container + run: | + IMAGE_NAME="go-web-server" + docker run -d --name go-web-server -p 54321:54321 --restart=always -v "/volume2/docker/knet/data:/app/data" "$IMAGE_NAME:latest" diff --git a/build_number b/build_number new file mode 100644 index 0000000..56a6051 --- /dev/null +++ b/build_number @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/dockerfile b/dockerfile index db5b51e..f2c4026 100644 --- a/dockerfile +++ b/dockerfile @@ -15,6 +15,7 @@ COPY ./src ./src RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /server ./src COPY ./views ./views +COPY ./build_number ./build_number FROM scratch diff --git a/js/boxes.js b/js/boxes.js index f0f5ef8..fa6632d 100644 --- a/js/boxes.js +++ b/js/boxes.js @@ -33,20 +33,8 @@ socket.send("b:" + id + ":" + value); }); }); - var autoPlayTimer = undefined; - const handleAutoPlay = (el) => { - if (el.checked) { - autoPlayTimer = setInterval(() => { - socket.send("random"); - }, 50); - } - else { - clearInterval(autoPlayTimer); - } - }; - const autoPlayEl = document.querySelector("#auto-boxes"); - handleAutoPlay(autoPlayEl); - autoPlayEl?.addEventListener("change", (e) => handleAutoPlay(e.target)); + const autoPlayEl = document.querySelector("#randomize"); + autoPlayEl?.addEventListener("click", (e) => socket.send("r:1000")); var golTimer = undefined; const handleGol = (el) => { if (el.checked) { diff --git a/js/boxes.ts b/js/boxes.ts index e720428..cde8ba8 100644 --- a/js/boxes.ts +++ b/js/boxes.ts @@ -46,22 +46,8 @@ type Box = { }); }); - var autoPlayTimer: number | undefined = undefined; - const handleAutoPlay = (el: CheckboxEl) => { - if (el.checked) { - autoPlayTimer = setInterval(() => { - socket.send("random"); - }, 50); - } else { - clearInterval(autoPlayTimer); - } - }; - - const autoPlayEl = document.querySelector("#auto-boxes") as CheckboxEl; - handleAutoPlay(autoPlayEl); - autoPlayEl?.addEventListener("change", (e) => - handleAutoPlay(e.target as CheckboxEl) - ); + const autoPlayEl = document.querySelector("#randomize") as CheckboxEl; + autoPlayEl?.addEventListener("click", (e) => socket.send("r:1000")); var golTimer: number | undefined = undefined; const handleGol = (el: CheckboxEl) => { diff --git a/src/boxes/box-db.go b/src/boxes/box-db.go index aec5e11..fb32471 100644 --- a/src/boxes/box-db.go +++ b/src/boxes/box-db.go @@ -57,13 +57,12 @@ func (box Box) persist() { log.Fatal(err) } - res, err := stmt.Exec(box.Id, box.Value) + _, err = stmt.Exec(box.Id, box.Value) if err != nil { log.Fatal(err) } stmt.Close() - log.Info(res.LastInsertId()) } func getBox(id int) (Box, error) { diff --git a/src/boxes/boxes.go b/src/boxes/boxes.go index fef9256..8a03c54 100644 --- a/src/boxes/boxes.go +++ b/src/boxes/boxes.go @@ -58,7 +58,6 @@ func handleWsError(err error, conn *websocket.Conn) { func broadcastMessage(message string) { wsMutex.Lock() defer wsMutex.Unlock() - for conn := range wsConnections { err := websocket.Message.Send(conn, message) handleWsError(err, conn) @@ -66,6 +65,22 @@ func broadcastMessage(message string) { } } +func randomizeBoxes(count int) []Box { + boxes := make([]Box, count) + for i := 0; i < count; i++ { + index := random.Int() % 1000 + box, err := getBox(index) + if err != nil { + log.Fatal(err) + } + box.Value = !box.Value + box.persist() + boxes[i] = box + } + return boxes + +} + func handleMessage(msg string, ws *websocket.Conn) error { if msg == "gol" { matrix := make(map[string]Box) @@ -77,7 +92,6 @@ func handleMessage(msg string, ws *websocket.Conn) error { index++ } } - log.Error(matrix) nextGen := make([]Box, 0) for id, item := range matrix { nextItem := shouldBeAlive(matrix, id) @@ -94,16 +108,17 @@ func handleMessage(msg string, ws *websocket.Conn) error { } broadcastMessage(nextMessage) - } else if msg == "random" { - index := random.Int() % 1000 - box, err := getBox(index) + } else if strings.Contains(msg, "r:") { + count, err := strconv.Atoi(strings.Split(msg, ":")[1]) if err != nil { - log.Fatal(err) + log.Errorf("Failed to parse randomize count: %v", err) + } + boxes := randomizeBoxes(count) + message := "" + for _, box := range boxes { + message += box.serialize() } - box.Value = !box.Value - box.persist() - message := box.serialize() broadcastMessage(message) } else if strings.Contains(msg, "b:") { diff --git a/src/draw/draw.go b/src/draw/draw.go index dac3514..af0533b 100644 --- a/src/draw/draw.go +++ b/src/draw/draw.go @@ -8,6 +8,8 @@ import ( "github.com/labstack/echo/v4" "github.com/labstack/gommon/log" "golang.org/x/net/websocket" + + "knet.sk/src/util" ) var ( @@ -86,9 +88,9 @@ func InitWs(c echo.Context) error { } type Data struct { - Template string + BuildNumber string } func Page(c echo.Context) error { - return c.Render(200, "index2", Data{Template: "draw"}) + return c.Render(200, "index2", Data{BuildNumber: util.GetBuildNumber()}) } diff --git a/src/main.go b/src/main.go index ab14947..94700a1 100644 --- a/src/main.go +++ b/src/main.go @@ -9,6 +9,7 @@ import ( "github.com/labstack/gommon/log" "knet.sk/src/boxes" "knet.sk/src/draw" + "knet.sk/src/util" ) type Templates struct { @@ -26,12 +27,14 @@ func NewTemplates() *Templates { } type Page struct { - Boxes []boxes.Box + Boxes []boxes.Box + BuildNumber string } func newPage(boxes []boxes.Box) Page { return Page{ - Boxes: boxes, + Boxes: boxes, + BuildNumber: util.GetBuildNumber(), } } @@ -41,6 +44,7 @@ var ( func main() { e.Renderer = NewTemplates() + // read the ./build_number file e.Logger.SetLevel(log.DEBUG) e.Use(middleware.Logger()) diff --git a/src/util/build-number.go b/src/util/build-number.go new file mode 100644 index 0000000..e31a4cb --- /dev/null +++ b/src/util/build-number.go @@ -0,0 +1,20 @@ +package util + +import ( + "fmt" + "os" +) + +var buildNumber string + +func GetBuildNumber() string { + if buildNumber == "" { + b, err := os.ReadFile("build_number") // just pass the file name + if err != nil { + fmt.Print(err) + } + buildNumber = string(b) + } + + return buildNumber +} diff --git a/views/boxes.html b/views/boxes.html index 1c57efc..f8f215a 100644 --- a/views/boxes.html +++ b/views/boxes.html @@ -1,16 +1,16 @@ {{block "boxes" .}} - +
- {{range .}}
- - + + {{end}} diff --git a/views/draw.html b/views/draw.html index 44b981e..52310e4 100644 --- a/views/draw.html +++ b/views/draw.html @@ -23,9 +23,9 @@ bottom: 0; " >
- - - + + + {{end}} diff --git a/views/drawIndex.html b/views/drawIndex.html index 4698ff3..567cd55 100644 --- a/views/drawIndex.html +++ b/views/drawIndex.html @@ -5,12 +5,12 @@ Home - +
- {{template "draw" }} + {{template "draw" . }}
diff --git a/views/index.html b/views/index.html index 3e6dd40..0200a30 100644 --- a/views/index.html +++ b/views/index.html @@ -5,7 +5,7 @@ Home - +
@@ -20,7 +20,7 @@
- {{template "boxes" .Boxes}} + {{template "boxes" .}}