diff --git a/README.md b/README.md index 92c06c0..9c9fde2 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,8 @@ System-Mesa genutzt werden kann. ## Build-Profil -Standardmaessig baut das Repo Mesa mit beiden Plattformen: +Standardmaessig baut das Repo Mesa fuer: -- `x11` - `wayland` Und mit diesem Treiberprofil: @@ -45,10 +44,16 @@ zu alten Distributionspaketen scheitern. Die Release-Notes werden automatisch erzeugt und enthalten: +- eigene Repo-Commits fuer dieses Release - den verwendeten Mesa-Upstream-Commit - das gebaute Paket - die Mesa-Commits seit dem vorherigen `mesa-git`-Release +Die beiden Bereiche werden getrennt dargestellt: + +- `Repo Changes` +- `Mesa Upstream` + Wenn kein vorheriger passender Release-Vergleich gefunden wird, nutzt der Workflow als Fallback die juengsten Upstream-Commits. diff --git a/config/mesa-opt.conf b/config/mesa-opt.conf index 23ae7d8..92842ab 100644 --- a/config/mesa-opt.conf +++ b/config/mesa-opt.conf @@ -10,7 +10,7 @@ LIBDRM_GIT_REF="main" INSTALL_PREFIX="/opt/mesa-git" BUILD_TYPE="release" -PLATFORMS="x11,wayland" +PLATFORMS="wayland" # Broad desktop profile: AMD, Intel, NVIDIA nouveau plus software fallback. GALLIUM_DRIVERS="radeonsi,r300,r600,iris,crocus,nouveau,zink,llvmpipe,softpipe" diff --git a/scripts/generate-release-notes.sh b/scripts/generate-release-notes.sh index 4656fe9..ce80a3f 100644 --- a/scripts/generate-release-notes.sh +++ b/scripts/generate-release-notes.sh @@ -6,6 +6,7 @@ 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" +REPO_SRC_DIR="${ROOT_DIR}" if [[ ! -f "${DIST_ENV}" ]]; then echo "missing dist metadata: ${DIST_ENV}" >&2 @@ -17,6 +18,11 @@ if [[ ! -d "${MESA_SRC_DIR}/.git" ]]; then exit 1 fi +if [[ ! -d "${REPO_SRC_DIR}/.git" ]]; then + echo "missing repo checkout: ${REPO_SRC_DIR}" >&2 + exit 1 +fi + # shellcheck disable=SC1090 source "${DIST_ENV}" @@ -36,7 +42,7 @@ RELEASES_JSON="$(curl -fsS \ -H "Authorization: token ${GITEA_TOKEN}" \ "${GITEA_SERVER_URL}/api/v1/repos/${GITEA_REPOSITORY}/releases?limit=20")" -PREVIOUS_SHA="$( +PREVIOUS_VALUES="$( python3 - "${RELEASES_JSON}" "${RELEASE_TAG}" "${PACKAGE_NAME}" <<'PY' import json import re @@ -54,43 +60,80 @@ for release in releases: match = pattern.match(tag) if match: print(match.group(1)) + print(release.get("target_commitish", "")) break PY )" -COMMITS_TRUNCATED=0 -COMMIT_LIMIT=50 +PREVIOUS_MESA_SHA="$(printf '%s\n' "${PREVIOUS_VALUES}" | sed -n '1p')" +PREVIOUS_REPO_SHA="$(printf '%s\n' "${PREVIOUS_VALUES}" | sed -n '2p')" -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}\`" +CURRENT_REPO_SHA="$(git -C "${REPO_SRC_DIR}" rev-parse HEAD)" +REPO_COMMITS_TRUNCATED=0 +REPO_COMMIT_LIMIT=20 +MESA_COMMITS_TRUNCATED=0 +MESA_COMMIT_LIMIT=50 + +if [[ -n "${PREVIOUS_REPO_SHA}" ]] && git -C "${REPO_SRC_DIR}" rev-parse --verify --quiet "${PREVIOUS_REPO_SHA}^{commit}" >/dev/null; then + REPO_COMPARE_RANGE="${PREVIOUS_REPO_SHA}..${CURRENT_REPO_SHA}" + mapfile -t REPO_COMMITS < <(git -C "${REPO_SRC_DIR}" log --no-merges --format='- %h %s' "${REPO_COMPARE_RANGE}") + REPO_RANGE_LABEL="Repo changes since \`${PREVIOUS_REPO_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" + REPO_COMPARE_RANGE="${CURRENT_REPO_SHA}" + mapfile -t REPO_COMMITS < <(git -C "${REPO_SRC_DIR}" log --no-merges -n "${REPO_COMMIT_LIMIT}" --format='- %h %s' "${REPO_COMPARE_RANGE}") + REPO_RANGE_LABEL="Recent repo commits" fi -if (( ${#COMMITS[@]} > COMMIT_LIMIT )); then - COMMITS=( "${COMMITS[@]:0:${COMMIT_LIMIT}}" ) - COMMITS_TRUNCATED=1 +if (( ${#REPO_COMMITS[@]} > REPO_COMMIT_LIMIT )); then + REPO_COMMITS=( "${REPO_COMMITS[@]:0:${REPO_COMMIT_LIMIT}}" ) + REPO_COMMITS_TRUNCATED=1 +fi + +if [[ -n "${PREVIOUS_MESA_SHA}" ]] && git -C "${MESA_SRC_DIR}" rev-parse --verify --quiet "${PREVIOUS_MESA_SHA}^{commit}" >/dev/null; then + MESA_COMPARE_RANGE="${PREVIOUS_MESA_SHA}..${UPSTREAM_GIT_SHA}" + mapfile -t MESA_COMMITS < <(git -C "${MESA_SRC_DIR}" log --no-merges --format='- %h %s' "${MESA_COMPARE_RANGE}") + MESA_RANGE_LABEL="Mesa upstream changes since \`${PREVIOUS_MESA_SHA}\`" +else + MESA_COMPARE_RANGE="${UPSTREAM_GIT_SHA}" + mapfile -t MESA_COMMITS < <(git -C "${MESA_SRC_DIR}" log --no-merges -n "${MESA_COMMIT_LIMIT}" --format='- %h %s' "${MESA_COMPARE_RANGE}") + MESA_RANGE_LABEL="Recent Mesa upstream commits" +fi + +if (( ${#MESA_COMMITS[@]} > MESA_COMMIT_LIMIT )); then + MESA_COMMITS=( "${MESA_COMMITS[@]:0:${MESA_COMMIT_LIMIT}}" ) + MESA_COMMITS_TRUNCATED=1 fi { - printf '## Mesa Upstream\n\n' + printf '## Repo Changes\n\n' + printf -- '- Repo commit: `%s`\n' "${CURRENT_REPO_SHA}" + printf -- '- Release tag: `%s`\n\n' "${RELEASE_TAG}" + printf '### %s\n\n' "${REPO_RANGE_LABEL}" + + if (( ${#REPO_COMMITS[@]} == 0 )); then + printf -- '- No repo changes found for this release.\n' + else + printf '%s\n' "${REPO_COMMITS[@]}" + fi + + if (( REPO_COMMITS_TRUNCATED == 1 )); then + printf '\n_Repo changes truncated to the first %d commits._\n' "${REPO_COMMIT_LIMIT}" + fi + + printf '\n## 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}" + printf '### %s\n\n' "${MESA_RANGE_LABEL}" - if (( ${#COMMITS[@]} == 0 )); then + if (( ${#MESA_COMMITS[@]} == 0 )); then printf -- '- No new upstream commits found for this release.\n' else - printf '%s\n' "${COMMITS[@]}" + printf '%s\n' "${MESA_COMMITS[@]}" fi - if (( COMMITS_TRUNCATED == 1 )); then - printf '\n_Release notes truncated to the first %d commits._\n' "${COMMIT_LIMIT}" + if (( MESA_COMMITS_TRUNCATED == 1 )); then + printf '\n_Mesa upstream changes truncated to the first %d commits._\n' "${MESA_COMMIT_LIMIT}" fi } > "${ROOT_DIR}/dist/release-notes.md"