Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e6327c7
Move release flow to PR-based and add CODEOWNERS for branch protectio…
bjorkert May 30, 2026
105d4fb
CI: Bump dev version to 6.1.1 [skip ci]
github-actions[bot] May 30, 2026
ce983de
Diagnose and skip rogue Nightscout profile records (#635)
bjorkert May 30, 2026
a013829
CI: Bump dev version to 6.1.2 [skip ci]
github-actions[bot] May 30, 2026
8e700ac
Prevent stale foreground-restart latch from tearing down freshly rene…
bjorkert May 31, 2026
7215653
CI: Bump dev version to 6.1.3 [skip ci]
github-actions[bot] May 31, 2026
439b389
Recover Live Activity after APNs 410 token expiry (#657)
bjorkert May 31, 2026
dcb54f6
CI: Bump dev version to 6.1.4 [skip ci]
github-actions[bot] May 31, 2026
91f95cf
Auto-restart Live Activity when iOS sends .ended (#659)
bjorkert May 31, 2026
5e1e244
CI: Bump dev version to 6.1.5 [skip ci]
github-actions[bot] May 31, 2026
012a154
Deduplicate Dexcom Share readings to fix delta always showing zero (#…
bjorkert May 31, 2026
4fab79e
CI: Bump dev version to 6.1.6 [skip ci]
github-actions[bot] May 31, 2026
221e11c
Remove storyboard, migrate to SwiftUI layout (#608)
bjorkert Jun 12, 2026
3f9b6cd
Suppress silent passive notifications in willPresent handler (#655)
bjorkert Jun 14, 2026
89d4fa4
Bump fastlane to 2.235.0 and jwt to 3.2.0 (CVE-2026-45363) (#663)
bjorkert Jun 14, 2026
2f8608d
Fix BG history truncation caused by duplicate readings from multiple …
bjorkert Jun 14, 2026
a9d7330
Match Trio's override/temp-target colors for non-Loop backends (#668)
bjorkert Jun 14, 2026
566c61a
Quick-Pick Boluses and Meals for remote commands (#603)
bjorkert Jun 14, 2026
350e3af
Add Nightscout WebSocket support for real-time data updates (#606)
bjorkert Jun 14, 2026
985e8b2
Default debug logging on and prompt for description when sharing logs…
bjorkert Jun 14, 2026
0841b1b
Add optional yesterday BG comparison line to main graph (#665)
bjorkert Jun 14, 2026
25650a7
Scale info data table text with Dynamic Type (#667)
bjorkert Jun 15, 2026
33d6eb9
CI: Bump dev version to 6.1.7 [skip ci]
github-actions[bot] Jun 15, 2026
d03e438
ITMS-91061 - privacy manifest for Charts framework (#666)
luborjurena Jun 16, 2026
4f67724
CI: Bump dev version to 6.1.8 [skip ci]
github-actions[bot] Jun 16, 2026
2c0ceda
Remove the Nightscout-based remote command path (#618)
bjorkert Jun 16, 2026
17991b7
CI: Bump dev version to 6.1.9 [skip ci]
github-actions[bot] Jun 16, 2026
3aeeeb0
Cap prediction cone to shortest predBG array length (#653)
quarktwain Jun 16, 2026
d333202
CI: Bump dev version to 6.1.10 [skip ci]
github-actions[bot] Jun 16, 2026
86fd005
CI: Re-run lint when a PR's base branch changes (#676)
bjorkert Jun 17, 2026
d6ce283
CI: Bump dev version to 6.1.11 [skip ci]
github-actions[bot] Jun 17, 2026
5fc2c4e
Remove empty Nightscout group from project file (#675)
bjorkert Jun 17, 2026
3e63929
CI: Bump dev version to 6.1.12 [skip ci]
github-actions[bot] Jun 17, 2026
b5602ce
update version to 6.2.0 [skip ci]
marionbarker Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Code owners for LoopFollow.
# Owners listed here are automatically requested for review on PRs and,
# when "Require review from Code Owners" is enabled in branch protection,
# their approval is required before a PR can be merged.

* @marionbarker @bjorkert @codebymini
22 changes: 21 additions & 1 deletion .github/workflows/auto_version_dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,40 @@ on:

jobs:
bump-version:
if: github.repository_owner == 'loopandlearn'
if: ${{ !github.event.repository.fork }}
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
token: ${{ secrets.LOOPFOLLOW_TOKEN_AUTOBUMP }}
fetch-depth: 0

- name: Skip if Config.xcconfig was changed in this push
id: check
run: |
BEFORE="${{ github.event.before }}"
if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then
echo "skip=false" >> "$GITHUB_OUTPUT"
echo "No previous SHA on this push; not skipping."
exit 0
fi
if git diff "$BEFORE..HEAD" -- Config.xcconfig | grep -qE '^\+LOOP_FOLLOW_MARKETING_VERSION'; then
echo "skip=true" >> "$GITHUB_OUTPUT"
echo "LOOP_FOLLOW_MARKETING_VERSION was set in this push (likely a release sync); skipping auto-bump."
else
echo "skip=false" >> "$GITHUB_OUTPUT"
fi

- name: Set up Git
if: steps.check.outputs.skip != 'true'
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"

- name: Bump dev version number in Config.xcconfig
if: steps.check.outputs.skip != 'true'
run: |
FILE=Config.xcconfig

Expand Down Expand Up @@ -85,6 +104,7 @@ jobs:
echo "NEW_VERSION=$NEW_VERSION" >> $GITHUB_ENV

- name: Commit and push changes
if: steps.check.outputs.skip != 'true'
run: |
git add Config.xcconfig
git commit -m "CI: Bump dev version to $NEW_VERSION [skip ci]"
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ run-name: Lint (${{ github.head_ref || github.ref_name }})

on:
pull_request:
# 'edited' so the lint re-runs when a PR's base branch is changed; otherwise
# retargeting (e.g. main -> dev) leaves the required SwiftFormat check with no
# run on the new base and the PR stays blocked indefinitely.
types: [opened, synchronize, reopened, edited]
workflow_dispatch:

concurrency:
Expand All @@ -15,6 +19,9 @@ permissions:
jobs:
swiftformat:
name: SwiftFormat
# Run on open/sync/reopen always; on 'edited' only when the base branch
# actually changed, so routine title/description edits don't re-lint.
if: ${{ github.event.action != 'edited' || github.event.changes.base != null }}
runs-on: ubuntu-latest
container: swift:6.0
steps:
Expand Down
68 changes: 68 additions & 0 deletions .github/workflows/tag_on_main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# -----------------------------------------------------------------------------
# Workflow: Tag release on push to main
#
# Description:
# Creates an annotated git tag whenever main advances to a release version
# (X.Y.0). The version is read from LOOP_FOLLOW_MARKETING_VERSION in
# Config.xcconfig and the tag name is `v<version>`.
#
# Triggered by: any push to main (release PR merge).
# Skips if: the version on main is not X.Y.0 (e.g. a hotfix that didn't bump
# minor/major), or if the tag already exists.
# -----------------------------------------------------------------------------

name: Tag release on main

on:
push:
branches:
- main

jobs:
tag:
if: ${{ !github.event.repository.fork }}
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout repository
uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Extract version from Config.xcconfig
id: version
run: |
VERSION=$(grep -E "^LOOP_FOLLOW_MARKETING_VERSION[[:space:]]*=" Config.xcconfig | awk '{print $3}')
if [ -z "$VERSION" ]; then
echo "::error::Could not find LOOP_FOLLOW_MARKETING_VERSION in Config.xcconfig"
exit 1
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "Found version: $VERSION"

- name: Skip non-release versions (only X.Y.0 is tagged)
id: check
run: |
VERSION="${{ steps.version.outputs.version }}"
if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.0$ ]]; then
echo "is_release=true" >> "$GITHUB_OUTPUT"
else
echo "is_release=false" >> "$GITHUB_OUTPUT"
echo "Version $VERSION is not a release version (X.Y.0); skipping tag."
fi

- name: Create and push tag if missing
if: steps.check.outputs.is_release == 'true'
run: |
TAG="v${{ steps.version.outputs.version }}"
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "Tag $TAG already exists; skipping."
else
git tag -a "$TAG" -m "$TAG"
git push origin "$TAG"
echo "Created and pushed tag $TAG"
fi
2 changes: 1 addition & 1 deletion .github/workflows/warn_main_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:

jobs:
warn:
if: github.repository_owner == 'loopandlearn'
if: ${{ !github.event.repository.fork }}
runs-on: ubuntu-latest

permissions:
Expand Down
2 changes: 1 addition & 1 deletion Config.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
unique_id = ${DEVELOPMENT_TEAM}

//Version (DEFAULT)
LOOP_FOLLOW_MARKETING_VERSION = 6.1.0
LOOP_FOLLOW_MARKETING_VERSION = 6.2.0
4 changes: 1 addition & 3 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
source "https://rubygems.org"
gem "fastlane", "2.233.1"
gem "json", ">=2.19.2"
gem "addressable", ">=2.9.0"
gem "fastlane", "2.235.0"
103 changes: 53 additions & 50 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@ GEM
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.4.0)
aws-partitions (1.1206.0)
aws-sdk-core (3.241.4)
aws-partitions (1.1254.0)
aws-sdk-core (3.250.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.121.0)
aws-sdk-core (~> 3, >= 3.241.4)
aws-sdk-kms (1.128.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.211.0)
aws-sdk-core (~> 3, >= 3.241.3)
aws-sdk-s3 (1.224.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
base64 (0.3.0)
benchmark (0.5.0)
bigdecimal (4.0.1)
bigdecimal (4.1.2)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
Expand Down Expand Up @@ -71,17 +71,17 @@ GEM
faraday-retry (1.0.4)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.4.0)
fastlane (2.233.1)
CFPropertyList (>= 2.3, < 4.0.0)
abbrev (~> 0.1.2)
fastimage (2.4.1)
fastlane (2.235.0)
CFPropertyList (>= 2.3, < 5.0.0)
abbrev (~> 0.1)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
aws-sdk-s3 (~> 1.197)
babosa (>= 1.0.3, < 2.0.0)
base64 (~> 0.2.0)
base64 (~> 0.2)
benchmark (>= 0.1.0)
bundler (>= 1.17.3, < 5.0.0)
bundler (>= 2.4.0, < 5.0.0)
colored (~> 1.2)
commander (~> 4.6)
csv (~> 3.3)
Expand All @@ -96,18 +96,18 @@ GEM
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
google-cloud-env (>= 1.6.0, <= 2.1.1)
google-cloud-env (>= 1.6.0, < 2.3.0)
google-cloud-storage (~> 1.31)
highline (~> 2.0)
http-cookie (~> 1.0.5)
json (< 3.0.0)
jwt (>= 2.1.0, < 3)
jwt (>= 2.1.0, < 4)
logger (>= 1.6, < 2.0)
mini_magick (>= 4.9.4, < 5.0.0)
multipart-post (>= 2.0.0, < 3.0.0)
mutex_m (~> 0.3.0)
mutex_m (~> 0.3)
naturally (~> 2.2)
nkf (~> 0.2.0)
nkf (~> 0.2)
optparse (>= 0.1.1, < 1.0.0)
ostruct (>= 0.1.0)
plist (>= 3.1.0, < 4.0.0)
Expand All @@ -124,39 +124,44 @@ GEM
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.3)
google-apis-androidpublisher_v3 (0.101.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-core (0.18.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
googleauth (~> 1.9)
httpclient (>= 2.8.3, < 3.a)
mini_mime (~> 1.0)
mutex_m
representable (~> 3.0)
retriable (>= 2.0, < 4.a)
rexml
google-apis-iamcredentials_v1 (0.17.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-playcustomapp_v1 (0.13.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-iamcredentials_v1 (0.27.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-playcustomapp_v1 (0.17.0)
google-apis-core (>= 0.15.0, < 2.a)
google-apis-storage_v1 (0.62.0)
google-apis-core (>= 0.15.0, < 2.a)
google-cloud-core (1.8.0)
google-cloud-env (>= 1.0, < 3.a)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.5.0)
google-cloud-storage (1.47.0)
google-cloud-env (2.2.2)
base64 (~> 0.2)
faraday (>= 1.0, < 3.a)
google-cloud-errors (1.6.0)
google-cloud-storage (1.60.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.31.0)
google-apis-core (>= 0.18, < 2)
google-apis-iamcredentials_v1 (~> 0.18)
google-apis-storage_v1 (>= 0.42)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
googleauth (~> 1.9)
mini_mime (~> 1.0)
googleauth (1.8.1)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
google-logging-utils (0.2.0)
googleauth (1.16.2)
faraday (>= 1.0, < 3.a)
google-cloud-env (~> 2.2)
google-logging-utils (~> 0.1)
jwt (>= 1.4, < 4.0)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
Expand All @@ -166,13 +171,13 @@ GEM
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.19.3)
jwt (2.10.2)
json (2.19.7)
jwt (3.2.0)
base64
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.19.1)
multi_json (1.21.1)
multipart-post (2.4.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
Expand All @@ -182,13 +187,13 @@ GEM
os (1.1.4)
ostruct (0.6.3)
plist (3.7.2)
public_suffix (7.0.2)
rake (13.3.1)
public_suffix (7.0.5)
rake (13.4.2)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
retriable (3.8.0)
rexml (3.4.4)
rouge (3.28.0)
ruby2_keywords (0.0.5)
Expand Down Expand Up @@ -230,9 +235,7 @@ PLATFORMS
ruby

DEPENDENCIES
addressable (>= 2.9.0)
fastlane (= 2.233.1)
json (>= 2.19.2)
fastlane (= 2.235.0)

BUNDLED WITH
4.0.6
4.0.12
Loading
Loading