diff --git a/.github/workflows/release-admin.yml b/.github/workflows/release-admin.yml index 452692d0..24ece584 100644 --- a/.github/workflows/release-admin.yml +++ b/.github/workflows/release-admin.yml @@ -19,9 +19,15 @@ jobs: echo "admin-frontend/sapot-admin/package.json ($SRC) != tag ($VERSION). Run ./scripts/release.sh before tagging." >&2 exit 1 fi - - name: Extract notes from the annotated tag + - name: Generate release notes + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | - git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + if [[ -n "${GEMINI_API_KEY:-}" ]]; then + scripts/generate_release_notes.sh "$GITHUB_REF_NAME" notes.md + else + git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + fi [ -s notes.md ] || { echo "notes.md is empty — is '$GITHUB_REF_NAME' an annotated tag?" >&2; exit 1; } - name: Create GitHub release env: diff --git a/.github/workflows/release-bundle.yml b/.github/workflows/release-bundle.yml index 7ee16775..3f8224c4 100644 --- a/.github/workflows/release-bundle.yml +++ b/.github/workflows/release-bundle.yml @@ -24,6 +24,8 @@ jobs: fetch-depth: 0 - name: Validate tag and release metadata + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | git fetch --no-tags origin \ "+refs/tags/$GITHUB_REF_NAME:refs/tags/$GITHUB_REF_NAME" \ diff --git a/.github/workflows/release-gsm.yml b/.github/workflows/release-gsm.yml index a7508b1e..4df2404e 100644 --- a/.github/workflows/release-gsm.yml +++ b/.github/workflows/release-gsm.yml @@ -24,9 +24,15 @@ jobs: echo "GSM-arduino-actual-code.ino FIRMWARE_VERSION ($FW_SRC) != tag ($VERSION). Run ./scripts/release.sh before tagging." >&2 exit 1 fi - - name: Extract notes from the annotated tag + - name: Generate release notes + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | - git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + if [[ -n "${GEMINI_API_KEY:-}" ]]; then + scripts/generate_release_notes.sh "$GITHUB_REF_NAME" notes.md + else + git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + fi [ -s notes.md ] || { echo "notes.md is empty — is '$GITHUB_REF_NAME' an annotated tag?" >&2; exit 1; } - name: Create GitHub release env: diff --git a/.github/workflows/release-mobile.yml b/.github/workflows/release-mobile.yml index c65916b0..fc5dc78e 100644 --- a/.github/workflows/release-mobile.yml +++ b/.github/workflows/release-mobile.yml @@ -20,9 +20,15 @@ jobs: echo "package.json version ($PKG) != tag ($VERSION). Run ./scripts/release.sh before tagging." >&2 exit 1 fi - - name: Extract notes from the annotated tag + - name: Generate release notes + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | - git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + if [[ -n "${GEMINI_API_KEY:-}" ]]; then + scripts/generate_release_notes.sh "$GITHUB_REF_NAME" notes.md + else + git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + fi [ -s notes.md ] || { echo "notes.md is empty — is '$GITHUB_REF_NAME' an annotated tag?" >&2; exit 1; } - name: Create GitHub release env: diff --git a/.github/workflows/release-portal.yml b/.github/workflows/release-portal.yml index 5f42257b..4c2c2ac8 100644 --- a/.github/workflows/release-portal.yml +++ b/.github/workflows/release-portal.yml @@ -19,9 +19,15 @@ jobs: echo "captive-portal/VERSION ($SRC) != tag ($VERSION). Run ./scripts/release.sh before tagging." >&2 exit 1 fi - - name: Extract notes from the annotated tag + - name: Generate release notes + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | - git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + if [[ -n "${GEMINI_API_KEY:-}" ]]; then + scripts/generate_release_notes.sh "$GITHUB_REF_NAME" notes.md + else + git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + fi [ -s notes.md ] || { echo "notes.md is empty — is '$GITHUB_REF_NAME' an annotated tag?" >&2; exit 1; } - name: Create GitHub release env: diff --git a/.github/workflows/release-server.yml b/.github/workflows/release-server.yml index bb8b7061..95aafb17 100644 --- a/.github/workflows/release-server.yml +++ b/.github/workflows/release-server.yml @@ -19,9 +19,15 @@ jobs: echo "app/version.py ($SRC) != tag ($VERSION). Run ./scripts/release.sh before tagging." >&2 exit 1 fi - - name: Extract notes from the annotated tag + - name: Generate release notes + env: + GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | - git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + if [[ -n "${GEMINI_API_KEY:-}" ]]; then + scripts/generate_release_notes.sh "$GITHUB_REF_NAME" notes.md + else + git tag -l --format='%(contents)' "$GITHUB_REF_NAME" > notes.md + fi [ -s notes.md ] || { echo "notes.md is empty — is '$GITHUB_REF_NAME' an annotated tag?" >&2; exit 1; } - name: Create GitHub release env: diff --git a/.gitignore b/.gitignore index 554990ef..3ac1d55f 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ captive-portal/config.js .bundle-build.* dist/ docs/superpowers/ +/scripts/generate_release_notes.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d908dd..a69609ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,31 @@ git-cliff --tag-pattern '^mobile/v' --include-path 'mobile-app/**' -o CHANGELOG. --- +## bundle/v0.2.0 — 2026-08-18 + +**Features** + +- **GSM port management:** Added scripts to update the Arduino serial port and automatically restart the GSM API. + +--- + +## mobile/v0.11.0 — 2026-08-18 + +**Fixes** + +- Safely clear user state on logout (#382). Resolves a crash that occurred when background components or UI views attempted to read the user ID of a logged-out user. A new `hasUser` safety guard was added across all chat, map, and debug views, and the UserStore now correctly clears all internal state upon logout. + +--- + +## bundle/v0.1.0 — 2026-08-18 + +**Features** + +- **GSM auto-detection (install):** Automatically detects connected GSM Arduino ports and presents an interactive selection menu during installation (`install.sh`), replacing the manual boolean prompt. The selected port is automatically synchronized to `gsm-arduino.env` and `gsm-fastapi.env`. +- **GSM upgrade prompt (upgrade):** Added an interactive prompt to `upgrade.sh` to auto-detect the GSM Arduino port if upgrading from bundle versions older than 0.0.8 and GSM hardware isn't already configured. + +--- + ## server/v0.0.2-beta.1 — 2026-06-26 First tagged server release. All commits represent the initial release of the server component. diff --git a/scripts/validate_bundle_release_ci.sh b/scripts/validate_bundle_release_ci.sh index e0633bc4..7852bb99 100755 --- a/scripts/validate_bundle_release_ci.sh +++ b/scripts/validate_bundle_release_ci.sh @@ -15,6 +15,10 @@ version=${tag#bundle/v} if [[ "$version" != *-* ]]; then git merge-base --is-ancestor "$tag_commit" "$main_ref" || { echo "Stable bundle tags must point to a commit on main." >&2; exit 1; } fi -git for-each-ref --format='%(contents)' "refs/tags/$tag" > "$notes_file" +if [[ -n "${GEMINI_API_KEY:-}" ]]; then + scripts/generate_release_notes.sh "$tag" "$notes_file" +else + git for-each-ref --format='%(contents)' "refs/tags/$tag" > "$notes_file" +fi [[ -s "$notes_file" ]] || { echo "Release notes are empty. Use an annotated bundle tag." >&2; exit 1; } printf '%s\n' "$tag_commit"