fix: Build MSI in goreleaser build

This commit is contained in:
jamesread 2026-06-26 21:42:12 +01:00
parent abf4fc2cf0
commit b749b797f8
8 changed files with 43 additions and 18 deletions

View File

@ -43,6 +43,8 @@ builds:
checksum:
name_template: 'checksums.txt'
extra_files:
- glob: ./dist/OliveTin-windows-amd64.msi
snapshot:
version_template: "{{ .Branch }}-{{ .ShortCommit }}"
changelog:
@ -176,6 +178,8 @@ nfpms:
dst: /usr/share/man/man1/OliveTin.1.gz
release:
extra_files:
- glob: ./dist/OliveTin-windows-amd64.msi
footer: |
## Container images (from GitHub)

View File

@ -9,8 +9,6 @@ plugins:
- '@semantic-release/git'
- - "@semantic-release/exec"
- publishCmd: |
goreleaser release --clean --timeout 60m
VERSION=${nextRelease.version} ./var/windows/build-msi.sh
./var/windows/upload-msi-release.sh ${nextRelease.gitTag}
VERSION=${nextRelease.version} GORELEASER_TIMEOUT=60m ./var/windows/goreleaser-release-with-msi.sh
tagFormat: '${version}'

View File

@ -72,4 +72,4 @@ clean:
config-tool:
cd service && go run cmd/config-tool/main.go
.PHONY: proto service
.PHONY: proto service windows-resources windows-msi

View File

@ -34,7 +34,7 @@
</Directory>
<DirectoryRef Id="ConfigDir">
<Component Id="ConfigFile" Guid="A1B2C3D4-E5F6-7890-ABCD-EF1234567890" Win64="yes">
<Component Id="ConfigFile" Guid="A1B2C3D4-E5F6-7890-ABCD-EF1234567890" Win64="yes" Permanent="yes" NeverOverwrite="yes">
<File
Id="ConfigYaml"
Source="$(var.ConfigSource)"

View File

@ -20,11 +20,11 @@ if ! command -v wixl >/dev/null || ! command -v wixl-heat >/dev/null; then
exit 1
fi
normalize_windows_version() {
normalize_msi_version() {
local raw="${1#v}"
raw="${raw%%-*}"
if [[ ! "${raw}" =~ ^[0-9]+(\.[0-9]+){0,3}$ ]]; then
echo "0.0.0.0"
echo "0.0.0"
return
fi
local -a parts=()
@ -32,8 +32,7 @@ normalize_windows_version() {
local major="${parts[0]:-0}"
local minor="${parts[1]:-0}"
local patch="${parts[2]:-0}"
local build="${parts[3]:-0}"
printf '%s.%s.%s.%s' "${major}" "${minor}" "${patch}" "${build}"
printf '%s.%s.%s' "${major}" "${minor}" "${patch}"
}
VERSION="${VERSION:-}"
@ -44,7 +43,7 @@ if [[ -z "${VERSION}" ]]; then
echo "Could not determine release version; set VERSION explicitly" >&2
exit 1
fi
WINDOWS_VERSION="$(normalize_windows_version "${VERSION}")"
MSI_VERSION="$(normalize_msi_version "${VERSION}")"
STAGING="$(mktemp -d)"
APP_STAGING="$(mktemp -d)"
@ -82,7 +81,7 @@ cp -a "${SOURCE_ROOT}/webui/." "${APP_STAGING}/webui/"
wixl \
-v \
-a x64 \
-D "Version=${WINDOWS_VERSION}" \
-D "Version=${MSI_VERSION}" \
-D "Win64=yes" \
-D "SourceDir=${APP_STAGING}" \
-D "ConfigSource=${SOURCE_ROOT}/config.yaml" \

View File

@ -70,14 +70,16 @@ fi
WINDOWS_VERSION="$(normalize_windows_version "$(resolve_version "${1:-}")")"
echo "Generating Windows resources for version ${WINDOWS_VERSION}"
TOOL_BIN="$(mktemp -d)/bin"
export GOBIN="${TOOL_BIN}"
go install "github.com/josephspurrier/goversioninfo/cmd/goversioninfo@${GOVERSIONINFO_VERSION}"
WORK_DIR="$(mktemp -d)"
trap 'rm -rf "${WORK_DIR}"' EXIT
trap 'rm -rf "${WORK_DIR}" "${TOOL_BIN%/*}"' EXIT
(
cd "${WORK_DIR}"
goversioninfo \
"${TOOL_BIN}/goversioninfo" \
-64 \
-platform-specific \
-icon="${ICON_PATH}" \

View File

@ -0,0 +1,17 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TIMEOUT="${GORELEASER_TIMEOUT:-60m}"
if [[ -z "${VERSION:-}" ]]; then
echo "VERSION is required to build the Windows MSI" >&2
exit 1
fi
goreleaser release --clean --timeout "${TIMEOUT}" --skip=checksum,publish "$@"
"${SCRIPT_DIR}/build-msi.sh"
goreleaser release --timeout "${TIMEOUT}" \
--skip=validate,before,build,archive,nfpm,docker,sign,sbom,after,announce "$@"

View File

@ -25,11 +25,16 @@ if ! command -v gh >/dev/null; then
fi
checksums_path="${DIST_DIR}/checksums.txt"
if [[ -f "${checksums_path}" ]] && ! grep -qF " ${MSI_NAME}" "${checksums_path}"; then
(
cd "${DIST_DIR}"
sha256sum "${MSI_NAME}"
) >> "${checksums_path}"
new_checksum="$(cd "${DIST_DIR}" && sha256sum "${MSI_NAME}")"
if [[ -f "${checksums_path}" ]] && grep -qF " ${MSI_NAME}" "${checksums_path}"; then
tmp="$(mktemp)"
grep -vF " ${MSI_NAME}" "${checksums_path}" > "${tmp}"
printf '%s\n' "${new_checksum}" >> "${tmp}"
mv "${tmp}" "${checksums_path}"
elif [[ -f "${checksums_path}" ]]; then
printf '%s\n' "${new_checksum}" >> "${checksums_path}"
else
printf '%s\n' "${new_checksum}" > "${checksums_path}"
fi
gh release upload "${TAG}" "${MSI_PATH}" --clobber