97 lines
2.6 KiB
Bash
97 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
|
ROOT_DIR=$(cd -- "${SCRIPT_DIR}/.." && pwd)
|
|
DIST_ENV="${ROOT_DIR}/dist/package-info.env"
|
|
MESA_SRC_DIR="${ROOT_DIR}/work/mesa"
|
|
|
|
if [[ ! -f "${DIST_ENV}" ]]; then
|
|
echo "missing dist metadata: ${DIST_ENV}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -d "${MESA_SRC_DIR}/.git" ]]; then
|
|
echo "missing mesa source checkout: ${MESA_SRC_DIR}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# shellcheck disable=SC1090
|
|
source "${DIST_ENV}"
|
|
|
|
require_env() {
|
|
local name
|
|
for name in "$@"; do
|
|
if [[ -z "${!name:-}" ]]; then
|
|
echo "missing environment variable: ${name}" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
require_env GITEA_SERVER_URL GITEA_REPOSITORY GITEA_TOKEN RELEASE_TAG
|
|
|
|
RELEASES_JSON="$(curl -fsS \
|
|
-H "Authorization: token ${GITEA_TOKEN}" \
|
|
"${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases?limit=20")"
|
|
|
|
PREVIOUS_SHA="$(
|
|
python3 - "${RELEASES_JSON}" "${RELEASE_TAG}" "${PACKAGE_NAME}" <<'PY'
|
|
import json
|
|
import re
|
|
import sys
|
|
|
|
releases = json.loads(sys.argv[1])
|
|
current_tag = sys.argv[2]
|
|
package_name = sys.argv[3]
|
|
pattern = re.compile(rf"^{re.escape(package_name)}-.*\+git([0-9a-f]{{12}})-")
|
|
|
|
for release in releases:
|
|
tag = release.get("tag_name", "")
|
|
if tag == current_tag:
|
|
continue
|
|
match = pattern.match(tag)
|
|
if match:
|
|
print(match.group(1))
|
|
break
|
|
PY
|
|
)"
|
|
|
|
COMMITS_TRUNCATED=0
|
|
COMMIT_LIMIT=50
|
|
|
|
if [[ -n "${PREVIOUS_SHA}" ]] && git -C "${MESA_SRC_DIR}" rev-parse --verify --quiet "${PREVIOUS_SHA}^{commit}" >/dev/null; then
|
|
COMPARE_RANGE="${PREVIOUS_SHA}..${UPSTREAM_GIT_SHA}"
|
|
mapfile -t COMMITS < <(git -C "${MESA_SRC_DIR}" log --no-merges --format='- %h %s' "${COMPARE_RANGE}")
|
|
RANGE_LABEL="Changes since \`${PREVIOUS_SHA}\`"
|
|
else
|
|
COMPARE_RANGE="${UPSTREAM_GIT_SHA}"
|
|
mapfile -t COMMITS < <(git -C "${MESA_SRC_DIR}" log --no-merges -n "${COMMIT_LIMIT}" --format='- %h %s' "${COMPARE_RANGE}")
|
|
RANGE_LABEL="Recent upstream commits"
|
|
fi
|
|
|
|
if (( ${#COMMITS[@]} > COMMIT_LIMIT )); then
|
|
COMMITS=( "${COMMITS[@]:0:${COMMIT_LIMIT}}" )
|
|
COMMITS_TRUNCATED=1
|
|
fi
|
|
|
|
{
|
|
printf '## Mesa Upstream\n\n'
|
|
printf -- '- Upstream: `%s`\n' "${UPSTREAM_GIT_URL}"
|
|
printf -- '- Ref: `%s`\n' "${UPSTREAM_GIT_REF}"
|
|
printf -- '- Commit: `%s`\n' "${UPSTREAM_GIT_SHA_SHORT}"
|
|
printf -- '- Package: `%s`\n\n' "${PACKAGE_FILE}"
|
|
printf '## %s\n\n' "${RANGE_LABEL}"
|
|
|
|
if (( ${#COMMITS[@]} == 0 )); then
|
|
printf -- '- No new upstream commits found for this release.\n'
|
|
else
|
|
printf '%s\n' "${COMMITS[@]}"
|
|
fi
|
|
|
|
if (( COMMITS_TRUNCATED == 1 )); then
|
|
printf '\n_Release notes truncated to the first %d commits._\n' "${COMMIT_LIMIT}"
|
|
fi
|
|
} > "${ROOT_DIR}/dist/release-notes.md"
|