mirror of
https://github.com/netbirdio/netbird.git
synced 2026-08-30 18:41:37 -07:00
cgit.freebsd.org now sits behind an Anubis anti-bot challenge and intermittently returns an HTML challenge page with HTTP 200 instead of the requested file, breaking the FreeBSD port release job. Fetch the port Makefile and distinfo from the official freebsd-ports GitHub mirror, retry transient failures, and fail loudly if HTML is returned instead of the expected file. ## Describe your changes ## Issue ticket number and link ## Stack <!-- branch-stack --> ### Checklist - [x] Is it a bug fix - [ ] Is a typo/documentation fix - [ ] Is a feature enhancement - [ ] It is a refactor - [ ] Created tests that fail without the change (if possible) - [ ] This change does **not** modify the public API, gRPC protocols, functionality behavior, CLI / service flags, or introduce a new feature — **OR** I have discussed it with the NetBird team beforehand (link the issue / Slack thread in the description). See [CONTRIBUTING.md](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTING.md#discuss-changes-with-the-netbird-team-first). > By submitting this pull request, you confirm that you have read and agree to the terms of the [Contributor License Agreement](https://github.com/netbirdio/netbird/blob/main/CONTRIBUTOR_LICENSE_AGREEMENT.md). ## Documentation Select exactly one: - [ ] I added/updated documentation for this change - [x] Documentation is **not needed** for this change (explain why) ### Docs PR URL (required if "docs added" is checked) Paste the PR link from https://github.com/netbirdio/docs here: https://github.com/netbirdio/docs/pull/__ <!-- codesmith:footer --> --- <a href="https://app.blacksmith.sh/netbirdio/codesmith/netbird/pr/6880"><picture><source media="(prefers-color-scheme: dark)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v2.svg"><source media="(prefers-color-scheme: light)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-light-v2.svg"><img alt="View with [code]smith" src="https://pr-comments-assets.blacksmith.sh/codesmith/view-with-codesmith-dark-v2.svg"></picture></a> <a href="https://backend.blacksmith.sh/track/enable-autofix?expires=1787478670&installation_model_id=427504&pr_number=6880&repository=netbirdio%2Fnetbird&return_to=https%3A%2F%2Fgithub.com%2Fnetbirdio%2Fnetbird%2Fpull%2F6880&signature=503a5d79f1671c21cebedac66516c7d7298d401a6382d9bf483813f9e7ee7591"><picture><source media="(prefers-color-scheme: dark)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-light.svg"><img alt="Autofix with [code]smith" src="https://pr-comments-assets.blacksmith.sh/codesmith/autofix-with-codesmith-dark.svg"></picture></a> <sup>Need help on this PR? Tag <code>@codesmith-bot</code> with what you need. Autofix is disabled.</sup> <!-- codesmith:autofix:disabled --> <!-- /codesmith:footer --> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved reliability when retrieving FreeBSD port metadata during release and issue preparation. * Added automatic retries and HTTPS-only redirect handling for safer downloads. * Validates fetched content to detect unexpected HTML responses and avoids processing invalid data. * Updated port metadata retrieval to use a more reliable mirror, improving version extraction and the resulting comparisons and regenerated release information. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
165 lines
5.1 KiB
Bash
Executable File
165 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# FreeBSD Port Issue Body Generator for NetBird
|
|
#
|
|
# This script generates the issue body content for submitting a FreeBSD port update
|
|
# to the FreeBSD Bugzilla at https://bugs.freebsd.org/bugzilla/
|
|
#
|
|
# Usage: ./freebsd-port-issue-body.sh [old_version] [new_version]
|
|
# Example: ./freebsd-port-issue-body.sh 0.56.0 0.59.1
|
|
#
|
|
# If no versions are provided, the script will:
|
|
# - Fetch OLD version from the FreeBSD ports GitHub mirror (current version in ports tree)
|
|
# - Fetch NEW version from latest NetBird GitHub release tag
|
|
|
|
set -e
|
|
|
|
GITHUB_REPO="netbirdio/netbird"
|
|
PORTS_MAKEFILE_URL="https://raw.githubusercontent.com/freebsd/freebsd-ports/main/security/netbird/Makefile"
|
|
|
|
fetch_current_ports_version() {
|
|
echo "Fetching current version from FreeBSD ports..." >&2
|
|
local makefile_content
|
|
makefile_content=$(curl -fsL --proto '=https' --proto-redir '=https' --retry 3 "$PORTS_MAKEFILE_URL" 2>/dev/null) || makefile_content=""
|
|
if [[ "$makefile_content" == \<* ]]; then
|
|
echo "Error: Received HTML instead of Makefile from ${PORTS_MAKEFILE_URL}" >&2
|
|
return 1
|
|
fi
|
|
if [[ -z "$makefile_content" ]]; then
|
|
echo "Error: Could not fetch Makefile from FreeBSD ports" >&2
|
|
return 1
|
|
fi
|
|
echo "$makefile_content" | grep -E "^DISTVERSION=" | sed 's/DISTVERSION=[[:space:]]*//' | tr -d '\t '
|
|
return 0
|
|
}
|
|
|
|
fetch_all_tags() {
|
|
# Fetch tags from GitHub tags page (no rate limiting, no auth needed)
|
|
curl -sL "https://github.com/${GITHUB_REPO}/tags" 2>/dev/null | \
|
|
grep -oE '/releases/tag/v[0-9]+\.[0-9]+\.[0-9]+([^"]+)?' | \
|
|
grep -iv 'rc' | \
|
|
sed 's/.*\/v//' | \
|
|
sort -u -V
|
|
return 0
|
|
}
|
|
|
|
fetch_latest_github_release() {
|
|
echo "Fetching latest release from GitHub..." >&2
|
|
local latest
|
|
|
|
# Fetch from GitHub tags page
|
|
latest=$(fetch_all_tags | tail -1)
|
|
|
|
if [[ -z "$latest" ]]; then
|
|
# Fallback to GitHub API
|
|
latest=$(curl -sL "https://api.github.com/repos/${GITHUB_REPO}/releases/latest" 2>/dev/null | \
|
|
grep '"tag_name"' | sed 's/.*"tag_name": *"v\([^"]*\)".*/\1/')
|
|
fi
|
|
|
|
if [[ -z "$latest" ]]; then
|
|
echo "Error: Could not fetch latest release from GitHub" >&2
|
|
return 1
|
|
fi
|
|
echo "$latest"
|
|
return 0
|
|
}
|
|
|
|
OLD_VERSION="${1:-}"
|
|
NEW_VERSION="${2:-}"
|
|
|
|
if [[ -z "$OLD_VERSION" ]]; then
|
|
OLD_VERSION=$(fetch_current_ports_version)
|
|
if [[ -z "$OLD_VERSION" ]]; then
|
|
echo "Error: Could not determine old version. Please provide it manually." >&2
|
|
echo "Usage: $0 <old_version> <new_version>" >&2
|
|
exit 1
|
|
fi
|
|
echo "Detected OLD version from FreeBSD ports: $OLD_VERSION" >&2
|
|
fi
|
|
|
|
if [[ -z "$NEW_VERSION" ]]; then
|
|
NEW_VERSION=$(fetch_latest_github_release)
|
|
if [[ -z "$NEW_VERSION" ]]; then
|
|
echo "Error: Could not determine new version. Please provide it manually." >&2
|
|
echo "Usage: $0 <old_version> <new_version>" >&2
|
|
exit 1
|
|
fi
|
|
echo "Detected NEW version from GitHub: $NEW_VERSION" >&2
|
|
fi
|
|
|
|
if [[ "$OLD_VERSION" = "$NEW_VERSION" ]]; then
|
|
echo "Warning: OLD and NEW versions are the same ($OLD_VERSION). Port may already be up to date." >&2
|
|
fi
|
|
|
|
echo "" >&2
|
|
|
|
OUTPUT_DIR="${OUTPUT_DIR:-.}"
|
|
|
|
fetch_releases_between_versions() {
|
|
echo "Fetching release history from GitHub..." >&2
|
|
|
|
# Fetch all tags and filter to those between OLD and NEW versions
|
|
fetch_all_tags | \
|
|
while read -r ver; do
|
|
if [[ "$(printf '%s\n' "$OLD_VERSION" "$ver" | sort -V | head -n1)" = "$OLD_VERSION" ]] && \
|
|
[[ "$(printf '%s\n' "$ver" "$NEW_VERSION" | sort -V | head -n1)" = "$ver" ]] && \
|
|
[[ "$ver" != "$OLD_VERSION" ]]; then
|
|
echo "$ver"
|
|
fi
|
|
done
|
|
return 0
|
|
}
|
|
|
|
generate_changelog_section() {
|
|
local releases
|
|
releases=$(fetch_releases_between_versions)
|
|
|
|
echo "Changelogs:"
|
|
if [[ -n "$releases" ]]; then
|
|
echo "$releases" | while read -r ver; do
|
|
echo "https://github.com/${GITHUB_REPO}/releases/tag/v${ver}"
|
|
done
|
|
else
|
|
echo "https://github.com/${GITHUB_REPO}/releases/tag/v${NEW_VERSION}"
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
OUTPUT_FILE="${OUTPUT_DIR}/netbird-${NEW_VERSION}-issue.txt"
|
|
|
|
cat << EOF > "$OUTPUT_FILE"
|
|
BUGZILLA ISSUE DETAILS
|
|
======================
|
|
|
|
Severity: Affects Some People
|
|
|
|
Summary: security/netbird: Update to ${NEW_VERSION}
|
|
|
|
Description:
|
|
------------
|
|
security/netbird: Update ${OLD_VERSION} => ${NEW_VERSION}
|
|
|
|
$(generate_changelog_section)
|
|
|
|
Commit log:
|
|
https://github.com/${GITHUB_REPO}/compare/v${OLD_VERSION}...v${NEW_VERSION}
|
|
EOF
|
|
|
|
echo "========================================="
|
|
echo "Issue body saved to: ${OUTPUT_FILE}"
|
|
echo "========================================="
|
|
echo ""
|
|
cat "$OUTPUT_FILE"
|
|
echo ""
|
|
echo "========================================="
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Go to https://bugs.freebsd.org/bugzilla/ and login"
|
|
echo "2. Click 'Report an update or defect to a port'"
|
|
echo "3. Fill in:"
|
|
echo " - Severity: Affects Some People"
|
|
echo " - Summary: security/netbird: Update to ${NEW_VERSION}"
|
|
echo " - Description: Copy content from ${OUTPUT_FILE}"
|
|
echo "4. Attach diff file: netbird-${NEW_VERSION}.diff"
|
|
echo "5. Submit the bug report"
|