Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build packages for releases #2

Merged
merged 4 commits into from
Apr 17, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@
# Go workspace file
go.work

# Goreleaser dist output files
dist/

agentstate
File renamed without changes.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,13 @@ hareply serve
* The file is read again on any TCP connection, if that fails the last known file contents are used.
* If the value in the file is not a valid response for `agent-check`, the last valid response is returned instead.

## Release
Releases are built using `goreleaser`, see the [`goreleaser.yml`](./goreleaser.yml) file.

To mint a (test) release locally, install [goreleaser](https://goreleaser.com/install/) and run
```shell
goreleaser --snapshot --skip=publish --clean
```

## License
[MIT](./LICENSE.md) [🎶](https://suno.com/song/da6d4a83-1001-4694-8c28-648a6e8bad0a).
3 changes: 3 additions & 0 deletions assets/packages/default
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Options for hareply

HAREPLY_FILE='/etc/hareply/agentstate'
15 changes: 15 additions & 0 deletions assets/packages/hareply.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[Unit]
Description=hareply
After=syslog.target network-online.target

[Service]
Environment="PIDFILE=/run/hareply.pid"
EnvironmentFile=/etc/default/hareply
ExecStart=/usr/sbin/hareply
ExecReload=/bin/kill -s SIGUSR1 $MAINPID
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hareply doesn't currently listen to this signal, no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right. This comes from the copy paste from how dataplaneapi does things for their systemd service: but we indeed do not need this or use it currently.

I'll remove this command entirely, as well as the PIDFILE options below

Type=simple
PIDFile=
GuessMainPID=1
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not well versed in systemd unit files, but I'm curious: why set PIDFILE in the environment, but then make PIDFile blank and use GuessMainPID? I could look it up as well, but if you explain it then it saves me from reading systemd documentation 😅

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I looked into it in more detail, my conclusion in the end is that PID files should no longer be required for most services, and rather Type=simple should be sufficient [source]


[Install]
WantedBy=multi-user.target
4 changes: 4 additions & 0 deletions assets/packages/post-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh

systemctl --system daemon-reload || true
systemctl enable hareply || true
3 changes: 3 additions & 0 deletions assets/packages/post-uninstall.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/sh

systemctl --system daemon-reload || true
4 changes: 4 additions & 0 deletions assets/packages/pre-uninstall.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh

systemctl stop hareply || true
systemctl disable hareply || true
66 changes: 64 additions & 2 deletions goreleaser.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
project_name: hareply
builds:
- binary: hareply
-
id: hareply-build
binary: hareply
goos:
- linux
- darwin
Expand All @@ -11,7 +13,10 @@ builds:
ldflags:
- -s -w -X github.com/friendlycaptcha/hareply/buildinfo.version={{.Version}} -X github.com/friendlycaptcha/hareply/buildinfo.commit={{.Commit}} -X github.com/friendlycaptcha/hareply/buildinfo.commitDate={{.CommitDate}}
archives:
- id: hareply-archive
-
id: hareply-archive
builds:
- hareply-build
name_template: >-
{{ .ProjectName }}_
{{- .Tag }}_
Expand All @@ -20,3 +25,60 @@ archives:
format_overrides:
- goos: windows
format: zip
files:
- LICENSE
- README.md
nfpms:
-
id: hareply-package
package_name: hareply
builds:
- hareply-build
file_name_template: >-
{{ .ProjectName }}_
{{- .Tag }}_
{{- .Os }}_
{{- .Arch}}
vendor: Friendly Captcha GmbH
homepage: https://github.com/friendlycaptcha/hareply
maintainer: Guido Zuidhof <[email protected]>
description: "hareply - responder for HAProxy's agent-check"
license: MIT
formats:
- apk
- deb
- rpm
bindir: /usr/sbin
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why in sbin? I believe that is reserved for binaries that require root permissions, and hareply doesn't strictly require it (as long as the server port is >1024).

So I would make this /usr/bin instead.

section: net
priority: optional
contents:
- dst: /etc/hareply
type: dir
file_info:
owner: root
group: root
mode: 0750
- src: assets/packages/hareply.service
dst: /etc/systemd/system/hareply.service
type: config
file_info:
owner: root
group: root
mode: 0640
- src: assets/packages/default
dst: /etc/default/hareply
type: config
file_info:
owner: root
group: root
mode: 0640
scripts:
postinstall: "assets/packages/post-install.sh"
preremove: "assets/packages/pre-uninstall.sh"
postremove: "assets/packages/post-uninstall.sh"
deb:
lintian_overrides:
- statically-linked-binary
- changelog-file-missing-in-native-package
snapshot:
name_template: "{{ .Tag }}-next"