Build for Windows
This commit is contained in:
		
							parent
							
								
									613348d37e
								
							
						
					
					
						commit
						19d2a46457
					
				
					 4 changed files with 98 additions and 78 deletions
				
			
		|  | @ -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' | ||||
|  |  | |||
							
								
								
									
										84
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										84
									
								
								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: | ||||
|  |  | |||
|  | @ -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  | ||||
|  |  | |||
|  | @ -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: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue