diff --git a/.goreleaser.yml b/.goreleaser.yml index d41eae78..42b5554c 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -4,7 +4,7 @@ before: - go mod tidy builds: - - id: ntfy_amd64 + id: ntfy_linux_amd64 binary: ntfy env: - CGO_ENABLED=1 # required for go-sqlite3 @@ -17,7 +17,7 @@ builds: post: - upx "{{ .Path }}" # apt install upx - - id: ntfy_armv6 + id: ntfy_linux_armv6 binary: ntfy env: - CGO_ENABLED=1 # required for go-sqlite3 @@ -28,10 +28,9 @@ builds: goos: [linux] goarch: [arm] goarm: [6] - # No "upx", since it causes random core dumps, see - # https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546 + # No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546 - - id: ntfy_armv7 + id: ntfy_linux_armv7 binary: ntfy env: - CGO_ENABLED=1 # required for go-sqlite3 @@ -42,10 +41,9 @@ builds: goos: [linux] goarch: [arm] goarm: [7] - # No "upx", since it causes random core dumps, see - # https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546 + # No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546 - - id: ntfy_arm64 + id: ntfy_linux_arm64 binary: ntfy env: - CGO_ENABLED=1 # required for go-sqlite3 @@ -55,14 +53,12 @@ builds: - "-linkmode=external -extldflags=-static -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}" goos: [linux] goarch: [arm64] - # No "upx", since it causes random core dumps, see - # https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546 + # No "upx" for ARM, see https://github.com/binwiederhier/ntfy/issues/191#issuecomment-1083406546 - id: ntfy_windows_amd64 binary: ntfy env: - CGO_ENABLED=0 # explicitly disable, since we don't need go-sqlite3 - tags: [] ldflags: - "-X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}" goos: [windows] @@ -107,6 +103,12 @@ nfpms: postremove: "scripts/postrm.sh" archives: - + id: ntfy_linux + builds: + - ntfy_linux_amd64 + - ntfy_linux_armv6 + - ntfy_linux_armv7 + - ntfy_linux_arm64 wrap_in_directory: true files: - LICENSE @@ -116,7 +118,18 @@ archives: - client/client.yml - client/ntfy-client.service replacements: - 386: i386 + amd64: x86_64 + - + id: ntfy_windows + builds: + - ntfy_windows_amd64 + format: zip + wrap_in_directory: true + files: + - LICENSE + - README.md + - client/client.yml + replacements: amd64: x86_64 checksum: name_template: 'checksums.txt' diff --git a/Makefile b/Makefile index 8a5d9c32..375b6523 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,8 @@ VERSION := $(shell git describe --tag) help: @echo "Typical commands (more see below):" @echo " make build - Build web app, documentation and server/client (sloowwww)" - @echo " make server-amd64 - Build server/client binary (amd64, no web app or docs)" - @echo " make install-amd64 - Install ntfy binary to /usr/bin/ntfy (amd64)" + @echo " make cli-linux-amd64 - Build server/client binary (amd64, no web app or docs)" + @echo " make install-linux-amd64 - Install ntfy binary to /usr/bin/ntfy (amd64)" @echo " make web - Build the web app" @echo " make docs - Build the documentation" @echo " make check - Run all tests, vetting/formatting checks and linters" @@ -16,11 +16,12 @@ help: @echo " make clean - Clean build/dist folders" @echo @echo "Build server & client (not release version):" - @echo " make server - Build server & client (all architectures)" - @echo " make server-amd64 - Build server & client (amd64 only)" - @echo " make server-armv6 - Build server & client (armv6 only)" - @echo " make server-armv7 - Build server & client (armv7 only)" - @echo " make server-arm64 - Build server & client (arm64 only)" + @echo " make cli - Build server & client (all architectures)" + @echo " make cli-linux-amd64 - Build server & client (Linux, amd64 only)" + @echo " make cli-linux-armv6 - Build server & client (Linux, armv6 only)" + @echo " make cli-linux-armv7 - Build server & client (Linux, armv7 only)" + @echo " make cli-linux-arm64 - Build server & client (Linux, arm64 only)" + @echo " make cli-windows-amd64 - Build client (Windows, amd64 only)" @echo @echo "Build web app:" @echo " make web - Build the web app" @@ -51,14 +52,14 @@ help: @echo " make release-snapshot - Create a test release" @echo @echo "Install locally (requires sudo):" - @echo " make install-amd64 - Copy amd64 binary from dist/ to /usr/bin/ntfy" - @echo " make install-armv6 - Copy armv6 binary from dist/ to /usr/bin/ntfy" - @echo " make install-armv7 - Copy armv7 binary from dist/ to /usr/bin/ntfy" - @echo " make install-arm64 - Copy arm64 binary from dist/ to /usr/bin/ntfy" - @echo " make install-deb-amd64 - Install .deb from dist/ (amd64 only)" - @echo " make install-deb-armv6 - Install .deb from dist/ (armv6 only)" - @echo " make install-deb-armv7 - Install .deb from dist/ (armv7 only)" - @echo " make install-deb-arm64 - Install .deb from dist/ (arm64 only)" + @echo " make install-linux-amd64 - Copy amd64 binary from dist/ to /usr/bin/ntfy" + @echo " make install-linux-armv6 - Copy armv6 binary from dist/ to /usr/bin/ntfy" + @echo " make install-linux-armv7 - Copy armv7 binary from dist/ to /usr/bin/ntfy" + @echo " make install-linux-arm64 - Copy arm64 binary from dist/ to /usr/bin/ntfy" + @echo " make install-linux-deb-amd64 - Install .deb from dist/ (amd64 only)" + @echo " make install-linux-deb-armv6 - Install .deb from dist/ (armv6 only)" + @echo " make install-linux-deb-armv7 - Install .deb from dist/ (armv7 only)" + @echo " make install-linux-deb-arm64 - Install .deb from dist/ (arm64 only)" # Building everything @@ -101,36 +102,39 @@ web-build: # Main server/client build -server: server-deps +cli: cli-deps goreleaser build --snapshot --rm-dist --debug -server-amd64: server-deps-static-sites - goreleaser build --snapshot --rm-dist --debug --id ntfy_amd64 +cli-linux-amd64: cli-deps-static-sites + goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_amd64 -server-armv6: server-deps-static-sites server-deps-gcc-armv6-armv7 - goreleaser build --snapshot --rm-dist --debug --id ntfy_armv6 +cli-linux-armv6: cli-deps-static-sites cli-deps-gcc-armv6-armv7 + goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_armv6 -server-armv7: server-deps-static-sites server-deps-gcc-armv6-armv7 - goreleaser build --snapshot --rm-dist --debug --id ntfy_armv7 +cli-linux-armv7: cli-deps-static-sites cli-deps-gcc-armv6-armv7 + goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_armv7 -server-arm64: server-deps-static-sites server-deps-gcc-arm64 - goreleaser build --snapshot --rm-dist --debug --id ntfy_arm64 +cli-linux-arm64: cli-deps-static-sites cli-deps-gcc-arm64 + goreleaser build --snapshot --rm-dist --debug --id ntfy_linux_arm64 -server-deps: server-deps-static-sites server-deps-all server-deps-gcc +cli-windows-amd64: cli-deps-static-sites + goreleaser build --snapshot --rm-dist --debug --id ntfy_windows_amd64 -server-deps-gcc: server-deps-gcc-armv6-armv7 server-deps-gcc-arm64 +cli-deps: cli-deps-static-sites cli-deps-all cli-deps-gcc -server-deps-static-sites: +cli-deps-gcc: cli-deps-gcc-armv6-armv7 cli-deps-gcc-arm64 + +cli-deps-static-sites: mkdir -p server/docs server/site touch server/docs/index.html server/site/app.html -server-deps-all: +cli-deps-all: which upx || { echo "ERROR: upx not installed. On Ubuntu, run: apt install upx"; exit 1; } -server-deps-gcc-armv6-armv7: +cli-deps-gcc-armv6-armv7: which arm-linux-gnueabi-gcc || { echo "ERROR: ARMv6/ARMv7 cross compiler not installed. On Ubuntu, run: apt install gcc-arm-linux-gnueabi"; exit 1; } -server-deps-gcc-arm64: +cli-deps-gcc-arm64: which aarch64-linux-gnu-gcc || { echo "ERROR: ARM64 cross compiler not installed. On Ubuntu, run: apt install gcc-aarch64-linux-gnu"; exit 1; } @@ -184,10 +188,10 @@ staticcheck: .PHONY # Releasing targets -release: clean server-deps release-check-tags docs web check +release: clean cli-deps release-check-tags docs web check goreleaser release --rm-dist --debug -release-snapshot: clean server-deps docs web check +release-snapshot: clean cli-deps docs web check goreleaser release --snapshot --skip-publish --rm-dist --debug release-check-tags: @@ -204,31 +208,31 @@ release-check-tags: # Installing targets -install-amd64: remove-binary +install-linux-amd64: remove-binary sudo cp -a dist/ntfy_amd64_linux_amd64_v1/ntfy /usr/bin/ntfy -install-armv6: remove-binary +install-linux-armv6: remove-binary sudo cp -a dist/ntfy_armv6_linux_arm_6/ntfy /usr/bin/ntfy -install-armv7: remove-binary +install-linux-armv7: remove-binary sudo cp -a dist/ntfy_armv7_linux_arm_7/ntfy /usr/bin/ntfy -install-arm64: remove-binary +install-linux-arm64: remove-binary sudo cp -a dist/ntfy_arm64_linux_arm64/ntfy /usr/bin/ntfy remove-binary: sudo rm -f /usr/bin/ntfy -install-amd64-deb: purge-package +install-linux-amd64-deb: purge-package sudo dpkg -i dist/ntfy_*_linux_amd64.deb -install-armv6-deb: purge-package +install-linux-armv6-deb: purge-package sudo dpkg -i dist/ntfy_*_linux_armv6.deb -install-armv7-deb: purge-package +install-linux-armv7-deb: purge-package sudo dpkg -i dist/ntfy_*_linux_armv7.deb -install-arm64-deb: purge-package +install-linux-arm64-deb: purge-package sudo dpkg -i dist/ntfy_*_linux_arm64.deb purge-package: diff --git a/docs/develop.md b/docs/develop.md index 6de4af2b..61ae9b17 100644 --- a/docs/develop.md +++ b/docs/develop.md @@ -112,8 +112,8 @@ by typing `make`: $ make Typical commands (more see below): make build - Build web app, documentation and server/client (sloowwww) - make server-amd64 - Build server/client binary (amd64, no web app or docs) - make install-amd64 - Install ntfy binary to /usr/bin/ntfy (amd64) + make cli-linux-amd64 - Build server/client binary (amd64, no web app or docs) + make install-linux-amd64 - Install ntfy binary to /usr/bin/ntfy (amd64) make web - Build the web app make docs - Build the documentation make check - Run all tests, vetting/formatting checks and linters @@ -158,45 +158,47 @@ $ make release-snapshot During development, you may want to be more picky and build only certain things. Here are a few examples. ### Build the ntfy binary -To build only the `ntfy` binary **without the web app or documentation**, use the `make server-...` targets: +To build only the `ntfy` binary **without the web app or documentation**, use the `make cli-...` targets: ``` shell $ make Build server & client (not release version): - make server - Build server & client (all architectures) - make server-amd64 - Build server & client (amd64 only) - make server-armv7 - Build server & client (armv7 only) - make server-arm64 - Build server & client (arm64 only) + make cli - Build server & client (all architectures) + make cli-linux-amd64 - Build server & client (Linux, amd64 only) + make cli-linux-armv6 - Build server & client (Linux, armv6 only) + make cli-linux-armv7 - Build server & client (Linux, armv7 only) + make cli-linux-arm64 - Build server & client (Linux, arm64 only) + make cli-windows-amd64 - Build client (Windows, amd64 only) ``` -So if you're on an amd64/x86_64-based machine, you may just want to run `make server-amd64` during testing. On a modern -system, this shouldn't take longer than 5-10 seconds. I often combine it with `install-amd64` so I can run the binary +So if you're on an amd64/x86_64-based machine, you may just want to run `make cli-linux-amd64` during testing. On a modern +system, this shouldn't take longer than 5-10 seconds. I often combine it with `install-linux-amd64` so I can run the binary right away: ``` shell -$ make server-amd64 install-amd64 +$ make cli-linux-amd64 install-linux-amd64 $ ntfy serve ``` **During development of the main app, you can also just use `go run main.go`**, as long as you run -`make server-deps-static-sites`at least once and `CGO_ENABLED=1`: +`make cli-deps-static-sites`at least once and `CGO_ENABLED=1`: ``` shell $ export CGO_ENABLED=1 -$ make server-deps-static-sites +$ make cli-deps-static-sites $ go run main.go serve 2022/03/18 08:43:55 Listening on :2586[http] ... ``` -If you don't run `server-deps-static-sites`, you may see an error *`pattern ...: no matching files found`*: +If you don't run `cli-deps-static-sites`, you may see an error *`pattern ...: no matching files found`*: ``` $ go run main.go serve server/server.go:85:13: pattern docs: no matching files found ``` This is because we use `go:embed` to embed the documentation and web app, so the Go code expects files to be -present at `server/docs` and `server/site`. If they are not, you'll see the above error. The `server-deps-static-sites` +present at `server/docs` and `server/site`. If they are not, you'll see the above error. The `cli-deps-static-sites` target creates dummy files that ensures that you'll be able to build. @@ -210,7 +212,7 @@ $ make web ``` This will build the web app using Create React App and then **copy the production build to the `server/site` folder**, so -that when you `make server` (or `make server-amd64`, ...), you will have the web app included in the `ntfy` binary. +that when you `make cli` (or `make cli-linux-amd64`, ...), you will have the web app included in the `ntfy` binary. If you're developing on the web app, it's best to just `cd web` and run `npm start` manually. This will open your browser at `http://127.0.0.1:3000` with the web app, and as you edit the source files, they will be recompiled and the browser diff --git a/docs/subscribe/cli.md b/docs/subscribe/cli.md index 85468166..8e5709f9 100644 --- a/docs/subscribe/cli.md +++ b/docs/subscribe/cli.md @@ -123,7 +123,7 @@ which will read the `subscribe` config from the config file. Please also check o Here's an example config file that subscribes to three different topics, executing a different command for each of them: -=== "~/.config/ntfy/client.yml" +=== "~/.config/ntfy/client.yml (Linux)" ```yaml subscribe: - topic: echo-this @@ -145,26 +145,27 @@ Here's an example config file that subscribes to three different topics, executi fi ``` - === "%AppData%\ntfy\client.yml" - ``` +=== "%AppData%\ntfy\client.yml (Windows)" + ```yaml subscribe: - topic: echo-this command: 'echo Message received: %message%' - - topic: calc - command: calc + - topic: alerts + command: | + notifu /m "%NTFY_MESSAGE%" + exit 0 if: priority: high,urgent - - topic: toastthis - command: | - notifu /p "a title: %NTFY_TITLE%" /m "%NTFY_MESSAGE%" - exit 0 + - topic: calc + command: calc ``` In this example, when `ntfy subscribe --from-config` is executed: * Messages to `echo-this` simply echos to standard out -* Messages to `alerts` display as desktop notification for high priority messages using [notify-send](https://manpages.ubuntu.com/manpages/focal/man1/notify-send.1.html) -* Messages to `calc` open the gnome calculator 😀 (*because, why not*) +* Messages to `alerts` display as desktop notification for high priority messages using [notify-send](https://manpages.ubuntu.com/manpages/focal/man1/notify-send.1.html) (Linux) + or [notifu](https://www.paralint.com/projects/notifu/) (Windows) +* Messages to `calc` open the calculator 😀 (*because, why not*) * Messages to `print-temp` execute an inline script and print the CPU temperature (Linux version only) I hope this shows how powerful this command is. Here's a short video that demonstrates the above example: