Files
adguard-shield/.gitea/workflows/release.yml
Patrick Asmus 4f17f7ff81 feat!: Migration auf Go-Binary
BREAKING CHANGE: Die alte Shell-Version muss vor der Installation der Go-Version deinstalliert werden.
2026-05-01 00:08:57 +02:00

111 lines
3.6 KiB
YAML

# AdGuard Shield CI - Release Binary
# Triggers when a release is published and uploads a Linux amd64 binary asset.
name: Release Binary
on:
release:
types: [published]
workflow_dispatch:
permissions:
contents: write
env:
BINARY_NAME: adguard-shield
PACKAGE_NAME: adguard-shield-linux-amd64
jobs:
linux-binary:
name: Build & Upload Linux Binary
runs-on: ubuntu-latest
container:
image: golang:1.26.2-alpine
steps:
- name: Install build dependencies
run: apk add --no-cache git curl jq tar nodejs
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Resolve release tag
id: version
run: |
TAG="${{ github.event.release.tag_name }}"
if [ -z "$TAG" ]; then
TAG="$(git describe --tags --abbrev=0 2>/dev/null || echo '')"
fi
if [ -z "$TAG" ]; then
echo "::error::No release tag found. Create a release or tag first."
exit 1
fi
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
- name: Go module cache
uses: actions/cache@v4
with:
path: /go/pkg/mod
key: go-mod-${{ hashFiles('go.sum') }}
- name: Download dependencies
run: go mod download
- name: Verify before release build
run: |
go vet ./...
go test ./... -count=1 -timeout 120s
- name: Build Linux amd64 binary
run: |
mkdir -p dist
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-trimpath \
-ldflags="-s -w -X adguard-shield/internal/appinfo.Version=${{ steps.version.outputs.tag }}" \
-o "dist/${BINARY_NAME}" \
./cmd/adguard-shieldd
chmod +x "dist/${BINARY_NAME}"
tar -C dist -czf "dist/${PACKAGE_NAME}.tar.gz" "${BINARY_NAME}"
sha256sum "dist/${PACKAGE_NAME}.tar.gz" > "dist/${PACKAGE_NAME}.tar.gz.sha256"
- name: Upload artifacts to Gitea release
env:
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
GITEA_REPOSITORY: ${{ github.repository }}
GITEA_SERVER_URL: ${{ github.server_url }}
TAG: ${{ steps.version.outputs.tag }}
run: |
API="${GITEA_SERVER_URL%/}/api/v1"
REPO="${GITEA_REPOSITORY}"
RELEASE_JSON="$(curl -fsSL \
-H "Authorization: token ${GITEA_TOKEN}" \
"${API}/repos/${REPO}/releases/tags/${TAG}")"
RELEASE_ID="$(echo "${RELEASE_JSON}" | jq -r '.id')"
if [ -z "${RELEASE_ID}" ] || [ "${RELEASE_ID}" = "null" ]; then
echo "::error::Could not resolve Gitea release id for tag ${TAG}."
exit 1
fi
for file in "dist/${PACKAGE_NAME}.tar.gz" "dist/${PACKAGE_NAME}.tar.gz.sha256"; do
name="$(basename "${file}")"
existing_id="$(curl -fsSL \
-H "Authorization: token ${GITEA_TOKEN}" \
"${API}/repos/${REPO}/releases/${RELEASE_ID}/assets" \
| jq -r --arg name "${name}" '.[] | select(.name == $name) | .id' \
| head -n 1)"
if [ -n "${existing_id}" ]; then
curl -fsSL -X DELETE \
-H "Authorization: token ${GITEA_TOKEN}" \
"${API}/repos/${REPO}/releases/${RELEASE_ID}/assets/${existing_id}"
fi
curl -fsSL -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-F "attachment=@${file}" \
"${API}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${name}" \
>/dev/null
done