diff --git a/.goreleaser.yaml b/.goreleaser.yaml
new file mode 100644
index 0000000..b403d3d
--- /dev/null
+++ b/.goreleaser.yaml
@@ -0,0 +1,65 @@
+# vim: set ts=2 sw=2 tw=0 fo=cnqoj
+
+version: 2
+
+before:
+ hooks:
+ - go mod tidy
+
+gitea_urls:
+ api: https://codeberg.org/api/v1
+ download: https://codeberg.org
+
+builds:
+ - env:
+ - CGO_ENABLED=0
+ goos:
+ - linux
+ - freebsd
+
+archives:
+ - formats: [tar.gz]
+ # this name template makes the OS and Arch compatible with the results of `uname`.
+ name_template: >-
+ {{ .ProjectName }}_
+ {{- title .Os }}_
+ {{- if eq .Arch "amd64" }}x86_64
+ {{- else if eq .Arch "386" }}i386
+ {{- else }}{{ .Arch }}{{ end }}
+ {{- if .Arm }}v{{ .Arm }}{{ end }}_{{ .Tag }}
+ # use zip for windows archives
+ format_overrides:
+ - goos: windows
+ formats: [zip]
+ - goos: linux
+ formats: [tar.gz,binary]
+ files:
+ - src: "*.md"
+ strip_parent: true
+ - src: Makefile.dist
+ dst: Makefile
+ wrap_in_directory: true
+
+changelog:
+ sort: asc
+ filters:
+ exclude:
+ - "^docs:"
+ - "^test:"
+ groups:
+ - title: Improved
+ regexp: '^.*?(feat|add|new)(\([[:word:]]+\))??!?:.+$'
+ order: 0
+ - title: Fixed
+ regexp: '^.*?(bug|fix)(\([[:word:]]+\))??!?:.+$'
+ order: 1
+ - title: Changed
+ order: 999
+
+release:
+ header: "# Release Notes"
+ footer: >-
+
+ ---
+
+ Full Changelog: [{{ .PreviousTag }}...{{ .Tag }}](https://codeberg.org/scip/golsky/compare/{{ .PreviousTag }}...{{ .Tag }})
diff --git a/Makefile b/Makefile
index 02f6ec1..3ef7807 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,101 @@
-.PHONY all:
-all: build
+# Copyright © 2024 Thomas von Dein
-.PHONY: build
-build:
- make -C src
- mv src/golsky .
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
+#
+# no need to modify anything below
+tool = golsky
+VERSION = $(shell grep VERSION main.go | head -1 | cut -d '"' -f2)
+archs = darwin freebsd linux windows
+PREFIX = /usr/local
+UID = root
+GID = 0
+HAVE_POD := $(shell pod2text -h 2>/dev/null)
+#TAGS = -tags=ebitenginedebug
+
+all: buildlocal
+
+
+buildlocal:
+ go build $(TAGS) -o $(tool)
+
+install: buildlocal
+ install -d -o $(UID) -g $(GID) $(PREFIX)/bin
+ install -d -o $(UID) -g $(GID) $(PREFIX)/man/man1
+ install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
+ install -o $(UID) -g $(GID) -m 444 $(tool).1 $(PREFIX)/man/man1/
-.PHONY: clean
clean:
- make -C src clean
- rm -f dump* rect*
+ rm -rf $(tool) coverage.out testdata t/out
+
+test: clean
+ mkdir -p t/out
+ go test ./... $(ARGS)
+
+testlint: test lint
+
+lint:
+ golangci-lint run
+
+lint-full:
+ golangci-lint run --enable-all --exclude-use-default --disable exhaustivestruct,exhaustruct,depguard,interfacer,deadcode,golint,structcheck,scopelint,varcheck,ifshort,maligned,nosnakecase,godot,funlen,gofumpt,cyclop,noctx,gochecknoglobals,paralleltest
+
+testfuzzy: clean
+ go test -fuzz ./... $(ARGS)
+
+singletest:
+ @echo "Call like this: make singletest TEST=TestPrepareColumns ARGS=-v"
+ go test -run $(TEST) $(ARGS)
+
+cover-report:
+ go test ./... -cover -coverprofile=coverage.out
+ go tool cover -html=coverage.out
+
+goupdate:
+ go get -t -u=patch ./...
+
+buildall:
+ ./mkrel.sh $(tool) $(VERSION)
+
+release: buildall
+ gh release create $(VERSION) --generate-notes releases/*
+
+show-versions: buildlocal
+ @echo "### golsky version:"
+ @./golsky -V
+
+ @echo
+ @echo "### go module versions:"
+ @go list -m all
+
+ @echo
+ @echo "### go version used for building:"
+ @grep -m 1 go go.mod
+
+# lint:
+# golangci-lint run -p bugs -p unused
+
+buildwasm:
+ env GOOS=js GOARCH=wasm go build -o $(tool).wasm $(LDFLAGS) .
+
+zipwasm:
+ zip -r openquell-$(SHORTVERSION).zip index.html $(tool).wasm wasm_exec.js
+
+wasm: buildwasm zipwasm
+ @ls -l $(tool)-$(SHORTVERSION).zip
+
.PHONY: profile
profile: build
diff --git a/Makefile.dist b/Makefile.dist
new file mode 100644
index 0000000..55d2f38
--- /dev/null
+++ b/Makefile.dist
@@ -0,0 +1,18 @@
+# -*-make-*-
+
+.PHONY: install all
+
+tool = rpn
+PREFIX = /usr/local
+UID = root
+GID = 0
+
+all:
+ @echo "Type 'sudo make install' to install the tool."
+ @echo "To change prefix, type 'sudo make install PREFIX=/opt'"
+
+install:
+ install -d -o $(UID) -g $(GID) $(PREFIX)/bin
+ install -d -o $(UID) -g $(GID) $(PREFIX)/share/doc
+ install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
+ install -o $(UID) -g $(GID) -m 444 *.md $(PREFIX)/share/doc/
diff --git a/README.md b/README.md
index 6d2274c..30b51b2 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
# golsky - Conway's game of life written in GO
-
+
-[](https://github.com/tlinden/golsky/blob/master/LICENSE)
-[](https://goreportcard.com/report/github.com/tlinden/golsky)
+[](https://codeberg.org/scip/golsky/blob/master/LICENSE)
+[](https://goreportcard.com/report/codeberg.org/scip/golsky)
I wanted to play around a little bit with [**Conways Game of Life**](https://conwaylife.com/)
in golang and here's the result. It's a simple game using
@@ -14,15 +14,15 @@ John Conway himself: https://youtu.be/R9Plq-D1gEk?si=yYxs77e9yXxeSNbL
Based on: https://youtu.be/FWSR_7kZuYg?si=ix1dmo76D8AmF25F
# Screenshots
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-mainmenu.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-options.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-bindings.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-evolution-trace.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-zoom.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-debug.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-capture.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-captured.png)
-[](https://github.com/TLINDEN/golsky/blob/main/.github/assets/screenshots/golsky-dark-theme.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-mainmenu.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-options.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-bindings.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-evolution-trace.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-zoom.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-debug.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-capture.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-captured.png)
+[](https://codeberg.org/scip/golsky/raw/branch/main/.github/assets/screenshots/golsky-dark-theme.png)
[Youtube video game preview](https://www.youtube.com/watch?v=xEto6Oew16I)
@@ -102,7 +102,7 @@ While it runs, there are a couple of commands you can use:
# Report bugs
-[Please open an issue](https://github.com/TLINDEN/golsky/issues). Thanks!
+[Please open an issue](https://codeberg.org/scip/golsky/issues). Thanks!
# License
diff --git a/TODO.md b/TODO.md
index aca5140..f9f3e03 100644
--- a/TODO.md
+++ b/TODO.md
@@ -11,8 +11,8 @@
- try arche ecs variant with either a component of the cells neighbors or using relations.
- https://mattnakama.com/blog/go-branchless-coding/
- add performance measurements, see:
- DrawTriangles: https://github.com/TLINDEN/testgol
- WritePixels: https://github.com/TLINDEN/testgol/tree/wrpixels
+ DrawTriangles: https://codeberg.org/scip/testgol
+ WritePixels: https://codeberg.org/scip/testgol/tree/wrpixels
https://www.tasnimzotder.com/blog/optimizing-game-of-life-algorithm
- pre-draw the grid separately to a cache grid image, then during
rendering, first draw the dead background, then the life cells, and
diff --git a/src/assets/fonts/NotoSans-Regular.ttf b/cmd/assets/fonts/NotoSans-Regular.ttf
similarity index 100%
rename from src/assets/fonts/NotoSans-Regular.ttf
rename to cmd/assets/fonts/NotoSans-Regular.ttf
diff --git a/src/assets/shaders/row.kg b/cmd/assets/shaders/row.kg
similarity index 100%
rename from src/assets/shaders/row.kg
rename to cmd/assets/shaders/row.kg
diff --git a/src/assets/sprites/button-9slice1.png b/cmd/assets/sprites/button-9slice1.png
similarity index 100%
rename from src/assets/sprites/button-9slice1.png
rename to cmd/assets/sprites/button-9slice1.png
diff --git a/src/assets/sprites/button-9slice2.png b/cmd/assets/sprites/button-9slice2.png
similarity index 100%
rename from src/assets/sprites/button-9slice2.png
rename to cmd/assets/sprites/button-9slice2.png
diff --git a/src/assets/sprites/button-9slice3.png b/cmd/assets/sprites/button-9slice3.png
similarity index 100%
rename from src/assets/sprites/button-9slice3.png
rename to cmd/assets/sprites/button-9slice3.png
diff --git a/src/assets/sprites/checkbox-9slice1.png b/cmd/assets/sprites/checkbox-9slice1.png
similarity index 100%
rename from src/assets/sprites/checkbox-9slice1.png
rename to cmd/assets/sprites/checkbox-9slice1.png
diff --git a/src/assets/sprites/checkbox-9slice2.png b/cmd/assets/sprites/checkbox-9slice2.png
similarity index 100%
rename from src/assets/sprites/checkbox-9slice2.png
rename to cmd/assets/sprites/checkbox-9slice2.png
diff --git a/src/assets/src/button-9slice.ase b/cmd/assets/src/button-9slice.ase
similarity index 100%
rename from src/assets/src/button-9slice.ase
rename to cmd/assets/src/button-9slice.ase
diff --git a/src/assets/src/checkbox-9slice.ase b/cmd/assets/src/checkbox-9slice.ase
similarity index 100%
rename from src/assets/src/checkbox-9slice.ase
rename to cmd/assets/src/checkbox-9slice.ase
diff --git a/src/camera.go b/cmd/camera.go
similarity index 99%
rename from src/camera.go
rename to cmd/camera.go
index f5a2885..e3d043c 100644
--- a/src/camera.go
+++ b/cmd/camera.go
@@ -1,6 +1,6 @@
// this comes from the camera example but I enhanced it a little bit
-package main
+package cmd
import (
"fmt"
diff --git a/src/config.go b/cmd/config.go
similarity index 99%
rename from src/config.go
rename to cmd/config.go
index 960b11f..e0b2c5e 100644
--- a/src/config.go
+++ b/cmd/config.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"errors"
@@ -10,7 +10,7 @@ import (
"strings"
"github.com/spf13/pflag"
- "github.com/tlinden/golsky/rle"
+ "codeberg.org/scip/golsky/rle"
)
// all the settings comming from commandline, but maybe tweaked later from the UI
diff --git a/src/game.go b/cmd/game.go
similarity index 99%
rename from src/game.go
rename to cmd/game.go
index a21240f..40a090d 100644
--- a/src/game.go
+++ b/cmd/game.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"github.com/hajimehoshi/ebiten/v2"
diff --git a/src/generics.go b/cmd/generics.go
similarity index 95%
rename from src/generics.go
rename to cmd/generics.go
index c71e1da..1547c3f 100644
--- a/src/generics.go
+++ b/cmd/generics.go
@@ -1,4 +1,4 @@
-package main
+package cmd
// find an item in a list, generic variant
func Contains[E comparable](s []E, v E) bool {
diff --git a/src/grid.go b/cmd/grid.go
similarity index 99%
rename from src/grid.go
rename to cmd/grid.go
index b1e6098..e782c5b 100644
--- a/src/grid.go
+++ b/cmd/grid.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"bufio"
@@ -9,7 +9,7 @@ import (
"strings"
"time"
- "github.com/tlinden/golsky/rle"
+ "codeberg.org/scip/golsky/rle"
)
// equals grid height, is being used to access grid elements and must be global
diff --git a/src/keybindings.go b/cmd/keybindings.go
similarity index 99%
rename from src/keybindings.go
rename to cmd/keybindings.go
index db68f60..23beda7 100644
--- a/src/keybindings.go
+++ b/cmd/keybindings.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"image/color"
diff --git a/src/loader-fonts.go b/cmd/loader-fonts.go
similarity index 99%
rename from src/loader-fonts.go
rename to cmd/loader-fonts.go
index e144762..79329ed 100644
--- a/src/loader-fonts.go
+++ b/cmd/loader-fonts.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"log"
diff --git a/src/loader-shaders.go b/cmd/loader-shaders.go
similarity index 98%
rename from src/loader-shaders.go
rename to cmd/loader-shaders.go
index e3d460f..147388e 100644
--- a/src/loader-shaders.go
+++ b/cmd/loader-shaders.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"bytes"
diff --git a/src/loader-sprites.go b/cmd/loader-sprites.go
similarity index 99%
rename from src/loader-sprites.go
rename to cmd/loader-sprites.go
index 4ef3e50..5611b3c 100644
--- a/src/loader-sprites.go
+++ b/cmd/loader-sprites.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"embed"
diff --git a/src/menu.go b/cmd/menu.go
similarity index 99%
rename from src/menu.go
rename to cmd/menu.go
index 909bdf8..f4715ea 100644
--- a/src/menu.go
+++ b/cmd/menu.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"image/color"
diff --git a/src/options.go b/cmd/options.go
similarity index 99%
rename from src/options.go
rename to cmd/options.go
index 5d44879..a935763 100644
--- a/src/options.go
+++ b/cmd/options.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"image/color"
diff --git a/src/play.go b/cmd/play.go
similarity index 99%
rename from src/play.go
rename to cmd/play.go
index d5d8d8e..6158924 100644
--- a/src/play.go
+++ b/cmd/play.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"fmt"
@@ -10,7 +10,7 @@ import (
"github.com/hajimehoshi/ebiten/v2"
"github.com/hajimehoshi/ebiten/v2/inpututil"
"github.com/hajimehoshi/ebiten/v2/vector"
- "github.com/tlinden/golsky/rle"
+ "codeberg.org/scip/golsky/rle"
"golang.org/x/image/math/f64"
)
diff --git a/src/rule.go b/cmd/rule.go
similarity index 98%
rename from src/rule.go
rename to cmd/rule.go
index 3f2ad05..d4b437c 100644
--- a/src/rule.go
+++ b/cmd/rule.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"log"
diff --git a/src/scene.go b/cmd/scene.go
similarity index 98%
rename from src/scene.go
rename to cmd/scene.go
index ac1818c..d4a86d1 100644
--- a/src/scene.go
+++ b/cmd/scene.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import "github.com/hajimehoshi/ebiten/v2"
diff --git a/src/system.go b/cmd/system.go
similarity index 93%
rename from src/system.go
rename to cmd/system.go
index d819ad7..c65b72b 100644
--- a/src/system.go
+++ b/cmd/system.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import "runtime"
diff --git a/src/theme.go b/cmd/theme.go
similarity index 99%
rename from src/theme.go
rename to cmd/theme.go
index 3c2e894..de3eaca 100644
--- a/src/theme.go
+++ b/cmd/theme.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"fmt"
diff --git a/src/widgets.go b/cmd/widgets.go
similarity index 99%
rename from src/widgets.go
rename to cmd/widgets.go
index e27a4c8..28edce0 100644
--- a/src/widgets.go
+++ b/cmd/widgets.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"image/color"
diff --git a/go.mod b/go.mod
index 3e54e3a..53d4289 100644
--- a/go.mod
+++ b/go.mod
@@ -1,4 +1,4 @@
-module github.com/tlinden/golsky
+module codeberg.org/scip/golsky
go 1.22
diff --git a/src/main.go b/main.go
similarity index 76%
rename from src/main.go
rename to main.go
index b09a890..a1bb56a 100644
--- a/src/main.go
+++ b/main.go
@@ -8,6 +8,7 @@ import (
_ "net/http/pprof"
+ "codeberg.org/scip/golsky/cmd"
"github.com/hajimehoshi/ebiten/v2"
)
@@ -18,22 +19,22 @@ func main() {
directstart = true
}
- config, err := ParseCommandline()
+ config, err := cmd.ParseCommandline()
if err != nil {
log.Fatal(err)
}
if config.ShowVersion {
- fmt.Printf("This is golsky version %s\n", VERSION)
+ fmt.Printf("This is golsky version %s\n", cmd.VERSION)
os.Exit(0)
}
- start := Play
+ start := cmd.Play
if !directstart {
- start = Menu
+ start = cmd.Menu
config.DelayedStart = true
}
- game := NewGame(config, SceneName(start))
+ game := cmd.NewGame(config, cmd.SceneName(start))
if config.ProfileFile != "" {
// enable cpu profiling. Do NOT use q to stop the game but
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644
index c3beded..0000000
--- a/src/Makefile
+++ /dev/null
@@ -1,97 +0,0 @@
-# Copyright © 2024 Thomas von Dein
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-
-#
-# no need to modify anything below
-tool = golsky
-VERSION = $(shell grep VERSION main.go | head -1 | cut -d '"' -f2)
-archs = darwin freebsd linux windows
-PREFIX = /usr/local
-UID = root
-GID = 0
-HAVE_POD := $(shell pod2text -h 2>/dev/null)
-#TAGS = -tags=ebitenginedebug
-
-all: buildlocal
-
-
-buildlocal:
- go build $(TAGS) -o $(tool)
-
-install: buildlocal
- install -d -o $(UID) -g $(GID) $(PREFIX)/bin
- install -d -o $(UID) -g $(GID) $(PREFIX)/man/man1
- install -o $(UID) -g $(GID) -m 555 $(tool) $(PREFIX)/sbin/
- install -o $(UID) -g $(GID) -m 444 $(tool).1 $(PREFIX)/man/man1/
-
-clean:
- rm -rf $(tool) coverage.out testdata t/out
-
-test: clean
- mkdir -p t/out
- go test ./... $(ARGS)
-
-testlint: test lint
-
-lint:
- golangci-lint run
-
-lint-full:
- golangci-lint run --enable-all --exclude-use-default --disable exhaustivestruct,exhaustruct,depguard,interfacer,deadcode,golint,structcheck,scopelint,varcheck,ifshort,maligned,nosnakecase,godot,funlen,gofumpt,cyclop,noctx,gochecknoglobals,paralleltest
-
-testfuzzy: clean
- go test -fuzz ./... $(ARGS)
-
-singletest:
- @echo "Call like this: make singletest TEST=TestPrepareColumns ARGS=-v"
- go test -run $(TEST) $(ARGS)
-
-cover-report:
- go test ./... -cover -coverprofile=coverage.out
- go tool cover -html=coverage.out
-
-goupdate:
- go get -t -u=patch ./...
-
-buildall:
- ./mkrel.sh $(tool) $(VERSION)
-
-release: buildall
- gh release create $(VERSION) --generate-notes releases/*
-
-show-versions: buildlocal
- @echo "### golsky version:"
- @./golsky -V
-
- @echo
- @echo "### go module versions:"
- @go list -m all
-
- @echo
- @echo "### go version used for building:"
- @grep -m 1 go go.mod
-
-# lint:
-# golangci-lint run -p bugs -p unused
-
-buildwasm:
- env GOOS=js GOARCH=wasm go build -o $(tool).wasm $(LDFLAGS) .
-
-zipwasm:
- zip -r openquell-$(SHORTVERSION).zip index.html $(tool).wasm wasm_exec.js
-
-wasm: buildwasm zipwasm
- @ls -l $(tool)-$(SHORTVERSION).zip