Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 3 additions & 0 deletions .github/workflows/add_identifiers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ run-name: Add Identifiers (${{ github.ref_name }})
on:
workflow_dispatch:

env:
FASTLANE_SKIP_UPDATE_CHECK: true

jobs:
validate:
name: Validate
Expand Down
35 changes: 32 additions & 3 deletions .github/workflows/build_loop.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
name: 4. Build Loop Manual
run-name: Build Loop Manual (${{ github.ref_name }})
name: 4. Build Loop
run-name: Build Loop (${{ github.ref_name }})
on:
workflow_dispatch:
schedule:
# Check for updates every Sunday
# Later logic builds if there are updates or if it is the 2nd Sunday of the month
- cron: "33 7 * * 0" # Sunday at UTC 7:33

env:
GH_PAT: ${{ secrets.GH_PAT }}
UPSTREAM_REPO: LoopKit/LoopWorkspace
UPSTREAM_BRANCH: ${{ github.ref_name }} # branch on upstream repository to sync from (replace with specific branch name if needed)
TARGET_BRANCH: ${{ github.ref_name }} # target branch on fork to be kept in sync
FASTLANE_SKIP_UPDATE_CHECK: true

jobs:
# use a single runner for these sequential steps
Expand Down Expand Up @@ -144,6 +149,30 @@ jobs:
echo "is_second_instance=false" >> "$GITHUB_OUTPUT"
fi

# When a scheduled run finds nothing new to build, cancel the run so it shows
# as "cancelled" instead of "success" — a green check should always mean a
# new build was made.
cancel_when_no_build:
needs: check_status
name: Cancel run when there is nothing to build
runs-on: ubuntu-26.04
permissions:
actions: write
if: |
github.event_name == 'schedule' &&
!(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') &&
!(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true')
steps:
- name: Cancel the run
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "Repository is up to date and no monthly build is due — cancelling this run so it is not reported as a successful build." >> "$GITHUB_STEP_SUMMARY"
gh run cancel ${{ github.run_id }} --repo ${{ github.repository }}
# Keep the job alive until the cancellation lands, so the run ends as
# "cancelled" rather than completing successfully first.
sleep 300

# Checks if Distribution certificate is present and valid, optionally nukes and
# creates new certs if the repository variable ENABLE_NUKE_CERTS == 'true'
# only run if a build is planned
Expand Down Expand Up @@ -171,7 +200,7 @@ jobs:
(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' )
steps:
- name: Select Xcode version
run: "sudo xcode-select --switch /Applications/Xcode_27.0.app/Contents/Developer"
run: "sudo xcode-select --switch /Applications/Xcode_27.1.app/Contents/Developer"

- name: Checkout Repo for building
uses: actions/checkout@v5
Expand Down
35 changes: 4 additions & 31 deletions .github/workflows/build_loop_auto.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
name: 4. Build Loop Auto
run-name: Build Loop Auto (${{ github.ref_name }})
name: zzz Phasing Out
run-name: Phasing Out (${{ github.ref_name }})
on:
workflow_dispatch:
schedule:
# Check for updates every Sunday
# Later logic builds if there are updates or if it is the 2nd Sunday of the month
- cron: "33 7 * * 0" # Sunday at UTC 7:33

env:
GH_PAT: ${{ secrets.GH_PAT }}
UPSTREAM_REPO: LoopKit/LoopWorkspace
UPSTREAM_BRANCH: ${{ github.ref_name }} # branch on upstream repository to sync from (replace with specific branch name if needed)
TARGET_BRANCH: ${{ github.ref_name }} # target branch on fork to be kept in sync
FASTLANE_SKIP_UPDATE_CHECK: true

jobs:
# use a single runner for these sequential steps
Expand Down Expand Up @@ -148,30 +145,6 @@ jobs:
echo "is_second_instance=false" >> "$GITHUB_OUTPUT"
fi

# When a scheduled run finds nothing new to build, cancel the run so it shows
# as "cancelled" instead of "success" — a green check should always mean a
# new build was made.
cancel_when_no_build:
needs: check_status
name: Cancel run when there is nothing to build
runs-on: ubuntu-26.04
permissions:
actions: write
if: |
github.event_name == 'schedule' &&
!(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') &&
!(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true')
steps:
- name: Cancel the run
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "Repository is up to date and no monthly build is due — cancelling this run so it is not reported as a successful build." >> "$GITHUB_STEP_SUMMARY"
gh run cancel ${{ github.run_id }} --repo ${{ github.repository }}
# Keep the job alive until the cancellation lands, so the run ends as
# "cancelled" rather than completing successfully first.
sleep 300

# Checks if Distribution certificate is present and valid, optionally nukes and
# creates new certs if the repository variable ENABLE_NUKE_CERTS == 'true'
# only run if a build is planned
Expand Down Expand Up @@ -199,7 +172,7 @@ jobs:
(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' )
steps:
- name: Select Xcode version
run: "sudo xcode-select --switch /Applications/Xcode_27.0.app/Contents/Developer"
run: "sudo xcode-select --switch /Applications/Xcode_27.1.app/Contents/Developer"

- name: Checkout Repo for building
uses: actions/checkout@v5
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/create_certs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ env:
FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }}
FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }}
FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }}
FASTLANE_SKIP_UPDATE_CHECK: true

jobs:
validate:
Expand Down Expand Up @@ -52,9 +53,15 @@ jobs:

# Create or update Distribution certificate and provisioning profiles
- name: Check and create or update Distribution certificate and profiles if needed
id: certs
run: |
echo "Running Fastlane certs lane..."
bundle exec fastlane certs || true # ignore and continue on errors without annotating an exit code
# Continue on errors without annotating an exit code; set_output fails the job if no renewal follows
if bundle exec fastlane certs; then
echo "certs_failed=false" >> $GITHUB_OUTPUT
else
echo "certs_failed=true" >> $GITHUB_OUTPUT
fi
- name: Check Distribution certificate and launch Nuke certificates if needed
run: bundle exec fastlane check_and_renew_certificates
id: check_certs
Expand Down Expand Up @@ -87,6 +94,11 @@ jobs:
if [ "$FORCE_NUKE_CERTS" = "true" ]; then
echo "::warning::‼️ Nuking of certificates was forced because the repository variable FORCE_NUKE_CERTS is set to 'true'."
fi
# Fail if the certificate setup failed and no renewal will replace it
if [ "${{ steps.certs.outputs.certs_failed }}" = "true" ] && [ "$CERT_STATUS" != "true" ] && [ "$FORCE_NUKE_CERTS" != "true" ]; then
echo "::error::❌ Fastlane Match could not use the Distribution certificate in your Match-Secrets repository, and automated renewal will not run because another valid certificate exists. Delete https://github.com/${{ github.repository_owner }}/Match-Secrets and run action again: https://loopkit.github.io/loopdocs/browser/bb-errors/#delete-match-secrets"
exit 1
fi
# Nuke Certs if needed, and if the repository variable ENABLE_NUKE_CERTS is set to 'true', or if FORCE_NUKE_CERTS is set to 'true', which will always force certs to be nuked
nuke_certs:
name: Nuke certificates
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/validate_secrets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ name: 1. Validate Secrets
run-name: Validate Secrets (${{ github.ref_name }})
on: [workflow_call, workflow_dispatch]

env:
FASTLANE_SKIP_UPDATE_CHECK: true

jobs:
validate-access-token:
name: Access
Expand Down
2 changes: 1 addition & 1 deletion LoopSupport
2 changes: 1 addition & 1 deletion MedtrumKit
Submodule MedtrumKit updated 60 files
+1 −1 Common/NewPumpEvent.swift
+449 −291 Localization/Localizable.xcstrings
+3 −0 MedtrumKit/Packets/Enums/PatchState.swift
+7 −2 MedtrumKit/PumpManager/BluetoothManager.swift
+22 −1 MedtrumKit/PumpManager/MedtrumAlert.swift
+169 −65 MedtrumKit/PumpManager/MedtrumPumpManager.swift
+7 −0 MedtrumKit/PumpManager/MedtrumPumpState.swift
+77 −2 MedtrumKit/PumpManager/StateSyncer.swift
+130 −0 MedtrumKitTests/PumpManager/BaseResetDetectionTests.swift
+0 −12 MedtrumKitUI/MedtrumUI.xcassets/attach_body.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/attach_body.imageset/attach_to_body_kr.png
+0 −12 MedtrumKitUI/MedtrumUI.xcassets/connect_base.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/connect_base.imageset/connect_kr.png
+0 −12 MedtrumKitUI/MedtrumUI.xcassets/fill_reservoir.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/fill_reservoir.imageset/fill_kr.png
+0 −12 MedtrumKitUI/MedtrumUI.xcassets/half_press_needle_button.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/half_press_needle_button.imageset/d7.png
+0 −12 MedtrumKitUI/MedtrumUI.xcassets/needle_insert.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/needle_insert.imageset/press_needle_kr.png
+0 −12 MedtrumKitUI/MedtrumUI.xcassets/remove_cover.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/remove_cover.imageset/press_kr.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_attach_patch.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_attach_patch.imageset/step_attach_patch.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_connect_base.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_connect_base.imageset/step_connect_base.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_fill_patch.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_fill_patch.imageset/step_fill_patch.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_fill_syringe.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_fill_syringe.imageset/step_fill_syringe.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_infusion_site.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_infusion_site.imageset/step_infusion_site.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_insert_needle.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_insert_needle.imageset/step_insert_needle.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_peel_liner.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_peel_liner.imageset/step_peel_liner.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_press_adhesive.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_press_adhesive.imageset/step_press_adhesive.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_prime.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_prime.imageset/step_prime.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_remove_air.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_remove_air.imageset/step_remove_air.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_remove_patch.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_remove_patch.imageset/step_remove_patch.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_remove_safety_lock.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_remove_safety_lock.imageset/step_remove_safety_lock.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_retract_needle.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_retract_needle.imageset/step_retract_needle.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_separate_base.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_separate_base.imageset/step_separate_base.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_tap_bubbles.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_tap_bubbles.imageset/step_tap_bubbles.png
+12 −0 MedtrumKitUI/MedtrumUI.xcassets/step_vial_air.imageset/Contents.json
+ − MedtrumKitUI/MedtrumUI.xcassets/step_vial_air.imageset/step_vial_air.png
+4 −2 MedtrumKitUI/ViewController/MedtrumKitUICoordinator.swift
+24 −20 MedtrumKitUI/ViewModels/Settings/PatchSettingsViewModel.swift
+49 −65 MedtrumKitUI/Views/Onboarding/PatchActivationView.swift
+23 −0 MedtrumKitUI/Views/Onboarding/PatchDeactivationView.swift
+488 −0 MedtrumKitUI/Views/Onboarding/PatchInstructions.swift
+51 −89 MedtrumKitUI/Views/Onboarding/PatchPrimingView.swift
+162 −146 MedtrumKitUI/Views/Settings/PatchSettingsView.swift
2 changes: 1 addition & 1 deletion VersionOverride.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@

// Version [for DIY Loop]
// configure the version number in LoopWorkspace
LOOP_MARKETING_VERSION = 3.14.11
LOOP_MARKETING_VERSION = 3.14.12
CURRENT_PROJECT_VERSION = 57