From 9214958fd0810ae09b5a96df80d8a891dcbf7f34 Mon Sep 17 00:00:00 2001 From: mixeme Date: Mon, 15 Jun 2026 09:04:11 +0300 Subject: [PATCH] Bump version to 0.2.1 --- .gitignore | 191 +++------------------------------ CHANGELOG.md | 10 ++ README.md | 30 ++++-- ROADMAP.md | 33 ++++++ scripts/build-linux-docker.sh | 8 +- scripts/build-release-linux.sh | 15 ++- src/core/version.go | 2 +- 7 files changed, 98 insertions(+), 191 deletions(-) create mode 100644 ROADMAP.md diff --git a/.gitignore b/.gitignore index 26cb697..6c27080 100644 --- a/.gitignore +++ b/.gitignore @@ -1,185 +1,22 @@ -# ---> Python -# ---> Go -bin/ +# Build outputs dist/ + +# Generated Windows resource compiled from packaging/windows/pysentry.rc. cmd/pysentry/*.syso + +# Local binaries that may be produced by ad-hoc go build commands. *.exe +*.test + +# Runtime files created next to the executable during local runs. pysentry.yaml jobs.yaml logs/ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# UV -# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -#uv.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/latest/usage/project/#working-with-version-control -.pdm.toml -.pdm-python -.pdm-build/ - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ - -# Ruff stuff: -.ruff_cache/ - -# PyPI configuration file -.pypirc +# Go workspace/cache files that should stay local if a developer creates them. +go.work +go.work.sum +# GoodSync metadata. This is intentionally kept because the directory is local +# to the user's file synchronization setup. +_gsdata_/ diff --git a/CHANGELOG.md b/CHANGELOG.md index f74cbda..bcb586d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ All notable PySentry changes are recorded in this file. +## 0.2.1 - 2026-06-15 + +- Fixed Docker release scripts so container builds keep Go in `PATH`. +- Disabled Go VCS stamping for Docker release builds to avoid failures when `.git` metadata is unavailable inside the container. +- Made Docker release builds write `dist/` artifacts with the current user's UID/GID instead of root ownership. +- Added `ROADMAP.md` with planned delivery formats and packaging priorities. +- Cleaned `.gitignore` for the current Go/Fyne project and kept the local `_gsdata_/` rule. +- Added README links to official Go/Fyne sites and source repositories useful for dependency mirroring. +- Documented Windows dependency installation steps for Go and MSYS2 UCRT64 GCC. + ## 0.2.0 - 2026-06-15 - Added working autostart support with status diagnostics in Settings. diff --git a/README.md b/README.md index 4879207..f21f8b0 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ The binary is written to: ```text # GUI executable produced by scripts\build-windows.bat. -dist\windows\pysentry-0.2.0-windows-amd64.exe +dist\windows\pysentry-0.2.1-windows-amd64.exe ``` Linux: @@ -95,7 +95,7 @@ The binary is written to: ```text # Linux executable produced by scripts/build-linux.sh. -dist/linux/pysentry-0.2.0-linux-amd64 +dist/linux/pysentry-0.2.1-linux-amd64 ``` Linux using Docker: @@ -112,7 +112,7 @@ The binary is copied to: ```text # Linux executable copied out of the Docker build image. -dist\linux\pysentry-0.2.0-linux-amd64 +dist\linux\pysentry-0.2.1-linux-amd64 ``` Release build from Linux: @@ -120,7 +120,8 @@ Release build from Linux: ```bash # Interactively choose Linux amd64, Linux arm64, Windows amd64, or all artifacts # from one Linux/Docker workflow. The Dockerfile contains the builder -# environment; the build commands live in this script. +# environment; the build commands live in this script. Docker runs the build +# with the current user's UID/GID so dist/ files are not owned by root. chmod +x ./scripts/build-release-linux.sh ./scripts/build-release-linux.sh ``` @@ -136,13 +137,13 @@ The binaries are copied to: ```text # Linux artifact. -dist/linux/pysentry-0.2.0-linux-amd64 +dist/linux/pysentry-0.2.1-linux-amd64 # Linux arm64 artifact. -dist/linux/pysentry-0.2.0-linux-arm64 +dist/linux/pysentry-0.2.1-linux-arm64 # Windows artifact cross-compiled from Linux. -dist/windows/pysentry-0.2.0-windows-amd64.exe +dist/windows/pysentry-0.2.1-windows-amd64.exe ``` ## Run From Source @@ -285,7 +286,7 @@ Linux: [Desktop Entry] Type=Application Name=PySentry -Exec=/opt/pysentry/pysentry-0.2.0-linux-amd64 +Exec=/opt/pysentry/pysentry-0.2.1-linux-amd64 Terminal=false ``` @@ -320,3 +321,16 @@ PySentry keeps the direct dependency list intentionally small: - `gopkg.in/yaml.v3` for YAML settings and jobs. The remaining entries in `go.mod` are indirect dependencies pulled by Fyne and the Go module resolver. + +Source repositories for mirroring: + +- Go toolchain: https://go.googlesource.com/go +- Fyne: https://github.com/fyne-io/fyne +- robfig/cron: https://github.com/robfig/cron +- go-yaml/yaml: https://github.com/go-yaml/yaml + +To list every direct and indirect Go module used by the current checkout: + +```bash +go list -m all +``` diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..1403ea4 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,33 @@ +# Roadmap + +This file tracks planned PySentry work that is larger than a single bug fix. + +## Delivery And Packaging + +Keep a single portable binary as the baseline delivery format. It is simple to +test, easy to copy between machines, and matches the current storage model where +runtime YAML files live next to the executable by default. + +Planned delivery variants: + +- Windows portable `.zip` with `pysentry.exe`, `README.md`, and `CHANGELOG.md`. +- Linux portable `.tar.gz` archives for `linux-amd64` and `linux-arm64`. +- Debian/Ubuntu `.deb` package once the Linux runtime paths are settled. +- Windows installer later, likely Inno Setup first and MSI/WiX only if needed. +- AppImage as a possible Linux GUI-friendly format after the core workflow is stable. +- Flatpak only after the desktop integration story is clearer. +- winget manifest after stable public Windows releases exist. + +Packaging design note: + +- Portable builds can keep settings and jobs next to the executable. +- Installer/package builds should move runtime data to per-user locations: + `%APPDATA%\PySentry` on Windows, and XDG directories such as + `~/.config/pysentry` and `~/.local/share/pysentry` on Linux. + +Initial priority: + +1. Windows portable `.zip`. +2. Linux portable `.tar.gz` for amd64 and arm64. +3. Debian/Ubuntu `.deb`. +4. Windows installer. diff --git a/scripts/build-linux-docker.sh b/scripts/build-linux-docker.sh index 68688a6..72ad9a4 100644 --- a/scripts/build-linux-docker.sh +++ b/scripts/build-linux-docker.sh @@ -7,6 +7,10 @@ set -euo pipefail version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/core/version.go)" version="${version:-0.0.0-dev}" output="${1:-dist/linux/pysentry-${version}-linux-amd64}" +docker_user_args=() +if command -v id >/dev/null 2>&1; then + docker_user_args=(--user "$(id -u):$(id -g)") +fi # Dockerfile contains the native packages required by Fyne. Keeping that # environment in Docker makes Linux builds repeatable from Windows hosts and CI. @@ -14,12 +18,14 @@ docker build -f Dockerfile -t gitea.mixdep.ru/mix/pysentry-builder . mkdir -p "$(dirname "$output")" docker run --rm \ + "${docker_user_args[@]}" \ -e "VERSION=${version}" \ -e "OUTPUT=${output}" \ + -e "GOCACHE=/tmp/go-build-cache" \ -v "$(pwd):/src" \ -w /src \ gitea.mixdep.ru/mix/pysentry-builder \ - bash -lc 'CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags "-s -w -X github.com/pysentry/pysentry/src/core.Version=${VERSION}" -o "${OUTPUT}" ./cmd/pysentry' + bash -c 'CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -buildvcs=false -trimpath -ldflags "-s -w -X github.com/pysentry/pysentry/src/core.Version=${VERSION}" -o "${OUTPUT}" ./cmd/pysentry' # Icons are embedded in the Go binary, so there is no assets directory to copy # after extracting the Linux executable. diff --git a/scripts/build-release-linux.sh b/scripts/build-release-linux.sh index 92969f8..e264620 100644 --- a/scripts/build-release-linux.sh +++ b/scripts/build-release-linux.sh @@ -15,6 +15,11 @@ cd "$repo_root" version="$(sed -n 's/^var Version = "\(.*\)"/\1/p' src/core/version.go)" version="${version:-0.0.0-dev}" +docker_user_args=() +if command -v id >/dev/null 2>&1; then + docker_user_args=(--user "$(id -u):$(id -g)") +fi + usage() { cat <