build release with static binary and release custom builder (#2)

Co-authored-by: scip <scip@noreply.codeberg.org>
Co-committed-by: scip <scip@noreply.codeberg.org>
This commit is contained in:
scip
2025-11-06 23:09:56 +01:00
committed by T. von Dein
parent 1ef2e34511
commit 6221e7ae74
4 changed files with 144 additions and 0 deletions

54
.goreleaser.yaml Normal file
View File

@@ -0,0 +1,54 @@
# vim: set ts=2 sw=2 tw=0 fo=cnqoj
version: 2
gitea_urls:
api: https://codeberg.org/api/v1
download: https://codeberg.org
builds:
- builder: prebuilt
goos:
- linux
goarch:
- amd64
goamd64:
- v1
prebuilt:
path: output/mybin_{{ .Os }}_{{ .Arch }}{{ with .Amd64 }}_{{ . }}{{ end }}/mybin
binary: bin/mybin
archives:
- formats: [binary]
name_template: >-
{{ .ProjectName }}_
{{- title .Os }}_
{{- if eq .Arch "amd64" }}x86_64
{{- else if eq .Arch "386" }}i386
{{- else }}{{ .Arch }}{{ end }}
{{- if .Arm }}v{{ .Arm }}{{ end }}_{{ .Tag }}
wrap_in_directory: true
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
groups:
- title: Improved
regexp: '^.*?(feat|add|new)(\([[:word:]]+\))??!?:.+$'
order: 0
- title: Fixed
regexp: '^.*?(bug|fix)(\([[:word:]]+\))??!?:.+$'
order: 1
- title: Changed
order: 999
release:
header: "# Release Notes"
footer: >-
---
Full Changelog: [{{ .PreviousTag }}...{{ .Tag }}](https://codeberg.org/scip/diceware/compare/{{ .PreviousTag }}...{{ .Tag }})

54
.woodpecker/release.sh Executable file
View File

@@ -0,0 +1,54 @@
#!/bin/bash
# This is my own simple codeberg generic releaser. It takes to
# binaries to be uploaded as arguments and takes every other args from
# env. Works on tags or normal commits (push), tags must start with v.
set -e
die() {
echo $*
exit 1
}
if test -z "$DEPLOY_TOKEN"; then
die "token DEPLOY_TOKEN not set"
fi
git fetch --all
# determine current tag or commit hash
version="$CI_COMMIT_TAG"
previous=""
log=""
if test -z "$version"; then
version="${CI_COMMIT_SHA:0:6}"
log=$(git log -1 --oneline)
else
previous=$(git tag -l | grep -E "^v" | tac | grep -A1 "$version" | tail -1)
log=$(git log -1 --oneline "${previous}..${version}" | sed 's|^|- |g')
fi
# release body
printf "# Changes\n\n %s\n" "$log" > body.txt
# create the release
https --ignore-stdin --check-status -b -A bearer -a "$DEPLOY_TOKEN" POST \
"https://codeberg.org/api/v1/repos/${CI_REPO_OWNER}/${CI_REPO_NAME}/releases" \
tag_name="$version" name="Release $version" body=@body.txt > release.json
# we need the id to upload files
ID=$(jq -r .id < release.json)
if test -z "$ID"; then
cat release.json
die "failed to create release"
fi
# actually upload
for file in "$@"; do
https --ignore-stdin --check-status -A bearer -a "$DEPLOY_TOKEN" -f POST \
"https://codeberg.org/api/v1/repos/${CI_REPO_OWNER}/${CI_REPO_NAME}/releases/$ID/assets" \
"name=${file}-${version}" "attachment@${file}"
done

28
.woodpecker/release.yaml Normal file
View File

@@ -0,0 +1,28 @@
# build release
labels:
platform: linux/amd64
steps:
compile:
when:
event: [tag,manual]
image: alpine:latest
commands:
- apk update
- apk add --no-cache bash build-base
- make static
- file dicepwgen_static
- mv dicepwgen_static dicepwgen-linux-amd64
release:
image: alpine:latest
when:
event: [tag,manual]
environment:
DEPLOY_TOKEN:
from_secret: DEPLOY_TOKEN
commands:
- apk update
- apk add --no-cache bash httpie jq git
- .woodpecker/release.sh dicepwgen-linux-amd64

View File

@@ -22,6 +22,7 @@ CFLAGS = -Wall -Wextra -Werror -O1 -g
LDFLAGS =
OBJS = dicepwgen.o dictfile.o tossing.o debug.o
DST = dicepwgen
STATIC = dicepwgen_static
PREFIX = /usr/local
UID = root
GID = 0
@@ -35,6 +36,13 @@ all: $(DST)
$(DST): $(OBJS)
gcc -DDICTFILE=$(DICTFILE) $(OBJS) -o $(DST)
static: $(STATIC)
$(STATIC): $(OBJS)
gcc -DDICTFILE=$(DICTFILE) -static $(OBJS) -o $(STATIC)
%.o: %.c
gcc -c $(CFLAGS) -DDICTFILE=$(DICTFILE) $*.c -o $*.o