.goreleaser.yml: add binary-only releases and ed25519 signatures

This lays the groundwork for future secure self-updates.
The corresponding public key is in selfupdate/ed25519.pem.

Co-Authored-By: sketch <hello@sketch.dev>
Change-ID: s5b7440b1a9e2c5e3k
diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml
index d511538..d35e58f 100644
--- a/.github/workflows/release-build.yml
+++ b/.github/workflows/release-build.yml
@@ -30,6 +30,21 @@
           go-version-file: "${{ inputs.working-directory || '.'}}/go.mod"
           cache: true
 
+      - name: Install selfupdatectl
+        run: go install github.com/fynelabs/selfupdate/cmd/selfupdatectl@v0.2.1
+
+      - name: Extract Ed25519 signing key
+        env:
+          SELFUPDATE_SIGNING_KEY_B64: ${{ secrets.SELFUPDATE_ED25519_PRIVATE_KEY }}
+        run: |
+          # when https://github.com/fynelabs/selfupdate/issues/39 is fixed, we can stop writing to disk
+          set -euo pipefail
+          [[ -z "${SELFUPDATE_SIGNING_KEY_B64:-}" ]] && { echo >&2 "Signing key secret missing"; exit 1; }
+          selfupdate_keyfile=$(mktemp "$RUNNER_TEMP/ed25519.XXXXXX")
+          chmod 600 "$selfupdate_keyfile"
+          echo "$SELFUPDATE_SIGNING_KEY_B64" | base64 -d > "$selfupdate_keyfile"
+          echo "SELFUPDATE_PRIVKEY_PATH=$selfupdate_keyfile" >>"$GITHUB_ENV"
+
       - name: Check for changes since last tag
         id: check_changes
         run: |
@@ -100,3 +115,10 @@
             });
         env:
           TAG: ${{ steps.check_changes.outputs.tag }}
+
+      - name: Clean up signing key
+        if: always()
+        run: |
+          if [[ -n "${SELFUPDATE_PRIVKEY_PATH:-}" && -f "$SELFUPDATE_PRIVKEY_PATH" ]]; then
+            shred -u "$SELFUPDATE_PRIVKEY_PATH"
+          fi
diff --git a/.goreleaser.yml b/.goreleaser.yml
index 71b255a..ddc4407 100644
--- a/.goreleaser.yml
+++ b/.goreleaser.yml
@@ -36,6 +36,19 @@
     files:
       - README.md
       - LICENSE
+  - id: releaseBinary
+    format: binary
+    name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}"
+
+signs:
+  - id: ed25519-sign
+    cmd: selfupdatectl
+    args:
+      - "sign"
+      - "--private-key={{.Env.SELFUPDATE_PRIVKEY_PATH}}"
+      - "${artifact}"
+    signature: "${artifact}.ed25519"
+    artifacts: all
 
 release:
   github:
diff --git a/selfupdate/ed25519.pem b/selfupdate/ed25519.pem
new file mode 100644
index 0000000..15dfa4b
--- /dev/null
+++ b/selfupdate/ed25519.pem
@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MCowBQYDK2VwAyEAV4E+fJoShyziYCA5HjaafxIEX0DzIzwPwTyKOlappE8=
+-----END PUBLIC KEY-----