name: Release on: push: tags: - 'v[0-9]*' jobs: release: runs-on: ubuntu-latest container: image: golang:1.27 steps: - name: Checkout source env: FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} run: | git clone "https://token:${FORGEJO_TOKEN}@git.janvete.com/seth/Caddyview.git" src cd src git checkout "${{ github.ref_name }}" - name: Build binaries and archives working-directory: src run: | VERSION=${{ github.ref_name }} mkdir -p dist for PAIR in darwin/arm64 darwin/amd64 linux/amd64; do OS=${PAIR%/*} ARCH=${PAIR#*/} GOOS=$OS GOARCH=$ARCH go build -ldflags="-s -w" -o dist/caddyview-${OS}-${ARCH} . STAGING=$(mktemp -d) cp dist/caddyview-${OS}-${ARCH} ${STAGING}/caddyview tar -czf dist/caddyview-${VERSION}-${OS}-${ARCH}.tar.gz -C ${STAGING} caddyview rm -rf ${STAGING} done echo "=== SHA256 checksums ===" sha256sum dist/*.tar.gz - name: Create Forgejo Release working-directory: src env: FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} FORGEJO_URL: https://git.janvete.com run: | VERSION=${{ github.ref_name }} API="${FORGEJO_URL}/api/v1/repos/seth/Caddyview" RELEASE_JSON=$(curl -sS -H "Authorization: token ${FORGEJO_TOKEN}" \ -H "Content-Type: application/json" \ -X POST \ -d "{\"tag_name\":\"${VERSION}\",\"name\":\"${VERSION}\",\"draft\":false,\"prerelease\":false}" \ "${API}/releases") echo "Release response: ${RELEASE_JSON}" RELEASE_ID=$(echo "${RELEASE_JSON}" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) if [ -z "${RELEASE_ID}" ]; then echo "Failed to create release" exit 1 fi echo "release_id=${RELEASE_ID}" >> "$GITHUB_ENV" for ARCHIVE in dist/*.tar.gz; do NAME=$(basename "${ARCHIVE}") curl -sS -H "Authorization: token ${FORGEJO_TOKEN}" \ -H "Content-Type: application/gzip" \ --data-binary "@${ARCHIVE}" \ "${API}/releases/${RELEASE_ID}/assets?name=${NAME}" echo "Uploaded ${NAME}" done - name: Update Homebrew formula working-directory: src env: TAP_TOKEN: ${{ secrets.TAP_TOKEN }} run: | VERSION=${{ github.ref_name }} VER=${VERSION#v} SHA_ARM64=$(sha256sum dist/caddyview-${VERSION}-darwin-arm64.tar.gz | awk '{print $1}') SHA_AMD64=$(sha256sum dist/caddyview-${VERSION}-darwin-amd64.tar.gz | awk '{print $1}') SHA_LINUX=$(sha256sum dist/caddyview-${VERSION}-linux-amd64.tar.gz | awk '{print $1}') git clone "https://x-access-token:${TAP_TOKEN}@github.com/janvete/homebrew-tools.git" tap cat > tap/Formula/caddyview.rb << FORMULA class Caddyview < Formula desc "TUI SSH monitor for Caddy web server logs" homepage "https://git.janvete.com/seth/Caddyview" version "${VER}" license "MIT" on_macos do if Hardware::CPU.arm? url "https://git.janvete.com/seth/Caddyview/releases/download/${VERSION}/caddyview-${VERSION}-darwin-arm64.tar.gz" sha256 "${SHA_ARM64}" else url "https://git.janvete.com/seth/Caddyview/releases/download/${VERSION}/caddyview-${VERSION}-darwin-amd64.tar.gz" sha256 "${SHA_AMD64}" end end on_linux do if Hardware::CPU.intel? url "https://git.janvete.com/seth/Caddyview/releases/download/${VERSION}/caddyview-${VERSION}-linux-amd64.tar.gz" sha256 "${SHA_LINUX}" end end def install bin.install "caddyview" end test do assert_match "TUI monitor", shell_output("#{bin}/caddyview --help") end end FORMULA cd tap git config user.email "forgejo-actions[bot]@users.noreply.github.com" git config user.name "forgejo-actions[bot]" git add Formula/caddyview.rb git commit -m "chore: bump caddyview to ${VERSION}" git push