Skip to content

Commit

Permalink
add: Makefile compiles binary with derived version
Browse files Browse the repository at this point in the history
add: Makefile test task runs tests & linting
add: Makefile generates changelog
chore: spezifisch#62, adds a changelog
docs: Adds instructions & dependency list for Makefile
  • Loading branch information
xxxserxxx committed Oct 15, 2024
1 parent 617c588 commit 1e073f1
Show file tree
Hide file tree
Showing 5 changed files with 145 additions and 0 deletions.
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Changelog

All notable changes to this project will be documented in this file.

## [unreleased]

### 🐛 Bug Fixes

- Mpris not implementing the right interface

### ⚙️ Miscellaneous Tasks

- Rename mpris player (Player -> stmps)

### Queue

- Fix scroll behaviour, unexport some methods

<!-- generated by git-cliff -->
16 changes: 16 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.PHONY: all test

all: test stmps CHANGELOG.md

VERSION != git describe --tags HEAD

stmps:
go build -ldflags="-X main.Version=$(VERSION)" -o stmps .

CHANGELOG.md:
git cliff -o CHANGELOG.md

test:
go test ./...
markdownlint README.md
golangci-lint run
21 changes: 21 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,27 @@ These screenshots use [Navidrome's demo server](https://demo.navidrome.org/) ([c

Compile STMPS with `go build`. Cgo is needed for interfacing with libmpv.

STMPS can be installed without checking out the repository by running:

```

Check failure on line 56 in README.md

View workflow job for this annotation

GitHub Actions / Lint Markdown

Fenced code blocks should have a language specified [Context: "```"]
go install github.com/spezifisch/stmps@latest
```

### Developers & Distribution Packagers

There's a Makefile with tasks for:

- Updating the CHANGELOG.md
- Running tests & linting commands
- Compiling an executable with a derived tag for the version

These tasks depend on the following tools:

- [git-cliff](https://git-cliff.org/) for updating the CHANGELOG.md
- [markdownlint](https://github.com/igorshubovych/markdownlint-cli) for running the markdown linting test
- [golangci-lint](https://github.com/golangci/golangci-lint) for linting the Go code


Check failure on line 74 in README.md

View workflow job for this annotation

GitHub Actions / Lint Markdown

Multiple consecutive blank lines [Expected: 1; Actual: 2]
## Configuration

STMPS looks for a configuration file named `stmp.toml` in either `$HOME/.config/stmp` or the directory containing the executable.
Expand Down
83 changes: 83 additions & 0 deletions cliff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# git-cliff ~ default configuration file
# https://git-cliff.org/docs/configuration
#
# Lines starting with "#" are comments.
# Configuration options are organized into tables and keys.
# See documentation for more information on available options.

[changelog]
# template for the changelog header
header = """
# Changelog\n
All notable changes to this project will be documented in this file.\n
"""
# template for the changelog body
# https://keats.github.io/tera/docs/#introduction
body = """
{% if version %}\
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
## [unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
{% if commit.breaking %}[**breaking**] {% endif %}\
{{ commit.message | upper_first }}\
{% endfor %}
{% endfor %}\n
"""
# template for the changelog footer
footer = """
<!-- generated by git-cliff -->
"""
# remove the leading and trailing s
trim = true
# postprocessors
postprocessors = [
# { pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL
]
# render body even when there are no releases to process
# render_always = true
# output file path
# output = "test.md"

[git]
# parse the commits based on https://www.conventionalcommits.org
conventional_commits = true
# filter out the commits that are not conventional
filter_unconventional = true
# process each line of a commit as an individual commit
split_commits = false
# regex for preprocessing the commit messages
commit_preprocessors = [
# Replace issue numbers
#{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"},
# Check spelling of the commit with https://github.com/crate-ci/typos
# If the spelling is incorrect, it will be automatically fixed.
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
]
# regex for parsing and grouping commits
commit_parsers = [
{ message = "^feat", group = "<!-- 0 -->🚀 Features" },
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" },
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" },
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" },
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
{ message = "^style", group = "<!-- 5 -->🎨 Styling" },
{ message = "^test", group = "<!-- 6 -->🧪 Testing" },
{ message = "^chore\\(release\\): prepare for", skip = true },
{ message = "^chore\\(deps.*\\)", skip = true },
{ message = "^chore\\(pr\\)", skip = true },
{ message = "^chore\\(pull\\)", skip = true },
{ message = "^chore|^ci", group = "<!-- 7 -->⚙️ Miscellaneous Tasks" },
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" },
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" },
]
# filter out the commits that are not matched by commit parsers
filter_commits = false
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "oldest"
6 changes: 6 additions & 0 deletions stmps.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
var osExit = os.Exit // A variable to allow mocking os.Exit in tests
var headlessMode bool // This can be set to true during tests
var testMode bool // This can be set to true during tests, too
var Version string = "development"

func readConfig(configFile *string) error {
required_properties := []string{"auth.username", "auth.password", "server.host"}
Expand Down Expand Up @@ -108,13 +109,18 @@ func main() {
cpuprofile := flag.String("cpuprofile", "", "write cpu profile to `file`")
memprofile := flag.String("memprofile", "", "write memory profile to `file`")
configFile := flag.String("config", "", "use config `file`")
version := flag.Bool("version", false, "print the stmps version and exit")

flag.Parse()
if *help {
fmt.Printf("USAGE: %s <args> [[user:pass@]server:port]\n", os.Args[0])
flag.Usage()
osExit(0)
}
if *version {
fmt.Printf("stmps %s", Version)
osExit(0)
}

// cpu/memprofile code straight from https://pkg.go.dev/runtime/pprof
if *cpuprofile != "" {
Expand Down

0 comments on commit 1e073f1

Please sign in to comment.