From 0c469aca1f6ccaff6aae8df7fea133cb71cfb0f4 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Sun, 2 Aug 2026 16:25:25 +1000 Subject: [PATCH 01/32] chore: markdown consistency changes --- AUTHORS.md | 2 +- CHANGES.md | 2 +- EXAMPLES.md | 2 +- NEWS.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 4b85cef..0b26fd3 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,4 +1,4 @@ -# ANGoLS - Authors +# ANGoLS - Authors ## Contributors: diff --git a/CHANGES.md b/CHANGES.md index 6f59d87..d86d7a4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -# **ANGoLS** Changes +# ANGoLS - CHANGES ## 0.10.0 - 10th March 2026 diff --git a/EXAMPLES.md b/EXAMPLES.md index 652dcfe..c1e6329 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -1,4 +1,4 @@ -# ANGoLS.Go Examples +# ANGoLS - Examples | Name | Source & Description | Summary | | ---- | -------------------- | ------- | diff --git a/NEWS.md b/NEWS.md index e111522..e43189d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# ANGoLS - NEWS +# ANGoLS - News | Date | News Item | From 1b02e7f994e71f87d17d531abbb6f0337bd9db06 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Sun, 2 Aug 2026 16:34:02 +1000 Subject: [PATCH 02/32] chore: LICENSE update --- LICENSE | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index e4fcfa3..f6b17bc 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,6 @@ -BSD 3-Clause License - ANGoLS - -Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems +ANGoLS - BSD 3-Clause License +Copyright (c) 2019-2026, Matthew Wilson and Synesis Information Systems All rights reserved. Redistribution and use in source and binary forms, with or without From eb0dfd86ca82bffdfd8c3c67e2e3310a684a8c20 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Sun, 2 Aug 2026 16:52:48 +1000 Subject: [PATCH 03/32] .gitattributes --- .gitattributes | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.gitattributes b/.gitattributes index e69de29..ea88959 100644 --- a/.gitattributes +++ b/.gitattributes @@ -0,0 +1,11 @@ +*.c linguist-language=C +*.cpp linguist-language=C++ +*.go linguist-language=Go +*.h linguist-language=C +*.hpp linguist-language=C++ +*.html linguist-detectable=false +*.md linguist-detectable=false +*.sh linguist-detectable=false +makefile linguist-detectable=false +*.vimrc linguist-detectable=false + From 994ea51313a65e4f821235dd4334031af378cc6f Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Sun, 2 Aug 2026 16:53:26 +1000 Subject: [PATCH 04/32] .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 301e300..d8fa976 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ *~ *.[568vq] *.a +*.dll *.dylib *.exe *.lib From 21cb44d2a503b872883aa0dc4b5e62acfb05c972 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 16:37:16 +1000 Subject: [PATCH 05/32] .sis identities --- .sis/project_name.txt | 1 + .sis/script_info_lines.txt | 2 ++ 2 files changed, 3 insertions(+) create mode 100644 .sis/project_name.txt create mode 100644 .sis/script_info_lines.txt diff --git a/.sis/project_name.txt b/.sis/project_name.txt new file mode 100644 index 0000000..db9a258 --- /dev/null +++ b/.sis/project_name.txt @@ -0,0 +1 @@ +ANGoLS diff --git a/.sis/script_info_lines.txt b/.sis/script_info_lines.txt new file mode 100644 index 0000000..9244429 --- /dev/null +++ b/.sis/script_info_lines.txt @@ -0,0 +1,2 @@ +ANGoLS provides Algorithms Not in the Go Language Standard library +Copyright (c) 2019-2026, Matthew Wilson and Synesis Information Systems From eef34f79056b63e2ebbd16e5fe0787ba8ebe8a41 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 17:25:14 +1000 Subject: [PATCH 06/32] CI --- .github/workflows/go.yml | 51 ++++++++++++++---- build.sh | 108 ++++++++++++++++++++++++++++++++++----- 2 files changed, 134 insertions(+), 25 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 635b987..6729f3b 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -1,36 +1,65 @@ # This workflow will build a golang project # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go +# +# Created: 18th August 2025 +# Updated: 3rd August 2026 +# + name: Go +env: + VERBOSITY: 1 + on: push: - branches: [ "master", "dev", "gha" ] + branches: + - boilerplate + - dev + - idiomatic + - master + - rc1 + - rc2 + - rc3 pull_request: - branches: [ "master", "dev", "gha" ] + +defaults: + run: + shell: bash jobs: build: - runs-on: ubuntu-latest - strategy: + # Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable. + fail-fast: false + matrix: - go-version: [ '1.21', '1.22', '1.23', '1.24' ] + go-version: + - '1.23' + - '1.24' + - '1.25' + - '1.26' + os: + - macos-latest + - ubuntu-latest + - windows-latest + + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - - name: Set up Go ${{ matrix.go-version }} - uses: actions/setup-go@v4 + - name: "Set up Go ${{ matrix.go-version }}" + uses: actions/setup-go@v5 with: go-version: '${{ matrix.go-version }}' - - name: Display Go version + - name: "Display Go version" run: go version - - name: Build + - name: "Build all targets" run: ./build.sh - - name: Test - run: ./run_all_unit_tests.sh + - name: "Run all unit-tests" + run: ./run_all_unit_tests.sh --verbosity ${{ env.VERBOSITY }} diff --git a/build.sh b/build.sh index b6be14a..924db21 100755 --- a/build.sh +++ b/build.sh @@ -2,34 +2,114 @@ ScriptPath=$0 Dir=$(cd $(dirname "$ScriptPath"); pwd) +ProjectNameFile="$Dir/.sis/project_name.txt" +ProjectName=$(tr -d '[:space:]' < "$ProjectNameFile") +# ########################################################## +# command-line handling + +while [[ $# -gt 0 ]]; do + + case $1 in + --help) + + [ -f "$Dir/.sis/script_info_lines.txt" ] && cat "$Dir/.sis/script_info_lines.txt" + cat << EOF +Builds the ${ProjectName} library and (if present) examples + +$ScriptPath [ ... flags/options ... ] + +Flags/options: + + standard flags: + + --help + displays this help and terminates + +EOF + + exit 0 + ;; + *) + + >&2 echo "$ScriptPath: unrecognised argument '$1'; use --help for usage" + + exit 1 + ;; + esac + + shift +done + + +# ########################################################## +# main() + mkdir -p "$Dir/scratch/build-artefacts/" # library -echo "building library ..." -go build -v $Dir +echo "building ${ProjectName} library ..." +go build -v "$Dir" + # examples -if [ -d "$Dir/examples" ];then +if [ -d "$Dir/examples" ]; then - echo "building examples ..." - cd "$Dir/scratch/build-artefacts/" - find "$Dir/examples" -type f -name '*.go' -print -exec go build -v {} \; - cd ->/dev/null + echo "building ${ProjectName} examples ..." + + # subdirectory examples (examples//main.go) + for example_dir in "$Dir"/examples/*/; do + + [ -d "$example_dir" ] || continue + + if [ -f "${example_dir}main.go" ]; then + + example_name=$(basename "$example_dir") + echo "building example ${example_name} ..." + go build -v -o "$Dir/scratch/build-artefacts/${example_name}" "$example_dir" + fi + done + + # loose single-file examples (examples/*.go) + for example_file in "$Dir"/examples/*.go; do + + [ -f "$example_file" ] || continue + + example_name=$(basename "$example_file" .go) + echo "building example ${example_name} ..." + go build -v -o "$Dir/scratch/build-artefacts/${example_name}" "$example_file" + done fi -# tests -if [ -d "$Dir/tests" ];then +# tests (standalone programs under tests/, if present) +if [ -d "$Dir/tests" ]; then + + echo "building ${ProjectName} tests ..." - echo "building tests ..." - cd "$Dir/scratch/build-artefacts/" - find "$Dir/tests" -type f -name '*.go' -print -exec go build -v {} \; - cd ->/dev/null + for test_dir in "$Dir"/tests/*/; do + + [ -d "$test_dir" ] || continue + + if [ -f "${test_dir}main.go" ]; then + + test_name=$(basename "$test_dir") + echo "building test ${test_name} ..." + go build -v -o "$Dir/scratch/build-artefacts/${test_name}" "$test_dir" + fi + done + + for test_file in "$Dir"/tests/*.go; do + + [ -f "$test_file" ] || continue + + test_name=$(basename "$test_file" .go) + echo "building test ${test_name} ..." + go build -v -o "$Dir/scratch/build-artefacts/${test_name}" "$test_file" + done fi # ############################## end of file ############################# # - From e144bb91a78866879c483f68b56597990f8190d6 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 17:30:01 +1000 Subject: [PATCH 07/32] dependencies --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index d16d014..d38f90e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/synesissoftware/ANGoLS -go 1.24 +go 1.23.6 require ( github.com/stretchr/testify v1.11.0 From 1cec3225545d47268f2f48b368586c46278c7be9 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 17:30:34 +1000 Subject: [PATCH 08/32] chore: helper scripts --- run_all_unit_tests.sh | 51 +++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 24 deletions(-) diff --git a/run_all_unit_tests.sh b/run_all_unit_tests.sh index dc27189..3bf9cfb 100755 --- a/run_all_unit_tests.sh +++ b/run_all_unit_tests.sh @@ -2,7 +2,8 @@ ScriptPath=$0 Dir=$(cd $(dirname "$ScriptPath"); pwd) - +ProjectNameFile="$Dir/.sis/project_name.txt" +ProjectName=$(tr -d '[:space:]' < "$ProjectNameFile") ListOnly=0 Verbosity=${XTESTS_VERBOSITY:-${TEST_VERBOSITY:-3}} @@ -25,10 +26,9 @@ while [[ $# -gt 0 ]]; do ;; --help) + [ -f "$Dir/.sis/script_info_lines.txt" ] && cat "$Dir/.sis/script_info_lines.txt" cat << EOF -ANGoLS provides Algorithms Not in the Go Language Standard library -Copyright (c) 2019-2025, Matthew Wilson and Synesis Information Systems -Runs all (matching) component and unit test programs +Runs all (matching) component and unit test packages $ScriptPath [ ... flags/options ... ] @@ -38,7 +38,7 @@ Flags/options: -l --list-only - lists the target programs but does not execute them + lists the target packages but does not execute them --verbosity specifies an explicit verbosity for the unit-test(s) @@ -68,36 +68,39 @@ done # ########################################################## # main() +cd "$Dir" || exit 1 -for f in $(find $Dir -type f -name '*_test.go') -do +# Only packages that contain tests (avoids broken multi-main examples/ dirs) +Packages=$(go list -f '{{if or .TestGoFiles .XTestGoFiles}}{{.ImportPath}}{{end}}' ./...) - if [ $ListOnly -ne 0 ]; then +if [ -z "$Packages" ]; then - echo "would execute $f:" + echo "${ScriptPath}: no test packages found for ${ProjectName}" - continue - fi + exit 0 +fi - if [ $Verbosity -ge 3 ]; then +if [ $ListOnly -ne 0 ]; then - echo - fi - if [ $Verbosity -ge 2 ]; then + echo "Listing all ${ProjectName} test packages" - echo "executing $f:" - fi + printf '%s\n' $Packages - if [ $Verbosity -ge 2 ]; then + exit 0 +fi - go test -v "$f" - else +if [ $Verbosity -ge 2 ]; then - go test "$f" - fi + echo "Running all ${ProjectName} unit-test packages" +fi -done +if [ $Verbosity -ge 2 ]; then + go test -v $Packages +else -# ############################## end of file ############################# # + go test $Packages +fi + +# ############################## end of file ############################# # From b19ef3d73c061e25a98934839ad8d9e3cb261b17 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 17:40:49 +1000 Subject: [PATCH 09/32] fix: eschewing use of `Loop`, and reverting to manual `for`-loops, to enable backwards support for 1.23 --- slices/collect_test.go | 6 +++--- slices/select_test.go | 4 ++-- strings/ascii_test.go | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/slices/collect_test.go b/slices/collect_test.go index d7a9667..ea974f9 100644 --- a/slices/collect_test.go +++ b/slices/collect_test.go @@ -189,7 +189,7 @@ func Benchmark_equal_ints_by_EqualSliceOfInt(b *testing.B) { b.ResetTimer() - for b.Loop() { + for i := 0; i < b.N; i++ { _ = slices.EqualSliceOfInt(ints_1, ints_2) } @@ -203,7 +203,7 @@ func Benchmark_equal_ints_by_EqualSlice(b *testing.B) { b.ResetTimer() - for b.Loop() { + for i := 0; i < b.N; i++ { _ = slices.EqualSlice(ints_1, ints_2) } @@ -217,7 +217,7 @@ func Benchmark_equal_uints_by_EqualSlice(b *testing.B) { b.ResetTimer() - for b.Loop() { + for i := 0; i < b.N; i++ { _ = slices.EqualSlice(ints_1, ints_2) } diff --git a/slices/select_test.go b/slices/select_test.go index 2335437..c091ab7 100644 --- a/slices/select_test.go +++ b/slices/select_test.go @@ -16,7 +16,7 @@ func Benchmark_SelectSliceOfInt(b *testing.B) { {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, } - for b.Loop() { + for i := 0; i < b.N; i++ { for _, input := range inputs { slices.SelectSliceOfInt(input, func(_, _ int) (bool, error) { return true, nil @@ -33,7 +33,7 @@ func Benchmark_SelectSliceOfString(b *testing.B) { {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"}, } - for b.Loop() { + for i := 0; i < b.N; i++ { for _, input := range inputs { slices.SelectSliceOfString(input, func(_ int, _ string) (bool, error) { return true, nil diff --git a/strings/ascii_test.go b/strings/ascii_test.go index cb028d6..bf9fda3 100644 --- a/strings/ascii_test.go +++ b/strings/ascii_test.go @@ -44,7 +44,7 @@ func Test_ASCIIToUpper(t *testing.T) { func Benchmark_ASCIIToLower(b *testing.B) { const s = "Hello, World!" - for b.Loop() { + for i := 0; i < b.N; i++ { _ = strings.ASCIIToLower(s) } } @@ -52,7 +52,7 @@ func Benchmark_ASCIIToLower(b *testing.B) { func Benchmark_StringsToLower(b *testing.B) { const s = "Hello, World!" - for b.Loop() { + for i := 0; i < b.N; i++ { _ = stdstrings.ToLower(s) } } @@ -60,7 +60,7 @@ func Benchmark_StringsToLower(b *testing.B) { func Benchmark_ASCIIToUpper(b *testing.B) { const s = "Hello, World!" - for b.Loop() { + for i := 0; i < b.N; i++ { _ = strings.ASCIIToUpper(s) } } @@ -68,7 +68,7 @@ func Benchmark_ASCIIToUpper(b *testing.B) { func Benchmark_StringsToUpper(b *testing.B) { const s = "Hello, World!" - for b.Loop() { + for i := 0; i < b.N; i++ { _ = stdstrings.ToUpper(s) } } From 7aefa44c5619a311bf2bbb822cd313043e57601d Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 18:18:57 +1000 Subject: [PATCH 10/32] chore: **README.md**: badges and tag line --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 50bdfbb..295cf3f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # ANGoLS +**A**lgorithms **N**ot in **Go** **L**anguage **S**tandard library + +![Language](https://img.shields.io/badge/Go-00ADD8?style=flat&logo=go&logoColor=white) [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause) [![GitHub release](https://img.shields.io/github/v/release/synesissoftware/ANGoLS.svg)](https://github.com/synesissoftware/ANGoLS/releases/latest) [![Last Commit](https://img.shields.io/github/last-commit/synesissoftware/ANGoLS)](https://github.com/synesissoftware/ANGoLS/commits/master) @@ -7,8 +10,6 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/synesissoftware/ANGoLS)](https://goreportcard.com/report/github.com/synesissoftware/ANGoLS) [![Go Reference](https://pkg.go.dev/badge/github.com/synesissoftware/ANGoLS.svg)](https://pkg.go.dev/github.com/synesissoftware/ANGoLS) -**A**lgorithms **N**ot in **Go** **L**anguage **S**tandard library - ## Table of Contents @@ -437,4 +438,3 @@ T.B.C. - From 758ed435c1aaf406164593ff14bc00bd98a2421b Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 18:22:38 +1000 Subject: [PATCH 11/32] chore: boilerplate --- .gitattributes | 7 +------ .gitignore | 4 +++- .vimrc | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 .vimrc diff --git a/.gitattributes b/.gitattributes index ea88959..3223702 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,11 +1,6 @@ -*.c linguist-language=C -*.cpp linguist-language=C++ *.go linguist-language=Go -*.h linguist-language=C -*.hpp linguist-language=C++ *.html linguist-detectable=false *.md linguist-detectable=false *.sh linguist-detectable=false -makefile linguist-detectable=false *.vimrc linguist-detectable=false - +makefile linguist-detectable=false diff --git a/.gitignore b/.gitignore index d8fa976..bebf8c8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Synesis Information Systems .gitignore for Go libraries + + # directories (by name) /scratch/ @@ -28,4 +31,3 @@ *.test *.tmp *.zip - diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..373dfe4 --- /dev/null +++ b/.vimrc @@ -0,0 +1,54 @@ +" Synesis Go project .vimrc — aligned with .vscode/settings.json (Go) + +set nocompatible +filetype indent plugin on +syntax enable +set autoindent +set backspace=indent,eol,start +set hlsearch +set incsearch +set number + +" files.insertFinalNewline +set eol +set fixeol + +" editor.renderWhitespace: all +set list +set listchars=tab:->,trail:-,extends:>,precedes:<,nbsp:+ + +" editor.detectIndentation: false — global defaults (editor.tabSize: 2, insertSpaces: false) +set colorcolumn=76 +set noexpandtab +set shiftwidth=2 +set softtabstop=2 +set tabstop=2 + +" colorcolumn draws a full-column tint in Vim (not a VS Code-style 1px line). +" Keep it subtle via the ColorColumn highlight group; reapply after colorscheme changes. +if has('termguicolors') + " set termguicolors +endif + +function! s:ConfigureColorColumn() abort + highlight ColorColumn ctermbg=236 guibg=#2a2a2a cterm=NONE gui=NONE +endfunction + +call s:ConfigureColorColumn() +autocmd ColorScheme * call s:ConfigureColorColumn() + +" files.trimTrailingWhitespace +autocmd BufWritePre * %s/\s\+$//e + +augroup sis_go + autocmd! + + " [go] — gofmt uses tabs; match .vscode [go] tabSize 2 / insertSpaces false + autocmd FileType go setlocal noexpandtab tabstop=2 shiftwidth=2 softtabstop=2 colorcolumn=60,76,100 + + " [shellscript] + autocmd FileType sh,bash,zsh setlocal expandtab tabstop=2 shiftwidth=2 softtabstop=2 colorcolumn=60,76 + + " [json] / [markdown] / [yaml] + autocmd FileType json,markdown,yaml setlocal expandtab tabstop=2 shiftwidth=2 softtabstop=2 +augroup END From 9e08d364962796771182d8b32b308875f23e11a0 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 18:28:38 +1000 Subject: [PATCH 12/32] CI --- .github/workflows/go.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 6729f3b..a3a3b41 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -36,10 +36,12 @@ jobs: matrix: go-version: - - '1.23' - - '1.24' - - '1.25' - '1.26' + - '1.25' + - '1.24' + - '1.23' + - '1.22' + - '1.21' os: - macos-latest - ubuntu-latest From 2927354d180a1e7e9d980a26ac8db7e60614eaff Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Mon, 3 Aug 2026 19:02:39 +1000 Subject: [PATCH 13/32] chore: standardising .vscode/settings.json --- .vscode/settings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 42cfed1..58e6d59 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -23,13 +23,13 @@ ], "go.formatTool": "goimports", "go.lintFlags": [ - "--fast" + "--fast", ], "go.lintOnSave": "workspace", "go.lintTool": "golangci-lint", "go.useLanguageServer": true, "gopls": { + "ui.completion.usePlaceholders": true, "ui.semanticTokens": true, - "ui.completion.usePlaceholders": true }, } From cbd6377043ea073a460e88233298952dc8875083 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 15:15:07 +1000 Subject: [PATCH 14/32] Reorder README.md so Table of Contents precedes Introduction. Aligns with Synesis markdown layout: title, tagline, badges, TOC, then Introduction and body sections. --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index d86d7a4..a63c55b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -# ANGoLS - CHANGES +# ANGoLS - Changes ## 0.10.0 - 10th March 2026 From 311b3730f11772ed3560909b4b74fa02142d7668 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 15:30:23 +1000 Subject: [PATCH 15/32] Set go.mod minimum to Go 1.21. Aligns all Synesis Go libraries on a common module baseline. Library source is largely Go 1.21-compatible. --- go.mod | 8 ++++---- go.sum | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index d38f90e..402d546 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module github.com/synesissoftware/ANGoLS -go 1.23.6 +go 1.21 require ( - github.com/stretchr/testify v1.11.0 - github.com/synesissoftware/STEGoL v0.2.2 - github.com/synesissoftware/ver2go v0.1.2 + github.com/stretchr/testify v1.11.1 + github.com/synesissoftware/STEGoL v0.3.0 + github.com/synesissoftware/ver2go v0.1.3 ) require ( diff --git a/go.sum b/go.sum index 612a323..b80bccf 100644 --- a/go.sum +++ b/go.sum @@ -2,12 +2,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.11.0 h1:ib4sjIrwZKxE5u/Japgo/7SJV3PvgjGiRNAvTVGqQl8= -github.com/stretchr/testify v1.11.0/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/synesissoftware/STEGoL v0.2.2 h1:n2xVjgT04J20edm8/VsBmjVLgr+W5sIX87Y+B+V+RNM= -github.com/synesissoftware/STEGoL v0.2.2/go.mod h1:e37JCLk8icbSECIea7vCn+WFKJqxs9cOROMESN9tE5U= -github.com/synesissoftware/ver2go v0.1.2 h1:UQu9/nmfdfFyH5lCzycY/yy1pxcnDdwEJnrqhvdvcBI= -github.com/synesissoftware/ver2go v0.1.2/go.mod h1:9gXrNoiRkcKU+QGY3chyozsQKAsKb0A8A89eZuV4lX0= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/synesissoftware/STEGoL v0.3.0 h1:3Q1x7S472seaMlxBD1WR+Ax5qxDSFBb7jZ/EAUKQQTc= +github.com/synesissoftware/STEGoL v0.3.0/go.mod h1:TWWL9GPgKTuO2u3xGhCqYp7nvQbkxKq2vnjUJ2O8gSQ= +github.com/synesissoftware/ver2go v0.1.3 h1:5zE+ymD+R0WlgsvtdU0lWYlODXXTiEQuQ6vZj/fO0+o= +github.com/synesissoftware/ver2go v0.1.3/go.mod h1:wpsHnw22T2n4QG6fK1SwBakk+EbMxDt6NLVclU1MvLo= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= From b31caaab6e9d77b6fa10f4f496962069c2caec91 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 15:38:19 +1000 Subject: [PATCH 16/32] docs: add AUTHORS.md --- AUTHORS.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 0b26fd3..e0ab289 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -1,15 +1,23 @@ # ANGoLS - Authors -## Contributors: -* Matt Wilson ([mwsis](https://github.com/mwsis)) -* Harry Wilson ([Hazzoz](https://github.com/Hazzoz)) -* mwrr2319; +## Major Contributors + +| Name | Email | GitHub | +| ------------ | ------------------------------------ | ----------------------------------- | +| Matt Wilson | matthew.wilson.synesis@gmail.com | [mwsis](https://github.com/mwsis) | +| Harry Wilson | harold.wilson.synesis@gmail.com | [Hazzoz](https://github.com/Hazzoz) | +| mwrr2319 | | [mwrr2319](https://github.com/mwrr2319) | + + +## Defect reports, fixes and suggestions (for which we are very grateful) + +| Name | GitHub | +| ------- | ------ | +| \ | | ----- Contributions are welcomed. - From 255d07b49d5309e87b7f489a78bf36337b6ba532 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 16:04:49 +1000 Subject: [PATCH 17/32] docs: flesh out NEWS.md --- NEWS.md | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/NEWS.md b/NEWS.md index e43189d..d5d290c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,20 +1,28 @@ # ANGoLS - News -| Date | News Item | -| ------------------- | ---------------------------------------------------------------------------------------------------------- | -| 10th March 2026 | Release of [**ANGoLS** 0.10.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0) | -| 26th February 2026 | Release of [**ANGoLS** 0.10.0-beta3](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0-beta3) | -| 15th February 2026 | Release of [**ANGoLS** 0.10.0-beta2](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0-beta2) | -| 7th February 2026 | Release of [**ANGoLS** 0.10.0-beta1](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0-beta1) | -| 3rd January 2026 | Release of [**ANGoLS** 0.9.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.9.0) | -| 15th September 2025 | Release of [**ANGoLS** 0.8.0-alpha1](https://github.com/synesissoftware/ANGoLS/releases/tag/0.8.0-alpha1) | -| 27th August 2025 | Release of [**ANGoLS** 0.7.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.7.0) | -| 20th August 2025 | Release of [**ANGoLS** 0.6.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.6.0) | -| 30th March 2019 | Release of [**ANGoLS** 0.5.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.5.0) | -| 11th March 2019 | Release of [**ANGoLS** 0.4.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.4.0) | -| 1st March 2019 | initial commit | +| Date | News Item | +| ------------------ | --------------------------------------------------------------------------------------------- | +| 23rd August 2026 | Release of [**ANGoLS** 0.10.1](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.1) | +| 10th March 2026 | Release of [**ANGoLS** 0.10.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0) | +| 26th February 2026 | Release of **ANGoLS** 0.10.0-beta3 | +| 15th February 2026 | Release of **ANGoLS** 0.10.0-beta2 | +| 7th February 2026 | Release of **ANGoLS** 0.10.0-beta1 | +| 7th February 2026 | Release of **ANGoLS** 0.9.1 | +| 3rd January 2026 | Release of **ANGoLS** 0.9.0 | +| 2nd January 2026 | Release of **ANGoLS** 0.9.0-beta2 | +| 27th November 2025 | Release of **ANGoLS** 0.9.0-beta1 | +| 27th August 2025 | Release of **ANGoLS** 0.8.0-alpha1 | +| 27th August 2025 | Release of **ANGoLS** 0.7.0 | +| 27th August 2025 | Release of **ANGoLS** 0.7.0-beta1 | +| 20th August 2025 | Release of **ANGoLS** 0.7.0-alpha1 | +| 20th August 2025 | Release of **ANGoLS** 0.6.0 | +| 18th August 2025 | Release of **ANGoLS** 0.6.0-beta1 | +| 14th August 2025 | Release of **ANGoLS** 0.6.0-alpha3 | +| 24th February 2025 | Release of **ANGoLS** 0.6.0-alpha2 | +| 24th February 2025 | Release of **ANGoLS** 0.6.0-alpha1 | +| 30th March 2019 | Release of **ANGoLS** 0.5.0 | +| 11th March 2019 | Release of **ANGoLS** 0.4.0 | - From 08d6f62a6b802d0f47be3f79be726f87e296ec69 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 16:16:26 +1000 Subject: [PATCH 18/32] docs: canonicalise TODO.md --- TODO.md | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/TODO.md b/TODO.md index bb766da..037584c 100644 --- a/TODO.md +++ b/TODO.md @@ -1,35 +1,36 @@ # ANGoLS - TODO -recls for Go -## Table of contents +## Table of Contents -- [0.9.x Items](#09x-items) -- [0.10+ Items](#010-items) -- [0.11+ Items](#011-items) +- [Functional improvements](#functional-improvements) +- [Performance improvements](#performance-improvements) +- [Packaging improvements](#packaging-improvements) -## 0.9.x Items +## Functional improvements * ~~simplify `CollectSlice()`~~ - ✅; * ~~add unit-testing for `slices` functions~~ - ✅; * ~~enhance code coverage in unit-tests~~ - ✅; - - -## 0.10+ Items - * ~~change semantics of `CollectSlice()`, `EqualSlice()` to not take `any`, but (at least) `[]any`~~ - ✅; * ~~correct all `slices` functions to proper naming, including `Uint` rather than `Uint`~~ - ✅; * ~~`GenerateSliceOfInteger[T]()`~~ - ✅; -* `SelectSlice[T]()`; +* [ ] `SelectSlice[T]()`; * ~~expand coverage of specific types for `EqualSlice[T]()`~~ - ✅; * ~~enhance code coverage in unit-tests~~ - ✅; +* [ ] simplify names, e.g. `CollectSlice()` => `Collect()`, and so forth; +* [ ] apply `~` on generics; + + +## Performance improvements + +* \ -## 0.11+ Items +## Packaging improvements -* simplify names, e.g. `CollectSlice()` => `Collect()`, and so forth; -* apply `~` on generics; * \ + From 7f638a80914dd0e012aea28abaf9cf6b66aa18c7 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 16:24:28 +1000 Subject: [PATCH 19/32] docs: canonicalise EXAMPLES.md and companion example docs --- EXAMPLES.md | 8 ++++---- examples/libver.md | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 examples/libver.md diff --git a/EXAMPLES.md b/EXAMPLES.md index c1e6329..8e66cda 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -1,9 +1,9 @@ # ANGoLS - Examples -| Name | Source & Description | Summary | -| ---- | -------------------- | ------- | -| **libver** | [examples/libver.go](./examples/libver.go) | Displays the **STEGoL** library version and terminates | +| Name | Source & Description | Summary | +| ---------- | ---------------------------------------- | ------------------------------------------------------ | +| **libver** | [examples/libver.go](./examples/libver.go)
[examples/libver.md](./examples/libver.md) | Displays the **ANGoLS** library version and terminates | - + diff --git a/examples/libver.md b/examples/libver.md new file mode 100644 index 0000000..211f462 --- /dev/null +++ b/examples/libver.md @@ -0,0 +1,21 @@ +# ANGoLS - Example - **libver** + + +## Summary + +Displays the **ANGoLS** library version and terminates. + + +## Source + +See [examples/libver.go](./examples/libver.go). + + +## Execution + +```bash +go run ./examples/libver.go +``` + + + From 41af59ed6ced148c8827175538a0236009f6b0f0 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 16:33:21 +1000 Subject: [PATCH 20/32] ci: align Go workflow push branches to Synesis order Use master, dev, then boilerplate, idiomatic, rc1, rc2, rc3 in .github/workflows/go.yml across all Go projects. --- .github/workflows/go.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index a3a3b41..3eacb25 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -3,7 +3,7 @@ # # Created: 18th August 2025 -# Updated: 3rd August 2026 +# Updated: 19th August 2026 # name: Go @@ -14,10 +14,10 @@ env: on: push: branches: - - boilerplate + - master - dev + - boilerplate - idiomatic - - master - rc1 - rc2 - rc3 From 73997bafdbf5ad141d796677f6937d6001977ed7 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 16:43:10 +1000 Subject: [PATCH 21/32] ci: add golangci-lint and tier-aware Go matrix to go.yml Add a lint job (golangci-lint --fast) and identical .golangci.yml across all Go projects; align build-matrix floors to go.mod (1.21 default, 1.23 syngo, 1.24 Diagnosticism.Go). --- .github/workflows/go.yml | 17 +++++++++++++++++ .golangci.yml | 2 ++ 2 files changed, 19 insertions(+) create mode 100644 .golangci.yml diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 3eacb25..10ccd34 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -9,6 +9,7 @@ name: Go env: + GO_MIN_VERSION: '1.21' VERBOSITY: 1 on: @@ -65,3 +66,19 @@ jobs: - name: "Run all unit-tests" run: ./run_all_unit_tests.sh --verbosity ${{ env.VERBOSITY }} + + lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: "Set up Go ${{ env.GO_MIN_VERSION }}" + uses: actions/setup-go@v5 + with: + go-version: '${{ env.GO_MIN_VERSION }}' + + - name: "Run golangci-lint" + uses: golangci/golangci-lint-action@v6 + with: + args: --fast diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 0000000..600bef7 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,2 @@ +run: + timeout: 5m From e074f0d687968586ef0a49cf6223cfed0b279dd5 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 16:59:18 +1000 Subject: [PATCH 22/32] docs: note pre-release go.mod tidy order in TODO.md Record that go floors, CI matrices, and go mod tidy must wait on newly published Synesis tags, with each project's predecessor list. --- TODO.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODO.md b/TODO.md index 037584c..0fdc2ba 100644 --- a/TODO.md +++ b/TODO.md @@ -30,7 +30,9 @@ ## Packaging improvements -* \ +* [ ] Before the next official release: confirm **`go.mod`** (`go 1.21`) and the CI Go-version matrix, bump Synesis `require`s to newly published tags, then run **`go mod tidy`** (not against currently published tags). Prior Synesis Go releases, in order: + * **ver2go**; + * **STEGoL**; From 5eaf9d9eb575ab92b8b3981866c04c89704af14c Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 17:05:16 +1000 Subject: [PATCH 23/32] docs: normalise CHANGES.md version headings to SemVer form Replace parenthesized and dashed prerelease headings with hyphen-compact -alphaN/-betaN labels (ANGoLS, STEGoL, libCLImate.Go, Diagnosticism.Go). --- CHANGES.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index a63c55b..d255805 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -48,18 +48,18 @@ * 0.9.0 -## 0.9.0 (beta 2) - 2nd January 2026 +## 0.9.0-beta2 - 2nd January 2026 * added `ASCIIToULower()` and `ASCIIToUpper()`; -## 0.9.0 (beta 1) - 27th November 2025 +## 0.9.0-beta1 - 27th November 2025 * added `CollectSliceIntoStringSlice[T any](input_slice []T, fn func(input_item *T) (string, error)) ([]string, error)`; * changed return type of `CollectSlice()` from `(any, error)` to `([]any, error)`; -## 0.8.0 (alpha 1) - 27th August 2025 +## 0.8.0-alpha1 - 27th August 2025 * added generic function `func CollectSliceOfInteger[N int8 | int16 | int32 | int64 | int | uint8 | uint16 | uint32 | uint64 | uint | uintptr](input_slice []N, fn func(input_item N) N) (result_slice []N)`; * added generic function `func EqualSliceOfInteger[N int8 | int16 | int32 | int64 | int | uint8 | uint16 | uint32 | uint64 | uint | uintptr](lhs, rhs []int) bool`; @@ -71,7 +71,7 @@ * 0.7.0 -## 0.7.0 (beta 1) - 27th August 2025 +## 0.7.0-beta1 - 27th August 2025 * moved private elements into **internal** (so as to hide properly); * dependencies; @@ -79,7 +79,7 @@ * boilerplate; -## 0.7.0 (alpha 1) - 20th August 2025 +## 0.7.0-alpha1 - 20th August 2025 * added `SplitAfterByte()`, `SplitAfterByteN()` ,`SplitAfterRune()` ,`SplitAfterRuneN()`, `SplitAfterAny()`, `SplitAfterAnyN()`, `SplitAfterAnyBytes()`, `SplitAfterAnyBytesN()`, `SplitAfterAnyRunes()`, `SplitAfterAnyRunesN()`; @@ -89,7 +89,7 @@ * documentation; -## 0.6.0 (beta 1) - 18th August 2025 +## 0.6.0-beta1 - 18th August 2025 * GitHub Actions; * `interface{}` => `any`; @@ -97,18 +97,18 @@ * documentation; -## 0.6.0 (alpha 3) - 14th August 2025 +## 0.6.0-alpha3 - 14th August 2025 * tidying; -## 0.6.0 (alpha 2) - 24th February 2025 +## 0.6.0-alpha2 - 24th February 2025 * added **examples/libver.go**; * boilerplate; -## 0.6.0 (alpha 1) - 24th February 2025 +## 0.6.0-alpha1 - 24th February 2025 * refactored all slice functions into **slices** package; * refactored all slice functions into **strings** package; From a5b204ce049b38b6e358517d03afe847d1fc9677 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 17:31:46 +1000 Subject: [PATCH 24/32] docs: add canonical EOF marker to remaining Go markdown Append the Synesis end-of-file comment to CHANGES.md and README.md files that were missing it. --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index d255805..aeb3e03 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -128,3 +128,6 @@ FIRST PUBLIC RELEASE + + + From bb99140dbe1caa8d1c34a83d2dff9e0c2bc4fd0e Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 19 Aug 2026 17:36:46 +1000 Subject: [PATCH 25/32] docs: replace README T.B.C. placeholders in five Go projects Flesh out Components and Related projects sections for ANGoLS, CLASP.Go, libpath.Go, STEGoL, and syngo from library structure and dependency relationships. --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 295cf3f..ebf9200 100644 --- a/README.md +++ b/README.md @@ -429,7 +429,11 @@ Defect reports, feature requests, and pull requests are welcome on https://githu ### Related projects -T.B.C. +Projects in which **ANGoLS** is used include: + +* [**CLASP.Go**](https://github.com/synesissoftware/CLASP.Go/) (development/testing); +* [**libCLImate.Go**](https://github.com/synesissoftware/libCLImate.Go/); +* [**libpath.Go**](https://github.com/synesissoftware/libpath.Go/). ### License From 877657725a26b11b81790b215e069f84573b0f62 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 08:36:01 +1000 Subject: [PATCH 26/32] version --- version.go | 2 +- version_test.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/version.go b/version.go index ce3c475..44c3a40 100644 --- a/version.go +++ b/version.go @@ -14,7 +14,7 @@ import "github.com/synesissoftware/ver2go" const ( VersionMajor uint16 = 0 VersionMinor uint16 = 10 - VersionPatch uint16 = 0 + VersionPatch uint16 = 1 VersionAB uint16 = 0xFFFF Version uint64 = (uint64(VersionMajor) << 48) + (uint64(VersionMinor) << 32) + (uint64(VersionPatch) << 16) + (uint64(VersionAB) << 0) ) diff --git a/version_test.go b/version_test.go index d1e8db7..b009afa 100644 --- a/version_test.go +++ b/version_test.go @@ -11,7 +11,7 @@ import ( const ( Expected_VersionMajor uint16 = 0 Expected_VersionMinor uint16 = 10 - Expected_VersionPatch uint16 = 0 + Expected_VersionPatch uint16 = 1 Expected_VersionAB uint16 = 0xFFFF ) @@ -23,9 +23,9 @@ func Test_Version_Elements(t *testing.T) { } func Test_Version(t *testing.T) { - require.Equal(t, uint64(0x0000_000A_0000_FFFF), angols.Version) + require.Equal(t, uint64(0x0000_000A_0001_FFFF), angols.Version) } func Test_Version_String(t *testing.T) { - require.Equal(t, "0.10.0", angols.VersionString()) + require.Equal(t, "0.10.1", angols.VersionString()) } From cadcbb404e6deaf5398097f69119a0da9c2c18a0 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 08:37:58 +1000 Subject: [PATCH 27/32] dependencies --- go.mod | 12 ++++-------- go.sum | 22 ++++++++-------------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index 402d546..8bbb69e 100644 --- a/go.mod +++ b/go.mod @@ -3,13 +3,9 @@ module github.com/synesissoftware/ANGoLS go 1.21 require ( - github.com/stretchr/testify v1.11.1 - github.com/synesissoftware/STEGoL v0.3.0 - github.com/synesissoftware/ver2go v0.1.3 + github.com/stretchr/testify v1.12.1 + github.com/synesissoftware/STEGoL v0.3.1 + github.com/synesissoftware/ver2go v0.1.4 ) -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect -) +require go.yaml.in/yaml/v3 v3.0.5 // indirect diff --git a/go.sum b/go.sum index b80bccf..cdcda52 100644 --- a/go.sum +++ b/go.sum @@ -1,14 +1,8 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/synesissoftware/STEGoL v0.3.0 h1:3Q1x7S472seaMlxBD1WR+Ax5qxDSFBb7jZ/EAUKQQTc= -github.com/synesissoftware/STEGoL v0.3.0/go.mod h1:TWWL9GPgKTuO2u3xGhCqYp7nvQbkxKq2vnjUJ2O8gSQ= -github.com/synesissoftware/ver2go v0.1.3 h1:5zE+ymD+R0WlgsvtdU0lWYlODXXTiEQuQ6vZj/fO0+o= -github.com/synesissoftware/ver2go v0.1.3/go.mod h1:wpsHnw22T2n4QG6fK1SwBakk+EbMxDt6NLVclU1MvLo= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= +github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= +github.com/synesissoftware/STEGoL v0.3.1 h1:00VzAJX5WPt5BpJAffZ33qHeC2g6xjXM0uCgg5KjxbI= +github.com/synesissoftware/STEGoL v0.3.1/go.mod h1:rAfqnX1UANIy4/CSsXvyiodid68yHlUgo7i7atexrzE= +github.com/synesissoftware/ver2go v0.1.4 h1:IA0lzR+Wzv5WiwOj6XZJYZYQMq1xn75d6+PIAqqyapM= +github.com/synesissoftware/ver2go v0.1.4/go.mod h1:JlZS4ms4D4cCaYuRh+fbBaNv7BwqrAP4m4/hZzGJ8hU= +go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= +go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= From 7d3e2767a5368f68a74056034c0217ab7f6ab575 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 08:38:15 +1000 Subject: [PATCH 28/32] CI fixes --- .github/workflows/go.yml | 1 + run_all_unit_tests.sh | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 10ccd34..c34b6d1 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -82,3 +82,4 @@ jobs: uses: golangci/golangci-lint-action@v6 with: args: --fast + verify: false diff --git a/run_all_unit_tests.sh b/run_all_unit_tests.sh index 3bf9cfb..b7ec8b5 100755 --- a/run_all_unit_tests.sh +++ b/run_all_unit_tests.sh @@ -94,12 +94,24 @@ if [ $Verbosity -ge 2 ]; then echo "Running all ${ProjectName} unit-test packages" fi +# +# Mitigate rare macOS `dyld` aborts caused by corrupted cached `*.test` binaries. +# +go clean -cache -testcache + +LD_FLAGS="" +if [ "$(uname -s)" = "Darwin" ]; then + # Older Go toolchains can produce Mach-O binaries without LC_UUID on newer macOS + # versions, triggering `dyld: missing LC_UUID load command ...` at test start. + LD_FLAGS="-ldflags=-linkmode=external" +fi + if [ $Verbosity -ge 2 ]; then - go test -v $Packages + go test -v $LD_FLAGS $Packages else - go test $Packages + go test $LD_FLAGS $Packages fi From c13021939c00a5b1780ea8a33e43ec880eec503e Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 08:38:40 +1000 Subject: [PATCH 29/32] Document Go badge policy after Go Report Card retirement. Remove goreportcard from standards; record future live quality-badge work in TODO.md. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index ebf9200..4272faa 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ [![GitHub release](https://img.shields.io/github/v/release/synesissoftware/ANGoLS.svg)](https://github.com/synesissoftware/ANGoLS/releases/latest) [![Last Commit](https://img.shields.io/github/last-commit/synesissoftware/ANGoLS)](https://github.com/synesissoftware/ANGoLS/commits/master) [![Go](https://github.com/synesissoftware/ANGoLS/actions/workflows/go.yml/badge.svg)](https://github.com/synesissoftware/ANGoLS/actions/workflows/go.yml) -[![Go Report Card](https://goreportcard.com/badge/github.com/synesissoftware/ANGoLS)](https://goreportcard.com/report/github.com/synesissoftware/ANGoLS) [![Go Reference](https://pkg.go.dev/badge/github.com/synesissoftware/ANGoLS.svg)](https://pkg.go.dev/github.com/synesissoftware/ANGoLS) From 06b128f9c3d1749e16db199391db90e3dcb0da1f Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 08:38:58 +1000 Subject: [PATCH 30/32] version --- CHANGES.md | 8 ++++++++ NEWS.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index aeb3e03..c8e2af9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,13 @@ # ANGoLS - Changes +## 0.10.1 - 20th August 2026 + +* CI modernisation (matrix + lint); +* CI reliability fixes (macOS test linking; golangci-lint config verification disabled in CI); +* boilerplate additions (scripts, markdown docs, project identity); +* removed retired Go Report Card badge from README; +* version string updated for the 0.10.1 release; + ## 0.10.0 - 10th March 2026 * 0.10.0; diff --git a/NEWS.md b/NEWS.md index d5d290c..87cdb77 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,7 +3,7 @@ | Date | News Item | | ------------------ | --------------------------------------------------------------------------------------------- | -| 23rd August 2026 | Release of [**ANGoLS** 0.10.1](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.1) | +| 20th August 2026 | Release of [**ANGoLS** 0.10.1](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.1) | | 10th March 2026 | Release of [**ANGoLS** 0.10.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0) | | 26th February 2026 | Release of **ANGoLS** 0.10.0-beta3 | | 15th February 2026 | Release of **ANGoLS** 0.10.0-beta2 | From bc6753cf7e4453a50c66cde759609e699ad7d3c0 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 14:27:18 +1000 Subject: [PATCH 31/32] Release 0.11.0: replace Version constant with Version() via ver2go. Form the packed version with ver2go.CombineVersion, use ver2go.Release for VersionAB, bump ver2go and STEGoL, and align examples plus gci import-order config with Synesis conventions. --- .golangci.yml | 14 ++++++++++++++ CHANGES.md | 12 ++++++++++++ NEWS.md | 1 + TODO.md | 4 +--- examples/.golangci.yml | 15 +++++++++++++++ examples/libver.go | 6 +++--- go.mod | 4 ++-- go.sum | 8 ++++---- slices/generate_test.go | 5 ++--- strings/parse.go | 1 - version.go | 25 +++++++++++++++++++------ version_test.go | 8 ++++---- 12 files changed, 77 insertions(+), 26 deletions(-) create mode 100644 examples/.golangci.yml diff --git a/.golangci.yml b/.golangci.yml index 600bef7..93f60f3 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,2 +1,16 @@ +linters: + enable: + - gci + +linters-settings: + gci: + custom-order: true + no-inline-comments: false + no-prefix-comments: false + sections: + - prefix(github.com/synesissoftware/ANGoLS) + - default + - standard + run: timeout: 5m diff --git a/CHANGES.md b/CHANGES.md index c8e2af9..0049a03 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,5 +1,17 @@ # ANGoLS - Changes + +## 0.11.0 - 20th August 2026 + +* added **Version()** (replacing the **Version** constant), formed by **ver2go.CombineVersion()**; +* documented **VersionString()**; +* **VersionAB** now uses **ver2go.Release**; +* updated **ver2go** to 0.2.0-beta1; +* updated **STEGoL** to 0.4.0; +* updated **examples/libver.go** to use **VersionString()**; +* version string updated for the 0.11.0 release; + + ## 0.10.1 - 20th August 2026 * CI modernisation (matrix + lint); diff --git a/NEWS.md b/NEWS.md index 87cdb77..270a3a8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,6 +3,7 @@ | Date | News Item | | ------------------ | --------------------------------------------------------------------------------------------- | +| 20th August 2026 | Release of [**ANGoLS** 0.11.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.11.0) | | 20th August 2026 | Release of [**ANGoLS** 0.10.1](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.1) | | 10th March 2026 | Release of [**ANGoLS** 0.10.0](https://github.com/synesissoftware/ANGoLS/releases/tag/0.10.0) | | 26th February 2026 | Release of **ANGoLS** 0.10.0-beta3 | diff --git a/TODO.md b/TODO.md index 0fdc2ba..741633e 100644 --- a/TODO.md +++ b/TODO.md @@ -30,9 +30,7 @@ ## Packaging improvements -* [ ] Before the next official release: confirm **`go.mod`** (`go 1.21`) and the CI Go-version matrix, bump Synesis `require`s to newly published tags, then run **`go mod tidy`** (not against currently published tags). Prior Synesis Go releases, in order: - * **ver2go**; - * **STEGoL**; +* ~~Before the next official release: confirm **`go.mod`** (`go 1.21`) and the CI Go-version matrix, bump Synesis `require`s to newly published tags, then run **`go mod tidy`**~~ - ✅; diff --git a/examples/.golangci.yml b/examples/.golangci.yml new file mode 100644 index 0000000..20edae5 --- /dev/null +++ b/examples/.golangci.yml @@ -0,0 +1,15 @@ +linters: + enable: + - gci + +linters-settings: + gci: + custom-order: true + no-inline-comments: false + no-prefix-comments: false + sections: + - default + - standard + +run: + timeout: 5m diff --git a/examples/libver.go b/examples/libver.go index 676d5b3..938b574 100644 --- a/examples/libver.go +++ b/examples/libver.go @@ -2,12 +2,12 @@ package main import ( angols "github.com/synesissoftware/ANGoLS" - ver2go "github.com/synesissoftware/ver2go" + "github.com/synesissoftware/ver2go" "fmt" ) func main() { - fmt.Printf("angols v%s\n", ver2go.CalcVersionString(angols.VersionMajor, angols.VersionMinor, angols.VersionPatch, angols.VersionAB)) - fmt.Printf("ver2go v%s\n", ver2go.CalcVersionString(ver2go.VersionMajor, ver2go.VersionMinor, ver2go.VersionPatch, ver2go.VersionAB)) + fmt.Printf("angols v%s\n", angols.VersionString()) + fmt.Printf("ver2go v%s\n", ver2go.VersionString()) } diff --git a/go.mod b/go.mod index 8bbb69e..6638374 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.21 require ( github.com/stretchr/testify v1.12.1 - github.com/synesissoftware/STEGoL v0.3.1 - github.com/synesissoftware/ver2go v0.1.4 + github.com/synesissoftware/STEGoL v0.4.0 + github.com/synesissoftware/ver2go v0.2.0-beta1 ) require go.yaml.in/yaml/v3 v3.0.5 // indirect diff --git a/go.sum b/go.sum index cdcda52..c84499a 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ github.com/stretchr/testify v1.12.1 h1:EuwCh5fleGS7H32xRwO3wRGT7DxrDhLAT6FF8MpWDWE= github.com/stretchr/testify v1.12.1/go.mod h1:MDEgiDPPsNp5cuIrHPPCyornHKgEVbtFUmoNlxoYthg= -github.com/synesissoftware/STEGoL v0.3.1 h1:00VzAJX5WPt5BpJAffZ33qHeC2g6xjXM0uCgg5KjxbI= -github.com/synesissoftware/STEGoL v0.3.1/go.mod h1:rAfqnX1UANIy4/CSsXvyiodid68yHlUgo7i7atexrzE= -github.com/synesissoftware/ver2go v0.1.4 h1:IA0lzR+Wzv5WiwOj6XZJYZYQMq1xn75d6+PIAqqyapM= -github.com/synesissoftware/ver2go v0.1.4/go.mod h1:JlZS4ms4D4cCaYuRh+fbBaNv7BwqrAP4m4/hZzGJ8hU= +github.com/synesissoftware/STEGoL v0.4.0 h1:aufaw9c8Xq2aNpgOLAtgtbU9GX8pFFD3hK1j6cTcCIw= +github.com/synesissoftware/STEGoL v0.4.0/go.mod h1:jQfaaAIwBtFhs8qHY8h4+ZTn05xvs5H2ZepAK2nHwMU= +github.com/synesissoftware/ver2go v0.2.0-beta1 h1:9Ne+kvCQMWXA+RhWqqjT+jTP+/9LfKDJyUDSJxxhI5A= +github.com/synesissoftware/ver2go v0.2.0-beta1/go.mod h1:JlZS4ms4D4cCaYuRh+fbBaNv7BwqrAP4m4/hZzGJ8hU= go.yaml.in/yaml/v3 v3.0.5 h1:N6y/pJk8buWs9NY5ERU2HSMfm+IuD/OtfdAnq6kESPw= go.yaml.in/yaml/v3 v3.0.5/go.mod h1:HVTZu1O7/Vkt2N+BFy8Zza+lnLsABggaTM2ZpNIGuKg= diff --git a/slices/generate_test.go b/slices/generate_test.go index bf9973d..bad1af9 100644 --- a/slices/generate_test.go +++ b/slices/generate_test.go @@ -1,11 +1,10 @@ package slices_test import ( - "fmt" - "strconv" - "github.com/synesissoftware/ANGoLS/slices" + "fmt" + "strconv" "testing" ) diff --git a/strings/parse.go b/strings/parse.go index d1ae6b2..bf1d4f4 100644 --- a/strings/parse.go +++ b/strings/parse.go @@ -7,7 +7,6 @@ package strings import ( "errors" "strings" - // d "github.com/synesissoftware/Diagnosticism.Go" ) type ParseKeyValuePairsListOption int64 diff --git a/version.go b/version.go index 44c3a40..0ed2827 100644 --- a/version.go +++ b/version.go @@ -1,10 +1,10 @@ -// Copyright 2019-2025 Matthew Wilson and Synesis Information Systems. All +// Copyright 2019-2026 Matthew Wilson and Synesis Information Systems. All // rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. /* * Created: 1st March 2019 - * Updated: 7th February 2026 + * Updated: 20th August 2026 */ package angols @@ -13,16 +13,29 @@ import "github.com/synesissoftware/ver2go" const ( VersionMajor uint16 = 0 - VersionMinor uint16 = 10 - VersionPatch uint16 = 1 - VersionAB uint16 = 0xFFFF - Version uint64 = (uint64(VersionMajor) << 48) + (uint64(VersionMinor) << 32) + (uint64(VersionPatch) << 16) + (uint64(VersionAB) << 0) + VersionMinor uint16 = 11 + VersionPatch uint16 = 0 + VersionAB uint16 = ver2go.Release ) var ( + version = ver2go.CombineVersion(VersionMajor, VersionMinor, VersionPatch, VersionAB) versionString string = ver2go.CalcVersionString(VersionMajor, VersionMinor, VersionPatch, VersionAB) ) +// Version returns this library's version as a packed 64-bit integer, formed +// by ver2go.CombineVersion from VersionMajor, VersionMinor, VersionPatch, +// and VersionAB. The result is suitable for numeric comparison: a later +// release has a strictly greater value than an earlier one that uses the +// same packing. +func Version() uint64 { + return version +} + +// VersionString returns this library's version as a human-readable string, +// formed by ver2go.CalcVersionString from VersionMajor, VersionMinor, +// VersionPatch, and VersionAB. For a final (non-prerelease) version the +// result is of the form "MAJOR.MINOR.PATCH", e.g. "0.11.0". func VersionString() string { return versionString } diff --git a/version_test.go b/version_test.go index b009afa..a156b37 100644 --- a/version_test.go +++ b/version_test.go @@ -10,8 +10,8 @@ import ( const ( Expected_VersionMajor uint16 = 0 - Expected_VersionMinor uint16 = 10 - Expected_VersionPatch uint16 = 1 + Expected_VersionMinor uint16 = 11 + Expected_VersionPatch uint16 = 0 Expected_VersionAB uint16 = 0xFFFF ) @@ -23,9 +23,9 @@ func Test_Version_Elements(t *testing.T) { } func Test_Version(t *testing.T) { - require.Equal(t, uint64(0x0000_000A_0001_FFFF), angols.Version) + require.Equal(t, uint64(0x0000_000B_0000_FFFF), angols.Version()) } func Test_Version_String(t *testing.T) { - require.Equal(t, "0.10.1", angols.VersionString()) + require.Equal(t, "0.11.0", angols.VersionString()) } From 5db8961a9855efcb3a5d12b497baa4707b528026 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Thu, 20 Aug 2026 14:29:36 +1000 Subject: [PATCH 32/32] release --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 0049a03..65a1a2e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,7 +12,7 @@ * version string updated for the 0.11.0 release; -## 0.10.1 - 20th August 2026 +## 0.10.1 - 20th August 2026 (internal release only) * CI modernisation (matrix + lint); * CI reliability fixes (macOS test linking; golangci-lint config verification disabled in CI);