| 
									
										
										
										
											2021-06-28 12:17:20 +02:00
										 |  |  | #!/bin/sh
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-28 13:08:35 +01:00
										 |  |  | set -e | 
					
						
							| 
									
										
										
										
											2021-06-28 12:17:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-28 13:08:35 +01:00
										 |  |  | # Log and execute provided args. | 
					
						
							|  |  |  | log_exec() { echo "$ ${*}"; "$@"; } | 
					
						
							| 
									
										
										
										
											2022-04-28 13:32:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-28 13:08:35 +01:00
										 |  |  | # Grab environment variables and set defaults + requirements. | 
					
						
							| 
									
										
										
										
											2023-08-01 14:47:53 +02:00
										 |  |  | GO_BUILDTAGS="${GO_BUILDTAGS-} netgo osusergo static_build kvformat timetzdata" | 
					
						
							| 
									
										
										
										
											2023-05-28 13:08:35 +01:00
										 |  |  | GO_LDFLAGS="${GO_LDFLAGS-} -s -w -extldflags '-static' -X 'main.Version=${VERSION:-$(git describe --tags --abbrev=0)}'" | 
					
						
							|  |  |  | GO_GCFLAGS=${GO_GCFLAGS-} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Maintain old $DEBUG compat. | 
					
						
							|  |  |  | [ ! -z "$DEBUG" ] && \
 | 
					
						
							|  |  |  |     GO_BUILDTAGS="${GO_BUILDTAGS} debugenv" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Available Go build tags, with explanation, followed by benefits of enabling it: | 
					
						
							| 
									
										
										
										
											2024-06-29 09:35:57 +02:00
										 |  |  | # - kvformat:       enables prettier output of log fields                       (slightly better performance) | 
					
						
							|  |  |  | # - timetzdata:     embed timezone database inside binary                       (allow setting local time inside Docker containers, at cost of 450KB) | 
					
						
							|  |  |  | # - notracing:      disables compiling-in otel tracing support                  (reduced binary size, better performance) | 
					
						
							|  |  |  | # - nometrics:      disables compiling-in otel metrics support                  (reduced binary size, better performance) | 
					
						
							|  |  |  | # - noerrcaller:    disables caller function prefix in errors                   (slightly better performance, at cost of err readability) | 
					
						
							|  |  |  | # - debug:          enables /debug/pprof endpoint                               (adds debug, at performance cost) | 
					
						
							|  |  |  | # - debugenv:       enables /debug/pprof endpoint if DEBUG=1 env during runtime (adds debug, at performance cost) | 
					
						
							|  |  |  | # - moderncsqlite3: reverts to using the C-to-Go transpiled SQLite driver       (disables the WASM-based SQLite driver) | 
					
						
							| 
									
										
										
										
											2023-05-28 13:08:35 +01:00
										 |  |  | log_exec env CGO_ENABLED=0 go build -trimpath -v \
 | 
					
						
							|  |  |  |                        -tags "${GO_BUILDTAGS}" \
 | 
					
						
							|  |  |  |                        -ldflags="${GO_LDFLAGS}" \
 | 
					
						
							|  |  |  |                        -gcflags="${GO_GCFLAGS}" \
 | 
					
						
							| 
									
										
										
										
											2021-08-26 11:19:52 +01:00
										 |  |  |                        ./cmd/gotosocial |