From 71c0d891021527af101d79cd350dc2a37ca889c5 Mon Sep 17 00:00:00 2001 From: Maxfield Luke Date: Wed, 29 Jul 2026 05:00:12 -0400 Subject: [PATCH] ci: fix host-mode docker go invocation --- .forgejo/workflows/ci.yml | 18 +++--------- .forgejo/workflows/release.yml | 52 ++++------------------------------ scripts/ci-release.sh | 29 +++++++++++++++++++ 3 files changed, 39 insertions(+), 60 deletions(-) create mode 100755 scripts/ci-release.sh diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index 8eb2e89..8456054 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -1,4 +1,3 @@ -# Host-mode runner: Go via official image. name: CI on: @@ -22,20 +21,11 @@ jobs: run: | set -euo pipefail case "$GITHUB_WORKSPACE" in - /data/*) HOST_WORKSPACE="/opt/forgejo-runner/data${GITHUB_WORKSPACE#/data}" ;; - *) HOST_WORKSPACE="$GITHUB_WORKSPACE" ;; + /data/*) HOST_WS="/opt/forgejo-runner/data${GITHUB_WORKSPACE#/data}" ;; + *) HOST_WS="$GITHUB_WORKSPACE" ;; esac test -f "$GITHUB_WORKSPACE/go.mod" docker run --rm --network host \ - --volume "$HOST_WORKSPACE:/src" \ - --workdir /src \ - -e CGO_ENABLED=0 \ + -v "${HOST_WS}:/src" -w /src -e CGO_ENABLED=0 \ golang:1.25-bookworm \ - bash -lc ' - set -euo pipefail - go version - go test -count=1 ./... - go vet ./... - make build - ls -la bin/tarakan - ' + sh -c "go version && go test -count=1 ./... && go vet ./... && make build && ls -la bin/tarakan" diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index 0a0afab..9a4db26 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -1,4 +1,3 @@ -# Multi-arch binaries + Forgejo release on tags v*. name: Release on: @@ -22,56 +21,17 @@ jobs: run: | set -euo pipefail case "$GITHUB_WORKSPACE" in - /data/*) HOST_WORKSPACE="/opt/forgejo-runner/data${GITHUB_WORKSPACE#/data}" ;; - *) HOST_WORKSPACE="$GITHUB_WORKSPACE" ;; + /data/*) HOST_WS="/opt/forgejo-runner/data${GITHUB_WORKSPACE#/data}" ;; + *) HOST_WS="$GITHUB_WORKSPACE" ;; esac version="${GITHUB_REF_NAME//\//-}" + chmod +x scripts/ci-release.sh docker run --rm --network host \ - --volume "$HOST_WORKSPACE:/src" \ - --workdir /src \ + -v "${HOST_WS}:/src" -w /src \ -e CGO_ENABLED=0 \ -e VERSION="$version" \ golang:1.25-bookworm \ - bash -lc ' - set -euo pipefail - apt-get update -qq - apt-get install -y -qq zip >/dev/null - go test -count=1 ./... - go vet ./... - - version="${VERSION}" - mkdir -p dist staging - targets=( - "linux amd64" - "linux arm64" - "darwin amd64" - "darwin arm64" - "windows amd64" - "windows arm64" - ) - for target in "${targets[@]}"; do - read -r goos goarch <<< "${target}" - archive="tarakan_${version}_${goos}_${goarch}" - package="staging/${archive}" - mkdir -p "${package}" - binary="tarakan" - if [[ "${goos}" == "windows" ]]; then - binary="tarakan.exe" - fi - version_ld="${version#v}" - CGO_ENABLED=0 GOOS="${goos}" GOARCH="${goarch}" \ - go build -trimpath -ldflags="-s -w -X main.version=${version_ld}" \ - -o "${package}/${binary}" ./cmd/tarakan - cp LICENSE "${package}/" - if [[ "${goos}" == "windows" ]]; then - (cd staging && zip -q -r "../dist/${archive}.zip" "${archive}") - else - tar -C staging -czf "dist/${archive}.tar.gz" "${archive}" - fi - done - (cd dist && sha256sum tarakan_* > checksums.txt) - ls -la dist/ - ' + sh -c "apt-get update -qq && apt-get install -y -qq zip >/dev/null && go test -count=1 ./... && go vet ./... && ./scripts/ci-release.sh" - name: Publish Forgejo release if: startsWith(github.ref, 'refs/tags/v') @@ -88,7 +48,7 @@ jobs: -d "$body" "$api" || true) code=$(printf '%s' "$resp" | tail -n1) payload=$(printf '%s' "$resp" | sed '$d') - if [[ "$code" != "201" && "$code" != "200" ]]; then + if [ "$code" != "201" ] && [ "$code" != "200" ]; then payload=$(curl -sS -H "Authorization: token ${TOKEN}" \ "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${tag}") fi diff --git a/scripts/ci-release.sh b/scripts/ci-release.sh new file mode 100755 index 0000000..66ed50a --- /dev/null +++ b/scripts/ci-release.sh @@ -0,0 +1,29 @@ +#!/bin/sh +# Build multi-arch release archives for tarakan-client. Used by Forgejo Actions. +set -eu +version="${VERSION:-dev}" +mkdir -p dist staging +targets="linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64 windows/arm64" +for target in $targets; do + goos=${target%/*} + goarch=${target#*/} + archive="tarakan_${version}_${goos}_${goarch}" + package="staging/${archive}" + mkdir -p "${package}" + binary="tarakan" + if [ "$goos" = "windows" ]; then + binary="tarakan.exe" + fi + version_ld=${version#v} + CGO_ENABLED=0 GOOS="$goos" GOARCH="$goarch" \ + go build -trimpath -ldflags="-s -w -X main.version=${version_ld}" \ + -o "${package}/${binary}" ./cmd/tarakan + cp LICENSE "${package}/" + if [ "$goos" = "windows" ]; then + (cd staging && zip -q -r "../dist/${archive}.zip" "${archive}") + else + tar -C staging -czf "dist/${archive}.tar.gz" "${archive}" + fi +done +(cd dist && sha256sum tarakan_* > checksums.txt) +ls -la dist/