From ddf8d453b25701fd066ddfe61b75b905dae64a75 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:32:51 +0000 Subject: [PATCH 1/5] Initial plan From e6615736f10c4da0731c2950eb0d94809c4edfce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:40:47 +0000 Subject: [PATCH 2/5] Implement release title format and enhanced manifest documentation for beta/alpha releases Co-authored-by: NorthernMan54 <19808920+NorthernMan54@users.noreply.github.com> --- ...-stage-2_build_alpha_release_and_store.yml | 11 ++- ...a-stage-2_build_beta_release_and_store.yml | 11 ++- build.sh | 82 ++++++++++++++++++- 3 files changed, 91 insertions(+), 13 deletions(-) diff --git a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml index a9aa8a0..bfb2371 100644 --- a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml +++ b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml @@ -54,6 +54,7 @@ jobs: outputs: version: ${{ steps.alpha_version.outputs.version }} npm_version: ${{ steps.alpha_version.outputs.npm_version }} + release_title_date: ${{ steps.alpha_version.outputs.release_title_date }} steps: - uses: actions/checkout@v4 @@ -70,10 +71,13 @@ jobs: BASE_VERSION=${{ steps.release_version.outputs.version }} BASE_VERSION_CLEAN=$(echo "$BASE_VERSION" | sed -E 's/-[a-z0-9.]+//') DATE=$(date +%Y%m%d) + DATE_FORMATTED=$(date +%Y-%m-%d) VERSION="${BASE_VERSION_CLEAN}~alpha.${DATE}" NPM_VERSION="${BASE_VERSION_CLEAN}-alpha.${DATE}" + RELEASE_TITLE_DATE="alpha-${DATE_FORMATTED}" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "npm_version=$NPM_VERSION" >> $GITHUB_OUTPUT + echo "release_title_date=$RELEASE_TITLE_DATE" >> $GITHUB_OUTPUT echo "::notice::📦 Alpha version: $VERSION" build_alpha_and_store: @@ -228,17 +232,12 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.generate_alpha_version.outputs.npm_version }} - name: Alpha Release v${{ needs.generate_alpha_version.outputs.npm_version }} + name: "ALPHA: Homebridge APT Pkg Release ${{ needs.generate_alpha_version.outputs.release_title_date }}" prerelease: true files: | artifacts/homebridge_v*.deb artifacts/homebridge_v*.manifest body_path: ${{ steps.read_manifest.outputs.MANIFEST_FILE }} - body: | - Homebridge Apt Package Manifest - - Release Version: v${{ needs.generate_alpha_version.outputs.npm_version }} - Release Type: alpha env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml index 763245d..2049dbf 100644 --- a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml +++ b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml @@ -54,6 +54,7 @@ jobs: outputs: version: ${{ steps.beta_version.outputs.version }} npm_version: ${{ steps.beta_version.outputs.npm_version }} + release_title_date: ${{ steps.beta_version.outputs.release_title_date }} steps: - uses: actions/checkout@v4 @@ -70,10 +71,13 @@ jobs: BASE_VERSION=${{ steps.release_version.outputs.version }} BASE_VERSION_CLEAN=$(echo "$BASE_VERSION" | sed -E 's/-[a-z0-9.]+//') DATE=$(date +%Y%m%d) + DATE_FORMATTED=$(date +%Y-%m-%d) VERSION="${BASE_VERSION_CLEAN}~beta.${DATE}" NPM_VERSION="${BASE_VERSION_CLEAN}-beta.${DATE}" + RELEASE_TITLE_DATE="beta-${DATE_FORMATTED}" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "npm_version=$NPM_VERSION" >> $GITHUB_OUTPUT + echo "release_title_date=$RELEASE_TITLE_DATE" >> $GITHUB_OUTPUT echo "::notice::📦 Beta version: $VERSION" build_beta_and_store: @@ -228,17 +232,12 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.generate_beta_version.outputs.npm_version }} - name: Beta Release v${{ needs.generate_beta_version.outputs.npm_version }} + name: "BETA: Homebridge APT Pkg Release ${{ needs.generate_beta_version.outputs.release_title_date }}" prerelease: true files: | artifacts/homebridge_v*.deb artifacts/homebridge_v*.manifest body_path: ${{ steps.read_manifest.outputs.MANIFEST_FILE }} - body: | - Homebridge Apt Package Manifest - - Release Version: v${{ needs.generate_beta_version.outputs.npm_version }} - Release Type: beta env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build.sh b/build.sh index 4743d40..94f522b 100755 --- a/build.sh +++ b/build.sh @@ -196,11 +196,88 @@ else LATEST_TAG=$(git tag -l | grep -v -E "(beta|alpha)\." | sort -V | tail -1 2>/dev/null || echo "") fi +# Check for package manifest changes if we have a previous tag +HAS_PACKAGE_CHANGES=false +if [ -n "$LATEST_TAG" ]; then + # Get the previous package.json for comparison + PREV_PACKAGE_JSON="" + case "${PKG_RELEASE_TYPE:-stable}" in + beta) + if [[ "$BUILD_ARCH" == "aarch64" || "$BUILD_ARCH" == "x86_64" ]]; then + PREV_PACKAGE_JSON="beta/64bit/package.json" + else + PREV_PACKAGE_JSON="beta/32bit/package.json" + fi + ;; + alpha) + if [[ "$BUILD_ARCH" == "aarch64" || "$BUILD_ARCH" == "x86_64" ]]; then + PREV_PACKAGE_JSON="alpha/64bit/package.json" + else + PREV_PACKAGE_JSON="alpha/32bit/package.json" + fi + ;; + *) + if [[ "$BUILD_ARCH" == "aarch64" || "$BUILD_ARCH" == "x86_64" ]]; then + PREV_PACKAGE_JSON="stable/64bit/package.json" + else + PREV_PACKAGE_JSON="stable/32bit/package.json" + fi + ;; + esac + + # Compare package versions with previous tag + if [ -n "$PREV_PACKAGE_JSON" ] && git show "$LATEST_TAG:$PREV_PACKAGE_JSON" >/dev/null 2>&1; then + PREV_NODE=$(git show "$LATEST_TAG:$PREV_PACKAGE_JSON" 2>/dev/null | jq -r '.dependencies.node // "unknown"') + PREV_HOMEBRIDGE=$(git show "$LATEST_TAG:$PREV_PACKAGE_JSON" 2>/dev/null | jq -r '.dependencies.homebridge // "unknown"') + PREV_HOMEBRIDGE_UI=$(git show "$LATEST_TAG:$PREV_PACKAGE_JSON" 2>/dev/null | jq -r '.dependencies["homebridge-config-ui-x"] // "unknown"') + + CURR_NODE=$(jq -r '.dependencies.node // "unknown"' "$PACKAGE_JSON_PATH") + CURR_HOMEBRIDGE=$(jq -r '.dependencies.homebridge // "unknown"' "$PACKAGE_JSON_PATH") + CURR_HOMEBRIDGE_UI=$(jq -r '.dependencies["homebridge-config-ui-x"] // "unknown"' "$PACKAGE_JSON_PATH") + + # Check for version changes and add them to changelog + if [[ "$PREV_NODE" != "$CURR_NODE" && "$CURR_NODE" != "unknown" ]]; then + echo "### Package Manifest Changes" >> "$MANIFEST" + echo >> "$MANIFEST" + HAS_PACKAGE_CHANGES=true + fi + + if [[ "$PREV_NODE" != "$CURR_NODE" && "$CURR_NODE" != "unknown" ]]; then + echo "* **Node.js**: Updated from $PREV_NODE to $CURR_NODE" >> "$MANIFEST" + fi + if [[ "$PREV_HOMEBRIDGE" != "$CURR_HOMEBRIDGE" && "$CURR_HOMEBRIDGE" != "unknown" ]]; then + if [ "$HAS_PACKAGE_CHANGES" = false ]; then + echo "### Package Manifest Changes" >> "$MANIFEST" + echo >> "$MANIFEST" + HAS_PACKAGE_CHANGES=true + fi + echo "* **Homebridge**: Updated from $PREV_HOMEBRIDGE to $CURR_HOMEBRIDGE" >> "$MANIFEST" + fi + if [[ "$PREV_HOMEBRIDGE_UI" != "$CURR_HOMEBRIDGE_UI" && "$CURR_HOMEBRIDGE_UI" != "unknown" ]]; then + if [ "$HAS_PACKAGE_CHANGES" = false ]; then + echo "### Package Manifest Changes" >> "$MANIFEST" + echo >> "$MANIFEST" + HAS_PACKAGE_CHANGES=true + fi + echo "* **Homebridge Config UI X**: Updated from $PREV_HOMEBRIDGE_UI to $CURR_HOMEBRIDGE_UI" >> "$MANIFEST" + fi + + if [ "$HAS_PACKAGE_CHANGES" = true ]; then + echo >> "$MANIFEST" + fi + fi +fi + if [ -n "$LATEST_TAG" ]; then # Get commits since the latest tag of the same type CHANGELOG_COMMITS=$(git log --oneline --no-merges "$LATEST_TAG"..HEAD 2>/dev/null) if [ -n "$CHANGELOG_COMMITS" ]; then + # Add code changes section header + if [ "$HAS_PACKAGE_CHANGES" = true ]; then + echo "### Code Changes" >> "$MANIFEST" + echo >> "$MANIFEST" + fi # Format commits as changelog entries while IFS= read -r commit; do if [ -n "$commit" ]; then @@ -211,13 +288,16 @@ if [ -n "$LATEST_TAG" ]; then fi done <<< "$CHANGELOG_COMMITS" else - echo "* No new commits since last ${PKG_RELEASE_TYPE:-stable} release" >> "$MANIFEST" + if [ "$HAS_PACKAGE_CHANGES" = false ]; then + echo "* No new commits since last ${PKG_RELEASE_TYPE:-stable} release" >> "$MANIFEST" + fi fi else # If no tags of this type exist, show recent commits RECENT_COMMITS=$(git log --oneline --no-merges -5 2>/dev/null) if [ -n "$RECENT_COMMITS" ]; then echo "### Recent Changes" >> "$MANIFEST" + echo >> "$MANIFEST" while IFS= read -r commit; do if [ -n "$commit" ]; then COMMIT_HASH=$(echo "$commit" | cut -d' ' -f1) From 2c4bf08b26535074c116c779664dc807b7f68718 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:50:39 +0000 Subject: [PATCH 3/5] Fix release title to use tag version instead of human-readable date format Co-authored-by: NorthernMan54 <19808920+NorthernMan54@users.noreply.github.com> --- .../alpha-stage-2_build_alpha_release_and_store.yml | 6 +----- .../workflows/beta-stage-2_build_beta_release_and_store.yml | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml index bfb2371..4244f63 100644 --- a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml +++ b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml @@ -54,7 +54,6 @@ jobs: outputs: version: ${{ steps.alpha_version.outputs.version }} npm_version: ${{ steps.alpha_version.outputs.npm_version }} - release_title_date: ${{ steps.alpha_version.outputs.release_title_date }} steps: - uses: actions/checkout@v4 @@ -71,13 +70,10 @@ jobs: BASE_VERSION=${{ steps.release_version.outputs.version }} BASE_VERSION_CLEAN=$(echo "$BASE_VERSION" | sed -E 's/-[a-z0-9.]+//') DATE=$(date +%Y%m%d) - DATE_FORMATTED=$(date +%Y-%m-%d) VERSION="${BASE_VERSION_CLEAN}~alpha.${DATE}" NPM_VERSION="${BASE_VERSION_CLEAN}-alpha.${DATE}" - RELEASE_TITLE_DATE="alpha-${DATE_FORMATTED}" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "npm_version=$NPM_VERSION" >> $GITHUB_OUTPUT - echo "release_title_date=$RELEASE_TITLE_DATE" >> $GITHUB_OUTPUT echo "::notice::📦 Alpha version: $VERSION" build_alpha_and_store: @@ -232,7 +228,7 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.generate_alpha_version.outputs.npm_version }} - name: "ALPHA: Homebridge APT Pkg Release ${{ needs.generate_alpha_version.outputs.release_title_date }}" + name: "ALPHA: Homebridge APT Pkg Release ${{ needs.generate_alpha_version.outputs.npm_version }}" prerelease: true files: | artifacts/homebridge_v*.deb diff --git a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml index 2049dbf..6b7ca80 100644 --- a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml +++ b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml @@ -54,7 +54,6 @@ jobs: outputs: version: ${{ steps.beta_version.outputs.version }} npm_version: ${{ steps.beta_version.outputs.npm_version }} - release_title_date: ${{ steps.beta_version.outputs.release_title_date }} steps: - uses: actions/checkout@v4 @@ -71,13 +70,10 @@ jobs: BASE_VERSION=${{ steps.release_version.outputs.version }} BASE_VERSION_CLEAN=$(echo "$BASE_VERSION" | sed -E 's/-[a-z0-9.]+//') DATE=$(date +%Y%m%d) - DATE_FORMATTED=$(date +%Y-%m-%d) VERSION="${BASE_VERSION_CLEAN}~beta.${DATE}" NPM_VERSION="${BASE_VERSION_CLEAN}-beta.${DATE}" - RELEASE_TITLE_DATE="beta-${DATE_FORMATTED}" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "npm_version=$NPM_VERSION" >> $GITHUB_OUTPUT - echo "release_title_date=$RELEASE_TITLE_DATE" >> $GITHUB_OUTPUT echo "::notice::📦 Beta version: $VERSION" build_beta_and_store: @@ -232,7 +228,7 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.generate_beta_version.outputs.npm_version }} - name: "BETA: Homebridge APT Pkg Release ${{ needs.generate_beta_version.outputs.release_title_date }}" + name: "BETA: Homebridge APT Pkg Release ${{ needs.generate_beta_version.outputs.npm_version }}" prerelease: true files: | artifacts/homebridge_v*.deb From f7f25d519463ec634a3d42d989fb563beb8f1c39 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 20:25:25 +0000 Subject: [PATCH 4/5] Add v prefix to release titles for beta and alpha releases Co-authored-by: NorthernMan54 <19808920+NorthernMan54@users.noreply.github.com> --- .../workflows/alpha-stage-2_build_alpha_release_and_store.yml | 2 +- .github/workflows/beta-stage-2_build_beta_release_and_store.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml index 4244f63..7f08913 100644 --- a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml +++ b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml @@ -228,7 +228,7 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.generate_alpha_version.outputs.npm_version }} - name: "ALPHA: Homebridge APT Pkg Release ${{ needs.generate_alpha_version.outputs.npm_version }}" + name: "ALPHA: Homebridge APT Pkg Release v${{ needs.generate_alpha_version.outputs.npm_version }}" prerelease: true files: | artifacts/homebridge_v*.deb diff --git a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml index 6b7ca80..363f287 100644 --- a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml +++ b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml @@ -228,7 +228,7 @@ jobs: uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.generate_beta_version.outputs.npm_version }} - name: "BETA: Homebridge APT Pkg Release ${{ needs.generate_beta_version.outputs.npm_version }}" + name: "BETA: Homebridge APT Pkg Release v${{ needs.generate_beta_version.outputs.npm_version }}" prerelease: true files: | artifacts/homebridge_v*.deb From e546b895b0a63c7b221be26c406ed7761e10c37a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 20:31:52 +0000 Subject: [PATCH 5/5] Restore release body content with manifest header for beta/alpha releases Co-authored-by: NorthernMan54 <19808920+NorthernMan54@users.noreply.github.com> --- .../alpha-stage-2_build_alpha_release_and_store.yml | 5 +++++ .../workflows/beta-stage-2_build_beta_release_and_store.yml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml index 7f08913..79a4ca6 100644 --- a/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml +++ b/.github/workflows/alpha-stage-2_build_alpha_release_and_store.yml @@ -234,6 +234,11 @@ jobs: artifacts/homebridge_v*.deb artifacts/homebridge_v*.manifest body_path: ${{ steps.read_manifest.outputs.MANIFEST_FILE }} + body: | + Homebridge Apt Package Manifest + + Release Version: v${{ needs.generate_alpha_version.outputs.npm_version }} + Release Type: alpha env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml index 363f287..ed94dd1 100644 --- a/.github/workflows/beta-stage-2_build_beta_release_and_store.yml +++ b/.github/workflows/beta-stage-2_build_beta_release_and_store.yml @@ -234,6 +234,11 @@ jobs: artifacts/homebridge_v*.deb artifacts/homebridge_v*.manifest body_path: ${{ steps.read_manifest.outputs.MANIFEST_FILE }} + body: | + Homebridge Apt Package Manifest + + Release Version: v${{ needs.generate_beta_version.outputs.npm_version }} + Release Type: beta env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}